MCPサーバーフレームワーク比較

クイック選択ガイド

このガイドは、主な特長に基づいてフレームワークを素早く選択するのに役立ちます:

機能比較

さまざまな機能で各フレームワークを比較してみましょう。

機能@modelcontextprotocol/sdkCloudflare agentsfastmcpmcp-framework
主な目的コアMCP実装ステートフルなエッジAIエージェントセッション機能付きMCPサーバー開発者体験重視のMCPフレームワーク
MCP準拠公式標準高(エージェント重視)高(公式SDK使用)
アーキテクチャ低レベルプリミティブアクターモデル(Workers)セッション中心規約よりも設定
トランスポートstdio, HTTP (SSE)HTTP (SSE), WebSocketsSSE, stdiostdio, SSE, HTTP Stream
状態管理手動組み込み(Durable Objects)セッションベース手動/リクエストごと
認証手動Cloudflare Access/OAuth経由組み込み組み込み(SSE)
開発者体験(DX)基本的高(Cloudflare統合)高(特定機能)高(CLI、規約)
CLIツールなしwranglerテストユーティリティあり(mcp
デプロイメントローカル/任意サーバーCloudflare Workersローカル/任意サーバーローカル/任意サーバー

デプロイメントモデル: ローカル vs リモート

MCPサーバーをローカルまたはリモートで実行する際のトレードオフを理解しましょう。

ローカルMCPサーバー

ユーザーのマシン上で直接実行され、通常はstdioを介して通信します。

主な通信方法: stdio (標準入出力) 最適なフレームワーク: @modelcontextprotocol/sdk, fastmcp, mcp-framework

フレームワーク詳細

各フレームワークの基本理念、機能、典型的なユースケース、コード例を探ります。

概要と哲学

各フレームワークの背後にある主な目的と設計原則を理解します。

  • 目的: MCP仕様の公式TypeScript実装を提供すること。
  • 哲学: 最大限の制御と厳格な仕様準拠のための低レベルプリミティブ(Server, Resource, Tool, Prompt)を提供。MCPコア以上の構造を強制しません。
  • 性質: フルフレームワークではなく、ライブラリ/SDK。mcp-frameworkのような他のフレームワークの基盤を形成します。

主要機能

各フレームワークの際立った機能をハイライトします。

  • 仕様準拠: MCP仕様の完全かつ公式な実装。
  • コアプリミティブ: 基本的なクラス/インターフェース(Server, Resource, Tool, Prompt)をエクスポート。
  • トランスポートの柔軟性: stdioHTTP/SSEをサポート。
  • 拡張性: 他のフレームワークの基盤または直接使用のために設計。
  • ミニマリスト: 組み込みのセッション管理、自動検出、高度な機能なし。手動実装が必要。

コード例

各フレームワークでシンプルな「add」ツールを定義する例示的なサンプル。

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

const AddToolSchema = {
  name: "add",
  description: "Add two numbers together",
  parameters: z.object({
    a: z.number(),
    b: z.number(),
  }),
};

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

server.setToolHandler(AddToolSchema, async (params) => {
  const { a, b } = params;
  const sum = a + b;
  return {
    content: [{ type: "text", text: String(sum) }]
  };
});

const transport = new StdioServerTransport();
await server.connect(transport);
console.log("SDK Server connected via stdio");

最適な用途

各フレームワークを選択するための理想的なシナリオをまとめます。

最適な用途:

  • 本番実装: 安定性と公式サポートが重要な場合。
  • 厳格な準拠: MCP仕様への正確な準拠が必要なプロジェクト。
  • フレームワーク構築: 高レベルMCPフレームワークを作成するための基盤として。
  • 最大限の制御: サーバー動作に対する詳細な制御が必要な場合。
  • MCPの学習: コアプロトコルのメカニズムを理解するため。

フレームワーク選択のための重要な質問

フレームワークを選択する際に考慮すべき要素:

参考リソース

各フレームワークの公式ドキュメントとリポジトリ。