PythonやTypeScriptでMCPサーバーを作ろう:開発ツールの選び方と比較ポイント
はじめに
AI開発の現場では、大規模言語モデル(LLM)を外部システムと連携させる場面が増えています。しかし、それぞれのシステムごとに個別の連携方法を実装するのは大変です。そこで登場したのが、2024年11月にAnthropicが発表したModel Context Protocol(MCP)です。MCPはAIアプリケーションと外部システムを標準化された方法で接続するオープンソースプロトコルで、「AIのためのUSB-Cポート」とも呼ばれています。
MCPサーバーを開発する際、どの開発ツールやフレームワークを選ぶかは非常に重要な判断です。FastMCPのような高レベルフレームワークから公式SDKまで、さまざまな選択肢があり、それぞれに特徴があります。本記事では、Python・TypeScript環境でMCPサーバーを構築する際の主要な開発ツールを比較し、自分のプロジェクトに最適な選択肢を見つけるためのポイントを解説します。
MCPの基礎知識
MCPプロトコルとは
MCPは、AIアプリケーションが外部データソースやツールに接続するためのオープン標準です。従来、各AIシステムと外部サービスを連携させるには、それぞれ個別のカスタム実装が必要でしたが、MCPはこの課題を解決します。
MCPサーバーには3つの主要な機能があります。まず「Resources」は、データベースやファイルシステムなど、外部の情報源からデータを読み取る機能です。次に「Tools」は、LLMが実際にアクションを実行できるようにする機能で、APIの呼び出しやデータの更新などを行います。最後に「Prompts」は、LLMとの対話パターンを定義する再利用可能なテンプレートです。
なぜツール選びが重要か
MCPサーバーを開発する際、ツール選択は開発効率と保守性に大きく影響します。高レベルフレームワークを使えば、少ないコードで素早く動くものが作れます。一方、公式SDKを直接使用すれば、プロトコルの細かい部分まで制御できます。
プロジェクトの規模、チームのスキルセット、既存システムとの統合要件などを考慮して、適切なツールを選ぶ必要があります。また、プロトタイプ段階と本番環境では、求められる特性が異なる場合もあるでしょう。
開発ツールのカテゴリ
MCPサーバー開発ツールは、大きく3つのカテゴリに分類できます。
高レベルフレームワーク
FastMCPに代表される高レベルフレームワークは、開発者の生産性を最優先に設計されています。デコレータベースのシンプルなAPIにより、プロトコルの複雑な詳細を意識せずにサーバーを構築できます。
公式SDK
Anthropicとコミュニティが提供する公式SDKには、Python、TypeScript、C#、PHP、Kotlinなどがあります。これらはMCPプロトコルの完全な実装を提供し、標準に準拠したサーバーとクライアントの構築を可能にします。
既存フレームワーク連携型
FastAPI-MCPのように、既存のWebフレームワークと統合するタイプのツールもあります。すでに稼働中のAPIがある場合、そのコードベースを活用しながらMCP対応を追加できます。
主要開発ツールの詳細比較
FastMCP(Python)
FastMCPは、開発体験(DX)を最優先に設計された、コミュニティ主導の高レベルフレームワークです。
以前のバージョン(v1系)の設計思想の一部は公式SDKにも取り入れられましたが、現在のFastMCP(v2系)は、公式SDKの上にさらに高度な機能(認証、デプロイ支援など)を積み上げた、独立したライブラリとして進化しています。公式SDKが『プロトコルの厳密な実装』であるのに対し、FastMCPは『実用的なアプリケーションを最短で作るためのツール』という立ち位置のため、将来的なメンテナンスまで見据える場合は公式SDKを使用することを推奨します。
FastMCPの最大の特徴は、デコレータを使った直感的な記述方法です。Pythonの関数に@mcp.toolデコレータを付けるだけで、その関数がMCPツールとして公開されます。型ヒントやDocstringから自動的にスキーマを生成してくれるため、プロトコルの詳細を気にする必要がありません。
バージョン2.0では、エンタープライズ認証(Google、GitHub、Azure、Auth0など)、デプロイツール、テストユーティリティ、クライアントライブラリなど、本番環境に必要な機能が充実しています。
簡単な例を見てみましょう。
from fastmcp import FastMCP
mcp = FastMCP("計算サーバー")
@mcp.tool
def add(a: int, b: int) -> int:
"""2つの数値を加算します"""
return a + b
if __name__ == "__main__":
mcp.run()
このコードだけで、動作するMCPサーバーが完成します。FastMCPは、プロトタイプから本番環境まで幅広く対応できる選択肢です。
公式Python SDK
公式Python SDKは、MCPプロトコルの完全な実装を提供します。FastMCPもこのSDKの一部として統合されています。
公式SDKを直接使用する利点は、プロトコルレベルの細かい制御が可能な点です。認証フロー、エラーハンドリング、通信方式(Stdio、SSE、Streamable HTTP)など、すべての側面をカスタマイズできます。
FastMCPで手が届かない特殊なユースケースや、ライブラリの依存関係を最小限に抑えたい場合に適しています。ただし、記述量はFastMCPと比べて増える傾向があります。
公式TypeScript SDK
TypeScript SDKは、Node.js環境でMCPサーバーとクライアントを構築するための公式実装です。JavaScript/TypeScriptエコシステムでは、このSDKがデファクトスタンダードとなっています。
TypeScript SDKは、型安全性を重視した設計になっており、開発時にエラーを早期に発見できます。Node.jsでの本番運用を考えている場合、現時点ではこのSDKを直接使用するのが最も堅実な選択です。
エコシステムの成熟度も高く、コミュニティからのサポートやサンプルコードも充実しています。
FastAPI-MCP
FastAPI-MCPは、既存のFastAPIアプリケーションをMCPサーバーとしても公開できるツールです。
すでにFastAPIでWeb APIを構築している場合、設定をほとんど追加することなく、そのエンドポイントをAIエージェントにも公開できます。既存のAPI資産を活用しながらMCP対応を進められるのが最大の利点です。
新規プロジェクトであればFastMCPの方が適していますが、既存システムの拡張という観点では非常に有力な選択肢になります。
その他の選択肢
高性能が求められる場合、Go言語やJavaでの実装も選択肢に入ります。
Go言語の実装(mcp-go)は、シングルバイナリで配布でき、Dockerコンテナを使わずに高速に動作します。Javaエコシステム向けには、Quarkus MCPがエンタープライズシステムとの統合に強みを持ちます。
これらは特定の要件がある場合の選択肢であり、一般的なユースケースではPythonやTypeScriptの方が開発効率が高いでしょう。
ツール選択のポイント
プロジェクト規模による選択
小規模なプロトタイプや個人開発では、FastMCPのような高レベルフレームワークが最適です。少ないコードで素早く動くものを作れ、イテレーションのスピードが上がります。
中規模から大規模なプロジェクトでは、公式SDKの使用を検討しましょう。初期の学習コストは高くなりますが、長期的な保守性やカスタマイズ性の面で優れています。
開発スピード vs 細かい制御
FastMCPは開発スピードを最優先する場合に適しています。デコレータベースのAPIにより、ボイラープレートコードを最小限に抑えられます。
一方、認証フローのカスタマイズや特殊な通信方式の実装など、細かい制御が必要な場合は公式SDKを直接使用する方が確実です。
注意点:抽象化のトレードオフ FastMCPは非常に便利ですが、通信の詳細やエラーハンドリングの一部が隠蔽(ブラックボックス化)されます。 トラブルシューティング時に内部の挙動を詳細に追う必要があるシステムや、長期的に外部ライブラリへの依存を減らしたいプロジェクトでは、初期コストを払ってでも公式SDKを採用する価値があります。
既存システムとの統合要件
すでに稼働中のWeb APIがある場合、FastAPI-MCPを使えば既存のコードを大きく変更することなくMCP対応を追加できます。
LangChainやLlamaIndexなどのLLMフレームワークをすでに使用している場合は、それらのMCPアダプターを活用するのも良い選択です。
ツール比較表
主要なMCPサーバー開発ツールの特徴を比較表にまとめました。
| ツール名 | 言語 | 学習コスト | 開発速度 | カスタマイズ性 | 本番環境適性 | コミュニティ |
|---|---|---|---|---|---|---|
| FastMCP | Python | 低 | 非常に速い | 中 | 高(v2.0) | 活発 |
| 公式Python SDK | Python | 中 | 中 | 非常に高い | 高 | 公式サポート |
| 公式TypeScript SDK | TypeScript | 中 | 中 | 非常に高い | 高 | 公式サポート、最も成熟 |
| FastAPI-MCP | Python | 低(FastAPI経験者) | 速い | 中 | 高 | 成長中 |
| mcp-go | Go | 中〜高 | 速い | 高 | 非常に高い(パフォーマンス) | 成長中 |
| Quarkus MCP | Java | 高 | 中 | 高 | 高(エンタープライズ) | ニッチ |
学習コスト: 開発者がツールを使いこなせるようになるまでの時間
開発速度: 最初の動作するプロトタイプを作成するまでの速さ
カスタマイズ性: プロトコルの詳細な制御や特殊な要件への対応力
本番環境適性: スケーラビリティ、セキュリティ、保守性など本番運用に必要な機能
コミュニティ: ドキュメント、サンプルコード、サポートの充実度
各ツールには明確な強みがあります。FastMCPは初学者にも優しく、素早くプロトタイプを作れます。公式SDKは長期的なプロジェクトに適しており、細かい制御が可能です。TypeScript SDKはNode.js環境での標準的選択肢として最も成熟しています。
状況別の推奨選択肢をまとめると、個人開発やプロトタイプではFastMCPが最適です。既存のFastAPIアプリケーションがある場合はFastAPI-MCPを検討しましょう。本番環境で細かい制御が必要な場合は公式SDK、Node.js環境ではTypeScript SDKが適しています。パフォーマンスが最重要であればmcp-goやQuarkus MCPも選択肢になります。
まとめ
MCPサーバー開発において、適切なツールを選ぶことは成功への第一歩です。本記事では、FastMCPから公式SDK、既存フレームワーク連携型まで、さまざまな開発ツールを比較してきました。
FastMCPは、Pythonの開発体験を重視し、デコレータベースの直感的なAPIで素早くサーバーを構築できます。公式Python・TypeScript SDKは、プロトコルの完全な実装を提供し、細かい制御が可能です。FastAPI-MCPは既存のAPIを活用でき、Go・Java実装は特殊な性能要件に対応します。
MCPは2024年11月の発表以来、OpenAIやGoogle DeepMindなど主要なAIプロバイダーに採用され、急速に成長しています。エコシステムの拡大とともに、開発ツールもさらに進化していくことが予想されます。まずは自分のユースケースに合ったツールで小さく始めて、必要に応じて他のツールに移行していくアプローチも有効です。
この記事がどなたかのお役に立てれば幸いです。