stdio のサーバーの登録は、要するに「このコマンドを起動してください」と伝えるだけです。特別な仕組みはありません。
{
"command": "node",
"args": ["docs/samples/03-sdk/server.mjs"]
}
ホストはこれを子プロセスとして起こし、標準入出力で話しかけます。どのホストでも中身は同じで、書き方と置き場所だけが違います。
| 範囲 | 効く先 | 使いどころ |
|---|---|---|
| プロジェクト | そのフォルダで作業するときだけ | チームで共有したい。お勧め |
| 利用者 | その人のすべての作業 | どこでも使う道具 |
まずプロジェクト範囲で試してください。設定がリポジトリの中に収まるので、消したいときはファイルを消すだけで済みます。利用者範囲に入れると、他のプロジェクトでも起動されるようになります。
# プロジェクト範囲(.mcp.json に書かれる)
claude mcp add --scope project memo -- node docs/samples/06-memo/server.mjs
# 環境変数を渡す
claude mcp add memo -e MEMO_FILE=C:/data/memo.jsonl -- node server.mjs
# HTTP のサーバー
claude mcp add --transport http remote https://example.com/mcp
-- より後ろが、そのまま起動するコマンドになります。この区切りを忘れると、後ろの引数が claude のものとして読まれます。
プロジェクト範囲の実体は、リポジトリ直下の .mcp.json です。手で書いても同じです。
{
"mcpServers": {
"memo": {
"command": "node",
"args": ["docs/samples/06-memo/server.mjs"]
}
}
}
claude mcp list # 一覧と接続の可否
claude mcp get memo # 1 本の詳細
claude mcp remove memo # 消す
プロジェクト範囲の .mcp.json は、初回に承認が要ります。他人のリポジトリを開いただけで勝手にプロセスが起動しないための仕組みです。承認していないサーバーは一覧に「⏸ Pending approval」と出て、接続されません。
codex mcp add memo -- node docs/samples/06-memo/server.mjs
# HTTP のサーバー
codex mcp add remote --url https://example.com/mcp
# 環境変数
codex mcp add memo --env MEMO_FILE=C:/data/memo.jsonl -- node server.mjs
書かれる先は ~/.codex/config.toml です。Claude Code と違い、プロジェクト単位の設定ファイルはありません。
-c でその場だけ上書きできます。設定ファイルを汚さずに試せるので、動作確認に向きます。
codex exec -c 'mcp_servers.memo={command="node", args=["docs/samples/06-memo/server.mjs"]}' "メモを検索して"
codex mcp list
codex mcp get memo
codex mcp remove memo
tools/call が来ていなければ、サーバーの問題ではない。Antigravity は VS Code をもとにしたエディタなので、登録の作法もそちら寄りです。
antigravity --add-mcp '{"name":"memo","command":"node","args":["docs/samples/06-memo/server.mjs"]}'
JSON を 1 つの引数として渡します。PowerShell では全体をシングルクォートで囲みます。ダブルクォートで囲むと、中の " が壊れます。
エディタの設定画面からも登録できます。コマンドが使えない・引数の引用符で詰まる、というときは画面から入れるほうが確実です。GUI から入れても、書かれる先は同じです。
| 項目 | Claude Code | Codex | Antigravity |
|---|---|---|---|
| 登録コマンド | claude mcp add | codex mcp add | --add-mcp |
| プロジェクト単位 | あり.mcp.json | なし | エディタ次第 |
| 一時的に試す | — | あり-c | — |
| 喋る版 | 2025-11-25 | 2025-06-18 | — |
「喋る版」は実測した値です。Claude Code 2.1.263 と Codex 0.153.4 で確かめました。版が上がれば変わります。自分の環境で確かめる方法は次の章にあります。
「登録したのにツールが出てこない」。このとき最初にやるべきは、どこまで届いているかを見ることです。
受け取った行をすべてファイルに書き出すサーバーを用意しておくと、一発で分かります。samples/02-minimal/probe.mjs がそれです。
function record(direction, text) {
const stamp = new Date().toISOString();
appendFileSync(LOG, `${stamp} ${direction} ${text}\n`, 'utf8');
}
これを登録して呼ぶと、こう残ります。
2026-09-07T09:43:33.182Z *** 起動 pid=22140
2026-09-07T09:43:33.335Z --> {"method":"initialize","params":{"protocolVersion":"2025-11-25",...}}
2026-09-07T09:43:33.337Z <-- {"jsonrpc":"2.0","id":0,"result":{...}}
2026-09-07T09:43:33.471Z --> {"jsonrpc":"2.0","method":"notifications/initialized"}
2026-09-07T09:43:33.546Z --> {"method":"tools/list","jsonrpc":"2.0","id":1}
2026-09-07T09:43:41.732Z --> {"method":"tools/call","params":{"name":"add",...}}
| 症状 | 原因 | 直し方 |
|---|---|---|
| プロセスが起動しない | 相対パスの基準がずれている | 絶対パスにして確かめる。通ったら相対に戻す |
| 起動直後に落ちる | 依存が入っていない | 手で node server.mjs を動かしてエラーを見る |
| 繋がるがツールが出ない | console.log が混ざっている | 02 章の「stdout を汚さない」 |
| ツールは出るが呼ばれない | 説明文が足りない | description に「いつ使うか」を書く |
| 呼ばれるが断られる | 承認の設定 | ホスト側の設定を見る。サーバーは無関係 |
| 設定を変えても反映されない | 読み込みは起動時だけ | ホストを起動し直す |
手で動かせるものは、まず手で動かします。node server.mjs と打って何も起きなければ(入力待ちになれば)正常です。エラーが出るなら、ホストに登録する前にそれを直します。ホストを経由すると、エラーメッセージが見えなくなります。
登録して呼べるようになりました。次は Tools 以外の 2 つ、Resources と Prompts を扱います。