mcp-gateway について
mcp-gatewayは、AIエージェントと下流のMCPサーバーの間に置く認可プロキシです。ツール実行前のポリシー判定が必要なチーム向けで、クラウドまたはローカルでの判定と構造化監査ログに対応します。
主な機能
- 01転送前に各ツール呼び出しを確認
- 02クラウドとローカルの認可に対応
- 03.regoファイルでローカルポリシーを定義
- 04構造化監査ログを記録
- 05stdioまたはHTTPで提供
活用シーン
- 01エージェントのデータベースツールへのアクセスを制限
- 02未許可のファイル操作やSQL操作を防止
- 03複数のリモートエージェントで統制ゲートウェイを共有
- 04呼び出し元、引数、認可結果を追跡
MCP 対応
MCPサーバーとして、クライアントと下流のMCPサーバー間の要求を中継し、ツール呼び出しの転送前に認可を確認します。stdioまたはStreamable HTTPで、ポリシー適用済みのツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Vengtoo MCP Gateway
AI エージェントと MCP ツール呼び出しのための認可ゲートウェイです。
オープンソース。既存環境にそのまま導入できます。あらゆる MCP クライアントで動作します。
なぜ必要なのか
MCP サーバーに接続した AI エージェントは、アクセス可能なあらゆるツールを呼び出せます。データベースの読み取り、ファイルの削除、任意の SQL の実行などが可能です。Vengtoo MCP Gateway は、エージェントとそれらのツールの間にポリシー適用ポイントを設け、すべての呼び出しが実行前に認可されるようにします。
機能
- MCP クライアント(Claude Code、Cursor、VS Code、GitHub Copilot)とあらゆる MCP サーバーの間に配置されます
- すべてのツール呼び出しをインターセプトし、転送前に認可を確認します
- 2 つのモードに対応しています:クラウド(Vengtoo Cloud API)とローカル(Vengtoo Agent と .rego ポリシーファイル)
- すべてのツール呼び出しの完全な監査証跡を記録します。サブジェクト、ツール名、引数、判定が構造化 JSON として記録されます:
{"ts":"2026-05-25T10:03:11.482Z","level":"info","msg":"mcp_tool_call","subject":"agent:ai-assistant","tool":"database__query","allowed":true,"latency_ms":0.8}
クイックスタート
- Vengtoo Agent をインストールして起動します。エージェントはローカルで動作し、認可ポリシーを評価します。クラウドアカウントは不要です。
go install github.com/vengtoo/agent/cmd/agent@latest
vengtoo-agent --policy ./policy.rego
エージェントに許可する操作を定義する policy.rego を作成します:
package vengtoo.mcp
default allow := false
# Allow read-only tools
allow if { input.resource.name == "database__query" }
allow if { input.resource.name == "database__list_tables" }
# Allow writes, but block destructive SQL
allow if {
input.resource.name == "database__execute"
not contains(lower(input.resource.attributes.sql), "drop")
not contains(lower(input.resource.attributes.sql), "delete from")
}
Kubernetes の名前空間保護など、その他の例については demo/policies/ を参照してください。
gateway.config.jsonを作成します:
{
"vengtoo": {
"agentUrl": "http://127.0.0.1:8181"
},
"subject": "agent:ai-assistant",
"servers": {
"database": {
"command": "node",
"args": ["./my-database-mcp-server.js"]
}
}
}
- MCP クライアント(例:Claude Code)に追加します:
claude mcp add --transport stdio vengtoo-gateway -- \
npx vengtoo-mcp-gateway --config /path/to/gateway.config.json
設定
設定スキーマ
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
vengtoo.agentUrl | string | * | ローカル Vengtoo Agent の URL(ローカルモード) |
vengtoo.cloudUrl | string | * | Vengtoo Cloud API の URL(クラウドモード) |
vengtoo.apiKey | string | Vengtoo Cloud の API キー(または VENGTOO_API_KEY 環境変数を設定) | |
vengtoo.timeoutMs | number | 認可リクエストのタイムアウト(デフォルト:5000) | |
subject | string | yes | ツール呼び出しを行うエージェントの ID |
subjectType | string | サブジェクトの種類(デフォルト:"agent") | |
resourceType | string | 認可チェック対象のリソースの種類(デフォルト:"mcp_tool") | |
servers | object | yes | プロキシする下流 MCP サーバーのマップ |
transport | string | 呼び出し元のトランスポート:"stdio"(デフォルト)または "http"。トランスポートを参照 | |
http | object | HTTP トランスポート設定(transport が "http" の場合に使用) |
* agentUrl(ローカルモード)または cloudUrl(クラウドモード)のいずれかを指定してください。
servers の各エントリは次のとおりです:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
command | string | yes | MCP サーバーを起動するコマンド |
args | string[] | コマンド引数 | |
env | object | 追加の環境変数 |
モード
クラウドモード
管理されたポリシーを利用するために Vengtoo Cloud に接続します:
{
"vengtoo": {
"cloudUrl": "https://api.vengtoo.com/access/v1/evaluation",
"apiKey": "vgt_..."
},
"subject": "agent:prod-assistant",
"servers": {
"database": {
"command": "node",
"args": ["./db-server.js"]
}
}
}
ローカルモード
オフラインで完結する認可を行うため、.rego ポリシーファイルを使って Vengtoo Agent をローカルで実行します:
# Start the agent with your policy
vengtoo-agent --policy ./policy.rego
{
"vengtoo": {
"agentUrl": "http://127.0.0.1:8181"
},
"subject": "agent:dev-assistant",
"servers": {
"database": {
"command": "node",
"args": ["./db-server.js"]
}
}
}
トランスポート
ゲートウェイは、ポリシーが適用されたツールを、2 種類のトランスポートのいずれかで呼び出し元に公開します。
stdio(デフォルト)
stdin/stdout 経由で MCP を使用するローカルのサブプロセスとして実行されます。単一のデスクトップエージェント(Claude Desktop、Cursor、Claude Code)に適した方法です。ネットワークへの公開はありません。
HTTP(リモート)
Streamable HTTP MCP サーバーを URL で実行するため、リモートエージェント(または同時に実行される複数のエージェント)が、1 つのガバナンス対象ゲートウェイを共有できます。--http(または設定内の "transport": "http")で有効にします:
vengtoo-mcp-gateway --config gateway.config.json --http --port 8808
{
"vengtoo": { "cloudUrl": "https://api.vengtoo.com/access/v1/evaluation", "apiKey": "vgt_..." },
"subject": "agent:prod-assistant",
"transport": "http",
"http": {
"port": 8808,
"host": "0.0.0.0",
"path": "/mcp",
"authTokens": ["<caller-token>"],
"allowedHosts": ["gateway.example.com"]
},
"servers": { "database": { "command": "node", "args": ["./db-server.js"] } }
}
HTTP 設定(http.*):
| フィールド | 型 | デフォルト | 説明 |
|---|---|---|---|
port | number | 8808 | リッスンする TCP ポート |
host | string | 127.0.0.1 | バインドするインターフェース。0.0.0.0 はリモート接続を許可します |
path | string | /mcp | MCP エンドポイントの URL パス |
callers | object[] | - | 呼び出し元ごとの ID:{ "token": "...", "subject": "agent:claude" }。各ベアラートークンは、それぞれ固有の subject として認証されます |
authTokens | string[] | - | 匿名ベアラートークン。アクセスを許可し、グローバルな subject として実行します |
allowedHosts | string[] | - | DNS リバインディング保護を有効にし、リストにない Host を含むリクエストを拒否します |
allowedOrigins | string[] | - | DNS リバインディング保護を有効にし、リストにない Origin を含むリクエストを拒否します |
呼び出し元ごとの ID。 各エージェントに固有のトークンと subject を割り当てると、共有ゲートウェイを通じて、ポリシーと監査ログに各呼び出し元の実際の ID が記録されます。
"http": {
"port": 8808,
"callers": [
{ "token": "<claude-token>", "subject": "agent:claude" },
{ "token": "<cursor-token>", "subject": "agent:cursor" }
]
}
VENGTOO_GATEWAY_HTTP_CALLERS="<token>=agent:claude,<token>=agent:cursor" でも設定できます。セッションは、それを開始したトークンに紐付けられます。別の呼び出し元が他の呼び出し元のセッション ID を提示すると 401 が返されるため、セッションをまたいで ID が共有されることはありません。authTokens に記載されたトークンを使う場合(または callers が省略されている場合)、設定のグローバルな subject として実行されます。
安全性: ゲートウェイは、呼び出し元認証(callers または authTokens)なしで非ループバックインターフェースにバインドすることを拒否します。トークンを設定するか、オープンエンドポイントを意図的に公開する場合は VENGTOO_GATEWAY_ALLOW_UNAUTHENTICATED=true を設定してください。認証なしの GET /healthz ライブネスプローブは常に応答します。
⚠️ セキュリティ:Vengtoo は、このゲートウェイが指定する subject を信頼します。 上記の
callersによるトークン→subject のマッピング(このゲートウェイ自身の設定で管理)は適切な方法であり、クライアントが送信するヘッダーを信頼することとは異なります。呼び出し元クライアントが送信するヘッダーやフィールドから subject を決定するように変更してはいけません。そうすると、任意の呼び出し元が任意の subject を名乗り、テナント内でその権限を引き継げるようになります。このゲートウェイを別のリバースプロキシの背後に置く場合、そのプロキシが呼び出し元の選択した任意のベアラートークンや subject を転送できないようにしてください。
CLI フラグ
| フラグ | 説明 |
|---|---|
--config <path> | ゲートウェイ設定ファイルのパス(デフォルト:./gateway.config.json) |
--http | stdio の代わりに HTTP でサービスを提供します |
--port <n> | HTTP リッスンポート(デフォルト:8808。--http 対応の設定が適用されます) |
--host <h> | HTTP バインドインターフェース(デフォルト:127.0.0.1) |
--path <p> | HTTP エンドポイントのパス(デフォルト:/mcp) |
--list-tools | 設定済みの下流サーバーのすべてのツールを一覧表示して終了します |
--generate-policy [path] | 設定済みのツール向けのポリシーファイル(.rego)のひな形を生成します(デフォルト:policy.rego) |
環境変数による上書き:VENGTOO_API_KEY、VENGTOO_AGENT_URL、VENGTOO_SUBJECT、
VENGTOO_GATEWAY_TRANSPORT(http)、VENGTOO_GATEWAY_PORT / PORT、VENGTOO_GATEWAY_HOST、
VENGTOO_GATEWAY_PATH、VENGTOO_GATEWAY_HTTP_TOKENS(カンマ区切り)、VENGTOO_GATEWAY_ALLOW_UNAUTHENTICATED。
MCP クライアントの設定
ゲートウェイは stdio MCP サーバーとして実行されます。下流サーバーに直接接続する代わりに、MCP クライアントからゲートウェイに接続してください。
Claude Code
claude mcp add --transport stdio vengtoo-gateway -- \
npx vengtoo-mcp-gateway --config /path/to/gateway.config.json
Cursor
.cursor/mcp.json に追加します:
{
"mcpServers": {
"vengtoo-gateway": {
"command": "npx",
"args": ["vengtoo-mcp-gateway", "--config", "/path/to/gateway.config.json"]
}
}
}
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json に追加します:
{
"mcpServers": {
"vengtoo-gateway": {
"command": "npx",
"args": ["vengtoo-mcp-gateway", "--config", "/path/to/gateway.config.json"]
}
}
}
VS Code / GitHub Copilot
.vscode/mcp.json に追加します:
{
"servers": {
"vengtoo-gateway": {
"type": "stdio",
"command": "npx",
"args": ["vengtoo-mcp-gateway", "--config", "/path/to/gateway.config.json"]
}
}
}
サンプルポリシーを使ったエンドツーエンドの例については、demo/ をご覧ください。
ロードマップ
予定されている機能(呼び出し元ごとの OAuth、下流の耐障害性、動的なツール一覧、メトリクス、リモート下流サーバーなど)については、ROADMAP.md をご覧ください。
フィードバック
- GitHub Issues:バグ報告と機能リクエスト
- ドキュメント:ガイドと API リファレンス
ライセンス
Apache-2.0。詳しくは LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。