Claude や Cursor を使い込んでいくと、必ずぶつかる壁があります。「このデータベースから引っ張ってきて」「このチケットの状態を確認して」「この社内 API を叩いて」といった、外の世界への接続です。
Function calling でも対応できますが、ツールごとにプロンプトやスキーマを書き直し、エージェントごとに別の実装を書く必要があります。新しいツールを足すたびに全エージェントを更新する — というコストが積み上がります。
MCP (Model Context Protocol) は、この層を標準化するために Anthropic が 2024 年 11 月に発表したプロトコルです。「AI エージェントが外部のツール・データ・プロンプトを使うときの共通言語」と考えると分かりやすい。
本稿では MCP とは何か・なぜ必要か・どう動くか・どう自作するか を、Claude Code や MulmoTerminal との連携まで含めて 1 ページで整理します。
課題:AI エージェントに外の世界を触らせるのが毎回ゼロから
Function calling は便利だが、横展開しない
GPT や Claude の function calling / tool use は、エージェントに外部処理を呼ばせる仕組みとして広く使われています。JSON Schema でツールの仕様を宣言し、エージェントがそれを選んで引数を埋め、プラットフォームが実行する — というループです。
これで一通り動きます。でも、
- 同じツール(例:GitHub からの issue 取得)を、Claude 用・Codex 用・自作 CLI 用 — 3 回実装することになる
- プロンプト定義、スキーマ定義、エラーハンドリング、認証 — すべてが各エージェント・各フレームワークに紐づいて散らばる
- 新しいツール(例:社内 Datadog)を追加したいとき、全エージェントに手を入れる
実際にチームで AI エージェントを運用し始めると、「ツールの実装・配布・権限管理」のオーバーヘッドが本題より重くなります。
MCP が解きたいのはそこ
MCP は、ツール側 (MCP サーバー) と AI エージェント側 (MCP クライアント) を分離します。
- ツールの作者: MCP サーバーを 1 つ書けば、Claude / Cursor / Windsurf / Zed / その他対応エージェントすべてから使える
- エージェントの作者: MCP クライアント実装を 1 つ持てば、世の中の MCP サーバーすべてを取り込める
USB-C がデバイスとホストの関係を標準化したように、MCP が AI エージェントと外部処理の関係を標準化する — というのが Anthropic の主張です(公式ドキュメントでも USB-C の比喩が使われます)。
MCP の仕組み — 3 概念と 1 プロトコル
MCP は、JSON-RPC 2.0 の上に乗った軽量なプロトコルです。クライアント(AI エージェント側)とサーバー(ツール側)の間でメッセージが往復します。
3 つの主要な概念
| 概念 | 役割 |
|---|---|
| Tools | エージェントが呼び出す関数。副作用あり。例: send_message, create_issue |
| Resources | エージェントが読み取るデータ。副作用なし。例: ファイル、API のレスポンス |
| Prompts | 事前に用意されたテンプレート。ユーザーが選んで実行する再利用可能プロンプト |
Function calling と比較すると、Tools はおおむね対応します。追加されたのが Resources (読み取り専用データの標準化) と Prompts (再利用プロンプトの共有) です。
伝送 (Transport)
MCP サーバーとクライアントは、以下のいずれかの経路で通信します:
- STDIO: サーバーをサブプロセスとして起動し、標準入出力で JSON-RPC メッセージをやり取り。ローカル実行の定番
- SSE (Server-Sent Events): HTTP の長期接続。リモートサーバーが使う
- Streamable HTTP (2025 年追加): 普通の HTTP リクエストを基本に、必要に応じて SSE に昇格。HTTP ベースの定番に
サーバーが提供するもの
MCP サーバーは起動すると、クライアントに対して「私はこういう Tools を提供する、こういう Resources を公開する、こういう Prompts を持っている」と宣言します。クライアント(Claude 等)はその一覧を見て、必要なものを LLM の文脈に含めたり、ユーザーに提示したりします。
既にある MCP サーバー 10 選
MCP が普及した大きな理由は、最初から使える既製サーバーが豊富だったことです。公式リポジトリ と周辺コミュニティで、2026 年時点では数百のサーバーが公開されています。よく使われるものを 10 本:
| サーバー | 用途 |
|---|---|
filesystem |
指定ディレクトリ配下のファイル読み書き |
git |
git リポジトリの操作 |
github |
PR、issue、ワークフロー実行 |
postgres / sqlite |
SQL 実行 |
brave-search / tavily |
Web 検索 |
playwright / puppeteer |
ブラウザ操作 |
slack |
メッセージ送信・読み取り |
gmail / google-calendar |
メール・カレンダー |
linear / jira |
タスク管理 |
memory / qdrant |
長期記憶・ベクトル検索 |
Claude Code のユーザーはすでにこれを使っている可能性があります。~/.config/claude/claude_desktop_config.json や ~/.claude/mcp.json に書き込むだけで、ターミナルの Claude が GitHub や Postgres を直接触れます。
自分で MCP サーバーを書いてみる — 最小例
公式 SDK は TypeScript / Python / Rust / Kotlin / C# など複数言語で提供されています。TypeScript 版が機能的には最先端です。
最小構成
// server.ts
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
const server = new Server(
{ name: "hello-mcp", version: "0.1.0" },
{ capabilities: { tools: {} } }
);
server.setRequestHandler(ListToolsRequestSchema, async () => ({
tools: [
{
name: "greet",
description: "Greet a person by name",
inputSchema: {
type: "object",
properties: { name: { type: "string" } },
required: ["name"],
},
},
],
}));
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "greet") {
const name = request.params.arguments?.name ?? "world";
return { content: [{ type: "text", text: `Hello, ${name}!` }] };
}
throw new Error(`Unknown tool: ${request.params.name}`);
});
const transport = new StdioServerTransport();
await server.connect(transport);
これを node server.js で起動できる状態にして、Claude Code の設定に:
// ~/.claude/mcp.json
{
"mcpServers": {
"hello": {
"command": "node",
"args": ["/path/to/server.js"]
}
}
}
を書けば、Claude のセッションで greet ツールが使えるようになります。
実用的なサーバーに必要なもの
最小例を実用まで持っていくには、追加で次が必要です:
- 認証: サーバーが外部 API を叩くときの認証情報。環境変数で渡すのが現在の慣例
- エラーハンドリング: ツール呼び出しの失敗を LLM に理解できる形で返す
- ログ:
console.errorに書けば Claude 側のログに流れる(stdoutは MCP メッセージ専用なので使ってはいけない) - 型定義:
inputSchemaを厳格に書くと、LLM が引数を間違えにくくなる - 権限の最小化: ファイルパスやリポジトリ URL をハードコードせず、クライアントが指定した範囲で動くようにする
Claude Code / MulmoTerminal との統合
Claude Code
Claude Code は MCP のリファレンス実装の一つで、~/.claude/mcp.json に書いたサーバーをセッション開始時にすべて起動し、ツール一覧をコンテキストに含めます。
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "ghp_..." }
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://..."]
}
}
}
Claude のプロンプトから mcp__github__create_issue のようなツール名で呼び出せます。
MulmoTerminal
MulmoTerminal は Claude Code をブラウザから並列実行するコックピットです。Claude Code の MCP 設定をそのまま継承するので、追加設定なしに各セルで同じ MCP サーバーが使えます。
9 セル並列で全部が GitHub MCP を使うこともできます。ただ、GitHub の API レート制限に当たりやすくなります。サーバー側に書き込みが行くタイプのツール(issue 作成、PR マージなど)は人間の承認を挟む運用がおすすめです。MulmoTerminal の 琥珀色(あなた待ち)セルは、まさにそのための仕組みです。
Cursor / Windsurf / Zed
これらのエディタも 2025 年前半に MCP 対応を追加しました。設定の場所と書式はエディタごとに違いますが、サーバー側は同じものを使い回せます。
MCP の落とし穴
実際に使い始めるとぶつかる 3 つの罠:
1. ツールが多すぎると LLM が選べなくなる
30 以上のツールを一度にコンテキストに入れると、LLM が「どれを使えばいいか」で迷い始めます。特に性能の低いモデルで顕著。
対策:
- プロジェクトごとに必要な MCP サーバーだけを有効化
- Resources で代替できるものは Resources にする(Tools は副作用、Resources は読み取りで、LLM の負荷が違う)
- プロンプトで誘導:
GitHub の操作は mcp__github__ のツールを使ってと明示
2. 認証情報の管理
MCP サーバーに環境変数で API キーを渡すのが現在の慣例ですが、~/.claude/mcp.json を間違って commit するとキーが漏れます。
対策:
mcp.jsonは gitignore しておく- 代わりに
mcp.json.exampleを repo に置く - OS のキーチェーン連携や、1Password CLI (
op run) との統合も使われ始めている
3. STDIO サーバーのプロセス管理
Claude Code は MCP サーバーをサブプロセスで起動し、セッション終了時に kill します。でも、サーバー側で TCP ポートを listen していると、プロセスは死んでもポートが TIME_WAIT で残り、次の起動で EADDRINUSE に当たります。
対策:
- STDIO サーバーは標準入出力だけ使う。追加のポートを開かない
- どうしても必要なら、ポートを
0指定で OS に選ばせる
まとめ
- MCP は、AI エージェントと外部ツール・データの間を標準化するプロトコル
- Function calling の「ツールごとに全エージェントに実装する」問題を、サーバー / クライアント分離で解く
- Tools / Resources / Prompts の 3 概念と、STDIO / SSE / HTTP の 3 伝送
- 既製の MCP サーバーが数百あり、
filesystem/github/postgresなどすぐ使える - 自作も最小 30 行で動く。TypeScript / Python / Rust / Kotlin SDK が揃っている
- Claude Code / MulmoTerminal / Cursor / Windsurf などから横断的に利用できる
AI エージェントの運用を 1 人から 1 チームに拡張するタイミングで、MCP は必ず検討する価値がある標準です。「ツールを 1 回書いて、全エージェントから使える」ことの効用は、やってみるとすぐに体感できます。
関連リンク
- MCP 公式サイト
- MCP サーバー公式リポジトリ
- MulmoTerminal — Claude Code / Codex を並列実行するコックピット
- MulmoClaude — 自分だけの AI アシスタントを育てる
- Cursor の代替としての MulmoTerminal
Singularity Society はテクノロジー集団として MulmoClaude / MulmoTerminal / MulmoCast を開発しています。エンジニア・起業家向けの実践プログラム BootCamp も運営しています。

