Skip to main content
Glama
JohnGilligan2

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 秒就能生成。所以导出功能返回的是一个链接。第一个版本设想让导出服务自身直接提供这个链接,结果在三个方面失效:

  1. MCP 主机位于 Anthropic 专属的 IP 白名单之后,而真正下载文件的是客户在任意地址上的浏览器。一个独立的主机名才能让两套访问策略互不干扰,而不是在早已承载了 MCP 所需流式设置的代理配置里硬挖一条绕过路径。

  2. MCP 容器每次 push 都会重新部署,内存中的存储也随之销毁——对话进行中间,已发出的链接也会失效。

  3. 存储归属于某一个进程,第二个 worker 就会随机返回 404。

Related MCP server: agent-secret

安全模型:直说

下载 URL 就是一种能力(capability):谁拿到它就能拿到文件,不需要登录。这与我们已经在发放的 NetSapiens 录音 URL、Odoo portal PDF 是同一个取舍,也正是这一点能否让链接在聊天窗口里被点击后直接工作的原因。它不是身份凭证,弱点也真实存在——URL 会被转发、被代理记入日志,或者在聊天记录里永久留存。

所以整个设计都依赖那些真正有用的措施:

控制

原因

单次使用(默认 max_downloads=1

数据在下载完成后即被删除,之后再泄漏的链接已经失效。这是能付诸实际执行的最强控制,因为一个能力 URL 永远无法再“取消分享”。

TTL 很短 —— 一般数据 1 小时,金融数据 15 分钟

压缩了链接暴露的窗口;金融数据的窗口更短。

256 位 secrets.token_urlsafe token

不可猜测、不可枚举。

缺失 / 畸形 / 过期 / 已用的都为同一个 404

响应差异,任何人能完全一无所获。

始终设定 Content-Disposition: attachment

HTML 或 SVG 导出绝不可以在我们源站上被直接渲染,否则这个主机就成了存储型 XSS 的载体。

no-storenoindexnosniffno-referrer

不被缓存、不被收录、不泄漏 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 held

ttl受限制,不是照做——请求一周,给的是 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.com10.0.0.11:8114无 Access List(这正是我们留下这条记录的根本效果),Websockets 关闭,其他超时默认。

测试

python -m pytest tests -q

47 个测试,不依赖网络。覆盖在这些安全细节的特意性:单次使用,文件真的删除;任何错误 token 形状丑化了无法区分;文件名不会导致路径逃逸或 header 注入;金融型的 TTL 确实更短;以及 Dockerfile 在放弃 root 前进行中就先行对挂载点执行 chown——否则命名卷会以 root 选项来进入系统,然后每个上传都回报 EACCES

F
license - not found
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
    A
    quality
    F
    maintenance
    Provides secure OAuth2-based credential management for MCP servers, allowing agents to obtain short-lived token references without exposing raw secrets.
    7
    18
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP 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.
    3
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables 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
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP 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

View all related MCP servers

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

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/JohnGilligan2/mcp-exports'

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