MCPとは

Model Context Protocol (MCP) は、Anthropic社が開発したオープンソースの通信プロトコルです。AIアシスタント(特にClaude)が外部のデータソースやツールと安全かつ効率的に接続できるようにするための標準化された仕組みを提供します。

なぜMCPが必要なのか?

従来のAIアシスタントは、訓練時に学習した知識のみに依存していました。しかし、実世界のデータは常に更新され、組織固有の情報も存在します。MCPは、この「知識のギャップ」を埋めるために生まれました。

例えば、社内のデータベースから最新の売上データを取得したり、GitHubリポジトリの最新のコードを読み込んだり、Slackの会話履歴を参照したりすることが可能になります。

基本的な仕組み

MCPは「クライアント・サーバー」アーキテクチャを採用しています。AIアシスタント(クライアント)とMCPサーバーが JSON-RPC 2.0 という標準的な通信プロトコルを使って会話します。

💡 ポイント

JSON-RPC 2.0は、シンプルで軽量な通信プロトコルです。HTTPのようなリクエスト・レスポンス型の通信を、より効率的に行うことができます。

アーキテクチャ

graph TB subgraph client["AIクライアント"] A[Claude/Cursor/Zed] end subgraph server["MCPサーバー"] B[サーバープロセス] C[リソース] D[ツール] E[プロンプト] end subgraph external["外部システム"] F[データベース] G[APIs] H[ファイルシステム] end A -.->|"JSON-RPC 2.0"| B B --> C B --> D B --> E B -.-> F B -.-> G B -.-> H classDef clientClass fill:#3b82f6,stroke:#2563eb,color:#fff,stroke-width:2px classDef serverClass fill:#6366f1,stroke:#4f46e5,color:#fff,stroke-width:2px classDef externalClass fill:#8b5cf6,stroke:#7c3aed,color:#fff,stroke-width:2px classDef processClass fill:#10b981,stroke:#059669,color:#fff,stroke-width:2px class A clientClass class B processClass class C,D,E serverClass class F,G,H externalClass

MCPの3つの主要機能

MCPは、AIアシスタントに以下の3つの重要な機能を提供します:

1. Resources(リソース)

外部のデータを「読み取り専用」で提供する機能です。AIアシスタントは、ファイルの内容を読んだり、データベースから情報を取得したりできますが、変更を加えることはできません。

例:
プロジェクトのREADMEファイルを読む
顧客データベースから情報を検索
APIドキュメントの参照

2. Tools(ツール)

外部システムで「アクション」を実行する機能です。これにより、AIアシスタントは単なる情報提供だけでなく、実際に作業を行うことができます。

例:
GitHubにプルリクエストを作成
Slackにメッセージを送信
データベースにレコードを追加

3. Prompts(プロンプト)

AIアシスタントの振る舞いをカスタマイズするための「テンプレート」を提供する機能です。特定のコンテキストに応じて、AIの応答方法を調整できます。

例:
コードレビュー用の詳細な指示
特定のプロジェクトのコーディング規約
組織固有の用語や略語の説明

実際の通信の流れ

それでは、実際にAIアシスタントとMCPサーバーがどのようにやり取りするのか見てみましょう。

sequenceDiagram participant C as AIクライアント participant S as MCPサーバー participant E as 外部システム rect rgb(59, 130, 246, 0.1) note right of C: 初期化フェーズ C->>+S: initialize S-->>-C: capabilities end rect rgb(99, 102, 241, 0.1) note right of C: 検出フェーズ C->>+S: tools/list S-->>-C: 利用可能なツール end rect rgb(139, 92, 246, 0.1) note right of C: 実行フェーズ C->>+S: tools/call S->>+E: アクション実行 E-->>-S: 結果 S-->>-C: ツールの結果 end

実際のコード例で理解を深める

ここまでの説明を踏まえて、実際にMCPサーバーを実装する例を見てみましょう。以下は、データベースからデータを取得する簡単なMCPサーバーの例です。

// server.js
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';

const server = new Server({
  name: 'example-server',
  version: '1.0.0'
}, {
  capabilities: {
    tools: {}
  }
});

// ツールを定義
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [{
    name: 'get_data',
    description: 'データベースからデータを取得',
    inputSchema: {
      type: 'object',
      properties: {
        query: { type: 'string' }
      },
      required: ['query']
    }
  }]
}));

// ツールの実行を処理
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  if (request.params.name === 'get_data') {
    // データベースクエリを実行
    const result = await db.query(request.params.arguments.query);
    return {
      content: [{
        type: 'text',
        text: JSON.stringify(result)
      }]
    };
  }
});

// サーバーを起動
const transport = new StdioServerTransport();
await server.connect(transport);

🔍 コードの解説

  • Serverクラス:MCPサーバーの基本機能を提供
  • ListToolsRequestSchema:利用可能なツールの一覧を返す
  • CallToolRequestSchema:実際にツールを実行する
  • StdioServerTransport:標準入出力を使った通信

Claude Desktopでの設定

作成したMCPサーバーをClaude Desktopで使用するには、設定ファイルに登録する必要があります。

// ~/.claude_desktop_config.json
{
  "mcpServers": {
    "example": {
      "command": "node",
      "args": ["/path/to/server.js"]
    }
  }
}

✅ 設定のポイント

この設定により、Claude Desktopを起動すると自動的にMCPサーバーも起動し、Claudeからツールを利用できるようになります。

豊富な開発言語サポート

MCPは多くのプログラミング言語をサポートしているため、あなたが慣れ親しんだ言語で開発できます:

  • TypeScript / JavaScript
  • Python
  • Go
  • Rust
  • C#
  • Ruby
  • Java
  • Kotlin
  • Swift
  • PHP

対応クライアント

  • Claude Desktop
  • Cursor
  • Zed
  • Replit
  • Cody