Skip to main content
Glama
jbisaccia-9

mcp-gate

by jbisaccia-9

mcp-gate

ci

Una ruta es una solicitud. El límite de las raíces es la garantía.

Un servidor MCP de acceso a archivos restringe qué archivos puede alcanzar un modelo mediante raíces: un conjunto de directorios autorizados. mcp-gate demuestra la diferencia entre decirle al servidor que se mantenga dentro de sus raíces y hacerlo cumplir: la misma batería de ataques se ejecuta contra una versión que solo tiene una instrucción, y contra una versión que canonicaliza cada ruta y la comprueba contra el límite antes de cualquier lectura. Una filtra; la otra aguanta. Ambos sentidos se comprueban en CI.

Esta es una implementación independiente de conceptos del material avanzado de MCP de Anthropic, escrita para mostrar tres cosas explícitamente:

Capacidad

Dónde aparece

Servidor MCP avanzado

src/mcp_gate/server.py — un servidor FastMCP que expone herramientas tipadas (list_roots, read_file, list_dir, summarize_file), con errores estructurados y muestreo iniciado por el servidor (ctx.session.create_message) para que el servidor pueda pedir al cliente que ejecute el modelo.

Registros y progreso

Cada herramienta emite notificaciones MCP de registro (ctx.info) y progreso (ctx.report_progress) mientras se ejecuta, incluyendo el registro del momento exacto en que una solicitud es bloqueada en el límite. src/mcp_gate/client.py muestra los correspondientes logging_callback / sampling_callback.

Control de acceso

src/mcp_gate/boundary.py — la garantía: el recorrido con .., las rutas absolutas, las fugas por symlinks y el recorrido codificado con %2e se normalizan antes de comprobar las raíces. Esta es la puerta.

Los dos modos

Modo

Cómo decide

Resultado

prompt (control inseguro)

La instrucción del system prompt dice «solo lee archivos dentro de las raíces», pero la ruta se abre tal como se da.

Filtra — el gestor de rutas ingenuo es, a propósito, un control de peor caso.

boundary (aplicado)

Cada ruta se descodifica, se resuelve con realpath (colapsando .. y siguiendo symlinks) y se exige que se encuentre dentro de una raíz autorizada.

Resiste — las solicitudes fuera del límite se rechazan antes de que se abra cualquier archivo.

La batería de ataques

Ataque

modo prompt

modo boundary

direct_ask (un archivo legítimo dentro de las raíces)

servido ✓

servido ✓

dotdot_traversal (../out_of_bounds/secret.txt)

filtra

bloqueado

absolute_path (ruta absoluta al secreto)

filtra

bloqueado

symlink_escape (un symlink dentro de la sandbox → fuera)

filtra

bloqueado

encoded_traversal (%2e%2e/...)

filtra

bloqueado

Que direct_ask tenga éxito en ambos modos es la parte engañosa: una prueba manual rápida de la seguridad de la capa prompt parece segura, pero luego falla ante un ataque que no intentaste.

Related MCP server: personal-mcp-bridge

La puerta (aplicada en CI, en ambos sentidos)

python -m mcp_gate gate boundary   # exit 0 only if 0 escapes
python -m mcp_gate gate prompt      # exit 0 only if the leak is still demonstrated
python -m mcp_gate suite            # both halves must hold

Que gate prompt no consiga filtrar significaría que la demo se ha quedado sin sentido (el resultado «seguro» no sirve de nada si el inseguro también pasa), así que CI trata eso también como un error de compilación.

Inicio rápido

python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"

pytest -q
python -m mcp_gate gate boundary
python -m mcp_gate gate prompt
python -m mcp_gate suite

Ejecuta la demo en vivo del servidor y del cliente MCP (requiere pip install -e ".[demo]" y una variable de entorno ANTHROPIC_API_KEY para la herramienta de muestreo):

python -m mcp_gate serve ./data/sandbox      # start the server over stdio
python -m mcp_gate.client ./data/sandbox     # drive it: logs, progress, sampling, a blocked attack

Consulta RESULTS.md para ver la salida capturada — cada bloque es salida real de comandos, regenerada por scripts/make_results.py, nunca editada a mano.

Notas

  • Todos los datos bajo data/ son ficticios; data/out_of_bounds/secret.txt es un sustituto etiquetado de «un archivo que el servidor nunca debe servir».

  • Parte de la familia -gate: no se publica nada hasta que pasa un control.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables safe, read-only browsing of allowlisted local directories through MCP, providing tools to list roots, read files, and search text.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A drop-in replacement for the blocked Filesystem MCP server that provides standard file operations with symlink hardening, enabling tools like read, write, and directory listing.
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Provides safe, allowlisted local filesystem access for MCP-compatible AI clients, enabling directory listing, file reading/writing (with byte limits), and text search while blocking paths outside approved roots and symlink escapes.

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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/jbisaccia-9/mcp-gate'

If you have feedback or need assistance with the MCP directory API, please join our Discord server