MCP Access Point について
MCP Access Point は Pingora を基盤とする軽量なゲートウェイで、コードを変更せずに既存の HTTP サービスを MCP クライアントから利用できるようにします。HTTP 基盤を活用しながら段階的に MCP へ移行したいチームに向いています。
主な機能
- 01HTTP サービスから MCP サービスへの変換
- 02SSE と Streamable HTTP のトランスポート対応
- 03OpenAPI 仕様に基づくサービス設定
- 04サービスごとのマルチテナント対応エンドポイント
- 05Admin API によるランタイム設定管理
活用シーン
- 01Cursor などのクライアントから既存の HTTP マイクロサービスを呼び出す
- 02HTTP 構成から MCP へ段階的に移行する
- 031 つのゲートウェイで SSE と Streamable HTTP のアクセスを提供する
MCP 対応
本プロジェクトは MCP ゲートウェイとして、バックエンドの HTTP サービスを MCP サービスに変換し、/sse や /mcp などのエンドポイントを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP Access Point
MCP Access Point は、従来の HTTP サービスと MCP(Model Context Protocol)クライアントの間に通信ブリッジを構築するために設計された、軽量なプロトコル変換ゲートウェイツールです。サーバー側のインターフェースを変更することなく、MCP クライアントが既存の HTTP サービスと直接やり取りできるようにします。

はじめに
このプロジェクトは Pingora を基盤としています。Pingora は、大規模なリクエストプロキシサービスに対応できる、超高性能なゲートウェイプロキシライブラリです。Pingora は、Cloudflare プラットフォームの中核トラフィックを処理するサービスの構築に使用されており、長年にわたりインターネット全体で毎秒 4,000 万件を超えるリクエストを安定して処理しています。Cloudflare プラットフォームのトラフィックの大部分を支える技術的基盤となっています。
HTTP から MCP への変換
このモードでは、Cursor Desktop のようなクライアントが、サーバー自体が SSE プロトコルに対応していない場合でも、SSE を介してリモート HTTP サーバーと通信できます。
- 設定例には、次の 2 つのサービスが含まれます。
- サービス 1 はローカルの
127.0.0.1:8090で稼働します。 - サービス 2 はリモートの
api.example.comで稼働します。
- サービス 1 はローカルの
MCP Access Pointを介して、コードを変更することなく、両方のサービスを MCP サービスに変換できます。- クライアントは MCP プロトコルを介して
Service 1およびService 2と通信します。MCP Access Point は MCP リクエストを自動的に判別し、適切なバックエンドサービスに転送します。
graph LR
A["Cursor Desktop"] <--> |SSE| B["MCP Access Point"]
A2["Other Desktop"] <--> |Streamable Http| B["MCP Access Point"]
B <--> |http 127.0.0.1:8090| C1["Existing API Server"]
B <--> |https//api.example.com| C2["Existing API Server"]
style A2 fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
style A fill:#ffe6f9,stroke:#333,color:black,stroke-width:2px
style B fill:#e6e6af,stroke:#333,color:black,stroke-width:2px
style C1 fill:#e6ffe6,stroke:#333,color:black,stroke-width:2px
style C2 fill:#e6ffd6,stroke:#333,color:black,stroke-width:2px
トランスポートタイプ(仕様)
現在、SSE と Streamable HTTP のプロトコルに対応しています。
-
✅ Streamable HTTP(ステートレス)2025-03-26
- すべてのサービス:
ip:port/mcp - 単一サービス:
ip:port/api/{service_id}/mcp
- すべてのサービス:
-
✅ SSE 2024-11-05
- すべてのサービス:
ip:port/sse - 単一サービス:
ip:port/api/{service_id}/sse
- すべてのサービス:
SSE には IP:PORT/sse を使用します。
Streamable HTTP には IP:PORT/mcp を使用します。
対応 MCP クライアント
- ✅ MCP Inspector
- ✅ Cursor Desktop
- ✅ Windsurf
- ✅ VS Code
- ✅ Trae
主な機能
- プロトコル変換:HTTP プロトコルと MCP プロトコルをシームレスに変換
- 既存サービスへの影響なし:既存の HTTP サービスと完全な互換性を実現
- クライアントの活用:MCP クライアントが標準的な HTTP サービスを直接呼び出せるようにします
- 軽量プロキシ:効率的なプロトコル変換を実現するシンプルなアーキテクチャ
- マルチテナンシー:テナントごとに独立した設定とエンドポイントを提供
- 実行時設定管理:サービスを再起動せずに設定を動的に更新
- 管理 API:リアルタイムの設定管理に対応する RESTful API
クイックスタート
インストール
# Install from source
git clone https://github.com/sxhxliang/mcp-access-point.git
cd mcp-access-point
cargo run -- -c config.yaml
# Use inspector for debugging (start service first)
npx @modelcontextprotocol/inspector node build/index.js
# Access http://127.0.0.1:6274/
# Select "SSE" and enter 0.0.0.0:8080/sse, then click connect
# or select "Streamable HTTP" and enter 0.0.0.0:8080/mcp
マルチテナンシーのサポート
MCP Access Gateway はマルチテナンシーに対応しており、各テナントは次のエンドポイントからアクセスできる複数の MCP サービスを設定できます。
/api/{mcp-service-id}/sse(SSE 用)/api/{mcp-service-id}/mcp(Streamable HTTP 用)
設定例:
# config.yaml example (supports multiple services)
mcps:
- id: service-1 # Access via /api/service-1/sse or /api/service-1/mcp
... # Service configuration
- id: service-2 # Access via /api/service-2/sse or /api/service-2/mcp
... # Service configuration
- id: service-3 # Access via /api/service-3/sse or /api/service-3/mcp
... # Service configuration
すべてのサービスに同時にアクセスするには、次を使用します。
0.0.0.0:8080/mcp(Streamable HTTP)0.0.0.0:8080/sse(SSE)
設定の詳細
-c config.yaml-c(または--config)で、設定ファイルのパス(config.yaml)を指定します。- このファイルでは、MCP Access Point がプロキシして変換する API を定義します。
config.yaml の例
設定ファイルではマルチテナントに対応しており、各 MCP サービスの上流サービスとルーティングルールを個別に設定できます。主な設定項目は次のとおりです。
-
mcps - MCP サービスの一覧
id:アクセスパスの生成に使用する一意のサービス識別子upstream_id:関連付けられた上流サービス IDpath:OpenAPI 仕様ファイルのパス。ローカルファイル(例:config/openapi.json)とリモート HTTP/HTTPS URL(例:https://petstore.swagger.io/v2/swagger.json)に対応しています。JSON 形式と YAML 形式の両方をサポートしています。routes:カスタムルーティング設定(任意)upstream:上流サービス固有の設定(任意)
-
upstreams - 上流サービスの設定
id:上流サービス IDnodes:バックエンドノードのアドレスと重みtype:負荷分散アルゴリズム(roundrobin/random/ip_hash)scheme:上流プロトコル(http/https)pass_host:HTTP Host ヘッダーの処理方法upstream_host:Host ヘッダー値の上書き
設定の完全な例:
# config.yaml example (supports multiple services)
mcps:
- id: service-1 # Unique identifier, accessible via /api/service-1/sse or /api/service-1/mcp
upstream_id: 1
path: config/openapi_for_demo_patch1.json # Local OpenAPI spec path
- id: service-2 # Unique identifier
upstream_id: 2
path: https://petstore.swagger.io/v2/swagger.json # Remote OpenAPI spec
- id: service-3
upstream_id: 3
routes: # Custom routing
- id: 1
operation_id: get_weather
uri: /points/{latitude},{longitude}
method: GET
meta:
name: Get Weather
description: Retrieve weather information by coordinates
inputSchema: # Optional input validation
type: object
required:
- latitude
- longitude
properties:
latitude:
type: number
minimum: -90
maximum: 90
longitude:
type: number
minimum: -180
maximum: 180
upstreams: # Required upstream configuration
- id: 1
headers: # Headers to send to upstream service
X-API-Key: "12345-abcdef" # API key
Authorization: "Bearer token123" # Bearer token
User-Agent: "MyApp/1.0" # User agent
Accept: "application/json" # Accept header
nodes: # Backend nodes (IP or domain)
"127.0.0.1:8090": 1 # Format: address:weight
- id: 2
nodes:
"127.0.0.1:8091": 1
- id: 3
nodes:
"api.weather.gov": 1
type: roundrobin # Load balancing algorithm
scheme: https # Protocol
pass_host: rewrite # Host header handling
upstream_host: api.weather.gov # Override Host
設定ファイルを指定して MCP Access Gateway を実行するには:
cargo run -- -c config.yaml
Docker で実行する
クイックスタートとしてローカルで実行する
# Note: Replace /path/to/your/config.yaml with actual path
docker run -d --name mcp-access-point --rm \
-p 8080:8080 \
-e port=8080 \
-v /path/to/your/config.yaml:/app/config/config.yaml \
ghcr.io/sxhxliang/mcp-access-point:main
Docker イメージをビルドする(任意)
- Docker をインストールする
- リポジトリをクローンしてイメージをビルドする
# Clone repository
git clone https://github.com/sxhxliang/mcp-access-point.git
cd mcp-access-point
# Build image
docker build -t liangshihua/mcp-access-point:latest .
- Docker コンテナを実行する
# Using environment variables (service running on host)
# Note: Replace /path/to/your/config.yaml with actual path
docker run -d --name mcp-access-point --rm \
-p 8080:8080 \
-e port=8080 \
-v /path/to/your/config.yaml:/app/config/config.yaml \
liangshihua/mcp-access-point:latest
環境変数
port:MCP Access Point のリスニングポート(デフォルト:8080)
典型的なユースケース
- 段階的なアーキテクチャ移行:HTTP から MCP への段階的な移行を促進します
- ハイブリッドアーキテクチャのサポート:既存の HTTP インフラストラクチャを MCP エコシステム内で再利用します
- プロトコルの互換性:両方のプロトコルをサポートするハイブリッドシステムを構築します
シナリオの例: MCP ベースの AI クライアントがレガシーな HTTP マイクロサービスと連携する必要がある場合、MCP Access Gateway はミドルウェア層として機能し、シームレスなプロトコル変換を実現します。
実践的な例を含む記事を執筆してくださった @limcheekin に心より感謝します:https://limcheekin.medium.com/building-your-first-no-code-mcp-server-the-fabric-integration-story-90da58cdbe1f
実行時の設定管理
MCP Access Point は RESTful Admin API による動的な設定管理に対応しました。サービスを再起動せずに設定を更新できます。
Admin API の機能
- リアルタイムの設定更新:上流サービス、サービス、ルート、その他のリソースをオンザフライで変更できます
- 依存関係の検証:変更前にリソースの依存関係を自動的に検証します
- 一括操作:複数の設定変更をアトミックに実行します
- 設定の検証:適用前に変更を検証するドライランモード
- リソース統計:設定の状態を監視および追跡します
Admin API の設定
Admin API を有効にするには、config.yaml に次の内容を追加します。
access_point:
admin:
address: "127.0.0.1:8081" # Admin API listening address
api_key: "your-api-key" # Optional API key for authentication
Admin API エンドポイント
リソース管理
GET /admin/resources- リソースの概要と統計を取得するGET /admin/resources/{type}- 指定した種類のすべてのリソースを一覧表示するGET /admin/resources/{type}/{id}- 特定のリソースを取得するPOST /admin/resources/{type}/{id}- 新しいリソースを作成するPUT /admin/resources/{type}/{id}- 既存のリソースを更新するDELETE /admin/resources/{type}/{id}- リソースを削除する
高度な操作
POST /admin/validate/{type}/{id}- リソース設定を検証するPOST /admin/batch- 一括操作を実行するPOST /admin/reload/{type}- 指定した種類のリソースを再読み込みするPOST /admin/reload/config- ファイルから設定全体を再読み込みする(デフォルトはconfig.yaml)。任意の JSON ボディ:{ "config_path": "path/to/config.yaml" }
サポートされるリソースの種類
upstreams- バックエンドサーバーの設定services- サービス定義routes- ルーティングルールglobal_rules- グローバルプラグインルールmcp_services- MCP サービスの設定ssls- SSL 証明書の設定
Admin API の例
新しいアップストリームを作成する
curl -X POST http://localhost:8081/admin/resources/upstreams/my-upstream \
-H "Content-Type: application/json" \
-d '{
"id": "my-upstream",
"type": "RoundRobin",
"nodes": ["127.0.0.1:8001", "127.0.0.1:8002"],
"timeout": {
"connect": 5,
"read": 10,
"send": 10
}
}'
サービスを作成する
curl -X POST http://localhost:8081/admin/resources/services/my-service \
-H "Content-Type: application/json" \
-d '{
"id": "my-service",
"upstream_id": "my-upstream",
"hosts": ["api.example.com"]
}'
一括操作
curl -X POST http://localhost:8081/admin/batch \
-H "Content-Type: application/json" \
-d '{
"dry_run": false,
"operations": [
{
"operation_type": "create",
"resource_type": "upstreams",
"resource_id": "batch-upstream",
"data": {
"id": "batch-upstream",
"type": "Random",
"nodes": ["192.168.1.10:8080"]
}
},
{
"operation_type": "create",
"resource_type": "services",
"resource_id": "batch-service",
"data": {
"id": "batch-service",
"upstream_id": "batch-upstream"
}
}
]
}'
リソースの統計情報を取得する
curl http://localhost:8081/admin/resources
Admin Dashboard UI
- ルート:
GET /adminは組み込みダッシュボード(static/admin_dashboard.html)を提供します。mcp_services、2)ssls、3)global_rules、4)routes、5)upstreams、6)services。
- 各カードには、API レスポンスから取得した
countと、書式設定されたlast_updatedが表示されます。
ファイルから設定を再読み込みする
# Uses default config.yaml
curl -X POST http://localhost:8081/admin/reload/config \
-H "Content-Type: application/json" \
-H "x-api-key: your-api-key"
# Or specify a different config path
curl -X POST http://localhost:8081/admin/reload/config \
-H "Content-Type: application/json" \
-H "x-api-key: your-api-key" \
-d '{"config_path": "./config.yaml"}'
Admin API のテスト
提供されているテストスクリプトを使用して、Admin API の機能を確認してください。
# Make the test script executable
chmod +x test-admin-api.sh
# Run comprehensive API tests
./test-admin-api.sh
Admin API の詳細なドキュメントについては、RUNTIME_CONFIG_API.md を参照してください。
コントリビューションガイドライン
- このリポジトリをフォークします。
- ブランチを作成し、変更をコミットします。
- プルリクエストを作成し、マージされるまで待ちます。
- コードが Rust のコーディング規約に従っていることを確認してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。