MCP(Model Context Protocol)— AIツール連携の標準規格

はじめに:AIの「手と足」を繋ぐ規格

2024年11月、Anthropicがある規格を公開した。MCP(Model Context Protocol)だ。

これはAIモデルと外部ツール(データベース、API、ファイルシステム等)を繋ぐための「共通言語」である。USBが様々なデバイスを繋ぐ標準だったように、MCPはAIとツールを繋ぐ標準になりつつある。

2026年現在、OpenAI、Google、Microsoft等もMCP対応を表明し、事実上の業界標準となった。

MCPが解決する問題

従来の問題:M×N地獄

AIアプリがM個、ツールがN個ある場合:

従来:
AIアプリごとに、ツールごとに、個別の連携を実装
→ M × N 個の統合コードが必要

例:
- ChatGPT用のGitHub連携
- Claude用のGitHub連携
- Gemini用のGitHub連携
...(ツールの数だけ実装)

MCPの解決:M+N

MCPでは:
- ツール側: MCPサーバーを1つ実装
- AIアプリ側: MCPクライアントを1つ実装

→ M + N 個の実装で済む

例:
- GitHub MCPサーバー(1つ)
- ChatGPT、Claude、Geminiがすべて接続

MCPのアーキテクチャ

3つの構成要素

[AIアプリ(MCPホスト/クライアント)]
    例: Claude Desktop、Cursor、ChatGPT
         ↓ 接続
[MCPサーバー]
    例: GitHub MCPサーバー
         ↓ アクセス
[外部リソース]
    例: GitHub API

MCPサーバーが提供する3つの能力

1. ツール(Tools)
   AIが「実行」できる機能
   例: ファイル作成、Issue作成、メール送信

2. リソース(Resources)
   AIが「読み取る」できるデータ
   例: ファイル内容、DBレコード、APIレスポンス

3. プロンプト(Prompts)
   あらかじめ定義されたプロンプトテンプレート
   例: 「コードレビュー用プロンプト」

通信プロトコル

トランスポート:
- stdio: ローカル実行(プロセス間通信)
- HTTP + SSE: リモート実行(サーバー間通信)

メッセージ形式: JSON-RPC 2.0

例(ツール実行):
クライアント → サーバー:
{
  "method": "tools/call",
  "params": {
    "name": "create_issue",
    "arguments": {
      "title": "バグ報告",
      "body": "詳細..."
    }
  }
}

サーバー → クライアント:
{
  "result": {
    "content": "Issue #42 を作成しました"
  }
}

実際のMCPサーバー例

ファイルシステム

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/username/projects"
      ]
    }
  }
}

AIができること:

  • ファイルの読み書き

  • ディレクトリ一覧

  • ファイル検索

  • ファイル移動・名前変更

GitHub

機能:
- Issue・PRの作成・検索・更新
- リポジトリ情報の取得
- コードレビューのコメント
- ブランチ操作

データベース(PostgreSQL等)

機能:
- クエリ実行(SELECT等)
- スキーマ確認
- テーブル構造の分析
→ AIに「このDBのユーザー数を調べて」と頼める

Web検索(Brave等)

機能:
- キーワード検索
- 特定URLの内容取得
→ AIがリアルタイム情報を取得できる

Slack

機能:
- メッセージ送信
- チャンネル履歴の読み取り
- スレッド返信
→ 「このチャンネルの今朝の議論をまとめて」と頼める

MCPサーバーを自作する

最小構成の例(TypeScript)

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({
  name: "weather-server",
  version: "1.0.0",
});

// ツール定義
server.tool(
  "get_weather",
  "指定都市の天気を取得",
  {
    city: z.string().describe("都市名"),
  },
  async ({ city }) => {
    const weather = await fetchWeather(city);
    return {
      content: [
        { type: "text", text: `${city}: ${weather.temp}°C, ${weather.cond}` }
      ],
    };
  }
);

// 起動
const transport = new StdioServerTransport();
await server.connect(transport);

設計のポイント

1. ツール名は明確に
   ❌ "do_something"
   ✅ "create_github_issue"

2. 説明文はAIが理解できるように
   AIはこの説明を読んでツールを選ぶ
   「何をするツールか」「いつ使うべきか」を書く

3. 引数は構造化(JSON Schema)
   型、必須/任意、説明を定義

4. エラーは丁寧に
   AIがエラーを読んで回復行动を取れるように

5. 権限は最小限に
   必要な操作のみ提供(セキュリティ)

MCPのセキュリティ

リスク理解

MCPはAIに「実行権限」を与える:

リスク例:
- ファイル削除ツール → 重要ファイルの誤削除
- DB書込ツール → データ破壊
- メール送信ツール → 誤送信
- シェル実行ツール → 任意コード実行

セキュリティベストプラクティス

1. 読み取り専用から始める
   最初はRead系ツールのみ → 安全確認後、Write系追加

2. スコープを限定
   ❌ ファイルシステム全体
   ✅ 特定プロジェクトディレクトリのみ

3. ユーザー確認を挟む
   破壊的操作はAIが実行前にユーザー承認を要求

4. 監査ログ
   どのツールがいつ呼ばれたかを記録

5. プロンプトインジェクション対策
   ツールが取得したデータに悪意ある指示が
   埋め込まれている可能性を考慮

MCPエコシステムの現状(2026年)

主要クライアント

- Claude Desktop / Claude Code
- Cursor
- ChatGPT(MCP対応)
- Gemini
- Zed エディタ
- 各種AIエージェントフレームワーク

サーバーレジストリ

- MCP公式レジストリ
- Smithery
- Glama
- PulseMCP

→ 数千のMCPサーバーが公開されている

企業での採用

- 銀行: 社内DB照会をMCPサーバー化
- SaaS企業: 自社製品のMCPサーバーを公開
- 開発チーム: CI/CD、モニタリングをMCP経由でAI操作

まとめ:MCPはAIの「USB規格」

MCPはAIとツールを繋ぐ標準規格だ。

  1. M×N問題の解決: 統合コストをM×NからM+Nへ

  2. 3つの能力: ツール(実行)、リソース(読取)、プロンプト(定型)

  3. JSON-RPC: シンプルなプロトコル

  4. 自作も簡単: SDKで数十行から作成可能

  5. セキュリティ重要: 権限は最小限、監査ログ必須

2026年、MCPはAIエージェント開発の前提知識となった。AIアプリ開発者はMCPサーバーを「作る」か「使う」か、どちらにせよMCPの理解が必須だ。

道具が繋がれば、AIのできることは飛躍的に広がる。MCPはその「繋ぎ」の標準なのである。

参考情報:

いいなと思ったら応援しよう!