MCPサーバーとWebAPI(以下API)は異なる目的を持つ技術ですが、両方とも外部サービスとの連携を実現するコンポーネントです。以下で比較していきます。
特性 | API | MCPサーバー |
---|---|---|
基本的な目的 | 特定の機能やデータへのアクセスを提供する | AIモデルと外部サービスを統合するためのプロトコル |
設計思想 | クライアント-サーバー型の直接的な通信 | AIエージェントのためのツール統合プラットフォーム |
主要な機能 | データの送受信、計算処理 | ツール管理、ワークフロー制御、リソース統合 |
柔軟性 | 固定されたエンドポイントと機能 | 動的ツール追加とカスタマイズが可能 |
通知機能 | 通常はなし | リソース変更のリアルタイム通知が可能 |
セキュリティ | 基本的な認証機能 | ツールレベルでのアクセス制御が可能 |
上記の図について補足説明します:
- 色分け:
- オレンジ系:従来のAPI方式のコンポーネント
- 青系:MCPサーバーのコンポーネント
- 矢印:
- 実線(→):直接的なリクエスト/レスポンスの流れ
- 点線(-.>):データの依存関係や管理関係
- 主要な違い:
- API方式は単純なクライアント-サーバー構造
- MCP方式はツールとリソースを通じた多層的な統合を実現
具体的な使用のコード例
APIの典型的な使用のコード例:
# シンプルなAPI呼び出し
response = requests.get('<https://api.example.com/users>')
data = response.json()
MCPサーバーの使用のコード例:
# SQLiteデータベースを操作するMCPサーバー
@app.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "get-top-products":
date = arguments.get("date")
limit = arguments.get("limit", 5)
# データベースクエリ実行
products = db.query("SELECT * FROM products ORDER BY sales DESC LIMIT ?", limit)
return [types.TextContent(type="text", text=str(products))]
実践的な活用例
APIの活用例:
- Webサービスとの連携
- データ取得・更新
- 認証・認可処理
MCPサーバーの活用例:
- GitHubリポジトリの分析と自動化
- データベース操作の統合
- ファイルシステムとの連携
- AIエージェントによるワークフロー自動化