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 이슈를 읽는데, 그 본문에 사용자가 아닌 모델을 겨냥한 지시가 담겨 있습니다. 에이전트는 설득당해 git_commit을 호출합니다.
이후 커밋 수 | 주입된 커밋 존재 | |
| 2 | 예 |
게이트웨이 경유 | 1 | 아니요 |
같은 도구, 같은 인자, 같은 서버입니다. 차이는 거부할 수 있는 위치에 무엇이 있었는지입니다.
전체 과정 보기: 에이전트가 이슈를 읽습니다 — 또는 직접 실행하세요:
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 layer네 가지 추가 기능은 모두 작은 순수 Python 패키지입니다 — [all]은 컴파일된 종속성이나 실행할 서비스를 추가하지 않습니다.
부분 설치는 눈에 띄게 저하됩니다. 게이트웨이는 시작 시 활성 계층을 출력하므로 실제로 실행 중인 항목을 항상 확인할 수 있습니다:
layers: policy -> frozen-verify -> audit # base
layers: policy -> intent -> text-filter -> frozen-verify -> audit # [all]해당 줄에 계층이 없으면 실행 중이 아닌 것입니다 — 무엇을 설치했다고 생각하든 간에요.
종단 간 검증
실제 업스트림으로 실행 중인 mcp-server-git 및 mcp-server-sqlite에 대해, 실제 MCP 클라이언트로 구동:
호출 | 결과 |
| 허용 |
| 허용 — 행이 실제로 데이터베이스에 있음 |
| 거부: 차단 목록에 있음 |
| 거부: 노출하는 업스트림이 없음 |
| 거부: 고정된 스키마에 대해 잘못된 유형 |
| 거부: 텍스트 필터 |
| 거부: 다른 업스트림의 네임스페이스를 통해 도구에 도달할 수 없음 |
그 후에도 저장소에는 여전히 커밋이 하나 있고 데이터베이스에는 정확히 있어야 할 행만 있습니다 — 게이트웨이 자체 보고를 신뢰하지 않고 직접 열어서 확인했습니다. 10번의 호출에 대한 감사 레코드 11개; 그중 하나라도 편집하면 체인이 끊어집니다.
이러한 사례는 스크린샷이 아닌 테스트 스위트입니다: 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"}
]
}
}두 가지 공급자 유형: local(OpenAI 호환 엔드포인트 — Ollama, vLLM, LM Studio; base_url은 기본적으로 http://localhost:11434/v1) 및 openrouter(키는 명명된 환경 변수에서 읽히며 구성에 절대 기록되지 않음).
게이트웨이가 런타임에 발견하는 대신 시작 시 적용하는 세 가지 규칙:
최소 두 개의 공급자. 하나의 모델은 스스로 의견이 다를 수 없습니다. 하나의 합의는 모든 호출에서 일치를 보고하는데, 이는 검증처럼 보이기 때문에 계층이 없는 것보다 나쁩니다.
중복 모델 없음. 동일한 모델의 인스턴스 두 개가 일치하는 것은 독립적인 검증이 아닙니다.
API 키가 없으면 시작을 거부합니다. 계층 없이 실행하는 것으로 대체되지 않습니다.
모든 공급자는 생성자에서 적용되는 temperature = 0으로 실행됩니다.
계층을 신뢰하기 전에 모델이 일치하는지 확인하세요
--check는 구성된 모델에 대해 한 번의 실제 합의 호출을 실행하고 무슨 일이 있었는지 알려줍니다. 이것은 생각보다 중요합니다:
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.합의는 정규화된 해시를 비교하므로 의미적으로는 모두 맞지만 구조적으로 다른 두 모델은 절대 일치하지 않습니다. 스키마를 그대로 반영하는 약한 모델은 —
{"branch": {"type": "string", "value": "main"}} instead of {"branch": "main"}— 모든 호출에서 항상 불일치하며, 게이트웨이는 "모델이 동의하지 않음"으로 정확히 읽히는 이유로 모든 것을 거부합니다. 실제로 그랬으니까요.
프로브는 세 가지 결과를 구분합니다:
의미 | |
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로 노출됩니다. 동일한 도구 이름을 제공하는 두 업스트림은 충돌하거나 서로를 가리거나 잘못된 네임스페이스를 통해 도달할 수 없습니다. 업스트림이 하나뿐인 경우에만 끄세요.
정책
"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는 기본적으로block이 아닌warn입니다. 실제 도구는 개인 데이터를 일반 출력으로 반환합니다 — 모든git log항목에는 작성자 이메일이 포함되며 — 이를 차단하면 게이트웨이를 사용할 수 없게 됩니다. 도구가 PII를 절대 내보내지 않아야 하는 경우block으로 설정하세요.fail_closed는 계층 자체에서 오류가 발생할 때 수행할 작업을 결정합니다. 기본값: 거부.rate_limit_interval은0이며, 이는 동작 기준의 자체 상호 작용 지연을 비활성화합니다. 이 지연은 신중한 단계를 수행하는 단일 에이전트에게는 적합하지만, 도구 호출의 폭주가 일반적인 트래픽인 프록시에는 적합하지 않습니다.entropy_policy는 기본적으로warn입니다. 텍스트 필터의 엔트로피 휴리스틱은 산문에 숨겨진 인코딩된 페이로드를 찾지만, 도구 인수는 일반적으로 구조화되어 있어(경로, 식별자, 해시) 높은 엔트로피가 정상입니다. 임시 디렉터리 경로만으로도 합법적인 호출이 거부될 수 있었습니다. 인수가 실제로 산문인 경우block으로 설정하세요.
이 도구가 하지 않는 것
고정된 정의에 대해 호출을 검증하고 인수와 결과를 검사합니다. 서버의 소스를 읽지 않으므로 존재하고 호출되며 조용히 아무것도 하지 않는 검사를 볼 수 없습니다. 그것은 여전히 누군가 구현을 읽어야 합니다.
또한 손상된 업스트림이 정상적으로 보이는 데이터를 반환하는 경우도 막을 수 없습니다 — sovereign-mcp의 Layer C 합의가 이를 해결하며, 직접 구성한 모델 제공자가 필요합니다.
라이선스
Business Source License 1.1 — LICENSE 참조.
소스는 공개되어 있습니다. 무료로 읽고, 수정하고, 2차 저작물을 만들고, 개발, 평가 및 기타 비생산 목적으로 사용할 수 있습니다.
생산 사용도 무료입니다. 개인 또는 4인 이하 조직의 경우 — 이는 여기에만 명시된 것이 아니라 라이선스에 추가 사용 허가로 명시되어 있습니다. 더 큰 조직은 상업용 라이선스가 필요합니다.
각 버전은 게시일로부터 4년 후인 변경일에 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