sovereign-mcp-gateway
sovereign-mcp-gateway
Model Context Protocol サーバー向けゲーティングプロキシ。 MCP クライアントを各サーバーではなくゲートウェイに向けます。ゲートウェイは、リストアップされたすべてのアップストリームに接続し、それらのツールカタログをひとつに統合し、実行するサーバーに到達する前に、すべての呼び出しを検証チェーンに通します。
pip install sovereign-mcp-gateway
sovereign-mcp-gateway --config gateway.jsonゲートウェイ自体が MCP サーバーであるため、MCP を話せるクライアントであれば、変更なしで動作します。
基本インストールは動作するゲートウェイです。4 つのオプションの追加機能がさらにレイヤーを重ねます — インストール を参照。
これが防ぐもの
エージェントが GitHub の issue を読み、その本文にあなたではなくモデルに向けた指示が含まれているとします。エージェントは説得され、git_commit を呼び出します。
コミット後 | 注入されたコミットの存在 | |
| 2 | あり |
ゲートウェイ経由 | 1 | なし |
同じツール、同じ引数、同じサーバー。違うのは、拒否できる立場に何かがあったかどうかだけです。
ウォークスルーをお読みください: エージェントが issue を読む — または実行してみてください:
pip install "sovereign-mcp-gateway[all]" mcp-server-git
python examples/poisoned_issue.pyRelated MCP server: Mavryn
なぜプロキシなのか、ライブラリではないのか
ライブラリは、サーバーを書いた人自身が採用する必要があります。プロキシは、あなたが変更できないサーバーを保護します — そして、役に立つ MCP サーバーのほとんどは、他の誰かがメンテナンスしている公開パッケージです。
また、プロキシなら、ポリシーを保持する場所と、エージェントが到達できるすべてのサーバーにわたる監査証跡をひとつにまとめられます。サーバーごとの設定を誰も同期しない、という事態にはなりません。
設定
{
"servers": {
"git": {"command": "mcp-server-git", "args": ["--repository", "/repo"]},
"sqlite": {"command": "mcp-server-sqlite", "args": ["--db-path", "/data.db"]}
},
"policy": {"deny_tools": ["git__git_reset"], "pii_policy": "warn"},
"audit": {"path": "gateway-audit.jsonl"}
}クライアントが目にする前に、配線を確認してください:
sovereign-mcp-gateway --config gateway.json --checkSOVEREIGN GATEWAY - configuration check
upstreams: 2
layers: policy -> intent -> text-filter -> frozen-verify -> audit
EXPOSED AS UPSTREAM TOOL
git__git_status git.git_status
git__git_reset git.git_reset [DENIED]
sqlite__read_query sqlite.read_query
...
18 tools exposed.チェーン
policy → intent → text-filter → frozen-verify → [ call executes ] → output-verify → logic-rules → auditレイヤー | パッケージ | 拒否する条件 |
policy | — | ツールが拒否リストにある、または許可リストにない |
intent |
| 呼び出しが行動基準を満たさない |
text-filter |
| 引数が、22 言語または 7 種類のエンコーディングのいずれかで注入を含む |
frozen-verify |
| 呼び出しが、起動時に凍結されたツール定義と一致しない |
output-verify |
| 結果がスキーマ、偽装、PII、コンテンツの各チェックに不合格 |
logic-rules |
| 結果が、あなたが設定したルールと矛盾する |
audit |
| — すべての呼び出し(許可・拒否の両方)をハッシュチェーンログに記録する |
インストール
基本インストールは動作するゲートウェイであり、単なるスタブではありません:
pip install sovereign-mcp-gatewayこれで policy → frozen-verify → audit が得られます。これだけで、アップストリームが公開していないツール、型が間違った引数、未宣言のパラメータ、拒否リストにあるツール、引数へのプロンプトインジェクションをすでに拒否できます。他には何も必要ありません。
各追加機能はレイヤーをひとつ重ねます:
追加機能 | 追加されるもの | 導入が有効なケース |
|
| エージェントが、あなたの管理外のどこからでもテキストを読む場合。基本インストールは |
|
| すべてのツールのスキーマを正しく把握することに依存せずに、抑止策を設けたい場合 |
|
| 正しい結果がどう見えるかを表現できる場合。 |
|
| ホスト型プロバイダーで N モデル合意を有効にする場合 |
必要なものだけを組み合わせるか、すべてを導入します:
pip install "sovereign-mcp-gateway[text]" # one extra
pip install "sovereign-mcp-gateway[text,intent]" # several
pip install "sovereign-mcp-gateway[all]" # every layer4 つの追加機能はすべて小さな純 Python パッケージです — [all] はコンパイル済み依存関係も追加サービスも必要としません。
部分インストールは見た目でわかるように劣化します。 ゲートウェイは起動時にアクティブなレイヤーを表示するため、実際に何が動作しているかを常に確認できます:
layers: policy -> frozen-verify -> audit # base
layers: policy -> intent -> text-filter -> frozen-verify -> audit # [all]その行にレイヤーがなければ、それは動作していません — 設定がどうであれ。
エンドツーエンドで検証済み
mcp-server-git と mcp-server-sqlite を実際のアップストリームとして、実際の MCP クライアントで駆動して検証しています:
呼び出し | 結果 |
| 許可 |
| 許可 — 行は実際にデータベースに存在する |
| 拒否: 拒否リストにある |
| 拒否: どのアップストリームも公開していない |
| 拒否: 凍結されたスキーマと型が一致しない |
| 拒否: テキストフィルター |
| 拒否: 別のアップストリームの名前空間を通じてツールに到達できない |
その後もリポジトリはコミット 1 つのままであり、データベースには想定どおりの行だけが存在します — ゲートウェイ自身の報告を信じるのではなく、直接開いて確認しています。10 回の呼び出しに対して 11 件の監査記録。どれか 1 件でも改ざんすれば、チェーンは壊れます。
これらのケースはスクリーンショットではなくテストスイートです: pytest tests/ -v
レイヤー C: N モデル合意
他のすべてのレイヤーは決定的かつローカルです。レイヤー C は例外です。ツールの結果から同じ構造化ドキュメントを抽出するよう、複数の独立したモデルに依頼し、各回答を正規化して、SHA-256 ハッシュを比較します。合意は散文ではなくハッシュで判定されます。
このレイヤーは、設定しない限りオフです。呼び出しごとにコストとレイテンシがかかり、ツールの出力をモデルに送信する唯一のレイヤーだからです。
{
"servers": { "...": {} },
"consensus": {
"providers": [
{"type": "local", "model": "llama3.1:8b"},
{"type": "local", "model": "qwen2.5:7b", "base_url": "http://localhost:11434/v1"},
{"type": "openrouter", "model": "anthropic/claude-3.5-sonnet",
"api_key_env": "OPENROUTER_API_KEY"}
]
}
}2 種類のプロバイダー型: local (任意の OpenAI 互換エンドポイント — Ollama、vLLM、LM Studio。base_url のデフォルトは http://localhost:11434/v1) と openrouter (キーは指定された環境変数から読み取られ、設定ファイルに書き込まれることはありません)。
ゲートウェイは起動時に 3 つのルールを実行時に発見するのではなく強制します:
最低 2 プロバイダー。 1 つのモデルは自分自身と意見が合わないことはありません。1 モデルだけの合意はすべての呼び出しで「一致」と報告するため、検証のように見えて実際には検証にならず、レイヤーがないより悪い結果になります。
重複モデル禁止。 同じモデルの 2 つのインスタンスが一致しても、独立した検証にはなりません。
API キーがなければ起動を拒否。 レイヤーなしで動作するフォールバックはしません。
すべてのプロバイダーは temperature = 0 で実行され、コンストラクタで強制されます。
モデルが一致することを、レイヤーを信頼する前に確認する
--check は、設定されたモデルに対して実際の合意呼び出しを 1 回実行し、何が起こったかを報告します。これは聞こえよりも重要です:
LAYER C - probing the configured models with one real call
--------------------------------------------------------------
OK. The configured models produced identical documents.
Layer C will pass ordinary output rather than refusing it.合意は正規化されたハッシュを比較するため、意味的に正しくても構造的に異なる 2 つのモデルは決して一致しません。スキーマをそのまま折り返すだけの弱いモデルは —
{"branch": {"type": "string", "value": "main"}} instead of {"branch": "main"}— すべての呼び出しで不一致となり、ゲートウェイは「モデルが一致しませんでした」と正しく読める理由で、すべてを拒否し続けます。なぜなら実際に一致していないからです。
このプローブは 3 つの結果を区別します:
意味 | |
OK | モデルが同一のドキュメントを生成。レイヤーは使用可能 |
MISMATCH | 些細なドキュメントでもモデルが不一致。すべての呼び出しを拒否する — モデルを交換するか、セクションを削除する |
provider unreachable | 何も検証されなかった。キー、モデル ID、またはエンドポイントのいずれかが間違っている |
sovereign-mcp-gateway[consensus] または [all] をインストールしてください — HTTP プロバイダーには requests が必要ですが、コアライブラリは意図的にこれに依存していません。
--check はアクティブなレイヤーも一覧表示するため、一目で確認できます:
layers: policy -> intent -> text-filter -> frozen-verify -> consensus -> auditその行に consensus がなければ、設定がどうであれ、それは動作していません。
名前空間
namespace がオン(デフォルト)の場合、ツールは git__git_status として公開されます。同じツール名を提供する 2 つのアップストリームが衝突したり、互いに影を落としたり、間違った名前空間を通じて到達されたりすることはありません。アップストリームが 1 つだけの場合にのみオフにしてください。
ポリシー
"policy": {
"deny_tools": ["git__git_reset", "write_query"],
"allow_tools": null,
"pii_policy": "warn",
"fail_closed": true,
"rate_limit_interval": 0
}deny_toolsは、公開名(git__git_reset)またはアップストリームのツール名(git_reset、それを保持するすべてのアップストリームで)のいずれかに一致します。allow_toolsは、設定されている場合、リストにないすべてのものを拒否します。pii_policyのデフォルトはwarnであり、blockではありません。実際のツールは個人データを通常の出力として返します — すべてのgit logエントリには著者のメールアドレスが含まれます — それらをブロックするとゲートウェイは使い物になりません。ツールが PII を決して出力すべきでない場合はblockに設定してください。fail_closedは、レイヤー自体がエラーした場合の動作を決定します。デフォルト: 拒否。rate_limit_intervalは0で、行動基準レイヤー独自のアクション間遅延を無効にします。その遅延は、1 つのエージェントが慎重にステップを踏む場合には適切ですが、ツール呼び出しのバーストが通常のトラフィックであるプロキシには不適切です。entropy_policyのデフォルトはwarnです。テキストフィルターのエントロピーヒューリスティックは、散文に隠されたエンコード済みペイロードを探しますが、ツールの引数は日常的に構造化されています — パス、識別子、ハッシュ — そこでは高いエントロピーが普通です。一時ディレクトリのパスだけでも、正当な呼び出しが拒否される原因になりました。引数が本当に散文である場合にのみblockに設定してください。
これが行わないこと
凍結された定義に対する呼び出しの検証と、引数および結果の検査は行います。サーバーのソースコードは読みません。したがって、存在し、呼び出され、そして黙って何もしないチェックを発見することはできません。それには依然として、誰かが実装を読む必要があります。
また、改ざんされた上流が正しい形式のデータを返す場合も防ぐことはできません。sovereign-mcp の Layer C コンセンサスはこの問題に対処しており、モデルプロバイダーを自分で設定する必要があります。
ライセンス
Business Source License 1.1 — LICENSE を参照してください。
ソースコードは公開されています。読むこと、変更すること、二次的著作物を作成すること、開発・評価・その他の本番環境以外の目的で無償で使用することができます。
本番環境での使用も無料です。個人、または4人以下の組織であれば、ライセンスに Additional Use Grant として明記されており、ここでの記載だけではありません。それより大きな組織は商用ライセンスが必要です。
各バージョンは、公開から4年後の Change Date に Apache 2.0 に移行します。
本番環境での使用のためにライセンスを取得する場合、または使用にライセンスが必要かどうかを確認する場合: contact@sovereign-shield.net
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceCentralized MCP control plane that proxies multiple upstream MCP servers with tool namespacing, filtering, policy enforcement, audit logging, and health checks.7MIT
- AlicenseNot gradedqualityCmaintenanceAuthenticating reverse proxy for MCP servers providing credential isolation, OAuth2 token management, and composite tool aggregation.BSD Zero Clause
- AlicenseNot gradedqualityBmaintenanceA least-privilege enforcement proxy for MCP servers. It sits between MCP clients and upstream servers, enforcing tool policies, hiding denied tools, requiring human approval for risky actions, and providing a structured audit trail.MIT
Related MCP Connectors
A paid remote MCP for hosted MCP server, built to return verdicts, receipts, usage logs, and audit-r
Hosted AgentLux MCP server for marketplace, identity, creator, services, and social flows.
Remote MCP for A2A caller identity, scope policy, verdict receipts, and audit history.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/mattijsmoens/sovereign-mcp-gateway'
If you have feedback or need assistance with the MCP directory API, please join our Discord server