mcp-exports
mcp-exports
Gemeinsamer Download-Host für Einmal-Downloads der hauseigenen MCP-Server.
https://exports.example.com · Host-Port 8114 · kein Kunden-Login
MCP server --POST /put (service token)--> mcp-exports --> download URL
customer --GET /d/{token} (no auth) --> mcp-exports --> the file, onceWarum es das gibt
Ein Tool, das eine Woche Anrufdatensätze inline zurückgibt, kostet ~530.000 Tokens; dieselben Daten als CSV sind 1 MB groß und in 1,6 Sekunden erstellt. Exporte geben also einen Link zurück. Die erste Version stellte diesen Link vom MCP-Server selbst bereit, was auf dreierlei Weise kaputtging:
Die MCP-Hosts liegen hinter einer IP-Allowlist, die nur Anthropic zulässt, aber das, was einen Download abruft, ist der Browser eines Kunden von einer beliebigen Adresse aus. Ein separater Hostname verhindert, dass die beiden Zugriffsrichtlinien in Konflikt geraten, anstatt eine Pfad-Ausnahme aus einer Proxy-Konfiguration herauszuschneiden, die auch die Streaming-Einstellungen enthält, die MCP braucht.
MCP-Container werden bei jedem Push neu bereitgestellt, und ein In-Memory-Speicher starb mit ihnen — wodurch Live-Links mitten im Gespräch ungültig wurden.
Der Speicher gehörte zu einem einzigen Prozess, sodass ein zweiter Worker zufällig 404 lieferte.
Related MCP server: agent-secret
Sicherheitsmodell, klar gesagt
Eine Download-URL ist eine Capability: Wer sie besitzt, bekommt die Datei, ohne Login. Derselbe Trade-off wie bei den NetSapiens-Aufnahme-URLs und den Odoo-Portal-PDFs, die wir bereits ausgeben, und genau das sorgt dafür, dass ein Link funktioniert, wenn er aus einem Chat-Fenster heraus angeklickt wird. Es ist keine Authentifizierung, und die Schwächen sind real — eine URL kann weitergeleitet, von einem Proxy protokolliert werden oder für immer in einem Transkript stehen.
Das Design stützt sich also auf das, was tatsächlich hilft:
Kontrolle | Warum |
Einmalnutzung (Standard: | Die Bytes werden gelöscht, sobald sie abgeholt wurden, also ist ein danach durchgesickerter Link bereits tot. Die stärkste verfügbare Kontrolle, denn eine Capability-URL lässt sich nicht zurücknehmen. |
Kurze TTL — 1 h bei Daten, 15 min bei Finanzdaten | Verkleinert das Zeitfenster. Finanzdaten bekommen weniger davon. |
256-Bit- | Nicht erratbar, nicht enumerierbar |
Identische 404 für fehlend / fehlerhaft / abgelaufen / verbraucht | Aus dem Unterschied ist nichts zu lernen. |
| Ein HTML- oder SVG-Export darf auf unserer Origin niemals gerendert werden — das würde diesen Host zu einem Stored-XSS-Vektor machen. |
| Nicht gecacht, nicht indiziert, kein Referer-Leak |
Zugriffsprotokoll mit nur Token-Präfix | Genug, um Upload↔Download zu korrelieren; nicht genug, um aus einem Protokoll, das mehr Menschen lesen können als die Datei, eine funktionierende URL zu rekonstruieren. |
Das Hochladen ist authentifiziert — ein Bearer-Token pro Server, denn das Veröffentlichen von Dateien auf einem öffentlichen Host ist nichts, was das Internet einfach so tun darf. Der Dienst weigert sich zu starten, wenn die Allowlist leer ist.
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 heldttl wird gekappt, nicht befolgt — fragst du nach einer Woche, bekommst du MCP_EXPORTS_TTL_MAX, und die Antwort sagt dir, was du tatsächlich bekommen hast.
Nutzung aus einem MCP-Server heraus
Kopiere client/export_client.py in den Server und setze MCP_EXPORTS_URL + MCP_EXPORTS_TOKEN. ExportClient.from_env() gibt None zurück, wenn nicht konfiguriert, sodass ein Server Export-Tools nur dort anbieten kann, wo der Host tatsächlich angebunden ist, anstatt ein Tool zu bewerben, das immer fehlschlägt.
Er wirft eine Exception, anstatt auf Inline-Zeilen zurückzufallen: Wenn der Host down ist, gibt es keine sichere Degradation, denn das Zurückgeben der Zeilen ist genau der Fehlermodus, den Exporte verhindern sollen.
Deployment
Portainer → Stacks → Repository, refs/heads/main, Port 8114. Generiere ein Token pro MCP-Server:
python -c "import secrets; print(secrets.token_urlsafe(32))"NPM: exports.example.com → 10.0.0.10:8114, keine Access List (genau das ist der Punkt), Websockets aus, Standard-Timeouts.
Tests
python -m pytest tests -q47 Tests, kein Netzwerk. Sie decken gezielt die Sicherheitseigenschaften ab: Einmalnutzung löscht tatsächlich Bytes, jede ungültige Token-Form ist ununterscheidbar, Dateinamen können nicht ausbrechen oder Header injizieren, die Finanz-TTL ist kürzer, und das Dockerfile führt chown auf dem Volume-Mount-Punkt aus, bevor es die Root-Rechte ablegt — ohne das käme ein Named Volume im Besitz von root an, und jeder Upload schlüge mit EACCES fehl.
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