Claude Code 解説書 — Thread 6 of 8
MCP — 外部サービスとの接続
単一のオープン標準プロトコルで、Claude Code をあらゆるツール・データ・サービスと繋ぐ
スレッド5ではSkillsを使ってClaude Codeに「知識」を注入する方法を学んだ。 Skillsがマークダウンで書かれた内部知識の拡張だとすれば、本章で扱うMCP(Model Context Protocol)は外部世界への接続を担う。 データベース、Slack、GitHub、Sentry、Figma ── これまで手動でコピペしていた情報を、Claude Codeが直接読み書きできるようになる仕組みだ。
MCP(Model Context Protocol)とは、AIエージェントが外部ツールやデータソースと安全に接続するためのオープン標準プロトコルである。 N個のAIクライアントとM個の外部サービスの統合数を N×M から N+M に削減し、 1つの共通インターフェースであらゆるサービスとの接続を可能にする。
Section 6.1
6.1MCPとは何か — なぜオープン標準なのか
N×M 統合問題
AIモデルの世界では、ある普遍的な困難が存在する。AIクライアント(IDE、チャット、デスクトップアプリ等)が N 個あり、接続したい外部サービス(ツール、データソース、SaaS等)が M 個あるとき、素朴に統合すると N × M 本のカスタム接続が必要になる。 それぞれの接続には固有の認証フロー、データスキーマ、安全制御が求められ、維持コストは組み合わせの数に比例して膨らむ。
MCPはこの問題に対する回答だ。すべてのAIクライアントとすべての外部サービスが1つの共通プロトコルを通じて会話すれば、統合の数は N + M に減る。
図6-1:N×M統合問題とMCPによる解決。左は個別接続の従来モデル、右はMCPが共通層になるモデル
Anthropicがオープン標準を選んだ理由
MCPはAnthropicが開発したプロトコルだが、特定のベンダーに囲い込む仕様ではない。オープンソースのオープン標準として公開されている。 MCPの共同開発者David Soria Parraは、MCPの目標を「AIアプリケーションをサードパーティがMCPサーバーを通じて拡張できるようにすること」と述べ、その結果として期待される世界を「現在のAPIエコシステムをLLMインタラクション向けに再現したもの」と形容している。
つまりMCPは、1つのメール送信MCPサーバーを作れば、Claude Code、Cursor、ChatGPT、Gemini CLIなどどのMCP対応クライアントからでも使えるという移植可能性を実現する。 これが「プロトコルレベルで再利用可能な統合」というMCPの核心的な価値提案だ。
“MCPは非常に退屈な仕様書だ。しかし、それが可能にするのは、APIエコシステムに匹敵するエコシステム ── 標準化されたインターフェースによる再利用だ”
— David Soria Parra, MCP共同開発者, Anthropic
2026年3月時点のエコシステム規模
MCPのエコシステムは急速に拡大している。MCPサーバーの正確な総数は計測方法によって異なるが、ディレクトリサイトのひとつであるMCP Marketは2万6千以上のサーバーをインデックスしている。 公式レジストリ(2025年9月プレビュー開始)に加え、マーケットプレイスやディレクトリが並立するレイヤー構造で、企業向けのガバナンス機能(許可リスト・監査ログ等)も整いつつある。
26,000+
インデックス済みサーバー
N+M
統合数の削減効果
業界標準
OpenAI・Google・GitHub採用
重要な業界シグナルとして、OpenAIはApps SDKがMCPの上に構築されていることを公式に示しており、GoogleのGemini CLIもMCPサポートをコア機能として挙げている。 さらにGitHubは2025年9月、Copilot Extensionsの新規構築をMCPサーバー方式に一本化すると発表した。MCPはもはやAnthropicだけのプロトコルではなく、AI業界の事実上の標準になりつつある。
Section 6.2
6.2MCPで何ができるのか
MCPサーバーを接続すると、Claude Codeは外部サービスの「読み取り」と「書き込み」の両方を行えるようになる。 以下は公式ドキュメントに示されている代表的なユースケースだ。
具体的な活用例
課題管理 → 「JIRA issue ENG-4521の機能を実装して、GitHubにPRを作成して」
監視分析 → 「SentryとStatsigをチェックして、ENG-4521の機能の使用状況を確認して」
DB照会 → 「PostgreSQLから、機能ENG-4521を使ったランダムなユーザー10人のメールアドレスを見つけて」
デザイン統合 → 「Slackに投稿された新しいFigmaデザインに基づいて、メールテンプレートを更新して」
ワークフロー自動化 → 「この10人のユーザーにフィードバックセッションへの招待メールの下書きをGmailで作成して」
外部イベント反応 → MCPサーバーはChannel機能としてセッションにメッセージをプッシュし、TelegramやDiscordのメッセージにClaudeがリアルタイムで反応
主要カテゴリ別のMCPサーバー
図6-2:Claude Codeから接続できるMCPサーバーのカテゴリ。中心のClaude Codeから各サービスに標準プロトコルで接続する
たとえば、FigmaのDev Mode MCPサーバーが登場する以前は、デザインのコンテキストをAIツールに渡すにはスクリーンショットを貼り付けるかAPIレスポンスをコピーするしかなかった。 MCPサーバーの導入後は、Figmaのデザインコンテキストが直接Claude Codeに流れ込み、デザイン忠実度の高いコード生成が可能になった。 しかも同じサーバーがVS Code Copilot、Cursor、Windsurfなど他のクライアントでもそのまま使える。
Section 6.3
6.3MCPサーバーのインストール
3つの接続タイプ(トランスポート)
MCPサーバーとClaude Codeの間の通信方法をトランスポートと呼ぶ。3つの選択肢がある。
図6-3:3つのトランスポート。クラウドサービスにはHTTP(推奨)、ローカルツールにはstdioを使う
MCPの設計思想として、トランスポートに非依存であることが挙げられる。 共同開発者のDavid Soria Parraによれば、初期のローカルユースケースでは標準入出力(stdio)が自然な選択肢だったが、プロトコル自体はJSON-RPC(Language Server Protocolと同じ系譜)ベースで、HTTP、SSE、さらにはThriftのような内部RPCシステムに載せ替えることもできる設計になっている。
実践:3つの方法でサーバーを追加する
方法1:リモートHTTPサーバー(推奨)
# Notionに接続する例 claude mcp add --transport http notion https://mcp.notion.com/mcp # Bearer トークン付きの例 claude mcp add --transport http secure-api https://api.example.com/mcp \ --header "Authorization: Bearer your-token"
方法2:リモートSSEサーバー(非推奨・レガシー)
# Asanaに接続する例 claude mcp add --transport sse asana https://mcp.asana.com/sse
方法3:ローカルstdioサーバー
# PostgreSQLに接続する例 claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \ --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics" # Airtableに接続する例(環境変数付き) claude mcp add --transport stdio --env AIRTABLE_API_KEY=YOUR_KEY airtable \ -- npx -y airtable-mcp-server
オプションの順序に注意:--transport, --env, --scope, --header 等のオプションはすべてサーバー名の前に記述する。--(ダブルダッシュ)以降がMCPサーバーに渡されるコマンドとなる。
サーバーの管理コマンド
# 設定済みサーバーの一覧 claude mcp list # 特定サーバーの詳細 claude mcp get github # サーバーの削除 claude mcp remove github # (Claude Code内で)サーバーの状態確認・認証 /mcp
MCPサーバーは動的なツール更新にも対応している。サーバーが list_changed 通知を送信すると、Claude Codeは再接続することなく利用可能なツールを自動更新する。
Section 6.4
6.4スコープと優先順位
MCPサーバーの設定は3つのスコープ(有効範囲)に分かれており、用途に応じて使い分ける。
図6-4:同名のサーバーが複数スコープに存在する場合、Local → Project → User の順で優先される
たとえば、チーム全員が使うGitHubサーバーはProjectスコープで .mcp.json に定義してリポジトリにコミットする。一方、個人の実験用サーバーはLocalスコープ(デフォルト)に置くことで他のメンバーに影響を与えない。全プロジェクトで共通して使いたいユーティリティ(HubSpot等)はUserスコープに設定する。
# スコープを明示して追加 claude mcp add --transport http stripe --scope local https://mcp.stripe.com claude mcp add --transport http paypal --scope project https://mcp.paypal.com/mcp claude mcp add --transport http hubspot --scope user https://mcp.hubspot.com/anthropic
プロジェクトスコープと .mcp.json
--scope project で追加したサーバーは、プロジェクトルートに .mcp.json として保存される。このファイルはGitで管理でき、チームメンバーがリポジトリをクローンすれば同じMCPサーバーが自動的に利用可能になる。
{
"mcpServers": {
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/"
},
"api-server": {
"type": "http",
"url": "${API_BASE_URL:-https://api.example.com}/mcp",
"headers": {
"Authorization": "Bearer ${API_KEY}"
}
}
}
}.mcp.json では環境変数の展開がサポートされている。${VAR} 構文でマシン固有の値(APIキー等)を注入でき、${VAR:-default} でデフォルト値も指定できる。 これにより、機密情報をリポジトリに含めることなくチームで設定を共有できる。
セキュリティ上の注意:Claude Codeは .mcp.json から読み込んだProjectスコープのサーバーを使用する前に承認プロンプトを表示する。承認状態をリセットするには claude mcp reset-project-choices を実行する。
Section 6.5
6.5認証とセキュリティ
OAuth 2.0 認証フロー
多くのクラウドベースMCPサーバーは認証を必要とする。Claude CodeはOAuth 2.0(権限委譲のためのオープン標準プロトコル)に対応しており、以下のステップで認証する。
サーバーを追加する:claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
Claude Code内で /mcp を実行し、ブラウザが開くので対象サービスにログインする
トークンが自動保存され、以後はリフレッシュも自動で行われる
一部のサーバーはDynamic Client Registration(動的クライアント登録)に対応していない場合がある。その場合は、サービスの開発者ポータルでOAuthアプリを登録し、--client-id と --client-secret、--callback-port を指定して追加する。
# 事前登録したOAuth認証情報を使う場合
claude mcp add --transport http \ --client-id your-client-id --client-secret --callback-port 8080 \ my-server https://mcp.example.com/mcp
セキュリティの現実
MCPは強力であるがゆえにリスクも伴う。公式ドキュメントは「サードパーティMCPサーバーの正確性やセキュリティはAnthropicが検証したものではない」と明記しており、特に信頼できないコンテンツを取得するサーバーにはプロンプトインジェクション(悪意ある入力による操作誘導)リスクがある。
実際のエンタープライズ環境では、複数の防衛策が取られている。
| 対策 | 内容 | 実例 |
|---|---|---|
| トークン分離 | MCP用トークンを標準APIトークンから分離し、漏洩時の影響範囲を限定 | Asana V2 MCPサーバー |
| ドメイン許可リスト | 接続先を承認済みドメインに限定 | Atlassian Rovo MCPサーバー |
| IP許可リスト | 特定IPからのアクセスのみ許可 | Atlassian Cloud |
| 監査ログ | MCPサーバー経由の操作を記録・追跡 | Atlassian、GitHub Enterprise |
| 管理ポリシー | 組織レベルでのMCPサーバー許可/拒否リスト管理 | Claude Code managed-mcp.json |
Section 6.6
6.6MCP Tool Searchと大規模運用
問題:ツール定義のコンテキスト肥大化
MCPサーバーを多数接続すると、各サーバーが公開するツール定義(ツール名、パラメータスキーマ、説明文等)がコンテキストウィンドウ(AIが一度に読める情報量の上限)を圧迫する。 たとえば10個のサーバーがそれぞれ5つのツールを持ち、各ツールの定義が200トークンなら、それだけで1万トークンになる。
解決策:MCP Tool Search
Claude Codeは、MCPツール定義がコンテキストウィンドウの10%を超えると、自動的にTool Searchモードを有効にする。
図6-5:Tool Searchは「全ツール事前読込」から「オンデマンド発見」に切り替えることでコンテキスト消費を削減する
Tool Searchの設定
Tool Searchはデフォルトで有効だが、環境変数 ENABLE_TOOL_SEARCH で制御できる。
| 値 | 動作 |
|---|---|
(未設定) | デフォルト有効。ただし ANTHROPIC_BASE_URL がサードパーティの場合は無効 |
true | 常に有効(サードパーティURLでも) |
auto | MCPツールがコンテキストの10%を超えたら自動有効化 |
auto:5 | 閾値を5%にカスタマイズ |
false | 無効(全ツール事前読込) |
# 閾値5%で使う ENABLE_TOOL_SEARCH=auto:5 claude # 完全に無効化 ENABLE_TOOL_SEARCH=false claude
モデル要件:Tool Searchは tool_reference ブロックをサポートするモデルが必要。Sonnet 4以降またはOpus 4以降が対象。Haikuモデルでは利用できない。
MCP出力トークン制限
MCPツールの出力が大きすぎるとコンテキストを圧迫するため、Claude Codeは10,000トークン超で警告を表示する。デフォルトの最大値は25,000トークンだが、大量データを扱うサーバー向けに調整できる。
# 最大50,000トークンに引き上げ export MAX_MCP_OUTPUT_TOKENS=50000 claude
Section 6.7
6.7実践例とリソース活用
例1:Sentryでエラー監視
サーバー追加:claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
認証:Claude Code内で /mcp → ブラウザでSentryにログイン
利用開始:「過去24時間で最も多いエラーは?」「エラーID abc123のスタックトレースを見せて」
例2:GitHubでコードレビュー
サーバー追加:claude mcp add --transport http github https://api.githubcopilot.com/mcp/
認証:/mcp → 「Authenticate」を選択
利用開始:「PR #456をレビューして改善を提案して」「自分にアサインされたオープンPRを全部見せて」
例3:PostgreSQLに自然言語クエリ
claude mcp add --transport stdio db -- npx -y @bytebase/dbhub \ --dsn "postgresql://readonly:pass@prod.db.com:5432/analytics"
追加後は自然言語でデータベースに問い合わせられる。「今月の総売上は?」「ordersテーブルのスキーマを見せて」「90日以上購入がない顧客を探して」
MCPリソースの活用
MCPサーバーはツール(アクション)だけでなくリソース(データ参照)も公開できる。リソースはファイルと同様に @ メンションで参照する。
# GitHub issueを参照して修正提案 Can you analyze @github:issue://123 and suggest a fix? # DBスキーマとドキュメントを比較 Compare @postgres:schema://users with @docs:file://database/user-model
MCPプロンプトをコマンドとして実行
MCPサーバーはプロンプト(定型のリクエストテンプレート)を公開でき、Claude Code内で / コマンドとして利用できる。
# PRリストの取得 /mcp__github__list_prs # 引数付きのプロンプト実行 /mcp__github__pr_review 456 /mcp__jira__create_issue "Bug in login flow" high
Section 6.8
6.8トラブルシューティング
基本の診断手順
/mcp でステータスを確認する。接続中のサーバー一覧、認証状態、エラーが表示される
claude mcp list で設定内容を確認する。サーバーが正しく登録されているか確認
claude mcp get サーバー名 で詳細を見る。URL、トランスポート、OAuth設定等
よくある問題と対処
| 症状 | 原因 | 対処 |
|---|---|---|
| "Connection closed" | Windows環境で npx を直接実行 | cmd /c npx -y @some/package のようにラッパーを使用 |
| "Incompatible auth server" | Dynamic Client Registration非対応 | 開発者ポータルでOAuthアプリを事前登録し --client-id を指定 |
| ブラウザリダイレクト失敗 | コールバックURLにローカルサーバーが応答できない | ブラウザのアドレスバーからコールバックURLをコピーしCLIに貼付 |
| タイムアウト | MCPサーバーの起動に時間がかかる | MCP_TIMEOUT=10000 claude でタイムアウトを延長 |
| 出力警告が頻発 | MCPツールの出力がデフォルト制限超過 | MAX_MCP_OUTPUT_TOKENS=50000 で引き上げ |
Section 6.9
6.9エンタープライズ管理
組織でClaude Codeを運用する場合、IT管理者がMCPサーバーを集中管理するための2つの方法が提供されている。
図6-7:厳格な制御が必要な場合は方式1、柔軟性を残したい場合は方式2を選択する
方式1は完全なロックダウン向けだ。システム管理者がシステムワイドなパスに managed-mcp.json を配置すると、ユーザーは claude mcp add で独自のサーバーを追加できなくなる。
方式2はより柔軟で、ユーザーは自由にサーバーを追加できるが、管理者が定義した許可リストに一致するもののみが実際に動作する。拒否リストは許可リストより常に優先される。
// 方式2の設定例(managed settings)
{
"allowedMcpServers": [
{ "serverName": "github" },
{ "serverUrl": "https://mcp.company.com/*" },
{ "serverCommand": ["npx", "-y", "@modelcontextprotocol/server-filesystem"] }
],
"deniedMcpServers": [
{ "serverUrl": "https://*.untrusted.com/*" }
]
}Section 6.10
6.10MCPの設計思想と全体像
なぜ JSON-RPC でクライアント–サーバー型か
MCPの通信フォーマットにはJSON-RPC(JSON形式の遠隔手続き呼出し)が採用されている。これはLanguage Server Protocol(LSP:VS Code等のIDEがプログラミング言語の入力補完やエラーチェックに使うプロトコル)と同じ系譜だ。
設計上の重要な意思決定として、複雑性をクライアント側に押し付ける方針がある。 MCPサーバーの数はクライアントの数より遥かに多くなることが予想されるため、サーバーの実装を極限まで簡単にすることが優先された。 これは初学者にとっても重要な示唆だ。小さなチームでもMCPサーバーを簡単に作れる一方、クライアント側の複雑性はIDE/AIツールのベンダーが一度吸収すれば済む。
「サンプリング」という設計上の工夫
MCPにはサンプリング(sampling)という仕組みがある。MCPサーバーがクライアントに「今使っているモデルでLLM補完を実行してほしい」とリクエストする機能だ。 これにより、サーバーは特定のAIベンダーのSDKを内蔵する必要がなくなり、モデル非依存のまま知的処理を利用できる。 たとえば、データベースMCPサーバーがクエリ結果の要約をClaudeに依頼し、要約されたデータだけを返すことが可能になる。
Claude Code自体をMCPサーバーにする
Claude Codeは他のMCPサーバーに接続するだけでなく、自身をMCPサーバーとして公開することもできる。
# Claude CodeをMCPサーバーとして起動 claude mcp serve
これにより、Claude Desktop等の他のMCPクライアントからClaude Codeのツール(ファイル読み書き、検索、コマンド実行等)を利用できるようになる。Claude Code → 外部サービスだけでなく、外部クライアント → Claude Codeという逆方向の接続も成立するのだ。
図6-8:Claude Codeはクライアント(左向き矢印)とサーバー(右向き矢印)の両方の役割を果たせる
Section 6.11
6.11Skill × MCPの組み合わせと次のステップ
スレッド5で学んだSkillsとMCPは独立した拡張機能だが、組み合わせることで真価を発揮する。 たとえば、「デプロイスキル」がデプロイ手順の知識を持ち、デプロイ中にGitHub MCP(PR作成)とSlack MCP(通知送信)を呼び出す——という構成が可能だ。
| 組み合わせ | Skillの役割 | MCPの役割 | 例 |
|---|---|---|---|
| Skill + MCP | ワークフローの知識・手順 | 外部サービスへの接続手段 | デプロイスキル + GitHub/Slack MCP |
| CLAUDE.md + MCP | 常時ルール・コンテキスト | 外部データの取得・操作 | 「PRは必ずレビューを通す」ルール + GitHub MCP |
| Hook + MCP | イベント駆動の自動処理 | 外部通知・データ連携 | コミット後にHookでSlack MCPへ通知 |
MCPサーバーはプラグインにもバンドルできる。プラグインの .mcp.json や plugin.json にサーバー定義を含めることで、プラグインを有効にした瞬間にMCPサーバーも自動起動する。 プラグインの詳細はスレッド8で扱う。
次のステップ:MCP(外部接続)の次は、スレッド7:Subagents と Agent Teams で並列処理を学ぶ。MCPで接続した外部サービスを、複数のエージェントが同時に活用するアーキテクチャへと進む。
homula Support
homulaの支援体制
homulaは、エンタープライズ企業向けにAIエージェントの戦略策定・PoC・実装・運用・内製化までを一気通貫で支援するAIインテグレーターです。MCP環境の設計・構築からセキュリティガバナンスの確立まで、組織に最適な統合アーキテクチャを実現します。
ブートキャンプ
3-5日で動くプロトタイプを構築。MCPサーバーの選定・接続・認証設定を含む実証実験。
エンタープライズ導入
MCPのスコープ設計、managed-mcp.json管理、監査ログ体制の構築を支援。2-4ヶ月で本番導入。
Series Navigation
← 前の章
第5章: Skills — 再利用可能な知識
Coming Soon
次の章 →
第7章: Subagents と Agent Teams
Coming Soon
他シリーズの関連ガイド
FAQ
よくある質問
API(Application Programming Interface)は個別のサービスが提供する固有のインターフェースであり、各APIごとに認証方法・データスキーマ・呼び出し方が異なります。MCP(Model Context Protocol)はそれらの上に位置するオープン標準プロトコルで、AIクライアントが統一的なインターフェースで複数のサービスに接続できるようにします。APIがUSBの「各社独自のケーブル」だとすれば、MCPは「USB-Cの統一規格」に相当します。
既存の公開MCPサーバー(GitHub、Slack、Sentry等)を追加するだけなら、CLIコマンド1行で完了するためプログラミング知識は不要です。独自のMCPサーバーを開発する場合はPythonまたはTypeScript/Node.jsの知識が必要ですが、MCPの設計思想として「サーバー側の実装を極限まで簡単にする」方針が採られているため、最小限の実装で構築できます。
主なリスクは3つあります。(1) プロンプトインジェクション:悪意あるコンテンツを取得するサーバーがClaude Codeの動作を誘導するリスク。(2) トークン漏洩:MCPサーバーに渡した認証トークンが外部に流出するリスク。(3) 権限の過剰付与:読み取り専用で十分な場合に書き込み権限まで与えてしまうリスク。対策として、トークン分離、ドメイン許可リスト、監査ログ、管理ポリシーが推奨されます。
Tool Searchは、多数のMCPサーバーを接続した際にコンテキストウィンドウ(AIが一度に読める情報量)の圧迫を防ぐ仕組みです。全ツール定義を起動時に読み込む代わりに、タスク実行中に必要なツールだけをオンデマンドで検索・取得します。MCPツール定義がコンテキストの10%を超えると自動的に有効になり、Sonnet 4以降またはOpus 4以降のモデルで利用できます。
2つの管理方式があります。方式1(排他的制御)はmanaged-mcp.jsonをシステムワイドなパスに配置し、ユーザーによるサーバー追加を完全に禁止します。方式2(ポリシーベース制御)はallowedMcpServers/deniedMcpServersで許可リスト・拒否リストを定義し、ユーザーの柔軟性を残しつつガバナンスを確保します。拒否リストは常に許可リストより優先されます。