MCPサーバーとは何か:ツール、リソース、プロンプトをやさしく解説
MCPサーバーは、AIアシスタントに「このシステムで何ができるか」を伝え、求められれば実行する小さなプログラムです。ツール、リソース、プロンプトの仕組みを実例で説明します。
目次
MCPサーバーとは、データベース、ファイルツリー、SaaS製品といったシステムの前に置かれる小さなプログラムで、AIアシスタントに「ここで何ができるか」を説明します。どのツールを呼べるか、どのデータを読めるか、どのプロンプトを提供できるか。アシスタントは接続して「何を持っている?」と尋ね、それ以降はあなたの許可のもと、Model Context Protocol(MCP)を使ってそのシステムをあなたの代わりに操作できます。
考え方はこれで全部です。このガイドの残りでは、サーバーが提供する3つのもの、アシスタントがそれを見つける仕組み、APIやプラグインとの違い、そして実際のツール呼び出しがどう見えるかを、私たちが自分のワークスペース向けに運用しているサーバーを例に説明します。
MCPサーバーが解決する問題
MCP以前は、アシスタントを製品につなぐには組み合わせごとに連携を書く必要がありました。タスク管理ツール向けのChatGPTプラグイン、Cursor向けの別の拡張、Claude向けのカスタム関数セット、という具合です。アシスタントごとに形式が異なり、各連携は十分に気にかける人が保守していました。
2024年11月にAnthropicが公開し、現在はオープンな仕様として管理されているMCPは、この組み合わせを一つの標準に置き換えます。製品はサーバーを一つ書く。MCPを話すアシスタント(2026年10月時点でClaude、ChatGPT、Cursor、Codex、VS Codeほか数十)はどれでもそこに接続できます。アシスタントは製品の内部の仕組みを知る必要がなく、サーバーが提供すると宣言したものだけを知っていればよい。
いちばんしっくりくる例えはUSBポートです。それ以前は機器ごとに専用のコネクタが必要でしたが、以後はどの機器もどのコンピュータにも挿せるようになりました。MCPは、AIアシスタントとそれが操作するシステムをつなぐ、そのコネクタです。
サーバーが提供する3つのもの
仕様(現行リビジョン 2025-11-25)は、サーバーが公開できるものを3種類定義しています。3つすべてを提供する必要はなく、ツールだけのサーバーも多くあります。
| ツール | リソース | プロンプト | |
|---|---|---|---|
| 何か | モデルが呼び出せる関数 | モデルが読めるデータ | 再利用できる指示のテンプレート |
| 使うと決めるのは | モデル(ユーザーの同意のもと) | アプリケーションまたはユーザー | ユーザー(通常はメニューから) |
| 例 | work_create_issue | プロジェクトの要件文書 | 「通話前にこの顧客を要約して」 |
| 発見方法 | tools/list | resources/list | prompts/list |
| 利用方法 | tools/call | resources/read | prompts/get |
| データを変更できるか | 書き込みツールなら可 | 不可 | 不可 |
ツール
ツールは、名前、説明、受け取る引数を定めるJSON Schemaを持つ関数です。モデルは説明を読み、要求に合うツールを選び、引数を埋め、アプリケーションは実行前にあなたに確認します。ツールは、アシスタントが答えるだけでなく行動できるようにするMCPの部分です。
私たちのサーバーは85のツールを公開しています。雰囲気をつかむために少しだけ挙げると、projects_listとproject_statusはプロダクトの状態を読み、work_create_issueとwork_set_issue_statusはバックログを変更し、crm_list_dealsとcrm_move_dealはパイプラインを扱い、calendar_find_timeは複数人の空き枠を探し、people_findは同僚を名前で特定します。各ツールは読み取りか書き込みかが明示され、必要な権限スコープを名乗ります。
リソース
リソースは、モデルがコンテキストとして読めるもの、つまり文書、レコード、ファイルです。ツールとの違いは「誰が選ぶか」です。ツールはモデル制御で、モデルが呼ぶと決めます。リソースはアプリケーション制御で、アプリや人が会話に添付します。チャットにファイルを落とすのと同じです。良いサーバーは、人が手で貼り付けていたはずの文書を公開します。
プロンプト
プロンプトは、よくあるタスクのためにサーバーが用意するテンプレートで、引数の穴があります。アシスタント上ではコマンドやメニュー項目として現れ、人が選ぶとサーバーが本文を埋めます。3つの中で最も使われませんが、サーバーのツールを、毎回指示を書かずに誰かが繰り返せるワークフローに変えるには最も役立ちます。
アシスタントはどうやってサーバーを見つけるか
プロトコルはJSON-RPC 2.0で、コードエディタの言語サーバーが使うのと同じ要求・応答形式です。接続は次のように進みます。
- 初期化。 クライアントは、対応するプロトコルバージョンと自分の能力を添えて
initializeを送ります。サーバーは自分のバージョンと提供内容(ツール、リソース、プロンプト、そしてそれらが変わったときにクライアントへ通知できるか)を返します。 - 一覧。 クライアントは
tools/listを、通常はresources/listとprompts/listも呼びます。サーバーは各ツールの名前、説明、入力スキーマを返します。これでモデルは何ができるかを知ります。 - 呼び出し。 モデルがツールを選ぶと、クライアントは名前と引数を添えて
tools/callを送ります。サーバーが処理を行い、結果を返します。結果はコンテンツ項目(通常はテキスト)のリストで、任意で出力スキーマに沿った構造化データも含みます。 - 通知。 誰かが新しい権限を承認したなどでサーバーのツール一覧が変わると、サーバーは通知を送り、クライアントが再び一覧を取得できます。
拒否された書き込みや不正な引数のように、モデルが知るべき形で失敗したツールは、isError: trueとメッセージを持つ通常の結果を返します。モデルはメッセージを読み、接続全体が壊れる代わりに別の手を試せます。
ここにはセキュリティ原則が織り込まれています。仕様はアプリケーションに対し、完全には信頼していないサーバーのツール説明を信頼できないものとして扱い、ツール呼び出しには人を介在させるよう求めています。ツールの説明はサーバーが書いたただのテキストであり、悪意あるサーバーなら誤解を招く説明を書けるからです。
ローカルサーバーとリモートサーバー
サーバーには2つの形があり、選ぶときも作るときもその違いが重要です。
ローカルサーバーは自分のマシン上で動きます。アシスタントがサブプロセスとして起動し、標準入出力(stdioトランスポート)で会話します。認証情報は通常、環境変数から読みます。初期のMCPサーバーの多くはこの形でした。ファイルシステムのサーバー、Gitのサーバー、自分のPostgresに向けるデータベースのサーバー。開発者には向いていますが、チームには不便です。すべてのノートPCにサーバーをインストールし、更新し、キーを渡す必要があるからです。
リモートサーバーはインターネット上の一つのHTTPSエンドポイントで動き、Streamable HTTPトランスポートを使い、多くのユーザーが共有します。URLでアシスタントに追加し、ブラウザでOAuthのサインインをすると、サーバーは各ユーザーのデータを分けて保持します。ホスト型の製品がMCPを提供するならこの形であるべきです。誰も何かをインストールしたり、設定ファイルにAPIキーを貼り付けたりしたくないからです。Atrixのサーバーがhttps://atrix.dev/api/mcpのリモート専用なのはこの理由からです。ワークスペースは共有されるので、接続は人ごとで、取り消せる必要があります。
用語集のMCPサーバーの項でトランスポートをさらに掘り下げています。短く言えば、stdioは自分のマシン用、Streamable HTTPは共有するものすべて用です。
実際のツール呼び出しを最初から最後まで
Claude Codeから私たちのサーバーに接続した誰かが「バグを登録して:請求書ページのエクスポートボタンがSafariで何も反応しない」と入力したときに起きることです。
モデルはtools/listで渡されたツール説明を読み、work_create_issueを選びます。用語集のMCPツールの項に一般的な形がありますが、具体的な呼び出しはこうなります。
{
"method": "tools/call",
"params": {
"name": "work_create_issue",
"arguments": {
"projectId": "Billing",
"title": "エクスポートボタンがSafariで反応しない(請求書ページ)",
"priority": "HIGH"
}
}
}
何かが書き込まれる前に3つのことが起きます。Claude Codeが呼び出しを表示し、人に承認を求めます。サーバーは提示されたトークンにwork.writeスコープがあるか確認します。次に、トークンの背後にいる人がそのプロジェクトでイシューを作成できるか確認します。トークンは作成者本人以上のことは決してできません。どれかの確認に失敗すると、結果はisError: trueと不足しているスコープを名指しするメッセージを伴って返り、モデルは何を追加すべきかを人に伝えます。
3つとも通れば、イシューが作成され、結果にはその識別子が含まれます。
{
"content": [{ "type": "text", "text": "BIL-142 を作成しました: エクスポートボタンがSafariで反応しない(請求書ページ)" }],
"structuredContent": { "issueId": "BIL-142", "href": "/dashboard/projects/billing?issue=BIL-142" }
}
呼び出しは監査もされます。どのツールか、結果はどうだったか、どのレコードか。内容は決して記録しません。この監査証跡こそ、チームに渡せるアシスタントと、自分にしか渡せないアシスタントの違いです。
「Billing」がIDではなく名前で渡されている点に注目してください。アシスタント向けに書かれたサーバーは、できる限り名前を受け付けるべきです。モデルはたいていIDではなく名前を持っているからです。そして名前が曖昧なときは、候補を列挙して明確に拒否すべきです。
MCPサーバー vs API vs プラグイン
製品にすでにREST APIがあるのに、なぜサーバーが必要なのかという疑問はもっともです。3つはそれぞれ別の問題を解きます。
| REST API | プラグイン・拡張 | MCPサーバー | |
|---|---|---|---|
| 対象 | コードを書く開発者 | 特定の一つのアシスタント | あらゆるMCPアシスタント |
| モデルに自己記述するか | しない。接着コードは自分で書く | する。そのアシスタントの形式で | する。一つの標準形式で |
| 発見方法 | ドキュメントを読む | ストアからインストール | 接続時のtools/list |
| 認証 | APIキー、OAuth | さまざま | リモートはOAuth 2.1、ローカルは環境変数 |
| 保守 | 1回 | アシスタントごとに1回 | 1回 |
APIはプログラムのため、プラグインは一つのアシスタントのため、MCPサーバーはAPIの上に載る薄い層で、どのモデルでも読める形に整えられています。モデルが選べるツール名と説明、埋められるスキーマ、理解できる結果。実際、私たちのサーバーはREST APIと同じ関数を呼んでいて、説明の仕方が違うだけです。
正直な限界も述べておきます。85のツールから選ぶモデルは説明をもとに選ぶので、説明が下手だと誤った呼び出しにつながります。サーバーを作る作業は、どのSDKでも処理できるプロトコルの話というより、モデルが正しいものを選べるようにツールに名前を付け、説明する作業です。
小さなチームはいつ使うべきか
MCPサーバーの恩恵を受けるのに、自分で作る必要はありません。5〜15人のチームでよくあるのは、すでに契約しているアシスタントを、すでに使っているツールにつなぐケースです。
チャット画面にコンテキストをコピーしている自分に気づいたら、サーバーの出番です。直近3件のイシュー、顧客の商談ステージ、要件ページを貼り付けている、など。接続されたアシスタントはそれらを自分で読みます。アプリを切り替えずにアシスタントからイシューを登録したり時間を押さえたりしたいときにも有効です。
見送るべきなのは、サーバーがローカル専用で全ノートPCにインストールが必要な場合や、スコープなしのAPIキーの貼り付けを求める場合です。何でもできるキーが5台のマシンの設定ファイルに置かれているのはリスクです。そして、アシスタントは結局、ツールが許すことしかしないことも忘れないでください。たとえば私たちのサーバーには、設計上、給与を読むツールがありません。
MCP機能ページには現在Atrixに接続できるアシスタントが、開発者向け概要には各アシスタントの設定手順があります。
FAQ
MCPは何の略ですか?
Model Context Protocolです。2024年11月にAnthropicが公開したオープンな仕様で、AIアプリケーションがツール、リソース、プロンプトを公開するサーバーを通じて外部システムに接続する方法を定めています。現行リビジョンは2025-11-25です。
MCPサーバーはAPIと同じものですか?
いいえ。APIは開発者向けに文書化された、プログラムのためのインターフェースです。MCPサーバーはその上の層で、標準形式で言語モデルに自己記述するため、誰もカスタムの接着コードを書かなくても、モデルがtools/listでツールを見つけtools/callで呼べます。ほとんどのサーバーは内部でAPIを呼んでいます。
MCPサーバーを使うのにコードを書く必要はありますか?
使うだけなら不要です。リモートサーバーはURLでアシスタントに追加しブラウザで認可します。ローカルサーバーは通常1コマンドでインストールできます。自分のサーバーを作るにはコードが必要ですが、公式SDK(TypeScript、Pythonほか)がプロトコルを処理します。
MCPで会社のデータにアシスタントをつなぐのは安全ですか?
サーバー次第です。自分で選ぶスコープ付きの個人ごとのサインイン、アシスタントが自分以上のことをできないよう毎回の呼び出しで解決される権限、監査ログ、アクセスの取り消し機能を確認してください。万能のキー1本をファイルに貼り付けさせるサーバーは避けましょう。
ツールとリソースの違いは何ですか?
ツールはモデルがユーザーの同意のもとで呼ぶと決める関数で、データを変更することがあります。リソースはアプリケーションやユーザーがモデルに読ませるために添付するデータで、何も変更できません。
どのアシスタントがMCPサーバーに接続できますか?
2026年10月時点で、Claude(Web、デスクトップ、Claude Code)、ChatGPT、Cursor、OpenAI Codex、GitHub Copilot搭載のVS Codeなど多数です。OAuth付きリモートサーバーへの対応はアシスタントごとに異なるので、各アシスタントのコネクタ設定を確認してください。
次のステップ
サーバーを内側から見たいなら、開発者向け概要でClaude Code、ChatGPT、CursorをAtrixのサーバーに接続する手順を、それぞれの正確なコマンドと、全ツールとスコープの一覧とともに説明しています。MCP機能ページは非技術者向けの版です。用語については、用語集にMCPサーバーとMCPツールの項があります。