OPENAI API · REMOTE MCP

OpenAI Remote MCP 怎么用?接入、审批、OAuth 与安全

Remote MCP 让 Responses API 连接外部工具和数据服务:模型先读取服务器暴露的工具,再按需要调用。生产接入不能只填一个 URL;还要限制工具、保留审批、正确续接 Response、在服务端处理 OAuth,并把第三方服务器返回的内容视为不可信数据。

先给结论

公网 MCP 服务器在 Responses API 工具中使用 type:"mcp" 和 server_url;私有、本地或防火墙后的服务器使用 Secure MCP Tunnel 与 tunnel_id。首次接入建议显式设置 require_approval:"always",并用 allowed_tools 只导入需要的工具。OAuth Token 由你的服务端获取并在每次新建 Response 时重新提供,不能放到浏览器、提示词或日志中。

官方核对入口:MCP servers、Secure MCP Tunnel、Using tools 与 Responses API migration。核对日期:2026-11-01。

先区分四种接入方式

方式配置适用场景主要责任
Remote MCPserver_url公网可访问、支持 MCP 的 HTTPS 服务信任服务器、审批、OAuth、数据最小化
Secure MCP Tunneltunnel_id本地、内网、机房或防火墙后的 MCP隧道生命周期、网络边界和本地服务安全
Function Calling应用定义工具 Schema你自己的后端函数和业务动作应用执行、参数校验、幂等与回传
旧 Connectorconnector_id旧模型兼容集成迁移计划;新模型改用 server_url/tunnel_id

官方文档已将 connector_id 标为对 2026 年 9 月 1 日之后发布的模型弃用;新集成应优先使用 server_url,私有服务器则使用 tunnel_id。不要为了省事把内网 MCP 直接暴露到公网。

服务器需要满足什么条件?

  • Remote MCP 当前需支持 Streamable HTTP 或 HTTP/SSE 传输。
  • 公网端点应使用有效 HTTPS、稳定域名和明确超时;重定向目的地也要受控。
  • 工具名称、描述、输入 Schema 和注解要准确,但客户端仍不能把服务器自报的“只读”当作唯一安全依据。
  • 工具应返回可解析的 MCP 结果和明确错误;失败不能伪装成成功文本。
  • 写操作必须实现服务端授权、幂等和审计,不能只依赖模型或前端确认。

Responses API 在请求里看到 MCP 工具后,会先列出服务器工具并生成 mcp_list_tools。真正调用时会产生 mcp_call,其中包含工具名、参数、输出和错误字段。

安全最小请求:先审批,再执行

curl https://api.openai.com/v1/responses \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-astra",
    "input": "在官方文档中查找 Responses API streaming 链接",
    "tools": [{
      "type": "mcp",
      "server_label": "openai_docs",
      "server_description": "只读搜索 OpenAI 官方开发文档",
      "server_url": "https://developers.openai.com/mcp",
      "allowed_tools": ["search_openai_docs"],
      "require_approval": "always"
    }]
  }'

示例模型与参数来自当前官方文档;模型目录和 MCP 兼容性会变化,上线当天应重新核对。首次接入不要直接复制公开只读示例里的 require_approval:"never" 到生产写入工具。

审批流程如何续接?

当模型准备调用需要审批的工具时,响应中会出现 mcp_approval_request。你的界面应展示服务器、工具名、脱敏后的参数、可能发送的数据和副作用,再由用户或策略引擎决定是否批准。

curl https://api.openai.com/v1/responses \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6-astra",
    "previous_response_id": "resp_123",
    "tools": [{
      "type": "mcp",
      "server_label": "openai_docs",
      "server_url": "https://developers.openai.com/mcp",
      "allowed_tools": ["search_openai_docs"],
      "require_approval": "always"
    }],
    "input": [{
      "type": "mcp_approval_response",
      "approval_request_id": "mcpr_123",
      "approve": true
    }]
  }'
  • 每个审批只对应一次具体工具调用;后续调用可能再次产生审批请求。
  • 使用 previous_response_id 续接最直观,也可以自行传回必要 Items。
  • 拒绝时返回 approve:false,并让产品明确显示“未执行”,不要生成仿真的成功结果。
  • 批准前重新校验用户身份、资源范围和参数;模型给出的参数不是业务授权。

怎样设计 require_approval?

策略建议使用风险
"always"初次接入、未知服务器、包含敏感数据或副作用延迟更高,但可见性最好
按 tool_names 过滤只让已评测的低风险查询跳过,其余审批工具行为变化后需要重新审核
按 read_only 注解过滤服务器注解可信且另有服务端权限控制注解错误或恶意时会误判
"never"仅限高度可信、无敏感数据、无副作用且持续监控的工具参数或服务器变化可能直接造成数据泄露或动作

官方默认在向 Remote MCP 共享数据前请求审批。生产配置应显式声明策略,并保证付款、删除、发信、发布、账号修改和写入生产数据等敏感操作始终需要审批。

OAuth 和 authorization:Token 必须由服务端管理

需要认证的 MCP 通常使用 OAuth access token,并把 Token 放在 MCP 工具的 authorization 字段。Responses API 不保存这个值,也不会在 Response 对象中回显,因此每个新的 Responses 创建请求都要重新提供当前有效 Token。

  1. 用户在你的应用中完成 OAuth,服务端安全保存 access/refresh token。
  2. 创建 Response 时,服务端按当前用户和最小 scope 注入 access token。
  3. Token 过期或 scope 不足时,刷新或重新授权;不要让模型自行请求更多权限。
  4. 撤销授权时同时删除本地 Token,并阻止后续 MCP 请求继续使用旧会话。
不要这样做

不要把 OAuth Token 放进浏览器 JavaScript、用户输入、system prompt、MCP 的普通参数、URL Query、分析事件或错误日志。即使 Response 不保存 authorization,第三方 MCP 仍会收到请求数据并受其自己的保留政策约束。

工具发现、过滤和延迟优化

  • 保留 mcp_list_tools:只要该 Item 仍在对话上下文中,API 不必每一轮重新读取工具列表,可减少延迟。
  • 使用 allowed_tools:只导入当前业务需要的工具,减少 Token、误调用面和审批噪声。
  • 大型服务器考虑 defer_loading:true:配合支持 Tool Search 的模型,按需加载工具定义。
  • 缓存要有版本边界:服务器工具发生变更时必须重新发现和评测,不能永久信任旧 Schema。
  • 记录实际调用:统计 list tools 时长、每个 mcp_call 的延迟、Token、错误和人工审批耗时。

怎样处理 mcp_call 输出?

  1. 检查 error 字段和协议错误,不能只读取自然语言 output。
  2. 验证服务器返回的 URL、图片、文件和重定向域名;不要直接嵌入未知 URL。
  3. 对结构化结果再次做 Schema 校验、资源归属校验和内容安全检查。
  4. 将工具输出当作不可信数据,防止其中的提示注入改变系统规则或触发其他工具。
  5. 对写操作查询真实业务状态,避免超时后重复执行。

成本和计费怎么理解?

OpenAI 当前说明 MCP 本身不另外收取每次工具调用费,但导入工具定义、工具调用参数/输出和后续模型处理会消耗 Token,并按所选模型价格计费。第三方 MCP 服务器可能另有订阅、API 或数据传输费用。

  • 减少 allowed_tools 数量,避免一次导入几十个无关 Schema。
  • 控制工具返回大小;大段原始数据先在服务器侧过滤和分页。
  • 长工作流设置调用上限、超时和取消路径。
  • 按任务记录模型 Token、MCP 调用数、第三方费用和人工审批时间。

安全:Remote MCP 是第三方信任边界

  • 优先服务提供商自己托管的官方 MCP;谨慎评估代理、聚合器和转发服务。
  • 只给最小 scope、最小资源范围和测试账户;先读后写,先沙箱后生产。
  • 提示注入可能藏在用户内容、网页、文件或 MCP 输出里;外部内容不能覆盖系统规则。
  • 敏感工具保持审批,批准界面显示实际参数和数据去向。
  • 审查服务器隐私政策、数据保留、数据驻留、日志与删除机制;OpenAI 的 ZDR/区域设置不会自动约束第三方服务器。
  • 服务器工具行为可能无预警改变,应固定可信版本、定期重新发现、评测并保留回滚。
  • 日志记录必要元数据和脱敏参数,不记录完整密钥或无必要的用户数据。

常见失败与排查顺序

现象常见原因处理
无法列出工具URL/协议/TLS 错误,服务器不支持 Streamable HTTP 或 HTTP/SSE先用测试客户端验证初始化与 tools/list,再检查网络和证书
401/403Token 过期、audience/scope/用户错误在服务端刷新授权,核对用户和最小 scope,不在前端重试密钥
反复出现审批每次都是新的调用,或审批 Response 没有正确续接保存 request ID,传 previous_response_id 和正确 approval_request_id
工具太多、延迟高导入整个服务器 Schema,每轮重复 list toolsallowed_tools、保留 mcp_list_tools,必要时 defer_loading
工具执行两次超时后直接重试写操作服务端幂等键、状态查询和去重,审批不等于幂等
输出包含可疑链接服务器或数据源返回未验证 URL域名允许名单、协议校验、隔离预览,不直接嵌入
connector_id 在新模型不可用继续使用旧 Connector 配置迁移到 server_url 或 Secure MCP Tunnel 的 tunnel_id

上线前检查清单

  1. 确认目标模型当前支持 MCP,服务器使用受支持传输和有效 HTTPS。
  2. 公网服务使用 server_url;私有服务使用 tunnel_id,不为接入而暴露内网。
  3. allowed_tools 只包含必要工具,工具 Schema、权限和副作用已人工审核。
  4. require_approval 明确配置,敏感操作始终审批,拒绝路径也经过测试。
  5. OAuth Token 只在服务端管理,每个新 Response 正确注入,日志不泄露。
  6. mcp_list_tools、mcp_approval_request、mcp_call 与错误 Items 都有可靠解析。
  7. 服务器返回 URL、文件、图片和文本均经过验证,不允许提示注入触发额外动作。
  8. 测试超时、重试、幂等、撤销授权、工具变更、第三方故障和安全降级。
  9. 记录 Token、延迟、第三方费用、审批率、失败率和异常工具行为。

常见问题

Remote MCP 和 Function Calling 有什么区别?

Function Calling 的工具由你的应用定义并执行;Remote MCP 让 Responses API 连接一个实现 MCP 协议的远程服务器,先发现其工具,再由模型调用。两者都需要权限、参数校验、幂等和审批设计。

公网 Remote MCP 和 Secure MCP Tunnel 怎么选?

公网 HTTPS MCP 使用 server_url;位于本地、内网、机房或防火墙后的服务器应优先使用 Secure MCP Tunnel,并在工具定义中提供 tunnel_id,避免为了接入而把私有服务器直接暴露到互联网。

Responses API 支持哪些 MCP 传输方式?

官方文档当前说明 Remote MCP 支持 Streamable HTTP 和 HTTP/SSE。生产接入前仍应核对服务器协议版本、TLS、超时、重连和工具列表是否兼容。

Remote MCP 默认需要人工审批吗?

是。OpenAI 默认在向远程 MCP 或连接器共享数据前请求审批。生产中应显式设置 require_approval,并让写入、付款、删除、发信等敏感工具始终审批;只有经过验证的低风险只读工具才考虑按名称跳过。

OAuth access token 会保存在 Response 里吗?

不会。Responses API 不保存 authorization 字段的值,也不会在创建的 Response 对象中返回它,因此应用必须在每个新的 Responses 创建请求中重新提供有效 Token,并把 Token 保存在服务端密钥系统。

mcp_list_tools、mcp_approval_request 和 mcp_call 分别是什么?

mcp_list_tools 表示服务器工具已被发现;mcp_approval_request 表示某次调用等待审批;批准后会通过 mcp_approval_response 续接;真正执行后产生 mcp_call,其中包含工具名、参数、输出或错误。

Remote MCP 怎样计费和控制成本?

OpenAI 当前说明 MCP 不另外收取每次工具调用费,但导入工具定义和调用产生的 Token 仍按所用模型计费;第三方 MCP 服务也可能自行收费。应使用 allowed_tools、保留 mcp_list_tools 上下文、必要时 defer_loading,并记录 Token、延迟、失败和第三方费用。

本文核对日期为 2026-11-01。模型兼容性、MCP 参数、审批、OAuth、Connector 兼容和数据政策可能调整;上线前请重新读取官方 MCP servers、Secure MCP Tunnel 与 Responses API 文档。

先连接只读测试服务器,再开放写工具

从单一低风险工具开始,验证发现、审批、拒绝、OAuth、超时和日志;通过安全评测后,再按工具名逐步开放。