shift-mcp-server について
shift-mcp-serverは、同じコードベースで作業する複数のAIエージェントを調整するMCPサーバーです。ワークスペースごとの名簿を永続化し、チェックイン時に協調プロトコルと稼働中のメンバーを返します。
主な機能
- 01作業セッションの登録・更新・終了
- 02稼働中のエージェントとタスク概要の確認
- 03ワークスペースごとの名簿管理
- 04SQLiteによる状態の永続化
活用シーン
- 01同じコードベースを編集する複数エージェントの調整
- 02他のエージェントが変更予定のファイルの確認
- 03作業完了後のセッション削除
MCP 対応
チェックインとチェックアウトのツール、およびワークスペース別の稼働メンバー名簿を読むリソースを提供します。STDIOとStreamable HTTPに対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @cyanheads/shift-mcp-serverSHIFT_WORKSPACEShared exact-match workspace namespace; defaults to the launch Git root or cwd.SHIFT_STATE_DIRShared writable SQLite directory; defaults to ~/.local/state/shift-mcp-server.MCP_LOG_LEVELSets the minimum log level for output (e.g., 'debug', 'info', 'warn').MCP_TRANSPORT_TYPESelects the HTTP transport.MCP_HTTP_HOSTThe hostname for the HTTP server.MCP_HTTP_PORTThe port to run the HTTP server on.MCP_HTTP_ENDPOINT_PATHThe endpoint path for the MCP server.MCP_SESSION_MODESession handling for the HTTP transport: 'auto', 'stateful', or 'stateless'.MCP_AUTH_MODEシークレットAuthentication mode to use: 'none', 'jwt', or 'oauth'.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
2掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| gist | string | はい | 作業内容の簡潔な説明。 |
| files | array | いいえ | 変更する予定のファイルパス。不明な場合は省略し、後で worker ID を指定して再度呼び出し、更新してください。 |
| workerId | string | いいえ | 前回のチェックインで取得した worker ID。初回は省略して新しい ID を取得します。セッションを更新するには、この ID を渡してください。 |
詳細
@cyanheads/shift-mcp-server
複数の AI エージェントが同じコードベースで同時に作業するための軽量な調整レイヤーです。
概要
複数の AI エージェントが同じコードベースで同時に作業するための調整レイヤーです。タスクの概要と、作業対象として予定しているファイルを提示してチェックインし、稼働中の他のエージェント全員を確認して、作業が終わったらチェックアウトします。
ツール
| ツール | 説明 |
|---|---|
shift_check_in | ワーカーセッションを登録または更新します。ワーカー ID、調整プロトコル、稼働中の他のエージェントを返します。 |
shift_check_out | 作業セッションを終了し、稼働中のワーカー一覧から削除します。 |
リソース
| リソース | 説明 |
|---|---|
shift://status | 現在稼働中の全ワーカー、その作業概要、申告されたファイル、チェックイン時刻を確認できます。 |
shift://status{?workspace} | 明示的に指定したワークスペースのワーカー一覧です。どちらかのツールが返す statusUri を使用します。 |
同じワーカー一覧は shift_check_in の応答にも含まれます。最新の subscriptions/listen ストリームでは、ワークスペースを含む URI に対して、チェックインの確定、セッションの更新、または実際の削除のたびに更新が 1 件送信されます。サーバーのデフォルトワークスペースでは、ベアエイリアスにも公開されます。どちらのプロトコル世代による変更も、同じサーバーイベントバスを通じて公開されます。このフレームワークの旧式の配信アダプターではポーリングが必要ですが、これは 2025 年プロトコル自体の制約ではありません。通知は同一プロセス内にとどまりますが、読み取りでは常に他のプロセスからの確定済み状態が反映されます。
機能リファレンス
shift_check_in ツール
- セッションを更新するには、必須の
gistと、任意のfiles、workspace、workerId(大文字と小文字を区別しない、ASCII の英字または数字 6 文字)が必要です。ID は大文字で保存され、返されます。 - セッション、
activeWorkers、解決されたworkspace、修飾されたstatusUriを返します。更新時に省略されたファイルと元のcheckedInAtは保持されます。filesに空の配列を明示的に指定すると、宣言がクリアされます。 - 調整プロトコルと該当する単独ワーカー向けの通知は、構造化出力では
noticeとして、テキストの末尾にも一度だけ配信されます。 - 未知の
workerIdは、理由unknown_worker(NotFound)、復旧のヒント、現在の名簿とともに失敗します。
shift_check_out ツール
- 必須の
workerId(大文字と小文字を区別しない、ASCII の英字または数字 6 文字)と、任意のworkspaceおよび1文のsummaryを指定します。 removed、解決されたworkspace、修飾されたstatusUri、ID/概要を返します。未知または削除済みの ID が指定された場合も成功し、removed: falseを返します。ID が存在しない理由は推測せず、その名簿を示します。- セッションが実際に存在し、削除された場合にのみ、リソース更新を公開します。
shift://status リソース
text/markdownを返します。アクティブワーカーのテーブル、または名簿が空の場合は「現在アクティブなエージェントはいません。」workerIdはshift_check_inから取得されます。- 修飾なしのリソースはプロセスのデフォルトのワークスペースを読み取ります。修飾されたテンプレートは、その URI にエンコードされた識別子を正確に読み取ります。
- テーブルのセルでは、バックスラッシュとパイプをエスケープし、CRLF/LF/CR をフラット化します。保存値と構造化出力は変更されません。
機能
@cyanheads/mcp-ts-core を基盤としています。stdio および Streamable HTTP トランスポート、プラグイン可能な認証(none/jwt/oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングに対応した構造化ログを備えています。
調整機能:
- プロセス間で共有され、ワークスペースごとに分離されたユーザー単位の SQLite 名簿。明示的にチェックアウトされるまで、再起動後も保持されます
- 調整プロトコルはすべてのチェックイン応答に含まれるため、クライアント側の設定なしで、運用ルールをエージェントに伝えられます
- 状況把握に役立つアクティブワーカーのテーブルが、すべてのチェックインに付属します
- セッション更新ではパッチセマンティクスを採用し、指定されたフィールドのみを変更します
エージェントに適した出力:
- どちらのクライアントサーフェスでも同じデータを扱います。出力スキーマの
structuredContentとformat()の Markdown を提供します shift_check_inは型付きのエラーコントラクトを宣言するため、未知のワーカー ID はdata.reasonと復旧のヒントとともに返されます- 失敗応答には現在の名簿が含まれるため、エージェントは状況を把握するために再度呼び出さなくても、同じターン内に復旧できます
はじめに
MCP クライアントの設定ファイルに以下を追加します。
{
"mcpServers": {
"shift-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/shift-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"SHIFT_WORKSPACE": "my-project"
}
}
}
}
または、npx を使用します(Bun は不要です)。
{
"mcpServers": {
"shift-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/shift-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"SHIFT_WORKSPACE": "my-project"
}
}
}
}
または、Docker を使用します。
{
"mcpServers": {
"shift-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "SHIFT_WORKSPACE=my-project",
"-v", "shift-state:/var/lib/shift-mcp-server",
"ghcr.io/cyanheads/shift-mcp-server:latest"
]
}
}
}
共同作業するすべてのエージェントで、同じ SHIFT_WORKSPACE を設定し、同じ状態ディレクトリを使用してください。同じ OS ユーザーのネイティブプロセスは、デフォルトで ~/.local/state/shift-mcp-server を共有します。明示的に指定した識別子は不透明で、完全一致で扱われます。my-project と /path/my-project は別々の名前空間です。名前付きボリュームを使う代わりに、ネイティブの状態ディレクトリをコンテナにバインドマウントすれば、ネイティブクライアントと Docker クライアントでロスターを共有できます。
SHIFT_WORKSPACE が設定されていない場合、どちらのトランスポートでも、Git の外では起動時の作業ディレクトリ、Git の内では親となる Git ワークツリーのルートの実パスが使用されます。空のツールのワークスペースセレクターもこのデフォルトを使用します。空でない識別子は完全一致で扱われます。サブディレクトリまたはシンボリックリンクから起動しても、同じルートに集約されます。デスクトップクライアントやインストールバッジは、プロジェクト外から起動する場合があります。インストール後に SHIFT_WORKSPACE を設定するか、すべてのツール呼び出しで workspace を渡してください。Desktop バンドルでは、ワークスペースの入力を求められます。Codex プラグインは環境変数の SHIFT_WORKSPACE と SHIFT_STATE_DIR を引き継ぎます。Claude プラグインには、これに対応する設定オプションがあります。
共有 HTTP プロセスでは、起動時のディレクトリがデフォルトとして使用されます。多重化されたクライアントは、プロジェクトの明示的な workspace を渡す必要があります。
SHIFT_WORKSPACE=my-project MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.3 以降(または Node.js v24 以降)。
- API キー、アカウント、外部サービスは不要です。
インストール
- リポジトリをクローンします。
git clone https://github.com/cyanheads/shift-mcp-server.git
- ディレクトリに移動します。
cd shift-mcp-server
- 依存関係をインストールします。
bun install
- 環境を設定します。
cp .env.example .env
# edit .env if you need to override a framework default
設定
ロスターは、フレームワークの STORAGE_PROVIDER_TYPE とは独立して SQLite を使用します。状態はチェックアウトまで保持されます。再起動しても、放棄されたセッションはクリアされません。TTL や自動削除の仕組みはありません。ワークスペース名とワーカー ID は調整用のセレクターであり、認証境界ではありません。
WAL と BEGIN IMMEDIATE により、変更、ID の割り当て、返されるロスターのスナップショットがシリアル化されます。起動時には、SQLite のロック競合に対して、最大 3 秒の期限内で再試行します。変更処理がビジーの場合も、最大 3 秒間待機します。ストレージがビジー、破損、または書き込み不可の場合は、インメモリへのフォールバックなしでエラーが明示されます。共有状態ディレクトリには、SQLite のロックをサポートするローカルファイルシステムを使用してください。
| 変数 | 説明 | デフォルト |
|---|---|---|
SHIFT_WORKSPACE | ツールで上書き可能な、不透明なデフォルトのワークスペース名前空間です。 | 実際の Git ルートまたは起動時の作業ディレクトリ |
SHIFT_STATE_DIR | roster.sqlite を含む、共有可能なローカル書き込みディレクトリです。 | ~/.local/state/shift-mcp-server |
MCP_TRANSPORT_TYPE | トランスポートです。stdio または http を指定します。 | stdio |
MCP_HTTP_PORT | HTTP サーバーのポートです。 | 3010 |
MCP_HTTP_HOST | HTTP サーバーのホスト名です。 | 127.0.0.1 |
MCP_SESSION_MODE | HTTP セッションの処理方式です。auto、stateful、stateless を指定します。セッションを必要とするハンドラーがないため、サーバーは createApp() で stateless を宣言します。この変数を設定すると、その値で上書きされます。 | stateless |
MCP_AUTH_MODE | 認証モードです。none、jwt、oauth を指定します。 | none |
MCP_LOG_LEVEL | ログレベルです(RFC 5424)。 | info |
LOGS_DIR | ログファイルのディレクトリです(Node.js のみ)。 | <project-root>/logs |
OTEL_ENABLED | OpenTelemetry の計装を有効にします。 | false |
任意の上書き設定の一覧は、.env.example を参照してください。
サーバーの実行
ローカル開発
-
ビルドして実行します。
bun run rebuild bun run start:stdio # or bun run start:http -
チェックとテストを実行します。
bun run devcheck # Lint, format, typecheck, security, packaging bun run test # Vitest suites: unit, smoke, integration, fuzz bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t shift-mcp-server .
docker run --rm -p 127.0.0.1:3010:3010 -e SHIFT_WORKSPACE=my-project -v shift-state:/var/lib/shift-mcp-server shift-mcp-server
Dockerfile のデフォルト設定は、HTTP トランスポート、ステートレスセッションモード、/var/log/shift-mcp-server へのログ出力、/var/lib/shift-mcp-server への名簿状態の保存です。連携するすべてのコンテナで、同じ書き込み可能なボリュームとワークスペースを再利用してください。ホストのバインドマウントは、イメージの bun ユーザーが書き込み可能である必要があります。OpenTelemetry のピア依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 用途 |
|---|---|
src/index.ts | createApp() のエントリーポイント — 定義、ストレージのセットアップ/終了処理、サーバー通知。 |
src/config | ストレージディレクトリとデフォルトのワークスペース設定。 |
src/mcp-server/tools | ツール定義(check-in.tool.ts、check-out.tool.ts)。 |
src/mcp-server/resources | 静的なデフォルト名簿と、ワークスペースを指定するテンプレート。 |
src/services/worker-store | トランザクション対応の SQLite ワーカーストアとテーブルの書式設定。 |
tests/ | src/ に対応する単体テスト、スモークテスト、統合テスト、ファズテストの各スイート。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、CLAUDE.md/AGENTS.md を参照してください。概要は次のとおりです。
- ハンドラーは例外をスローし、フレームワークがキャッチします。ツールのロジックで
try/catchを使わないでください。 - リクエスト単位のログには
ctx.logを、テナント単位のストレージにはctx.stateを使用してください。 - 新しいツールとリソースは
src/index.tsに登録してください。 format()は出力スキーマのすべてのフィールドをレンダリングする必要があります。両方のクライアントインターフェースで同じデータが扱われます。
貢献
Issue を歓迎します。提出前にチェックとテストを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。