mcp-exports
mcp-exports
内部 MCP 服务器共用的单次下载主机。
https://exports.example.com · 主机端口 8114 · 无需客户登录
MCP server --POST /put (service token)--> mcp-exports --> download URL
customer --GET /d/{token} (no auth) --> mcp-exports --> the file, once为什么存在
一个内联返回一周通话记录的工具要消耗 ~530,000 tokens;同样的数据导出成 CSV 只有 1 MB,1.6 秒就能生成。所以导出功能返回的是一个链接。第一个版本设想让导出服务自身直接提供这个链接,结果在三个方面失效:
MCP 主机位于 Anthropic 专属的 IP 白名单之后,而真正下载文件的是客户在任意地址上的浏览器。一个独立的主机名才能让两套访问策略互不干扰,而不是在早已承载了 MCP 所需流式设置的代理配置里硬挖一条绕过路径。
MCP 容器每次 push 都会重新部署,内存中的存储也随之销毁——对话进行中间,已发出的链接也会失效。
存储归属于某一个进程,第二个 worker 就会随机返回 404。
Related MCP server: agent-secret
安全模型:直说
下载 URL 就是一种能力(capability):谁拿到它就能拿到文件,不需要登录。这与我们已经在发放的 NetSapiens 录音 URL、Odoo portal PDF 是同一个取舍,也正是这一点能否让链接在聊天窗口里被点击后直接工作的原因。它不是身份凭证,弱点也真实存在——URL 会被转发、被代理记入日志,或者在聊天记录里永久留存。
所以整个设计都依赖那些真正有用的措施:
控制 | 原因 |
单次使用(默认 | 数据在下载完成后即被删除,之后再泄漏的链接已经失效。这是能付诸实际执行的最强控制,因为一个能力 URL 永远无法再“取消分享”。 |
TTL 很短 —— 一般数据 1 小时,金融数据 15 分钟 | 压缩了链接暴露的窗口;金融数据的窗口更短。 |
256 位 | 不可猜测、不可枚举。 |
缺失 / 畸形 / 过期 / 已用的都为同一个 404 | 响应差异,任何人能完全一无所获。 |
始终设定 | HTML 或 SVG 导出绝不可以在我们源站上被直接渲染,否则这个主机就成了存储型 XSS 的载体。 |
| 不被缓存、不被收录、不泄漏 referer。 |
访问日志只记录 token 前缀 | 既能关联上传和下载,又不足以让日志读者重新构造一个有效 URL——日志不可读,比文件本身见过的人更多。 |
上传是认证的——即一台 server 一台账号对应的 bearer token:发布文件,从来不是整个互联网的家伙都可以。而服务在允许列表为空时拒绝再次启动。
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 是受限制,不是照做——请求一周,给的是 GS_UNSPECIFIED MCP_EXPORTS_TTL_MAX,并让响应用返回实际给到的数值。
用于 MCP server 使用
把 client/export_client.py 复制到 server,再设置 MCP_EXPORTS_URL 以及 MCP_EXPORTS_TOKEN。
ExportClient.from_env() 在没有配置时返回 None,这样你的 server 才能只在 host 真接好了的机器里提供导出工具,而不是真用一个长期会报错的 tool。
当服务出错会抛出异常而不是降级到 inline rows:如果 host 不在的时候不可能存在一种安全降级,因为返回内联行正是导出想避免的那个事故。
部署
Portainer → Stack → Repository,refs/heads/main,端口 8114。给每个 MCP server 各搞一份 token:
python -c "import secrets; print(secrets.token_urlsafe(32))"NPM:exports.example.com → 10.0.0.11:8114,无 Access List(这正是我们留下这条记录的根本效果),Websockets 关闭,其他超时默认。
测试
python -m pytest tests -q47 个测试,不依赖网络。覆盖在这些安全细节的特意性:单次使用,文件真的删除;任何错误 token 形状丑化了无法区分;文件名不会导致路径逃逸或 header 注入;金融型的 TTL 确实更短;以及 Dockerfile 在放弃 root 前进行中就先行对挂载点执行 chown——否则命名卷会以 root 选项来进入系统,然后每个上传都回报 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