付録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 のすぐ後ろにサーバー名を置かないでください。 --envKEY=value を複数受け取れるので、直後の memoKEY=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 クロードコード ターミナルで動く Claude。ホストの一種
スコープ 設定をどこに保存し、どこまで効かせるか。local / project / user の3つ
.mcp.json project スコープの設定ファイル。プロジェクト直下に置き、チームで共有できる
~/.claude.json local / user スコープの保存先
-- ダッシュダッシュ Claude 自身のオプションと、サーバー起動コマンドの区切り

➡️ 次へ

同じサーバーが、Claude Desktop でも Claude Code でも動きました。設定を足しただけで、コードは1文字も変えていません。

この体験のいちばん重い版が 第11章 自作ChatGPTクローンに繋ぐ です。次は繋ぐ側(クライアント)を自分で書いて、この memo を自作アプリから呼びます。ホストが Anthropic 製ですらなくなっても、サーバーはやっぱり何も変わりません。

そして、なぜそれがそんなに大きな話なのかは 第13章 規格であることの意味(読み物) で。

関連ページ