Solves the "multiple AI agents editing the same codebase" problem with two simple tools: check in with your worker ID and a gist of what you're doing, get back a coordination protocol plus a live table of who else is active and which files they've claimed. Check out when you're done. The shift://status resource shows the full worker roster. Everything's in-memory, so state clears on restart, which is actually the point: lightweight session coordination without persistence overhead. Built for Claude Desktop or any MCP client that needs to prevent agents from stomping on each other's work during parallel code modifications.
Lightweight coordination layer for multiple AI agents working on the same codebase. STDIO & Streamable HTTP
2 Tools · 1 Resource
Two tools for multi-agent coordination:
| Tool Name | Description |
|---|---|
shift_check_in | Register or update a worker session. Returns worker ID, coordination instructions, and active peers. |
shift_check_out | End a working session. Removes from active worker list. |
shift_check_inRegister a new worker or update an existing session. Called at the start of every working session.
shift_check_outEnd a working session and remove from the active worker list.
| URI | Description |
|---|---|
shift://status | All currently active workers with gists, declared files, and timestamps. |
Built on @cyanheads/mcp-ts-core:
Coordination-specific:
Add to your MCP client config (e.g., claude_desktop_config.json):
{
"mcpServers": {
"shift": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/shift-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio"
}
}
}
}
git clone https://github.com/cyanheads/shift-mcp-server.git
cd shift-mcp-server
bun install
No server-specific environment variables required. Framework defaults:
| Variable | Description | Default |
|---|---|---|
MCP_TRANSPORT_TYPE | Transport: stdio or http. | stdio |
MCP_HTTP_PORT | Port for HTTP server. | 3010 |
MCP_HTTP_HOST | Hostname for HTTP server. | 127.0.0.1 |
MCP_LOG_LEVEL | Log level (RFC 5424). | info |
bun run build
bun run start:stdio # or start:http
Dev mode with watch:
bun run dev:stdio # or dev:http
Checks and tests:
bun run devcheck # Lints, formats, type-checks
bun test # Runs test suite
docker build -t shift-mcp-server .
docker run -p 3010:3010 shift-mcp-server
| Directory | Purpose |
|---|---|
src/index.ts | Entry point — registers tools and resources with createApp(). |
src/mcp-server/tools/definitions/ | Tool definitions (check-in.tool.ts, check-out.tool.ts). |
src/mcp-server/tools/definitions/worker-store.ts | In-memory worker session store and formatting utilities. |
src/mcp-server/resources/definitions/ | Resource definitions (status.resource.ts). |
See CLAUDE.md for development guidelines and architectural rules. The short version:
try/catch in tool logicctx.log for request-scoped loggingsrc/index.tsIssues and pull requests are welcome. Run checks before submitting:
bun run devcheck
bun test
Apache-2.0 — see LICENSE for details.
MCP_LOG_LEVELdefault: infoSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_HTTP_HOSTdefault: 127.0.0.1The hostname for the HTTP server.
MCP_HTTP_PORTdefault: 3010The port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHdefault: /mcpThe endpoint path for the MCP server.
MCP_AUTH_MODEdefault: noneAuthentication mode to use: 'none', 'jwt', or 'oauth'.