MCP USDA Server について
MCP USDA Server は、USDA 外国農業局の PSD データを LLM に提供するモジュール型テンプレートサーバーです。5 種類のデータツールを備え、データソースや整形処理、ガードレールを追加しやすい構成です。
主な機能
- 01PSD の地域と国の検索
- 02商品と計量単位の取得
- 03商品属性の参照
- 04結果の Markdown 整形
- 05モジュール型ツールとリクエスト振り分け
活用シーン
- 01USDA PSD の地域や国を調べる
- 02商品定義や計量単位を取得する
- 03生産・供給・流通属性を確認する
MCP 対応
JSON-RPC 2.0 を介して、ツールの一覧表示と実行を含む5種類の USDA PSD データツールを MCP クライアントに公開します。モジュール型の構成により、ツールやデータソースを追加できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP USDA サーバー
USDA Foreign Agricultural Service(FAS)の Production, Supply and Distribution(PSD)データベースから農業データを取得し、整形するためのモジュール式 MCP(Model Control Protocol)サーバーテンプレートです。
🌾 概要
このプロジェクトは、大規模言語モデル(LLM)に農業データのツールを提供する Model Control Protocol(MCP)サーバーを作成するためのテンプレートです。USDA FAS API からデータを取得して処理し、LLM が利用しやすい形式で提示する方法を示します。
このサーバーでは、次のことを簡単に行えるモジュール式アーキテクチャを採用しています。
- 新しいデータソースやツールの追加
- LLM が利用しやすい形式への複雑なデータの整形
- ハルシネーション防止のためのガードレールの作成
- 複数のサーバーからツールを集約する MCP クライアントへの接続
📐 アーキテクチャ
このプロジェクトでは、MCP(Model Control Protocol)方式を用いたクライアント・サーバーアーキテクチャを実装しています。
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ │ │ │ │ │
│ LLM │◄───►│ MCP Client │◄───►│ MCP Servers │
│ │ │ │ │ │
└─────────────┘ └─────────────┘ └─────────────┘
コアコンポーネント:
-
MCP クライアント:
- 複数の MCP サーバーからツールを集約します
- LLM がすべてのツールにアクセスするための統一インターフェースを提供します
- ツール名に基づいて、ツール呼び出しを適切なサーバーにルーティングします
-
MCP USDA サーバー:
- USDA の農業データに特化したツールを実装します
- API 呼び出し、データ処理、整形を行います
- LLM が利用しやすい形式でデータを返します
-
通信プロトコル:
- 標準化されたクライアント・サーバー間通信に JSON-RPC 2.0 を使用します
- ツール一覧、ツールのメタデータ、ツール実行リクエストに対応しています
🧰 利用可能なツール
このサーバーでは、5 つの USDA データツールを実装しています。
- usda-psd-regions:USDA FAS PSD データベースから地域データを取得します
- usda-psd-countries:地域との関連付けを含む国データを取得します
- usda-psd-commodities:農産物の定義を取得します
- usda-psd-units-of-measure:農産物の数量に用いる単位を取得します
- usda-psd-commodity-attributes:農産物の属性(生産、供給、流通)を取得します
各ツールは、USDA API からデータを取得し、ユーザーのクエリに基づいて絞り込み、LLM が利用しやすい Markdown 形式に整形するよう設計されています。
📁 プロジェクト構成
このプロジェクトでは、モジュール式アーキテクチャを採用しています。
MCP_USDA_Server/
├── src/
│ ├── tools/ # Core implementation of each tool
│ ├── handlers/ # Request handlers for each tool
│ ├── formatters/ # Format tool results for LLM consumption
│ ├── routers/ # Route requests to the appropriate handler
│ ├── utils/ # Utility functions
│ └── server.js # Main server entry point
├── Architecture.md # Detailed architecture documentation
└── package.json # Dependencies and scripts
主要ファイル:
- src/server.js:HTTP サーバーを起動し、リクエストプロセッサを初期化するメインエントリーポイント
- src/tools/registry.js:メタデータを含む、利用可能なすべてのツールの中央レジストリ
- src/routers/toolRouter.js:ツール関連のリクエストを適切なハンドラーにルーティングします
- src/tools/psd.js*:各エンドポイントの USDA PSD データ取得を実装します
- src/formatters/psd*Formatter.js:API の結果を LLM が利用しやすい Markdown 形式に整形します
- src/handlers/psd*Handler.js:各ツールへの受信リクエストを処理します
🔄 JSON-RPC 通信
このサーバーは、JSON-RPC 2.0 を使用して MCP クライアントと通信します。
例:
1. ツール一覧リクエスト:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}
2. ツール実行リクエスト:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/execute",
"params": {
"name": "usda-psd-regions",
"args": {
"query": "asia"
}
}
}
⚙️ LLM との統合
このサーバーは LLM に依存しない設計です。つまり、次のいずれかに対応するあらゆる LLM で動作します。
- 関数/ツール呼び出し:ネイティブの関数呼び出し機能を備えた LLM(例:OpenAI の GPT-4、Anthropic の Claude 3、Google の Gemini)
- 指示への対応:利用可能なツールについての構造化された指示に従える LLM
次の機能を備えた LLM で最適に動作します。
- 関数/ツール呼び出し機能
- 構造化データを解析および生成する能力
- 農業データに関する文脈理解
🚀 はじめに
前提条件:
- Node.js(v14+)
- npm または yarn
インストール:
- このリポジトリをクローンします。
git clone https://github.com/yourusername/MCP_USDA_Server.git
cd MCP_USDA_Server
- 依存関係をインストールします。
npm install
- サーバーを起動します。
npm start
デフォルトでは、サーバーはポート 3100 で起動します(.env で設定できます)。
MCP クライアントとの接続:
このサーバーは、複数のサーバーからツールを集約する MCP クライアントと連携するよう設計されています。実装の詳細については、関連リポジトリの MCP_WebAgent_Client を参照してください。
🔧 サーバーの拡張
新しいツールの追加:
src/tools/に新しいツールの実装を作成しますsrc/formatters/にフォーマッターを作成しますsrc/handlers/にハンドラーを作成しますsrc/tools/registry.jsにツールを登録しますsrc/routers/toolRouter.jsのルーターを更新します
実装例については、既存のツールを参照してください。
📝 ライセンス
このプロジェクトは MIT License のもとでライセンスされています。詳細については LICENSE ファイルを参照してください。
🙏 謝辞
- PSD API を提供してくださった USDA Foreign Agricultural Service
- モジュール型アーキテクチャの発想や例を提供してくださったオープンソースコミュニティ
LLM にドメイン固有のデータを公開する MCP サーバーを構築するためのテンプレートとして作成されました。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。