Model Context Protocol (MCP) Server について
AnthropicとOpenAIのモデル向けに統合APIを提供するサーバーです。モデル利用やツールを必要とするアプリケーションやエージェントを対象に、チャットと旧形式の補完、ツール検索、実行履歴、MongoDBへの永続化を組み合わせています。
主な機能
- 01AnthropicとOpenAIの統合API
- 02チャットと旧形式の補完
- 03ツール呼び出しと実行
- 04検索・画像ツール
- 05MongoDBによる永続化と分析
活用シーン
- 01AnthropicまたはOpenAIへのリクエスト振り分け
- 02利用可能なツールの検索と絞り込み
- 03ウェブ検索とコンテンツ取得
- 04画像の生成や編集
MCP 対応
MCPサーバーを実装し、ウェブ検索、コンテンツ取得、画像操作などのモデル・ツールAPIを提供します。どの機能がMCP経由で公開されるかはREADMEに記載されていません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Model Context Protocol(MCP)サーバー
複数の AI モデルプロバイダー向けに統一された API を提供する、Model Context Protocol のシンプルなサーバー実装です。
機能
- 複数の AI プロバイダー(Anthropic、OpenAI)向けの統一 API
- チャット補完と従来型の補完をサポート
- ツール呼び出しをサポート
- コンテキスト/システムメッセージの処理
- 環境変数に基づく設定
- 永続化と状態管理のための MongoDB データベース
- ツール実行履歴と分析
インストール
# Clone the repository
git clone <repository-url>
cd testmcp
# Install dependencies
npm install
# Run the interactive setup
npm run setup
セットアップスクリプトの案内に従って、必要な API キーを設定してください。
ANTHROPIC_API_KEY- Claude モデル用OPENAI_API_KEY- GPT モデルと DALL-E 画像生成用STABILITY_API_KEY- Stable Diffusion 画像生成用GOOGLE_CSE_API_KEYとGOOGLE_CSE_ID- ウェブ検索機能用BING_SEARCH_API_KEY- ウェブ検索のフォールバック用
必要に応じて、.env ファイルを手動で編集することもできます。
MongoDB のセットアップ
MCP サーバーは、データの永続化に MongoDB を使用します。MongoDB のセットアップには、いくつかの方法があります。
オプション 1:自動セットアップ(推奨)
MongoDB のセットアップスクリプトを実行すると、手順が案内されます。
# Run the MongoDB setup script
npm run setup-mongodb
このスクリプトでは、次の処理が行われます。
- Docker が利用可能かどうかを確認します
- 利用可能な場合は、Docker Compose を使用して MongoDB を起動します
.envファイルに接続設定を行います- MongoDB の接続を確認します
オプション 2:Docker による手動セットアップ
MongoDB を使い始める最も簡単な方法は、同梱の Docker Compose 設定を使用することです。
# Start MongoDB and Mongo Express in Docker
docker compose up -d
# Update your .env file with the connection string
echo "MONGODB_URI=mongodb://mcpuser:mcppassword@localhost:27017/mcp-server" >> .env
MongoDB は mongodb://mcpuser:mcppassword@localhost:27017/mcp-server で利用できます。
Mongo Express(ウェブ管理画面)は http://localhost:8081 で利用できます。
オプション 3:MongoDB のローカルインストール
MongoDB をローカルにインストールする場合は、次の手順に従ってください。
- https://www.mongodb.com/try/download/community から MongoDB をインストールします
- MongoDB サービスを起動します
.envファイルを次のように更新します。MONGODB_URI=mongodb://localhost:27017/mcp-server
オプション 4:MongoDB Atlas(クラウド)
本番環境での使用には、MongoDB Atlas をおすすめします。
- https://www.mongodb.com/cloud/atlas でアカウントを作成します
- 新しいクラスターを作成します
- データベースユーザーを設定し、IP アドレスをホワイトリストに登録します
- 接続文字列を取得し、
.envファイルを更新します。MONGODB_URI=mongodb+srv://<username>:<password>@<cluster>.mongodb.net/mcp-server?retryWrites=true&w=majority
データベースの移行
既存のデータを MongoDB に移行するには、次を実行します。
# Run the migration script
npm run migrate-mongodb
このスクリプトでは、次の処理が行われます。
- ツール定義を MongoDB に移行します
- 設定(API キーなど)を MongoDB に移行します
- 利用可能な場合は、バックアップデータをインポートします
使用方法
サーバーを起動する
# Interactive startup (checks for API keys)
npm start
# Development mode with auto-reload
npm run dev
# Quick start (skips environment checks)
npm run quick-start
# Start server with PM2 process manager
npm run pm2:start
# Start server with PM2 in production mode
npm run pm2:start:prod
サーバーは http://localhost:3000(または .env で指定したポート)で実行されます。
起動オプション
-
通常起動(
npm start):- API キーが設定されているか確認します
- キーが見つからない場合は、セットアップを促します
- 初めて使用する場合におすすめです
-
開発モード(
npm run dev):- nodemon を使用し、コード変更時に自動で再読み込みします
- 環境チェックも実行します
- 開発に最適です
-
クイックスタート(
npm run quick-start):- すべての環境チェックを省略します
- サーバーをすぐに起動します
- 設定が正しいと分かっている場合に便利です
-
PM2 本番モード(
npm run pm2:start:prod):- PM2 プロセスマネージャーを使用してサーバーを実行します
- サーバーがクラッシュした場合、自動的に再起動します
- 本番環境向けに最適化されています
- 環境チェックを省略します
PM2 プロセスマネージャーの使用
サーバーは、Node.js アプリケーション向けの本番用プロセスマネージャーである PM2 を使って実行できます。PM2 には、次のような機能があります。
- プロセス管理(クラッシュ時の再起動)
- ログ管理
- パフォーマンス監視
- 負荷分散(複数インスタンス向け)
PM2 コマンド
# Start the server with PM2
npm run pm2:start
# Start in production mode
npm run pm2:start:prod
# View logs
npm run pm2:logs
# Monitor performance
npm run pm2:monit
# Restart the server
npm run pm2:restart
# Stop the server
npm run pm2:stop
# Remove the server from PM2
npm run pm2:delete
PM2 の設定は ecosystem.config.js に保存されています。このファイルを変更して、次の項目を設定できます。
- プロセス名
- 環境変数
- メモリ制限
- デプロイ設定
- インスタンス数(負荷分散用)
API エンドポイント
POST /mcp/:provider
統一 API を通じて AI モデルにリクエストを送信します。
URL パラメーター:
provider:使用する AI プロバイダー(anthropicまたはopenai)
リクエスト本文:
{
"messages": [
{ "role": "user", "content": "Your prompt here" }
],
"model": "claude-3-opus-20240229", // Optional, provider-specific model name
"tools": [...], // Optional, tools for function calling
"context": "System message or context" // Optional
}
または(レガシー形式):
{
"prompt": "Your prompt here",
"model": "claude-3-opus-20240229", // Optional
"context": "System message or context" // Optional
}
レスポンス: プロバイダーの API からの生のレスポンスを返します。
GET /tools/available
詳細情報とともに、利用可能なすべてのツールの包括的な一覧を取得します。
クエリパラメーター:
format- レスポンス形式:json(デフォルト)、yaml、table、またはhtmlcategory- カテゴリーでツールを絞り込みます(任意)enabled- 有効状態でツールを絞り込みます:true(デフォルト)またはfalsesearch- 名前、説明、またはタグでツールを検索しますprovider- プロバイダーでツールを絞り込みます(例:openai、google)limit- 返すツールの最大数(ページネーション用)offset- ページネーション用のオフセット(デフォルト:0)
レスポンス(JSON 形式):
{
"success": true,
"count": 10,
"metadata": {
"categories": ["web", "image", "utility"],
"providers": ["openai", "anthropic", "internal"],
"totalCount": 24,
"offset": 0,
"limit": 10
},
"tools": [
{
"name": "web_search",
"description": "Search the web for information",
"category": "web",
"version": "1.0.0",
"provider": "google",
"enabled": true,
"parameters": {
"query": {
"type": "string",
"description": "The search query",
"required": true
},
"limit": {
"type": "number",
"description": "Maximum number of results",
"required": false,
"default": 5
}
},
"usage": {
"endpoint": "/tools/web/search",
"method": "POST",
"parameters": { /* same as above */ }
},
"metadata": {
"createdAt": "2023-10-15T12:00:00Z",
"updatedAt": "2024-04-20T09:30:00Z",
"usageCount": 1245
}
}
// ... more tools
]
}
GET /health
サーバーの稼働中にステータス 200 を返すヘルスチェックエンドポイントです。
データ管理
データベースのバックアップ
データベースのバックアップを作成、管理できます。
# Create a full backup
npm run backup-mongodb
# Create a backup with execution history
npm run backup-mongodb -- --with-executions
# List existing backups
npm run backup-mongodb -- --list
データベース接続のテスト
MongoDB の設定を確認するには、次のようにします。
# Run the database test script
npm run test-mongodb
クライアントの例
コマンドラインクライアント
テストクライアントは src/client.js に含まれています。実行するには、次のようにします。
node src/client.js
Web クライアント
サーバーの稼働中は、http://localhost:3000 でシンプルな Web インターフェースを利用できます。これを使って、ブラウザーから API を直接テストできます。
利用可能なツール
MCP サーバーには、ユーザーや AI エージェントが利用可能なすべてのツールをプログラムから一覧表示できる、ツール検出エンドポイントが用意されています。
ツール検出
GET /tools/available - 詳細情報とともに、利用可能なすべてのツールを一覧表示します。
- 複数の形式に対応:JSON、YAML、HTML、ASCII テーブル
- カテゴリー、プロバイダー、検索語句による絞り込みが可能
- 各ツールの詳細なメタデータと使用例を含みます
使用例:
# Get all tools in JSON format
curl http://localhost:3000/tools/available
# Get tools in a specific category
curl http://localhost:3000/tools/available?category=web
# Search for image-related tools
curl http://localhost:3000/tools/available?search=image
# Get a formatted HTML page of all tools
curl http://localhost:3000/tools/available?format=html > tools.html
Web 検索ツール
サーバーには、Web 検索と取得のツールが組み込まれています。
-
Web 検索(
/tools/web/search)- 指定したクエリに関する情報を Web で検索します
- パラメーター:
query(必須)、limit(任意) - 必要な環境変数:
GOOGLE_CSE_API_KEYとGOOGLE_CSE_ID - Google 検索に失敗した場合は、
BING_SEARCH_API_KEYにフォールバックします
-
Web コンテンツ(
/tools/web/content)- 特定の URL からコンテンツを取得し、抽出します
- パラメーター:
url(必須)、useCache(任意)
-
Web 一括取得(
/tools/web/batch)- 複数の URL からコンテンツを並列に取得します
- パラメーター:
urls(必須の配列)、useCache(任意)
画像生成ツール
サーバーには、画像の生成、編集、バリエーション作成のツールも含まれています。
-
画像の生成(
/tools/image/generate)- テキストプロンプトに基づいて画像を生成します
- パラメーター:
prompt(必須):画像の詳細な説明provider(任意):openaiまたはstability(デフォルトはopenai)options(任意):プロバイダー固有のオプション
-
画像の編集(
/tools/image/edit)- テキストプロンプトを使って既存の画像を編集します
- パラメーター:
imagePath(必須):編集する画像のパスprompt(必須):編集内容の説明maskPath(任意):マスク画像のパス
-
画像バリエーションの作成(
/tools/image/variation)- 既存の画像のバリエーションを作成します
- パラメーター:
imagePath(必須):バリエーションを作成する画像のパス
注記: これらのツールを使用するには、
.envファイルに API キーを設定する必要があります。
- OpenAI の画像機能:
OPENAI_API_KEY- Stability AI の画像機能:
STABILITY_API_KEY- Web 検索:
GOOGLE_CSE_API_KEYとGOOGLE_CSE_ID
AI モデルとのツール連携
MCP サーバーは、AI モデルとのツール呼び出しと実行を自動的に処理します。モデルがツールを使用すると判断すると、サーバーは次の処理を行います。
- 指定されたパラメーターで、要求されたツールを実行します
- ツールの応答をモデルに返します
- モデルはツールの応答を最終回答に取り込めるようになります
AI モデル向けのツール検出
AI モデルは /tools/available エンドポイントを使用して、利用可能なツールとその使い方を確認できます。これは特に次の用途に便利です。
- 実行時の動的なツール検出
- AI エージェント向けの自己ドキュメント化
- 利用可能な機能に応じた AI システムの適応
AI モデル向けのシステムプロンプトの例:
You have access to external tools through the MCP server.
Before using any tools, you should check what tools are available by calling:
GET /tools/available
This will return a list of all available tools with their parameters and usage instructions.
You can then use these tools by following the provided usage patterns.
ツール使用例
ツールの使用方法を示すサンプルコードについては、/examples ディレクトリを参照してください。
新しいプロバイダーまたはツールの追加
新しい AI プロバイダーの追加
新しい AI プロバイダーを追加するには、次の手順に従います。
- プロバイダーの SDK をプロジェクトに追加します
server.jsに新しいハンドラー関数を作成します- メインのルートハンドラーに新しいケースを追加します
新しいツールの追加
サーバーに新しいツールを追加するには、次の手順に従います。
/src/toolsディレクトリに新しいツールの実装を作成しますtool-definitions.jsにツール定義を追加しますserver.jsのツール実行関数を更新します- (必要に応じて)ツールを直接使用するための新しい API エンドポイントを追加します
ライセンス
GNU MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。