MCP (Model Context Protocol) 入門 — AI エージェントに外の世界を触らせる標準

MCP (Model Context Protocol) 入門 — AI エージェントに外の世界を触らせる標準

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 でツールの仕様を宣言し、エージェントがそれを選んで引数を埋め、プラットフォームが実行する — というループです。

これで一通り動きます。でも、

実際にチームで AI エージェントを運用し始めると、「ツールの実装・配布・権限管理」のオーバーヘッドが本題より重くなります。

MCP が解きたいのはそこ

MCP は、ツール側 (MCP サーバー) と AI エージェント側 (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 サーバーとクライアントは、以下のいずれかの経路で通信します:

サーバーが提供するもの

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 ツールが使えるようになります。

実用的なサーバーに必要なもの

最小例を実用まで持っていくには、追加で次が必要です:

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 が「どれを使えばいいか」で迷い始めます。特に性能の低いモデルで顕著。

対策:

2. 認証情報の管理

MCP サーバーに環境変数で API キーを渡すのが現在の慣例ですが、~/.claude/mcp.json を間違って commit するとキーが漏れます。

対策:

3. STDIO サーバーのプロセス管理

Claude Code は MCP サーバーをサブプロセスで起動し、セッション終了時に kill します。でも、サーバー側で TCP ポートを listen していると、プロセスは死んでもポートが TIME_WAIT で残り、次の起動で EADDRINUSE に当たります。

対策:

まとめ

AI エージェントの運用を 1 人から 1 チームに拡張するタイミングで、MCP は必ず検討する価値がある標準です。「ツールを 1 回書いて、全エージェントから使える」ことの効用は、やってみるとすぐに体感できます。

関連リンク


Singularity Society はテクノロジー集団として MulmoClaude / MulmoTerminal / MulmoCast を開発しています。エンジニア・起業家向けの実践プログラム BootCamp も運営しています。

この記事をシェア

関連記事

記事一覧に戻る