mcp-exports
mcp-exports
Host de descarga compartido y de un solo uso para los servidores MCP de la casa.
https://exports.example.com · puerto del host 8114 · sin inicio de sesión para clientes
MCP server --POST /put (service token)--> mcp-exports --> download URL
customer --GET /d/{token} (no auth) --> mcp-exports --> the file, oncePor qué existe
Una herramienta que devuelve una semana de registros de llamadas en línea cuesta ~530 000 tokens; los mismos datos como CSV pesan 1 MB y se generan en 1,6 segundos. Por eso las exportaciones devuelven un enlace. La primera versión servía ese enlace desde el propio servidor MCP, lo que fallaba de tres maneras:
Los hosts MCP están detrás de una lista de permisos de IP solo de Anthropic, pero quien descarga un archivo es el navegador de un cliente desde una dirección arbitraria. Un nombre de host separado evita que las dos políticas de acceso se pisen, en lugar de abrir una excepción de ruta en una configuración de proxy que además lleva los ajustes de streaming que MCP necesita.
Los contenedores MCP se vuelven a desplegar en cada push, y un almacén en memoria moría con ellos, invalidando enlaces activos a mitad de una conversación.
El almacén pertenecía a un solo proceso, así que un segundo worker daba 404 al azar.
Related MCP server: agent-secret
Modelo de seguridad, dicho claro
Una URL de descarga es una capacidad: quien la tenga consigue el archivo, sin inicio de sesión. Misma disyuntiva que las URLs de grabaciones de NetSapiens y los PDF del portal de Odoo que ya repartimos, y es lo que hace que un enlace funcione al hacer clic desde una ventana de chat. No es autenticación, y las debilidades son reales: una URL puede reenviarse, quedar registrada en un proxy o permanecer en una transcripción para siempre.
Así que el diseño se apoya en lo que de verdad ayuda:
Control | Por qué |
Un solo uso (por defecto | Los bytes se eliminan al descargarse, así que un enlace filtrado después ya está muerto. El control más fuerte disponible, porque una URL de capacidad no se puede dejar de compartir. |
TTL corto — 1 h datos, 15 min financiero | Reduce la ventana. El dinero recibe menos. |
Tokens de 256 bits | No se pueden adivinar ni enumerar |
404 idéntico para ausente / malformado / caducado / gastado | Nada que se pueda deducir de la diferencia |
| Una exportación HTML o SVG nunca debe renderizarse en nuestro origen: eso convertiría este host en un vector de XSS almacenado |
| Sin caché, sin indexar, sin fugas de referer |
Registro de acceso con solo el prefijo del token | Suficiente para correlacionar subida↔descarga; no suficiente para reconstruir una URL funcional a partir de un registro que más gente puede leer que el propio archivo |
La subida está autenticada — un token bearer por servidor, porque publicar archivos en un host público no es algo que se le permita a Internet. El servicio se niega a arrancar con una lista de permisos vacía.
API
POST /put?filename=x.csv&sensitivity=data|financial&customer=Acme%20Movers
&ttl=3600&max_downloads=1
Authorization: Bearer <server token>
-> 201 {download_url, filename, size, expires_in_seconds, expires_at,
max_downloads, single_use}
GET /d/{token} -> 200 the file (then it is gone), or 404
GET /healthz -> counters + bytes heldEl ttl se limita, no se obedece — pide una semana, recibe MCP_EXPORTS_TTL_MAX, y la respuesta te dice lo que realmente has recibido.
Cómo usarlo desde un servidor MCP
Copia client/export_client.py en el servidor y define MCP_EXPORTS_URL + MCP_EXPORTS_TOKEN. ExportClient.from_env() devuelve None cuando no está configurado, de modo que un servidor puede ofrecer herramientas de exportación solo donde el host esté realmente conectado, en lugar de anunciar una herramienta que siempre falla.
Lanza una excepción en lugar de degradarse a filas en línea: si el host está caído no hay degradación segura, porque devolver las filas es el modo de fallo que las exportaciones existen para evitar.
Despliegue
Portainer → Stacks → Repository, refs/heads/main, puerto 8114. Genera un token por servidor MCP:
python -c "import secrets; print(secrets.token_urlsafe(32))"NPM: exports.example.com → 10.0.0.10:8114, sin Lista de Acceso (esa es la gracia), Websockets desactivados, timeouts estándar.
Pruebas
python -m pytest tests -q47 pruebas, sin red. Cubren específicamente las propiedades de seguridad: el uso único borra los bytes de verdad, todas las formas de token inválido son indistinguibles, los nombres de archivo no pueden escapar ni inyectar cabeceras, el TTL financiero es más corto, y el Dockerfile hace chown del punto de montaje del volumen antes de soltar el usuario root — sin lo cual un volumen con nombre llegaría con propietario root y cada subida fallaría con EACCES.
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
- AlicenseAqualityFmaintenanceProvides secure OAuth2-based credential management for MCP servers, allowing agents to obtain short-lived token references without exposing raw secrets.718MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for one-time secret sharing, enabling AI agents to securely claim and store secrets (e.g., API keys) via claim codes without exposing them in chat transcripts.3MIT
- FlicenseNot gradedqualityBmaintenanceEnables sharing self-contained HTML files via public or access-key-protected private links. Provides MCP tools to create shares, retrieve public share metadata, and describe the service.2
- FlicenseNot gradedqualityBmaintenanceMCP server for end-to-end encrypted secret storage and retrieval, enabling LLM agents to fetch secrets by name via one-time URLs while keeping plaintext out of model context and logs.1
Related MCP Connectors
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Remote MCP for C2PA intake verifier MCP, structured receipts, audit logs, and reviewer-ready evidenc
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/JohnGilligan2/mcp-exports'
If you have feedback or need assistance with the MCP directory API, please join our Discord server