MCP Data Gateway
MCP データゲートウェイ
ステータス: 開発初期段階。 プロジェクトの基盤(設定、依存関係、ドキュメント)は整っています。
src/配下のソースコードはまだ実装されていません。現在の進捗状況については 開発ロードマップ を参照してください。実装計画はdocs/plan.mdにあります。
統合データゲートウェイとして機能する Python ベースの Model Context Protocol (MCP) サーバーです。Claude(およびその他の MCP クライアント)が、単一の安全なインターフェースを通じて複数の外部 API との間でデータを送受信できるようにします。
概要
この MCP サーバーは以下を提供します:
複数のデータ型に対する汎用的なデータ処理
あらゆる REST または GraphQL エンドポイントをサポートする汎用 API ゲートウェイ
ブラウザベースの自動ログインフローを備えた OAuth 2.0 認証
システムキーリングを使用した安全な認証情報の保存
将来的な MCP アプリ進化のための基盤
機能
機能 | 説明 |
マルチ API サポート | 統合設定を通じて任意の数の外部サービスに接続 |
REST + GraphQL | REST および GraphQL API の両方をネイティブサポート |
OAuth 2.0 | ブラウザのポップアップによる完全な認可コードフロー |
トークン更新 | 有効期限切れ時の自動トークン更新および再認証 |
安全な保存 | システムキーリングを介して暗号化された認証情報の保存 |
汎用データモデル | あらゆるデータ形式を処理するための柔軟なスキーマ |
自動認証 | ツールが必要に応じて自動的にログインを要求 |
アーキテクチャ
MCP/
├── src/
│ ├── server.py # MCP server entry point
│ ├── auth/
│ │ ├── __init__.py
│ │ ├── oauth.py # OAuth 2.0 flow handler with popup
│ │ └── credentials.py # Secure credential storage (keyring)
│ ├── gateway/
│ │ ├── __init__.py
│ │ ├── api_client.py # Generic REST/GraphQL HTTP client
│ │ └── handlers.py # Request/response transformation
│ ├── models/
│ │ ├── __init__.py
│ │ └── data_models.py # Generic Pydantic data models
│ └── tools/
│ ├── __init__.py
│ └── mcp_tools.py # MCP tool definitions for Claude
├── config/
│ └── api_configs.json # API service configurations
├── tests/ # Unit and integration tests
├── .env.example # Environment variables template
├── .gitignore # Excludes secrets and build artifacts
├── requirements.txt # Python dependencies
└── README.md # This fileモジュールの役割
コア MCP サーバー (src/server.py)
Python
mcpSDK を使用して MCP サーバーを初期化ツール (
fetch_data,send_data,execute_graphqlなど) を登録ツールの実行ライフサイクルとエラー応答を処理
認証 (src/auth/)
oauth.py: ブラウザの自動ポップアップを備えた OAuth 2.0 認可コードフロー。ローカル HTTP コールバックサーバーを起動して認可コードを受信。複数のプロバイダー (Google, GitHub, カスタム) をサポート。
credentials.py: システムキーリングを介したアクセストークン/リフレッシュトークンの安全な保存。トークンの検証と有効期限を処理。
API ゲートウェイ (src/gateway/)
api_client.py: REST (GET/POST/PUT/DELETE) および GraphQL (クエリ/ミューテーション) をサポートする汎用非同期 HTTP クライアント。Bearer トークン、API キー、Basic 認証を処理。
handlers.py: 異なる API 間で応答を正規化し、GraphQL エラーを HTTP エラーとは別に解析。
MCP ツール (src/tools/mcp_tools.py)
ツール | 説明 |
| 設定された API からデータを GET (必要に応じて自動 OAuth) |
| 設定された API にデータを POST/PUT (必要に応じて自動 OAuth) |
| GraphQL クエリまたはミューテーションを実行 (必要に応じて自動 OAuth) |
| 設定されたすべての API サービスを一覧表示 |
| 認証および接続状態を表示 |
認証フロー
Claude が認証を必要とするツールを呼び出すと:
1. Claude invokes tool (e.g., fetch_data)
↓
2. MCP checks credentials in keyring
↓
3a. Valid token → Proceed with API call
3b. Missing/Expired → Open browser popup for OAuth
↓
4. User logs in via browser
↓
5. Local callback server receives auth code
↓
6. Exchange auth code for access token
↓
7. Store token in keyring
↓
8. Resume original tool call技術スタック
Python 3.10+
mcp — Model Context Protocol Python SDK
httpx — 非同期 HTTP クライアント (REST + GraphQL)
keyring — クロスプラットフォームの安全な認証情報ストレージ
pydantic — データ検証およびモデリング
python-dotenv — 環境変数管理
セットアップ
前提条件
Python 3.10 以上
pip または uv (推奨)
インストール
# Clone the repository
cd /Users/chawengwit/Documents/MCP
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Copy environment template
cp .env.example .env
# Edit .env with your OAuth credentials and API settings設定
1. 環境変数 (.env)
# OAuth credentials (per provider)
OAUTH_CLIENT_ID=your_client_id
OAUTH_CLIENT_SECRET=your_client_secret
OAUTH_REDIRECT_URI=http://localhost:8765/callback
# Server settings
MCP_LOG_LEVEL=INFO # DEBUG | INFO | WARN | ERROR
MCP_LOG_FILE= # Optional path to log file (default: stderr only)
MCP_DEBUG=false # Enable verbose request tracing
MCP_MAX_RESPONSE_BYTES=1048576 # Response size cap (1 MB default)
OAUTH_CALLBACK_PORT=87652. API 設定 (config/api_configs.json)
{
"apis": {
"example_api": {
"base_url": "https://api.example.com",
"type": "rest",
"auth": {
"method": "oauth2",
"provider": "custom",
"authorize_url": "https://auth.example.com/oauth/authorize",
"token_url": "https://auth.example.com/oauth/token",
"scopes": ["read", "write"]
},
"endpoints": {
"get_users": {"method": "GET", "path": "/users"},
"create_user": {"method": "POST", "path": "/users"}
}
}
}
}使用方法
MCP サーバーの実行
python -m src.serverClaude Code への接続
Claude Code の MCP 設定に以下の設定を追加してください:
{
"mcpServers": {
"data-gateway": {
"command": "python",
"args": ["-m", "src.server"],
"cwd": "/Users/chawengwit/Documents/MCP"
}
}
}対話例
接続後、Claude は以下のような操作が可能です:
設定済み API の一覧表示: "利用可能な API サービスを表示して"
データの取得: "example_api からユーザーリストを取得して"
データの送信: "このデータを使って example_api に新しいレコードを作成して..."
GraphQL の実行: "私の API に対してこの GraphQL クエリを実行して..."
認証が必要なツールを Claude が初めて使用する際、OAuth ログインのためにブラウザが自動的に開きます。
応答形式
すべての MCP ツールは、一貫した解析のために構造化された JSON を返します。
成功:
{
"data": <api response>,
"metadata": { "source": "...", "endpoint": "...", "timestamp": "...", "duration_ms": 142 }
}エラー:
{
"error": { "code": "AUTH_REQUIRED", "message": "...", "details": { ... } }
}標準エラーコード: AUTH_REQUIRED, AUTH_FAILED, API_NOT_CONFIGURED, ENDPOINT_NOT_FOUND, RATE_LIMITED, UPSTREAM_ERROR, VALIDATION_ERROR, RESPONSE_TOO_LARGE。
MCP_MAX_RESPONSE_BYTES を超える JSON/テキスト応答は、metadata.truncated: true とページネーションカーソルが付与され、切り捨てられた状態で成功として返されます。バイナリまたはストリーミングペイロードのみが RESPONSE_TOO_LARGE を出力します(これらは安全に切り捨てることができないため)。バイナリデータは content_type メタデータと共に base64 エンコードされます。GraphQL 応答は data と errors の両方を表示するため、部分的な成功は引き続き利用可能です。
詳細は CLAUDE.md を参照してください。
デバッグ
クイック診断
症状 | 試すこと |
最初の呼び出しでツールがハングする |
|
|
|
以前は動作していたのに 401 エラー | キーリングエントリを削除し、再認証 |
GraphQL は「成功」するがデータがない | 応答ボディの |
応答が切り捨てられる | ページネーションを使用するか |
デバッグモードの有効化
MCP_DEBUG=true MCP_LOG_LEVEL=DEBUG python -m src.serverこれにより、完全な HTTP 交換(シークレットは編集済み)が stderr にダンプされます。stdout には絶対に出力しないでください。stdout は MCP JSON-RPC プロトコルストリームを運ぶためです。
ログに関する注意
すべてのログは
stderr(またはオプションのMCP_LOG_FILE) に出力されます。トークン、API キー、
Authorizationヘッダー、および認証情報は、ログ記録前に自動的に編集されます。ログは
jqで簡単に解析できるように、構造化された JSON (1 行に 1 イベント) になっています。
デバッグ戦略の詳細は CLAUDE.md を参照してください。
開発ロードマップ
フェーズ 1: プロジェクトセットアップ
[x] 依存関係を固定した
requirements.txt[x] シークレットとキャッシュ用の
.gitignore[x] 環境変数を文書化した
.env.example[ ]
src/パッケージ構造の初期化[ ] 初期
config/api_configs.jsonテンプレート
フェーズ 2: コア MCP サーバー
[ ] MCP サーバーの初期化
[ ] ツールスキーマの定義
[ ] ログ記録とエラー処理
フェーズ 3: 認証
[ ] OAuth 2.0 認可コードフロー
[ ] ローカルコールバック HTTP サーバー
[ ] キーリングベースのトークンストレージ
[ ] トークン更新ロジック
フェーズ 4: API ゲートウェイ
[ ] 汎用 REST クライアント
[ ] GraphQL クエリ/ミューテーションサポート
[ ] マルチ認証方式サポート
[ ] リクエスト/応答ハンドラー
フェーズ 5: ツールと統合
[ ]
fetch_dataツールの実装[ ]
send_dataツールの実装[ ]
execute_graphqlツールの実装[ ]
list_apisおよびget_statusツールの実装
フェーズ 6: テストと洗練
[ ] モジュールごとのユニットテスト
[ ] モック API を使用した統合テスト
[ ] 設定例
[ ] ユーザー向けドキュメント
今後の拡張機能
MCP アプリ: このゲートウェイの上位層としてのスタンドアロン Web インターフェース
永続ストレージ: データ履歴と監査ログのための SQLite/PostgreSQL
レート制限: API ごとのレート制限とリクエストキューイング
キャッシュ: 設定可能な TTL を持つ応答キャッシュ
マルチテナント: 個別の認証情報ストアを持つ複数のユーザーのサポート
Webhooks: 受信 Webhook を介したデータ受信
データ変換パイプライン: API 間での変換チェーン
セキュリティ
すべての認証情報は OS レベルの安全なキーリングに保存 (macOS は Keychain、Windows は Credential Manager、Linux は Secret Service)
.envファイルは.gitignoreを介してバージョン管理から除外OAuth は標準の認可コードフローを使用 (暗黙的付与は使用しない)
トークンはログに記録されたり、エラーメッセージに露出したりすることはない
ローカルコールバックサーバーは
localhostでのみリッスンし、OAuth フロー中のみ動作
ライセンス
未定
貢献
このプロジェクトは開発初期段階です。コア実装が安定した時点で貢献ガイドラインを追加します。
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Chawengwit/MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server