概要
MCPはModel Context Protocolの略で、AIアプリケーションと外部システムを接続するためのオープンな標準規格です。MCPを通じて、AIエージェントは、ファイル・データベース・リポジトリなどのデータソース、検索エンジンやIssueトラッカーなどのツール、専用promptsのようなワークフローに接続し、実務に必要なコンテキストと操作を手に入れます。 MCPは、AIアプリケーションにとってのUSB-Cポートのようなものです。USB-Cが1つの標準化されたコネクタで多様な周辺機器をつなぐように、MCPは1つの標準化された方法でAIアプリケーションを多様な外部システムに接続します。組み合わせごとに独自の連携形式を作る必要はありません。 MCPの範囲は、エージェントと外部世界の境界です。ワークフロー設計の手法そのものでも、権限モデルそのものでも、明確な指示の代替でもありません。それらは引き続きエージェントの周辺で設計する必要があります。MCPは、その設計が立つための連携レイヤーです。 本ページでは、MCPがなぜ必要なのか、どのような要素で構成されるのか、状況に応じてどの導入方法を選ぶのか、そしてチームでMCPサーバーを運用するときに何を考えるべきかを解説します。なぜMCPか
AIエージェントは、実際の仕事が行われているシステムに触れられると有用になります。MCPで接続すると、たとえばエージェントは次のようなことができます。- カレンダーやチームのドキュメントを読み、パーソナライズされたアシスタントとして働く
- デザインファイルから動くアプリケーションを生成する
- 組織内の複数のデータベースを横断分析して質問に答える
その結果は「エージェントが何でもできる」ではありません。より狭く、実務的です。サーバーが公開し、サーバーとクライアントが制御する、特定の外部操作をエージェントが実行できるようになります。
基本要素
MCPは、サーバー/クライアントモデルとして捉えると理解しやすくなります。サーバーは3種類の機能を公開し、クライアントはElicitationのような逆方向の機能を提供します。サーバーとクライアント
MCPサーバーは、あるシステムの機能を公開します。ローカルコマンド、ファイルシステム、内部API、SaaS、データベース、ドキュメントインデックスなどを包むことがあります。サーバーは、MCPリクエストをそのシステム固有の操作へ変換する責務を持ちます。 MCPクライアントはAIアプリケーションの内側にあります。1つ以上のサーバーへ接続し、各サーバーが提供する機能を列挙し、アプリケーションのルールに従ってエージェントへ利用可能にします。 通常、エージェントは背後のサービスを直接呼び出しません。機能を使うようクライアントに依頼し、クライアントが構造化されたリクエストをサーバーへ送ります。 この分離により、連携を再利用しやすくなります。Tools
toolsは呼び出し可能なアクションです。MCPの中では関数呼び出しに近い部分です。サーバーはtool名、description、入力schema、結果の形を宣言し、エージェントは構造化された引数で実行を依頼できます。
典型的なtoolsには、次のようなものがあります。
- Issueやプルリクエストを検索する
- チケットを作成する
- 承認されたデータソースに対してqueryを実行する
- サービスと時間範囲を指定してログを取得する
- 狭い範囲の内部自動化を起動する
run_any_commandというtoolは、エージェントに広すぎる操作面を渡します。search_recent_deploy_errorsというtoolであれば、意図、範囲、期待する入力が名前に含まれます。
実行時の流れは次のようになります。エージェントがリクエストからtoolを選び、構造化された引数で呼び出し、結果から回答します。
example
Resources
resourcesは、サーバーが公開する読み取り可能なコンテキストです。エージェントがデータを必要としているものの、すべての文書やオブジェクトについてアクション指向のtoolを呼ぶべきではない場合に有用です。
例としては、次のようなものがあります。
- ファイルやディレクトリツリー
- 設計ドキュメント
- runbook
- データベースschema
- プロジェクト状態の生成されたsummary
example
Prompts
promptsは、サーバーが提供する再利用可能なpromptテンプレートです。インシデントを調査する、プロジェクトを要約する、リリースノートを準備する、特定種別のalertをtriageするなど、そのサーバーのドメインに近い依頼の型をまとめます。
Promptが特に活きるのは、そのサーバー自身のtoolsを呼ぶ複数ステップの手順を定型化する場合です。
クライアントはサーバーのprompt一覧をユーザーに提示します。呼び出すとテンプレートがエージェントへの指示に展開され、エージェントがステップに従います。
example
Elicitation
ここまでの3つの機能はサーバーからエージェントへ提供されるものですが、Elicitationは逆方向に働きます。サーバーが自力では得られない情報、たとえば不足しているパラメータ、認証情報、操作前の確認が必要になったとき、クライアントを通じてタスクの途中でユーザーに尋ねます。 クライアントはリクエストをユーザーに表示し、回答をサーバーへ返します。尋ね方は2つの形があります。サーバーが定義したフィールドを持つフォームと、認証や承認のためにブラウザで開くURLです。フォーム形式のリクエストの流れは次のようになります。example
導入方法
MCPの導入は、クライアントが何に接続するかで整理できます。形は3つあります。ローカルで起動して使う既存MCP、URLで接続するリモートMCP、そして自分で作る自作MCPです。既存MCP
チームがすでに使っているツールがMCPサーバーを提供している場合は、それを接続します。実装が不要で設定だけで済む、最も低コストな選択肢です。多くのMCPクライアントは同様の形式の設定を読みます。認証が必要なサーバーを登録する例です。client configuration
envキーで環境変数として認証情報を渡します。tokenのような秘匿値の実値を設定ファイルに書かないようにします。
既存サーバーを評価するときは、次を確認します。
- エージェントが実際に必要とする機能を公開しているか
- tool descriptionとschemaが、信頼して使える程度に具体的か
- 認証を実ユーザー、チーム、環境にscopeできるか
- サーバーの戻り値が簡潔か、それともコンテキストを過剰に埋めるか
- メンテナンス方針が自組織に合うか
リモートMCP
サーバーが別の場所でホストされている場合は、リモートMCPに接続します。SaaSベンダーが運営する公式サーバーの場合もあれば、自組織がチーム向けに運用するサーバーの場合もあります。ローカルでは何も動かさず、クライアントはURLで接続して認証します。認証は一般にOAuthまたはAPIキーです。client configuration
- 認証と認可。誰がどのtoolsを使えるかをサーバー側で制御でき、マシンごとに認証情報を配る必要がありません
- サーバーの更新。全員が同じデプロイに接続するため、サーバーを更新すれば全員に行き渡り、toolの一覧や挙動もチームで揃います
- Audit logと監視。すべてのリクエストが1箇所を通るため、ログと可観測性を集中できます
自作MCP
既存の連携が自分たちのワークフローに合わない場合や、有用な機能が内部システムの背後にある場合は、自作のMCPサーバーを作ります。公式のTypeScript SDKでは、1つのtoolと1つのpromptを公開する小さなサーバーは次のように書けます。サーバーはクライアントの子プロセスとして起動し、標準入出力で通信します。これがstdio transportです。deploy-server
{ service: "api-gateway", hours: 24 }で呼び出し、返ってきた要約から回答します。一方、promptは明示的に呼び出します。ユーザーがクライアントのprompt一覧からinvestigate_deploy_failureを選ぶと、展開されたテキストがエージェントへの指示になり、エージェントはサーバーのtoolsを順に呼ぶステップを毎回同じ流れで実行します。
クライアントはコマンド指定でサーバーを起動します。
client configuration
運用上の考慮点
MCPはエージェントにデータアクセスとコード実行の経路を渡すため、適切な運用の中心は信頼とscopeの管理です。どのサーバーを接続するのか、誰が何を使えるのか、どれだけのコンテキストが返るのか、同時にいくつの選択肢をエージェントに渡すのかを管理します。サーバーの信頼性
MCPサーバーを接続することは、エージェントのコンテキストと操作への経路をそのサーバーに渡すことです。そのため、運用上の最初の判断は「どのサーバーを信頼するか」になります。MCPの仕様は、信頼できるサーバー由来でない限り、toolのdescriptionをuntrustedとして扱うことを求めています。descriptionは指示を運びうるものであり、エージェントは何を呼ぶかの判断の一部としてそれを読んでしまうためです。これは一般的な問題の一例であり、リスクの捉え方とその防御はセキュリティで解説しています。- すでに信頼している提供元のサーバーを接続し、公式のものを優先します
- チームに展開する前に、サーバーが公開するもの(toolsとそのdescription)を確認します
- 更新後は再評価します。サーバーのtool一覧は時間とともに変わり得ます
認証と権限設計
MCPサーバーは抜け道ではなく、アプリケーション連携として扱います。認証では、ポリシーと監査に十分な粒度で、ユーザー、workspace、service account、環境を識別できるようにします。MCPの仕様はユーザーの同意を中心に置いています。ホストはtool実行前に明示的な承認を得て、どのデータを共有するかの制御をユーザーが保持します。 最小権限を基本にします。- デフォルトは読み取り専用にする
- 読み取りtoolsと書き込みtoolsを分ける
- Tokenは有用な最小範囲のシステムと操作にscopeする
- 破壊的、高コスト、外部に見える操作には確認を求める
- Debugと監査に必要なrequest metadataを記録する
コンテキスト効率
MCP連携は、コンテキストを良くも悪くもします。サーバーがタスクに必要なデータを正確に返すと助けになります。呼び出しのたびに大きなraw objectを返し、エージェントがそれを抱え続ける場合は悪化します。 小さく、判断に使える応答を設計します。- Full bodyの前にsummaryを返す
- Pagination、filter、安定した識別子を提供する
- エージェントが候補を選んだあとにdetailを取得できるようにする
- タスクに役立たないフィールドを省く
- 次のステップが機械的な場合は、proseよりstructured dataを優先する
ツール数の管理
Toolsが多いほどエージェントが有能になるわけではありません。tool定義はそれ自体がエージェントのコンテキストを消費します。さらに重複するtoolsが多すぎると、選択ミスが増え、エージェントの動きが遅くなり、権限レビューも難しくなります。 Tool setは小さく、読みやすく保ちます。- 常に一緒に使うtoolsは統合する
- Risk levelが異なるtoolsは分ける
- Actionとscopeが分かる名前を付ける
- Experimentalなtoolsはdefault sessionから隠す
- 使われなくなったtoolsは削除する
MCPは連携レイヤーです。その周辺には、明確なタスク境界、リポジトリ規約、人間による検証が必要です。委任設計はAgentic Workflowを、協働型のcoding practiceはVibe Codingを参照してください。
関連ページ
Agentic Workflow
エージェントが計画、実装、検証を担う委任モデルを、人間の責任範囲と合わせて設計します。
Skill
エージェントが必要になったときだけ読み込む、再現可能な手順と補助ファイルをまとめます。
Security
信頼できないツール応答がなぜ危険なのかと、読んだ内容に対してエージェントに何を許すかの設計を扱います。
Plugin
コマンド・エージェント・Skill・フック・MCP設定を1つの単位に束ね、チームで導入・更新できるようにします。