Zero Trust
para tus
servidores MCP
Bringing
Zero Trust
to MCP

MCPZT es una capa de seguridad open source y autoalojada que se sitúa entre tu cliente o agente y tus servidores MCP reales. Decide qué puede descubrir, llamar, enviar, recibir, aprobar y auditar un agente. MCPZT is an open-source, self-hosted security layer that sits between your client or agent and your real MCP servers. It decides what an agent can discover, call, send, receive, approve and audit.

$pip install mcp-zero-trust-layer
$ mcpzt run --config mcpzt.yaml
tools/list · 3 shown, 2 hidden
tools/call merge_pr require_approval ⏸
tools/call run_sql SELECT… allow ✓
tools/call run_sql DROP… deny ✗
resources/read customer redact ◑
audit.jsonl · hash-chain + hmac
// deterministic. boring. auditable.
01

Descubrir y filtrarDiscover & Filter

Oculta capacidades de tools/list, resources/list y prompts/list según identidad y contexto. El agente solo ve las herramientas que la política permite.Hide capabilities from tools/list, resources/list and prompts/list per identity and context. An agent only sees the tools policy allows.

Ver másRead more
02

Validar y aprobarValidate & Approve

Bloquea llamadas antes de llegar al upstream, valida argumentos y exige aprobación humana de un solo uso para acciones de alto riesgo.Block calls before they reach the upstream, validate arguments, and require single-use human approval for high-risk actions.

Ver másRead more
03

Redactar y auditarRedact & Audit

Redacta salida sensible por campo o por patrón y escribe un log de auditoría con HMAC, resistente a manipulación, de cada decisión.Redact sensitive output by field or pattern, and write a tamper-evident, HMAC-keyed audit log of every decision.

Ver másRead more
El problemaThe problem

No toda herramienta es inofensivaNot every tool is harmless

Un servidor MCP puede exponer capacidades muy potentes. search_issues es inofensivo; merge_pull_request, run_sql, delete_repository, read_secret o create_refund tienen impacto operativo real. Si un cliente se conecta directo al MCP, puede listar y llamar más de lo que la persona o la organización pretendía.An MCP server can expose very powerful capabilities. search_issues is harmless; merge_pull_request, run_sql, delete_repository, read_secret or create_refund have real operational impact. If a client connects straight to the MCP, it can list and call more than the user or organization intended.

run_sqlmerge_pull_requestread_secretcreate_refunddelete_repository
La soluciónThe solution

Un punto de control delanteOne control point in front

MCPZT añade una capa de política delante del servidor. Oculta capacidades de tools/list, bloquea llamadas antes de que lleguen al upstream, valida argumentos, exige aprobación humana para acciones de alto riesgo, redacta salida sensible y escribe logs de auditoría que explican cada decisión.MCPZT adds a policy layer in front of the server. It hides capabilities from tools/list, blocks calls before they reach the upstream, validates arguments, requires human approval for high-risk actions, redacts sensitive output and writes audit logs explaining every decision.

No es un SaaS. Corre en local, en Docker, en CI, como gateway interno, como sidecar o como wrapper stdio. La configuración es YAML plano, revisable en una pull request y versionada con el proyecto que protege.It is not a SaaS. It runs locally, in Docker, in CI, as an internal gateway, as a sidecar or as a stdio wrapper. Configuration is plain YAML, reviewable in a pull request and versioned with the project it protects.

Gobierna cada
llamada MCP
Govern every
MCP call

Determinista · Aburrido · AuditableDeterministic · Boring · Auditable

MCPZTMCPZTMCPZTMCPZT
Explicación técnicaTechnical explanation

Un enforcement point entre cliente y servidorAn enforcement point between client and server

MCPZT se sitúa en el camino de cada mensaje MCP. Trata cada interacción como algo a evaluar: identidad, política, argumentos, aprobaciones, enforcement de salida y auditoría. Determinista y explicable: siempre puede decir por qué permitió, denegó o creó una aprobación.MCPZT sits on the path of every MCP message. It treats each interaction as something to evaluate: identity, policy, arguments, approvals, output enforcement and audit. Deterministic and explainable: it can always say why it allowed, denied or created an approval.

🤖 Cliente MCP / AgenteMCP client / Agent
peticiónrequest respuestaresponse
MCP Zero Trust Layer deterministadeterministic
1identityquién llama — token, JWT u OIDCwho is calling — token, JWT or OIDC
2policypermitir, denegar, ocultar, aprobar…allow, deny, hide, approve…
3validatorsargumentos seguros — SQL, rutas, URLssafe arguments — SQL, paths, URLs
4approvalsvisto bueno humano, de un solo usohuman sign-off, single-use
5outputredactar, limitar o bloquear la respuestaredact, limit or block the response
6auditregistro JSONL con HMAC de cada decisiónHMAC-keyed JSONL log of every decision
🗄️ Servidor MCP realReal MCP server
base de datos · repositorio · filesystem · CRM · API de pagos · sistema internodatabase · repository · filesystem · CRM · payment API · internal system

Cómo se evalúa una peticiónHow a request is evaluated

Cada mensaje MCP atraviesa un pipeline determinista. Cada paso queda explicado en el log de auditoría: por qué se permitió, por qué se denegó, por qué se creó una aprobación y si el upstream fue contactado.Every MCP message flows through a deterministic pipeline. Each step is explained in the audit log: why a call was allowed, why it was denied, why an approval was created, and whether the upstream was contacted.

1IdentidadIdentityToken, JWT u OIDCToken, JWT or OIDC
2PolíticaPolicyMatch + precedenciaMatch + precedence
3ValidadoresValidatorsArgs + inputArgs + input
4AprobaciónApprovalHumano, 1 usoHuman, single-use
5UpstreamMCP realReal MCP
6SalidaOutputRedact / limit / denyRedact / limit / deny
7AuditoríaAuditJSONL + HMACJSONL + HMAC

Tú tienes el controlYou have the control

Nosotros solo hacemos que cada interacción MCP sea explicable y aplicable. Configuración YAML versionable, revisable en una pull request.We just make every MCP interaction answerable and enforceable. Plain YAML config, versioned and reviewable in a pull request.

8Efectos de políticaPolicy effects
7ValidadoresValidators
5Modos de authAuth modes
100%Cobertura de testsTest coverage

Todo lo que haceEverything it does

Un punto de control determinista para MCP. Entiende tools/list, tools/call, resources/list, resources/read, prompts/list y prompts/get, y los mapea a un contexto de política consistente.A deterministic control point for MCP. It understands tools/list, tools/call, resources/list, resources/read, prompts/list and prompts/get, mapping them to a consistent policy context.

DescubrimientoDiscoverylist
  • Filtrado de capacidades por identidad y contextoCapability filtering per identity and context
  • Descubrimiento de upstreamsUpstream capability discovery discover
  • Detección de driftDrift detection diff
  • Escaneo determinista de riesgoDeterministic risk scan scan
  • Metadatos: action, risk, access, tags, data_classificationMetadata: action, risk, access, tags, data_classification
Motor de políticasPolicy enginecore
  • 8 efectos8 effects: deny · hide · require_approval · redact · limit · transform · allow · log
  • Matching exacto y semántico + precedenciaExact & semantic matching + precedence
  • Condiciones when sobre args/identidad/metadata/outputConditions when over args/identity/metadata/output
  • Explicación y coberturaExplanation & coverage policy explain/coverage/risks/unused
  • Adaptador OPA externo, fail-closedExternal OPA adapter, fail-closed
ValidadoresValidatorsargs
  • sql_read_onlysolo lectura, anti-bypassread-only, anti-bypass
  • filesystem_path · url (SSRF) · email · regex
  • required_forbidden_fields · max_field_bytes
  • Bloque input: campos permitidos/requeridos, valores, límitesinput block: allowed/required fields, values, limits
  • Fallan cerrado ante error, con timeout de DNSFail closed on error, with DNS timeout
AprobacionesApprovalshuman
  • Efecto require_approval, ligado a los argumentosrequire_approval effect, argument-bound
  • De un solo uso: sin replay dentro del TTLSingle-use: no replay within the TTL
  • UI autoalojada con auth y separación de funcionesSelf-hosted UI with auth & separation of duties
  • Almacén en fichero o SQLite; webhooksFile or SQLite store; webhooks
  • approve list/show/allow/deny/serve
SalidaOutput enforcementoutput
  • redact_fieldspor clave, a cualquier profundidadby key, at any depth
  • redact_patternspor patrón dentro del textoby pattern inside text
  • deny_if_matches · max_bytes · include_fields
  • Se aplica a result y a errorApplies to result and error
AuditoríaAuditjsonl
  • JSONL con cadena de hashes + HMAC + secuenciaJSONL with hash-chain + HMAC + sequence
  • Fichero 0600 y escritura bajo lock exclusivo0600 file, appended under an exclusive lock
  • Redacción recursiva de secretosRecursive secret redaction
  • audit tail/search/verify
Identidad y secretosIdentity & secretsauth
  • AuthAuth: none · static_token · api_key · jwt · oidc
  • Scopes y claims; comparación en tiempo constanteScopes & claims; constant-time comparison
  • Refs de secretosSecret refs: env: ${VAR} file: op:// aws-sm:// vault://
  • Credenciales de upstream separadas del clienteUpstream credentials kept separate from the client
TransportesTransportsruntime
  • Proxy HTTP (Streamable HTTP POST)HTTP proxy (Streamable HTTP POST)
  • Wrapper stdio para MCP por comandoStdio wrapper for command-based MCP
  • Enrutado multi-MCPMulti-MCP routing /mcp/{server}
  • Pipeline en threadpool; límites de tamaño; Origin/hostsThreadpool pipeline; size bounds; Origin/hosts
Operación y despliegueOps & deploydevops
  • Métricas Prometheus; diagnósticoPrometheus metrics; diagnostics doctor
  • config validate/lint · onboard · demo
  • Importa configs de Claude Desktop, Cursor y VS CodeImport Claude Desktop, Cursor & VS Code configs client import
  • Docker (no-root), Compose y chart Helm con PVCDocker (non-root), Compose & Helm chart with PVC

Referencia de la CLICLI reference

Dos nombres de comando: mcpzt para el día a día y mcp-zero-trust-layer como nombre completo.Two command names: mcpzt for daily use and mcp-zero-trust-layer as the full name.

ArranqueGetting started

initconfig inicialstarter config
versionversiónversion
demodemo ejecutablerunnable demo
runproxy HTTPHTTP proxy
wrapwrapper stdiostdio wrapper
doctordiagnósticodiagnostics

Config y políticasConfig & policy

config validatevalidarvalidate
config lintavisoslint findings
discoverdescubrirdiscover
diffdrift
scanriesgorisk
onboardgenerar configgenerate config
policy explainexplicarexplain
policy coverage/risks/unusedanálisisanalysis

Aprobar · Auditar · ClientesApprove · Audit · Clients

approve list/showrevisarreview
approve allow/denydecidirdecide
approve serveUI
audit tail/searchinvestigarinvestigate
audit verifyintegridadintegrity
client configgenerar clientegen client
client importenvolverwrap existing

InstalaciónInstallation

🐍 PyPI
$ pip install mcp-zero-trust-layer $ mcpzt version
⚡ uvx / pipx
$ uvx mcp-zero-trust-layer version $ pipx run mcp-zero-trust-layer version
🐳 Docker · GHCR
$ docker run --rm \ ghcr.io/686f6c61/mcp-zero-trust-layer:0.3.0 version
✅ Verificación✅ Verify
$ mcpzt init --config mcpzt.yaml $ mcpzt config validate --config mcpzt.yaml $ mcpzt demo --output mcpzt-demo # demo locallocal demo
PyPI mcp-zero-trust-layer 0.3.0 License Apache-2.0 Python 3.11 – 3.14 Typed py.typed · mypy Tests 100%
MCP hace fácil que los agentes lleguen a sistemas reales. MCPZT es la capa que faltaba para decidir si deberían.MCP makes it easy for agents to reach real systems. MCPZT is the missing layer that decides whether they should.
MCP Zero Trust Layer Open source · Autoalojado · Sin plano de control SaaSOpen source · Self-hosted · No SaaS control plane
LicenciaLicenseApache-2.0
Python3.11–3.14
ConfigConfigYAML
MetricsPrometheus
DeployDocker · Helm
Última versiónLatest release v0.3.0