Claude Codeの仕組み講座(講師のためのエンジニア水準)
区分3 拡張の仕組み★★★MCP は Model Context Protocol の略です。 「モデル(AI)に文脈や道具を渡すための、約束事」という意味です。
事務所で考えると分かりやすいです。 取引先が10社あって、会社ごとに連絡の方法がばらばらだと、担当者は大変です。 そこで「全社この形式のFAXで連絡する」と決めておけば、新しい取引先が増えても、担当者のやり方は変わりません。 MCP は、この「全社共通の連絡形式」にあたります。
MCP の公式の説明では、登場人物は3つです。
| 呼び名 | 何か | 事務所のたとえ |
|---|---|---|
| ホスト | AIアプリ本体。Claude Code など | あなたの事務所 |
| クライアント | サーバーとの1対1の接続を持つ部品 | 取引先ごとの専用電話回線 |
| サーバー | 道具や資料を提供するプログラム | 取引先の窓口 |
ホストは、サーバーの数だけクライアントを作ります。サーバー1つにつき、専用のクライアントが1つ付きます。
つまり、ホスト(Claude Code)が自分の中にクライアントという接続部品を持ち、その先に道具を出すサーバーがいます。事務所のたとえで「窓口」と呼ぶのは、サーバー側だけです。
ここで言う「サーバー」は、遠いコンピューターという意味ではありません。自分のMacで動くプログラムでも、MCPのサーバーと呼びます。
MCP は、メッセージの中身(JSON-RPC)と、それを運ぶ方法を分けて決めています。運び方は、公式の仕様で2つです。
| 運び方 | 動く場所 | 向いている物 |
|---|---|---|
| stdio(標準入出力) | 自分のMacの中。Claude Code が起動する | 自分のファイルや、手元のプログラム |
| Streamable HTTP | ネット上のサーバー。URLでつなぐ | Notion や Slack のような、クラウドのサービス |
stdio は、Claude Code がサーバーのプログラムを自分で起動して、文字の入出力で話す方法です。ネットワークを通らないので速く、基本は1つのクライアントだけが使います。
HTTP は、離れたサーバーに文字を送る方法です。多くのクライアントが同じサーバーを使え、ログインの仕組みも使えます。このログインの仕組みが OAuth で、「パスワードを渡さずに、このアプリに自分のデータを触る許可だけを与える」ための標準の方式です。Claude Code では /mcp を開いて画面の案内に沿えば済みます。
古い方式の SSE もありますが、公式は非推奨にしています。
Claude Code では、ターミナルで claude mcp add というコマンドを使います。
claude mcp add --transport http 名前 https://example.com/mcp
claude mcp add --transport stdio 名前 -- npx -y サーバーのパッケージ名
-- は、「ここから後ろは、サーバーを起動する命令」という区切りです。区切りがないと、サーバー側の設定が Claude Code の設定と混ざります。
つないだあとは、会話の中で /mcp と打つと、状態を確かめられます。ログインが要るサービスは、ここで済ませます。
公式で確かめた動きです。
細かい数字は版で変わります。「切れたら /mcp で確かめる」だけ覚えておけば足ります。
MCP のサーバーは、次の3種類を提供できます(公式の言葉では、プリミティブ)。3つを分ける理由は、誰が使うかが違うことです。
| 種類 | 何か | 使う人 | 例 |
|---|---|---|---|
| 道具(tools) | AIが呼び出す機能。書き込みや送信もできる | AI が必要だと思った時 | メッセージを送る、予定を作る |
| 資料(resources) | 読み取り専用の情報。URIという住所で呼ぶ | アプリ が選んで文脈に入れる | ファイルの中身、データベースの構造 |
| 決まり文句(prompts) | あらかじめ作ってある依頼の雛形 | 人 が選んで呼ぶ | 「会議を要約して」の雛形 |
ここまでが、MCP の仕様の説明です。あなたの環境で使っている Addness や freee の操作は、「道具」として入っています。
資料は、プロンプトに @ を打つと、ファイルと並んで候補に出ます。@サーバー名:住所 の形で指定します(公式の例:@github:issue://123)。指定した資料は自動で取り込まれ、会話に添付されます。
決まり文句は、/ を打つと /サーバー名:決まり文句名 (MCP) として並びます。/mcp__サーバー名__決まり文句名 と打っても動きます。引数が要る物は、空白で区切って後ろに足します(公式の例:/mcp__github__pr_review 456)。選ぶのは人なので、AIが勝手には呼びません。
講師が答えられるように、受講生の疑問は次の3点で返せば足ります。
@ で選んで添える/ で呼ぶ。結果は会話にそのまま入る道具の呼び出しは、2回のやり取りでできています。
tools/list):サーバーが、道具の名前・説明・引数の形を返すtools/call):名前と引数を送ると、結果が返る一覧に載る1つの道具は、name(名前)・description(説明)・inputSchema(引数の形)でできています。inputSchema は JSONスキーマ、つまり「どんな値をどの欄に入れるか」を決めた書式の定義です。
AIが道具を使うと決めたら、ホストの中のクライアントがサーバーに tools/call を送り、結果をAIに返します。AIはサーバーと直接は話しません。
Claude Code の中では、道具に mcp__サーバー名__道具名 という名前が付きます。たとえば Addness の道具は mcp__addness__… で始まります。この名前は、許可のルールやフックの matcher(No.10)で使います。
○ 受講生によく聞かれる質問:「MCP と、Claude の拡張機能やスキルは何が違うんですか」
→ 答え方:MCP は「外のサービスにつながる道具」を増やす仕組みで、スキルは「道具の使い方の手順」を教える仕組みです。両方を組み合わせるのが定番です。(例:MCP で社内DBにつなぎ、スキルで「このDBの調べ方」を教える)
○ 講義で使える図のたとえ:ホスト=事務所、クライアント=事務所の中にある取引先ごとの専用電話、サーバー=取引先の窓口です。窓口が「うちはこの3つの注文を受けます」と一覧を出すのが tools/list です。
○ 関係する単元:No.09 スキル、No.10 フック
道具の定義(名前・説明・引数の形)を全部机に置くと、机が狭くなります。たとえばサーバーを10個つなぎ、各サーバーに道具が30個あれば、300個の定義が机に載ります。肝心の仕事に使える広さが減り、AIが道具を選ぶ精度も落ちます(公式のAPI文書では、道具が30〜50個を超えると選ぶ精度が下がるとされています)。
これを避けるために、Claude Code は「道具の検索(公式名:ツール検索)」という仕組みを、初期設定で使っています。流れは次の通りです。
ToolSearch)だけ。各道具の説明と引数の形(JSONスキーマ)は置かれないToolSearch で検索する。検索は道具の名前・説明・引数の名前と説明に当たる(公式のAPI文書による)。一致した道具(初期は最大5件)の定義が、その時に机へ載るつまり、AIが道具を選ぶ手がかりは、最初は名前とサーバー側の指示だけです。サーバーを作る人が、指示に「どんな仕事の道具か」を書く理由はここにあります。
環境変数(Claude Code に渡す設定値)の ENABLE_TOOL_SEARCH=false で、この仕組みを切って全部を最初から置くこともできます。サーバーごとに「常に最初から置く」(alwaysLoad)の指定もあります。机の使い方は、/context all と打つと、道具ごとに見られます。
道具の返す結果が大きすぎると、それも机を埋めます。トークンは、AIが文章を数える単位です。公式は、トークンと文字数の換算を書いていません。
公式の初期値は、トークンの上限と文字数の上限が別々にあります。
MAX_MCP_OUTPUT_TOKENS で変えられる)。超えた成功の結果は、ファイルに保存され、会話にはその場所だけが入るサーバーの設定は、「誰に効くか」を3つの範囲から選べます。
| 範囲 | 効く所 | 保存先 |
|---|---|---|
| local(初期値) | その作業場の自分だけ | ~/.claude.json |
| project | その作業場の全員 | 作業場の .mcp.json |
| user | 自分の全作業場 | ~/.claude.json |
「作業場」は、いま開いているフォルダ(公式では「プロジェクト」)です。
local と user は、どちらも自分のホームフォルダの ~/.claude.json に保存されます。違いは範囲です。local は、このファイルの中に「この作業場のパスの下」として入るので、他の作業場には現れません。user は作業場に関係なく全部に効きます。どちらも自分専用で、チームには共有されません(共有されるのは project だけです)。
同じ名前が複数あるときは、local → project → user → プラグイン、の順で強い方が使われます。設定の一部だけが混ざるのではなく、勝った方の設定が丸ごと使われます。他の機能を含めた強さの順番は、No.15 の比較表にまとめてあります(ここでは MCP の順番だけ書きます)。
MCP の設定は、settings.json ではなく、上の表の別の場所に入ります。
MCP のサーバーは、あなたの権限で動き、外のサービスを読み書きします。 公式も「つなぐ前に、信頼できるか確かめる」ことを求めています。
特に注意するのは、外のネットの文章を取ってくるサーバーです。文章の中に紛れた「悪い指示」にAIが従う危険(プロンプトインジェクション)があります。
作業場の .mcp.json に書かれたサーバーは、対話の画面では、使う前に承認を求められます。ただし claude -p(画面を出さずに動かす方法)や Agent SDK(プログラムからClaude Codeを動かす部品)では、承認の確認なしで読み込まれます。
自動化で動かすときは、.mcp.json の中身を自分で確かめておく必要があります。
○ 受講生によく聞かれる質問:「MCP を入れすぎると、AIの返事が悪くなりますか」
→ 答え方:道具の説明が机を占める分だけ、他の用に使える広さは減ります。道具の検索で名前だけが置かれるので、昔ほどではありませんが、使わないサーバーは外します
○ 受講生によく聞かれる質問:「社内のDBにMCPでつなぐのは安全ですか」
→ 答え方:サーバーは受講生の権限で動くので、読み取り専用の権限だけを渡したサーバーにします。許可のルール(No.13)でも道具ごとに止められます
○ 講義で使える図のたとえ:道具の一覧は、事務所の電話帳です。全員分の詳しいプロフィールは、必要な時にだけ引き出します。
○ 関係する単元:No.05 コンテキストウィンドウの中身
MCP=ホスト(Claude Code)・クライアント(ホストの中の接続部品)・サーバー(道具を出す側)の3者。運び方は stdio と HTTP。出せる物は道具・資料・決まり文句。道具は名前とサーバーの指示だけ机に置かれ、定義は検索で取り寄せ。信頼できる物だけつなぐ。
問1 Claude Code を MCP の「ホスト」と呼ぶとき、「クライアント」とは何ですか?
問2 自分のMacの中にある小さなプログラムをMCPのサーバーとして使いたい。向いている運び方は?
問3 MCP のサーバーを20個つないでも、会話の最初に机がいっぱいにならない主な理由は?
問4 同じ名前のMCPサーバーが local と user の両方に設定されています。使われるのは?
出典:Claude Code 公式ドキュメント「Connect Claude Code to tools via MCP」(https://code.claude.com/docs/en/mcp)/「Extend Claude Code」(https://code.claude.com/docs/en/features-overview)/API 公式「Tool search tool」(https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool)/MCP 公式「Architecture overview」(https://modelcontextprotocol.io/docs/learn/architecture)/「Understanding MCP servers」(https://modelcontextprotocol.io/docs/learn/server-concepts)