付録B Claude Code に繋ぐ
📖 MCPサーバーを作って学ぶ AIに道具を持たせる入門 — はじめに・目次 ← 目次に戻る 本編で作った
memoサーバーを、Claude Desktop 以外のホストから使います。サーバーのコードは1文字も変えません。
🔌 これが「規格」の御利益です 🟢
第1章で、こう書きました。
道具を作る側と、AIを動かす側を、切り離すために規格がある。
付録Bは、その答え合わせです。
いまあなたの手元には、memo という MCPサーバーがあります。第5章〜第9章で育てた、search_notes / read_note / write_note を持つプログラムです。これを Claude Code(ターミナルで動く Claude)から使います。
やることは——設定を1つ足すだけです。
src/index.tsを開く必要は ありません- Claude Code 用に書き直す必要も ありません
- ビルドし直す必要すら ありません(すでに
npm run build済みなら)
これが N×M問題の解けた状態です。道具は1回作った。あとは繋ぎ先を増やすだけ。 第11章では、同じサーバーをさらに自作アプリからも使います。「規格である」とは、こういうことです。
🛠 繋ぎ方 🟢
Claude Code には、コマンドでサーバーを追加するしくみがあります。Claude Desktop のように JSON ファイルを手で開かなくてよい、というのが一番の違いです。
stdio サーバーを追加する
公式ドキュメントに載っている基本の形はこれです。
claude mcp add [options] <name> -- <command> [args...]
memo サーバーの場合、こうなります。
claude mcp add --env NOTES_DIR=/ABSOLUTE/PATH/TO/notes --transport stdio memo \
-- node /ABSOLUTE/PATH/TO/memo/build/index.js
1行ずつ見ます。
| 部分 | 意味 |
|---|---|
claude mcp add |
サーバーを追加するコマンド |
--env NOTES_DIR=... |
サーバーに渡す環境変数。Claude Desktop の env キーと同じ役割 |
--transport stdio |
繋ぎ方。手元のプログラムなので stdio(第1章・第3章) |
memo |
サーバーにつける名前 |
-- |
ここから先はサーバー自身のコマンド、という区切り |
node /ABSOLUTE/.../build/index.js |
実際に起動されるコマンド |
⚠️
--(ハイフン2つ)を落とさないでください。 公式ドキュメントいわく、--は「Claude 自身のオプション(--transport--env--scope)」と「サーバーを動かすコマンド」を分ける区切りです。--の後ろはそのままサーバーに渡されます。これが無いと、サーバー側のフラグを Claude Code が自分のオプションとして解釈しようとします。
⚠️
--envのすぐ後ろにサーバー名を置かないでください。--envはKEY=valueを複数受け取れるので、直後のmemoもKEY=valueだと思われて弾かれます。上の例のように、--envとサーバー名のあいだに別のオプション(--transport)を挟みます。
💡 絶対パスは Claude Desktop と同じく必須です。第2章・付録Cで散々やったところと同じ理由です。
📂 Claude Desktop との違い 🟢
| Claude Desktop | Claude Code | |
|---|---|---|
| 追加の方法 | JSON ファイルを手で編集 | コマンド(claude mcp add)でも、ファイルでも |
| 設定の置き場 | claude_desktop_config.json |
スコープによって変わる(下記) |
| チームでの共有 | 個人の設定のみ | プロジェクト単位で共有できる |
| 反映 | アプリを完全終了して再起動 | コマンド実行後、セッションを開き直す |
スコープ(どこに保存するか)
Claude Code の一番おもしろい違いがここです。公式ドキュメントによると、サーバーの設定は3つのスコープのどれかに保存されます。
| スコープ | 使える範囲 | 共有 | 保存先 |
|---|---|---|---|
| local(既定) | いま居るプロジェクトだけ | されない | ~/.claude.json |
| project | いま居るプロジェクトだけ | される(バージョン管理経由) | プロジェクト直下の .mcp.json |
| user | あなたの全プロジェクト | されない | ~/.claude.json |
指定は --scope(短縮形 -s)です。
# 既定は local
claude mcp add --transport stdio memo -- node /ABSOLUTE/PATH/TO/memo/build/index.js
# 自分のどのプロジェクトからでも memo を使いたい
claude mcp add --transport stdio memo --scope user -- node /ABSOLUTE/PATH/TO/memo/build/index.js
project スコープを選ぶと、プロジェクトのルートに .mcp.json が作られます。形式はこうです(公式ドキュメントの例)。
{
"mcpServers": {
"shared-server": {
"command": "/path/to/server",
"args": [],
"env": {}
}
}
}
見覚えがありますよね。Claude Desktop の設定ファイルと、ほぼ同じ形です。mcpServers の下に command / args / env——第2章で書いたのと同じ構造。ここでも規格の恩恵が効いています。
このファイルを Git にコミットすれば、チーム全員が同じ道具を使えます。これは Claude Desktop にはない発想です。
⚠️ ただし公式ドキュメントによれば、
.mcp.jsonのサーバーは安全のため、使う前に承認を求められます。他人のリポジトリを clone したら、知らないプログラムが勝手に起動する——では困るからです。第9章で扱った「書ける道具は危ない道具」の話と地続きです。承認の選択をやり直したいときはclaude mcp reset-project-choicesがあります。
💡 同じ名前のサーバーが複数のスコープにあるときの優先順位は、local → project → user の順(公式ドキュメント)。
Claude Desktop の設定をそのまま持ってくる
すでに Claude Desktop で動いているなら、こんなコマンドもあります。
claude mcp add-from-claude-desktop
実行すると、どのサーバーを取り込むか選ぶ画面が出ます。公式ドキュメントによれば、macOS と WSL(Windows Subsystem for Linux)でのみ動作します。
⚠️ サーバー名に使えるのは英数字・ハイフン・アンダースコアだけです。Claude Desktop 側で名前にスペースなどを使っていると、そのサーバーは取り込めません。
memoなら問題ありません。
✅ 動作確認 🟢
1. 一覧に出ているか
claude mcp list
追加したサーバーが並びます。1つのサーバーの詳細を見たいときは、
claude mcp get memo
2. 繋がっているか
Claude Code を起動して、セッションの中でこう打ちます。
/mcp
サーバーの接続状態が出ます。公式ドキュメントによると、この画面には各サーバーのツール数も表示され、「ツールがあると言っているのに1つも出していないサーバー」には印が付きます。第4章の「ツールが出てこない」型の切り分けに、そのまま使えます。
3. 実際に呼んでみる
いつものやつです。
「メモから『会議』を検索して」
search_notes が呼ばれれば成功です。第5章でやったのとまったく同じ体験が、ターミナルの中で起きます。サーバーは、繋ぎ先が変わったことに気づいてすらいません。
💡 第7章で作ったプロンプト(
summarize_week)も使えます。公式ドキュメントによれば、MCPのプロンプトは Claude Code のスラッシュコマンドとして/mcp__サーバー名__プロンプト名の形で現れます。/を打つと一覧に出てきます。
消したくなったら
claude mcp remove memo
⚠️ うまくいかないときは 🟢
新しい原因を探さないでください。 ホストが変わっただけで、壊れ方は本編と同じです。
- サーバーが
listに出ない → コマンドのタイプミス。--を忘れていないか /mcpで繋がらない → まずターミナルで直接node /絶対パス/build/index.jsを叩く(第4章の手順①)- ツールが出てこない →
npm run buildを忘れていないか。build/index.jsは本当にそこにあるか - 急に全部おかしくなった →
console.logを1行足しませんでしたか(第3章)
つまり——第4章 デバッグの作法 — 見えない通信を覗く に戻ってください。 あそこで覚えた切り分けの順番は、ホストが Claude Desktop でも Claude Code でも自作アプリでも、そのまま通用します。デバッグの手順もまた、規格のおかげで使い回せるのです。
💡 環境変数まわりで詰まったら 付録C 設定ファイルの場所とトラブル、エラー文言で詰まったら 付録D よくあるエラー集 へ。
🤖 AIに頼むなら 🟢
Claude Code の MCP まわりは更新が速い部分です。AIに claude mcp add のコマンドを書かせると、古いオプション名を自信満々に出してくることがあります。
コマンドが通らなかったら、まずこれです。
claude mcp add --help
手元の --help が、いつでも一番新しい正解です。それでも分からなければ、公式ドキュメントを見てください。
- Claude Code の MCP リファレンス: https://code.claude.com/docs/en/mcp
- MCP 公式(ローカルサーバーへの接続): https://modelcontextprotocol.io/docs/develop/connect-local-servers
📗 ことばメモ
| ことば | よみ | 意味 |
|---|---|---|
| Claude Code | クロードコード | ターミナルで動く Claude。ホストの一種 |
| スコープ | — | 設定をどこに保存し、どこまで効かせるか。local / project / user の3つ |
.mcp.json |
— | project スコープの設定ファイル。プロジェクト直下に置き、チームで共有できる |
~/.claude.json |
— | local / user スコープの保存先 |
-- |
ダッシュダッシュ | Claude 自身のオプションと、サーバー起動コマンドの区切り |
➡️ 次へ
同じサーバーが、Claude Desktop でも Claude Code でも動きました。設定を足しただけで、コードは1文字も変えていません。
この体験のいちばん重い版が 第11章 自作ChatGPTクローンに繋ぐ です。次は繋ぐ側(クライアント)を自分で書いて、この memo を自作アプリから呼びます。ホストが Anthropic 製ですらなくなっても、サーバーはやっぱり何も変わりません。
そして、なぜそれがそんなに大きな話なのかは 第13章 規格であることの意味(読み物) で。
関連ページ
- MCPサーバーを作って学ぶ AIに道具を持たせる入門 — はじめに・目次 — 目次
- 第1章 「コネクタ」の正体 — MCPは道具の共通規格 — 背骨①の出発点
- 第4章 デバッグの作法 — 見えない通信を覗く — 動かないときはここへ
- 付録C 設定ファイルの場所とトラブル
- 付録D よくあるエラー集