toyMCP To-Do List Server について
toyMCP To-Do List Serverは、JSON-RPC 2.0 over HTTPを使うTo-Doサービスです。PostgreSQLによるデータ保存と自然言語エージェントフレームワークを備え、To-Do APIやMCPの概念を学ぶ用途に向いています。
主な機能
- 01To-Doの作成・一覧・削除API
- 02JSON-RPC 2.0 over HTTP
- 03PostgreSQLによるデータ保存
- 04JWT認証
- 05自然言語To-Doエージェントフレームワーク
活用シーン
- 01APIを通じたTo-Do管理
- 02JSON-RPC To-Doサービスのテスト
- 03自然言語によるTo-Doリスト操作
MCP 対応
JSON-RPCエンドポイントを通じて、To-Doの一覧・追加・削除メソッドと、サービス検出用メソッドを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
toyMCP To-Do List サーバー
これは、特に HTTP 上の JSON-RPC 2.0 を使用し、Model Context Protocol(MCP)の概念に基づいて To-Do リストの CRUD API を実装する、シンプルなサンプルサーバーです。
永続化には、Node.js、Express、PostgreSQL(Docker 経由)を使用します。
コンポーネント
このプロジェクトは、主に次の 2 つのコンポーネントで構成されています。
- MCP サーバー:To-Do アイテムを管理する JSON-RPC ベースの API サーバー
- エージェントフレームワーク:AI モデルを使用して MCP サーバーを自然言語で操作するインターフェース
セットアップ
-
前提条件:
- Node.js(LTS バージョンを推奨)
- npm(通常は Node.js に付属しています)
- Docker と Docker Compose
-
リポジトリをクローンします(該当する場合):
# git clone ... # cd toyMCP -
依存関係をインストールします:
npm install -
PostgreSQL データベースを起動します: Docker Desktop(または Docker デーモン)が実行中であることを確認してください。
docker compose up -d dbこれにより、
toymcp_dbという名前の PostgreSQL コンテナがバックグラウンドで起動し、データ用の永続ボリュームが作成されます。 -
サーバーを実行します:
npm startサーバーは必要に応じてデータベーススキーマを初期化し、
http://localhost:3000(またはPORT環境変数で指定したポート)でリクエストの待ち受けを開始します。 JSON-RPC エンドポイントはhttp://localhost:3000/rpcです。 Swagger API ドキュメント UI はhttp://localhost:3000/api-docsで利用できます。
サーバーをクリーンな状態で起動する
サーバーを完全に新しいデータベースで起動したい場合(たとえば、手動のエンドツーエンドテストを実行する前や、状態をリセットする場合)は、clean_start.sh スクリプトを使用できます。
- 実行中のサーバーを停止します(実行中の場合)。サーバーを起動したターミナルで
Ctrl+Cを押してください。 - スクリプトに実行権限があることを確認します:
chmod +x clean_start.sh - スクリプトを実行します:
このスクリプトは、データベースコンテナを停止して削除し(./clean_start.shdocker compose down)、再起動して(docker compose up -d db)、Node.js サーバーを起動します(npm start)。
テストの実行
PostgreSQL コンテナが実行中であることを確認してください(docker compose up -d db)。
テストは tests/unit_tests と tests/integration_tests に分かれています。次のコマンドを実行すると、すべてのテストが実行されます。
npm test
カバレッジレポートの生成
npm run coverage
このコマンドを実行すると、ターミナルに概要が出力され、ユニットテストと統合テストの両方のカバレッジを反映した詳細な HTML レポートが coverage/lcov-report/ ディレクトリに生成されます。
エンドツーエンドテストスクリプトの実行
このプロジェクトには、稼働中のサーバーに対して curl を使用し、データベースの事前クリーンアップや概要レポートの出力を含む一連のテストを実行するオーケストレータースクリプト(run_full_test.sh)が含まれています。手動でエンドツーエンドチェックを行う場合は、この方法を推奨します。
前提条件: curl、jq
chmod +x run_full_test.sh test_server.sh # Ensure scripts are executable
./run_full_test.sh
API ドキュメント
インタラクティブな API ドキュメントは、ローカル(サーバー実行中)と GitHub Pages で公開されているページの両方から、Swagger UI を通じて利用できます。
- ローカルの Swagger UI:
http://localhost:3000/api-docs - GitHub Pages の Swagger UI:
https://izaqyos.github.io/toyMCP/swagger-ui/
ドキュメントは、swagger-jsdoc を使用して src/swagger_definitions.js の JSDoc コメントから自動生成されます。
API の使用方法
認証
ほとんどの API エンドポイントでは、JSON Web Token(JWT)による認証が必要です。
- ログイン: まず、ユーザー名とパスワードを JSON ボディに含めて、
/auth/loginに POST リクエストを送信します。
成功時のレスポンス:curl -X POST -H "Content-Type: application/json" \ -d '{"username": "testuser", "password": "password123"}' \ http://localhost:3000/auth/login{ "message": "Login successful", "user": { "id": 1, "username": "testuser" }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } - トークンの使用: 受け取った
tokenの値をコピーします。保護されたエンドポイント(/rpcなど)への以降のリクエストでは、Authorization ヘッダーにベアラートークンとして含めます。TOKEN="YOUR_JWT_TOKEN_HERE" # Replace with the actual token curl -X POST -H "Content-Type: application/json" \ -H "Authorization: Bearer $TOKEN" \ -d '{"jsonrpc": "2.0", "method": "mcp.discover", "id": 1}' \ http://localhost:3000/rpc
JSON-RPC エンドポイント(/rpc)
Content-Type: application/json と Authorization: Bearer <token> ヘッダーを指定し、JSON-RPC 2.0 ペイロードを本文に含めて、http://localhost:3000/rpc に POST リクエストを送信します。
利用可能なメソッド:
todo.list:すべての To-Do アイテムを一覧表示します。todo.add:新しい To-Do アイテムを追加します(params: { "text": "..." })。todo.remove:To-Do アイテムを削除します(params: { "id": ... })。mcp.discover:サービスと利用可能なメソッドについて説明します。
ツールの例: curl(/auth/login で取得した有効な $TOKEN があることを前提とします)
-
サービスを検出する(
mcp.discover)curl -X POST -H "Content-Type: application/json" \ -H "Authorization: Bearer $TOKEN" \ -d '{"jsonrpc": "2.0", "method": "mcp.discover", "id": 1}' \ http://localhost:3000/rpc成功レスポンス(例):
{ "jsonrpc": "2.0", "result": { "mcp_version": "1.0.0", "name": "ToyMCP Todo Service", "description": "A simple To-Do list manager implementing MCP concepts.", "methods": [ {"name": "todo.list", ...}, {"name": "todo.add", ...}, {"name": "todo.remove", ...}, {"name": "mcp.discover", ...} ] }, "id": 1 } -
アイテムを追加する(
todo.add)curl -X POST -H "Content-Type: application/json" \ -H "Authorization: Bearer $TOKEN" \ -d '{"jsonrpc": "2.0", "method": "todo.add", "params": {"text": "Buy groceries"}, "id": 1}' \ http://localhost:3000/rpc成功レスポンス:
{ "jsonrpc": "2.0", "result": { "id": 1, "text": "Buy groceries", "created_at": "2025-04-07T16:15:00.123Z" }, "id": 1 } -
アイテムを一覧表示する(
todo.list)curl -X POST -H "Content-Type: application/json" \ -H "Authorization: Bearer $TOKEN" \ -d '{"jsonrpc": "2.0", "method": "todo.list", "id": 2}' \ http://localhost:3000/rpc成功レスポンス(例):
{ "jsonrpc": "2.0", "result": [ { "id": 1, "text": "Buy groceries", "created_at": "2025-04-07T16:15:00.123Z" } // ... other items ], "id": 2 } -
アイテムを削除する(
todo.remove) (ID 1 のアイテムが存在することを前提とします)curl -X POST -H "Content-Type: application/json" \ -H "Authorization: Bearer $TOKEN" \ -d '{"jsonrpc": "2.0", "method": "todo.remove", "params": {"id": 1}, "id": 3}' \ http://localhost:3000/rpc成功レスポンス:
{ "jsonrpc": "2.0", "result": { "id": 1, "text": "Buy groceries", "created_at": "2025-04-07T16:15:00.123Z" }, "id": 3 } -
エラーレスポンスの例(アイテムが見つからない場合)
curl -X POST -H "Content-Type: application/json" \ -H "Authorization: Bearer $TOKEN" \ -d '{"jsonrpc": "2.0", "method": "todo.remove", "params": {"id": 999}, "id": 4}' \ http://localhost:3000/rpcレスポンス:
{ "jsonrpc": "2.0", "error": { "code": 1001, "message": "Todo item with ID 999 not found" }, "id": 4 }
エージェントフレームワーク
このリポジトリには、MCP サーバーに自然言語インターフェースを提供する、AI 搭載のエージェントフレームワークが含まれています。エージェントは、ローカルの Ollama モデルまたは OpenAI のクラウドベースのモデルを使用してユーザーの指示を解釈し、To-Do リストに対して適切な操作を実行します。
アーキテクチャ
┌───────────────┐ ┌────────────────┐ ┌───────────────┐
│ LLM Provider │◄───┤ Agent Framework├───►│ toyMCP API │
│ (Ollama/Cloud)│ │ │ │ (Todo Server)│
└───────────────┘ └────────────────┘ └───────────────┘
セットアップと使用方法
エージェントフレームワークは agent-framework/ ディレクトリにあります。使用するには、次の手順に従ってください。
-
環境をセットアップします。
cd agent-framework npm install cp .env-example .env # Configure settings as needed npm run build -
自然言語を使って ToDo リストを管理します。
# Add a task node index.js "Add milk to my shopping list" # List all tasks node index.js "What's on my todo list?" # Remove a task node index.js "Remove the shopping task" # Debug mode node index.js --debug "Add a reminder to call mom"
エージェントフレームワークの詳細なドキュメントについては、以下を参照してください。
agent-framework/README.md:セットアップと使用方法agent-framework/ARCHITECTURE.md:技術設計とインタラクションの流れagent-framework/CHANGELOG.md:開発履歴と変更内容
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。