OPEN-SOURCE MCP GATEWAY
A control plane for AI tool access.
Warden sits between your MCP clients and your MCP servers. It puts many servers behind one endpoint, screens every tool for poisoning and injection, and traces every call. The detection numbers come from a benchmark you can run yourself, and the measured overhead is under a millisecond.
- 93.5% F1 detection
- ~0.6ms overhead
- MIT · v0.1.0
$ warden-gateway --http ▲ warden v0.1.0 · streamable http ✓ federated 3 servers · 41 tools ⚠ quarantined 1 tool: px__get_weather (tool-poisoning) → listening on http://127.0.0.1:3000/mcp
THE THREAT MODEL
Individual MCP servers can't protect you.
MCP lets your agent call tools, but no single server can see across the others. Warden is the one place every call goes through.
Tool poisoning
A poisoned tool description can hijack your model before a single call is made.
Every description is screened
Prompt injection
A prompt-injected tool result can exfiltrate secrets right past your agent.
Outputs are scanned in flight
No unified control
Ten servers means ten endpoints, ten auth stories, and no shared audit trail.
One gate, one audit log
CORE FEATURES
What Warden does.
Security
Tool-poisoning & prompt-injection detection, per-client and per-tool policy, rate limiting, and approval gates for dangerous tools. Malicious tools are quarantined out of the catalog before your agent ever sees them.
- poisoning & injection detection
- per-client / per-tool policy
- rate limiting
- approval gates
Observability
An OpenTelemetry trace for every tool call, structured JSONL audit logs, and a/metrics endpoint. It adds no overhead when turned off.
Federation
Put many MCP servers behind one endpoint. The tool catalog is unified and namespaced per server, and tools/call routes to the server that owns the tool. Your client connects to one gateway instead of many.
HOW IT WORKS
How a tool call flows through Warden.
Your client connects to one endpoint. Warden screens, routes, and records every call. Clean calls pass through. Poisoned tools are quarantined.
MCP client
Claude, Cursor, any MCP client
Warden
MCP servers
filesystem, github, internal tools, …
Example: a poisoned tool, blocked
$ inspector --cli warden-gateway --method tools/call \ --tool-name px__get_weather --tool-arg city=Berlin MCP error -32600: [warden] tool "px__get_weather" is quarantined
Benchmark results you can reproduce.
Warden ships a security benchmark and a performance harness. Both run against a committed corpus, and you can run them yourself.
Running in 60 seconds.
Works with Claude, Cursor, and any MCP client, over stdio or Streamable HTTP.
# install from npm, no clone needed npm install -g warden-gateway # point warden.config.yaml at your MCP servers, then run: warden-gateway --http # serves http://127.0.0.1:3000/mcp
# warden.config.yaml: point warden at your MCP servers
servers:
- name: filesystem
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem", "."]
- name: github
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
security:
detector:
tier: llm # "heuristic" runs offline with no API key
provider: gemini # or "anthropic"
scanDescriptions: true
scanOutputs: true
mode: blockHTTP mode supports Bearer API-key auth via http.auth.apiKeys or the WARDEN_API_KEYS env var. /healthz stays open for probes; /mcp and /metrics require the key.
The llm detector tier reads GEMINI_API_KEYfrom the environment. If it's missing, Warden logs a warning and runs the heuristic tier only.
Who it's for.
IN ONE SENTENCE
Warden is one endpoint in front of all your MCP servers. It checks every tool before your agent can use it, routes each call to the right server, and records what happened.