{"id":36505742,"url":"https://github.com/daichi-kudo/mcp-session-manager","last_synced_at":"2026-01-15T03:10:42.004Z","repository":{"id":332006958,"uuid":"1126314733","full_name":"Daichi-Kudo/mcp-session-manager","owner":"Daichi-Kudo","description":"Session manager for concurrent MCP access - enables multiple Claude Code sessions to share MCP daemons without SIGINT conflicts","archived":false,"fork":false,"pushed_at":"2026-01-02T15:23:12.000Z","size":38,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-01-12T04:58:39.573Z","etag":null,"topics":["anthropic","claude","claude-code","concurrent","daemon","mcp","model-context-protocol","multi-session","proxy","session-manager"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Daichi-Kudo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-01-01T16:34:50.000Z","updated_at":"2026-01-02T15:23:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Daichi-Kudo/mcp-session-manager","commit_stats":null,"previous_names":["daichi-kudo/mcp-session-manager"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Daichi-Kudo/mcp-session-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Daichi-Kudo%2Fmcp-session-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Daichi-Kudo%2Fmcp-session-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Daichi-Kudo%2Fmcp-session-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Daichi-Kudo%2Fmcp-session-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Daichi-Kudo","download_url":"https://codeload.github.com/Daichi-Kudo/mcp-session-manager/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Daichi-Kudo%2Fmcp-session-manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28442243,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"online","status_checked_at":"2026-01-15T02:00:08.019Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anthropic","claude","claude-code","concurrent","daemon","mcp","model-context-protocol","multi-session","proxy","session-manager"],"created_at":"2026-01-12T02:29:36.447Z","updated_at":"2026-01-15T03:10:41.998Z","avatar_url":"https://github.com/Daichi-Kudo.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MCP Session Manager\n\n[![npm version](https://badge.fury.io/js/mcp-session-manager.svg)](https://badge.fury.io/js/mcp-session-manager)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node.js Version](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org)\n\nEnables multiple Claude Code sessions to share MCP daemons without SIGINT conflicts.\n\n## The Problem\n\nWhen running multiple Claude Code sessions simultaneously, each new session sends SIGINT to existing MCP processes, causing:\n\n- **Session disconnection**: New session kills existing session's MCPs\n- **SQLite conflicts**: Multiple processes accessing the same database\n- **State isolation**: In-memory state (file watchers, indexes) not shared\n- **Resource contention**: Process conflicts and crashes\n\n## The Solution\n\nThis session manager introduces a 3-layer architecture:\n\n```\nSession A                          Session B\n    |                                  |\n    v                                  v\n[Proxy A] -------- HTTP -------- [MCP Daemon]\n(stdio)            shared          (HTTP/SSE)\n    |                                  |\n[Claude A]                        [Claude B]\n```\n\n1. **Singleton Daemons**: Each MCP runs as a single daemon serving all sessions\n2. **Stdio Proxies**: Lightweight proxies bridge Claude's stdio to daemon HTTP\n3. **SIGINT Protection**: Proxies ignore signals, protecting the shared daemon\n4. **Auto-start**: Daemons start automatically on first request\n\n## Installation\n\n### From npm (Recommended)\n\n```bash\nnpm install -g mcp-session-manager\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/daichi-kudo/mcp-session-manager.git\ncd mcp-session-manager\nnpm install\nnpm run build\n```\n\n## Quick Start\n\n### 1. Generate Claude Config\n\n```bash\n# If installed globally\nmcp-manager generate-config\n\n# If installed from source\nnode dist/manager/index.js generate-config\n```\n\nThis creates `~/.claude/mcp.json` with proxy configurations.\n\n### 2. Restart Claude Code\n\nClose and reopen Claude Code. The proxies will automatically start daemons as needed.\n\n### 3. Verify\n\nOpen multiple Claude Code sessions - they should all work simultaneously without conflicts.\n\n## Configuration\n\n### Claude Code (`~/.claude/mcp.json`)\n\n```json\n{\n  \"mcpServers\": {\n    \"memory\": {\n      \"command\": \"node\",\n      \"args\": [\"path/to/mcp-session-manager/dist/proxy/index.js\", \"--target\", \"memory\"]\n    },\n    \"code-index\": {\n      \"command\": \"node\",\n      \"args\": [\"path/to/mcp-session-manager/dist/proxy/index.js\", \"--target\", \"code-index\"]\n    },\n    \"ast-grep\": {\n      \"command\": \"node\",\n      \"args\": [\"path/to/mcp-session-manager/dist/proxy/index.js\", \"--target\", \"ast-grep\"]\n    }\n  }\n}\n```\n\n### Daemon Settings (`src/shared/config.ts`)\n\nCustomize daemon configurations:\n\n```typescript\n{\n  name: \"memory\",\n  command: \"node\",\n  args: [\"path/to/memory-mcp-sqlite/dist/index.js\", \"--transport\", \"http\", \"--port\", \"3100\"],\n  port: 3100,\n  transport: \"streamable-http\",\n  env: { MEMORY_DB_PATH: \"...\" }\n}\n```\n\n## Ports\n\n| Daemon | Default Port | Transport |\n|--------|-------------|-----------|\n| memory | 3100 | streamable-http |\n| code-index | 3101 | streamable-http (SSE response) |\n| ast-grep | 3102 | sse |\n| Manager API | 3199 | HTTP |\n\n## Manual Daemon Management\n\nStart the manager for health monitoring and auto-restart:\n\n```bash\n# Start all daemons\nmcp-manager --start-all\n\n# Or from source\nnode dist/manager/index.js --start-all\n```\n\n### Manager API\n\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `/ping` | GET | Health check |\n| `/status` | GET | All daemon statuses |\n| `/start` | POST | Start a daemon (`{\"name\": \"memory\"}`) |\n| `/stop` | POST | Stop a daemon |\n| `/ensure` | POST | Ensure daemon running (start if needed) |\n| `/start-all` | POST | Start all daemons |\n| `/stop-all` | POST | Stop all daemons |\n\n## Troubleshooting\n\n### Check daemon status\n\n```bash\ncurl http://localhost:3199/status\n```\n\n### View daemon logs\n\n```bash\n# Windows\ntype %USERPROFILE%\\.mcp-session-manager\\memory.log\ntype %USERPROFILE%\\.mcp-session-manager\\code-index.log\n\n# macOS/Linux\ncat ~/.mcp-session-manager/memory.log\ncat ~/.mcp-session-manager/code-index.log\n```\n\n### Daemon won't start\n\n1. Check if port is already in use:\n   ```bash\n   # Windows\n   netstat -ano | findstr :3100\n   \n   # macOS/Linux\n   lsof -i :3100\n   ```\n\n2. Remove stale lock files:\n   ```bash\n   # Windows\n   del %USERPROFILE%\\.mcp-session-manager\\*.lock\n   \n   # macOS/Linux\n   rm ~/.mcp-session-manager/*.lock\n   ```\n\n### Session still disconnects\n\n1. Verify proxy is configured in `~/.claude/mcp.json`\n2. Check proxy logs in Claude Code's MCP output\n3. Ensure daemon is running: `curl http://localhost:3100/health`\n\n### Restart stuck daemon\n\n```bash\ncurl -X POST http://localhost:3199/stop -d '{\"name\":\"memory\"}'\ncurl -X POST http://localhost:3199/start -d '{\"name\":\"memory\"}'\n```\n\n### Manual cleanup (Windows)\n\n```powershell\n# Remove lock files\nRemove-Item $env:USERPROFILE\\.mcp-session-manager\\*.lock\n\n# Kill orphaned processes\nGet-Process node | Where-Object {$_.CommandLine -like \"*mcp*\"} | Stop-Process -Force\n```\n\n### Manual cleanup (macOS/Linux)\n\n```bash\n# Remove lock files\nrm ~/.mcp-session-manager/*.lock\n\n# Kill orphaned processes\npkill -f \"mcp-session-manager\"\n```\n\n## Architecture\n\nSee [ARCHITECTURE.md](./ARCHITECTURE.md) for detailed design documentation.\n\n## Requirements\n\n- Node.js 20+\n- Windows, macOS, or Linux\n- Existing MCP servers with HTTP/SSE transport support\n\n## Supported MCPs\n\n| MCP | Transport | Notes |\n|-----|-----------|-------|\n| memory-mcp-sqlite | streamable-http | Requires `--transport http` flag |\n| code-index-mcp | streamable-http | SSE response, requires FastMCP |\n| ast-grep-mcp | sse | Deprecated MCP 2024-11-05 format |\n\n## Contributing\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## License\n\nMIT License - see [LICENSE](./LICENSE) for details.\n\n## Author\n\n**Daichi Kudo**\n- [Cognisant LLC](https://cognisant.io/) - CEO\n- [M16 LLC](https://m16-llc.com/) - CTO\n\n## Related Projects\n\n- [Model Context Protocol](https://github.com/anthropics/model-context-protocol)\n- [Claude Code](https://claude.ai/code)\n- [memory-mcp-sqlite](https://github.com/anthropics/memory-mcp-sqlite)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaichi-kudo%2Fmcp-session-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaichi-kudo%2Fmcp-session-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaichi-kudo%2Fmcp-session-manager/lists"}