English
主导航

旧版 API

MCP 与连接器

使用 connector 和远程 MCP 服务器为模型提供新功能。

除了通过以下方式向模型提供的工具之外 函数调用,你可以使用以下方式为模型赋予新能力: 连接器 and 远程 MCP 服务器。这些工具赋予了模型在需要响应用户提示时连接和控制外部服务的能力。这些工具调用可以被设置为自动允许,也可以由开发者(即您)设置为需要明确批准后才能执行。

  • 连接器 是 OpenAI 维护的针对 Google Workspace 或 Dropbox 等流行服务的 MCP 包装器,类似于在以下环境中可用的 connector ChatGPT.
  • 远程 MCP 服务器 可以是公共互联网上任何实现了远程 模型上下文协议 (MCP) 服务器的设备。

本指南将展示如何使用远程 MCP 服务器和 connector,以赋予模型访问新功能的能力。

安全 MCP 隧道

如果你的 MCP 服务器是私有的、本地部署的或位于防火墙之后,请使用 安全 MCP 隧道 将其连接到受支持的 OpenAI 产品,而无需将服务器暴露在公共互联网上。请从以下地址下载最新的公开发布版: openai/tunnel-client.

快速入门

查看以下示例,了解远程 MCP 服务器和 connector 如何通过 Responses API。连接器和远程 MCP 服务器都可以与以下配合使用: mcp 内置工具类型工作。

远程 MCP 服务器需要一个 server_url。根据服务器的不同,您可能还需要 OAuth authorization 参数,其中包含访问令牌。

在 Responses API 中使用远程 MCP 服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from openai import OpenAI

client = OpenAI()

resp = client.responses.create(
    model="gpt-5.5",
    tools=[
        {
            "type": "mcp",
            "server_label": "dmcp",
            "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
            "server_url": "https://dmcp-server.deno.dev/sse",
            "require_approval": "never",
        },
    ],
    input="Roll 2d4+1",
)

print(resp.output_text)

开发者必须信任其在 Responses API 中使用的任何远程 MCP 服务器,这一点非常重要。恶意服务器可以从进入模型上下文的任何内容中窃取敏感数据。在使用此工具之前,请仔细阅读下面的 风险与安全 部分。

API 将在模型响应的 output 数组中返回新项。如果模型决定使用 Connector 或 MCP 服务器,它将首先发出请求以列出服务器上可用的工具,这将创建一个 mcp_list_tools 输出项。在上面的简单远程 MCP 服务器示例中,它仅包含一个工具定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
  "id": "mcpl_68a6102a4968819c8177b05584dd627b0679e572a900e618",
  "type": "mcp_list_tools",
  "server_label": "dmcp",
  "tools": [
    {
      "annotations": null,
      "description": "Given a string of text describing a dice roll...",
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "diceRollExpression": {
            "type": "string"
          }
        },
        "required": ["diceRollExpression"],
        "additionalProperties": false
      },
      "name": "roll"
    }
  ]
}

如果模型决定调用 MCP 服务器上的某个可用工具,你还会发现一个 mcp_call 输出,它将显示模型发送给 MCP 工具的内容,以及 MCP 工具返回的输出内容。

1
2
3
4
5
6
7
8
9
10
{
  "id": "mcp_68a6102d8948819c9b1490d36d5ffa4a0679e572a900e618",
  "type": "mcp_call",
  "approval_request_id": null,
  "arguments": "{\"diceRollExpression\":\"2d4 + 1\"}",
  "error": null,
  "name": "roll",
  "output": "4",
  "server_label": "dmcp"
}

请继续阅读下面的指南,以了解更多关于 MCP 工具的工作原理、如何过滤可用工具,以及如何处理工具调用批准请求。

工作原理

MCP 工具(适用于远程 MCP 服务器和 connector)可在以下平台使用: Responses API 在最新模型中。请检查您所用模型的 MCP 工具兼容性 此处。在使用 MCP 工具时,您只需为 token 在导入工具定义或发起工具调用时使用。每次工具调用不会产生额外费用。

下面,我们将逐步介绍 API 在调用 MCP 工具时的处理流程。

第 1 步:列出可用工具

当您在 tools 参数中指定远程 MCP 服务器时,API 将尝试从该服务器获取工具列表。Responses API 支持兼容流式 HTTP 或 HTTP/SSE 传输协议的远程 MCP 服务器。

如果成功获取工具列表,模型响应输出中将出现一个新的 mcp_list_tools 输出项。该对象的 tools 属性将显示成功导入的工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
  "id": "mcpl_68a6102a4968819c8177b05584dd627b0679e572a900e618",
  "type": "mcp_list_tools",
  "server_label": "dmcp",
  "tools": [
    {
      "annotations": null,
      "description": "Given a string of text describing a dice roll...",
      "input_schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "diceRollExpression": {
            "type": "string"
          }
        },
        "required": ["diceRollExpression"],
        "additionalProperties": false
      },
      "name": "roll"
    }
  ]
}

只要 API 请求的上下文中存在该 mcp_list_tools 项,在对话的每一轮中,API 都不会再次从 MCP 服务器获取工具列表。 对话。我们建议您将此项保留在模型的上下文中,作为每次对话或工作流执行的一部分,以优化延迟。

过滤工具

某些 MCP 服务器可能包含数十种工具,向模型暴露过多工具可能会导致高成本和高延迟。如果您仅对 MCP 服务器提供的部分工具感兴趣,可以使用 allowed_tools 参数,仅导入所需的工具。

限制允许的工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from openai import OpenAI

client = OpenAI()

resp = client.responses.create(
    model="gpt-5",
    tools=[{
        "type": "mcp",
        "server_label": "dmcp",
        "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
        "server_url": "https://dmcp-server.deno.dev/sse",
        "require_approval": "never",
        "allowed_tools": ["roll"],
    }],
    input="Roll 2d4+1",
)

print(resp.output_text)

第 2 步:调用工具

一旦模型获取了这些工具定义,它可能会根据模型上下文决定调用它们。当模型决定调用某个 MCP 工具时,API 将向远程 MCP 服务器发起调用该工具的请求,并将其输出放入模型的上下文中。这会生成如下所示的 mcp_call 项:

1
2
3
4
5
6
7
8
9
10
{
  "id": "mcp_68a6102d8948819c9b1490d36d5ffa4a0679e572a900e618",
  "type": "mcp_call",
  "approval_request_id": null,
  "arguments": "{\"diceRollExpression\":\"2d4 + 1\"}",
  "error": null,
  "name": "roll",
  "output": "4",
  "server_label": "dmcp"
}

该项包含模型决定用于本次工具调用的参数,以及远程 MCP 服务器返回的 output 。所有模型都可以选择进行多次 MCP 工具调用,因此在单次 API 请求中可能会生成多个此类项。

失败的工具调用会在此项的 error 字段中填充 MCP 协议错误、MCP 工具执行错误或常规连接错误。MCP 错误记录在 MCP 规范中。 此处.

批准

默认情况下,OpenAI 在与连接器或远程 MCP 服务器共享任何数据之前,都会请求您的批准。批准机制有助于您维持对发送至 MCP 服务器数据的控制与可见性。我们强烈建议您仔细审查(并视需要记录)与远程 MCP 服务器共享的所有数据。请求批准执行 MCP 工具调用会在 Response 的输出中生成如下所示的 mcp_approval_request 项:

1
2
3
4
5
6
7
{
  "id": "mcpr_68a619e1d82c8190b50c1ccba7ad18ef0d2d23a86136d339",
  "type": "mcp_approval_request",
  "arguments": "{\"diceRollExpression\":\"2d4 + 1\"}",
  "name": "roll",
  "server_label": "dmcp"
}

随后,您可以通过创建一个新的 Response 对象并向其追加一项 mcp_approval_response 来作出响应。

批准 API 请求中的工具使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from openai import OpenAI

client = OpenAI()

resp = client.responses.create(
    model="gpt-5",
    tools=[{
        "type": "mcp",
        "server_label": "dmcp",
        "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
        "server_url": "https://dmcp-server.deno.dev/sse",
        "require_approval": "always",
    }],
    previous_response_id="resp_682d498bdefc81918b4a6aa477bfafd904ad1e533afccbfa",
    input=[{
        "type": "mcp_approval_response",
        "approve": True,
        "approval_request_id": "mcpr_682d498e3bd4819196a0ce1664f8e77b04ad1e533afccbfa"
    }],
)

print(resp.output_text)

这里我们使用 previous_response_id 参数将这个新 Response 与之前生成批准请求的 Response 链接起来。但您也可以传回 将一个响应的输出作为另一个响应的输入 以最大程度地控制进入模型上下文的内容。

如果您且仅在您信任某个远程 MCP 服务器时,可以选择跳过审批以减少延迟。为此,您可以将 MCP 工具的 require_approval 参数设置为一个对象,其中仅列出您想跳过审批的工具(如下所示),或者将其值设置为 'never' 以跳过该远程 MCP 服务器中所有工具的审批。

永远不需要对某些工具进行审批
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from openai import OpenAI

client = OpenAI()

resp = client.responses.create(
    model="gpt-5",
    tools=[
        {
            "type": "mcp",
            "server_label": "deepwiki",
            "server_url": "https://mcp.deepwiki.com/mcp",
            "require_approval": {
                "never": {
                    "tool_names": ["ask_question", "read_wiki_structure"]
                }
            }
        },
    ],
    input="What transport protocols does the 2025-03-26 version of the MCP spec (modelcontextprotocol/modelcontextprotocol) support?",
)

print(resp.output_text)

身份验证

与我们上面使用的 示例 MCP 服务器不同,MCP 工具的,大多数其他 MCP 服务器需要进行身份验证。最常见的方案是 OAuth 访问令牌。请使用 authorization 字段:

使用 Stripe MCP 工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from openai import OpenAI

client = OpenAI()

resp = client.responses.create(
    model="gpt-5",
    input="Create a payment link for $20",
    tools=[
        {
            "type": "mcp",
            "server_label": "stripe",
            "server_url": "https://mcp.stripe.com",
            "authorization": "$STRIPE_OAUTH_ACCESS_TOKEN"
        }
    ]
)

print(resp.output_text)

为了防止敏感令牌泄露,Responses API 不会存储您在 authorization 字段中提供的值。该值也不会在创建的 Response 对象中可见。因此,您必须在发出的每个 Responses API 创建请求中发送该 authorization 值。

连接器

Responses API 内置了对有限的一组第三方服务连接器的支持。这些连接器允许您从 Dropbox 和 Gmail 等热门应用中引入上下文,从而使模型能够与这些常用服务进行交互。

连接器的使用方式与远程 MCP 服务器相同。两者都允许 OpenAI 模型在 API 请求中访问额外的第三方工具。但是,您无需像调用远程 MCP 服务器那样传递 server_url 而是传递一个 connector_id 它能唯一标识 API 中可用的连接器。

可用连接器

  • Dropbox: connector_dropbox
  • Gmail: connector_gmail
  • Google 日历: connector_googlecalendar
  • Google 云端硬盘: connector_googledrive
  • Microsoft Teams: connector_microsoftteams
  • Outlook 日历: connector_outlookcalendar
  • Outlook 邮件: connector_outlookemail
  • SharePoint: connector_sharepoint

我们优先考虑了那些没有官方远程 MCP 服务器的服务。例如,GitHub 有一个官方 MCP 服务器,您可以通过在 MCP 工具中传递 https://api.githubcopilot.com/mcp/ to the server_url 字段来连接它。

授权连接器

In the authorization 字段中传入 OAuth 访问令牌。OAuth 客户端注册和授权必须由您的应用程序单独处理。

出于测试目的,您可以使用 Google 的 OAuth 2.0 Playground 来生成临时访问令牌,以便在 API 请求中使用。

要使用该演练场来测试连接器 API 功能,请首先输入:

https://www.googleapis.com/auth/calendar.events

此授权范围将使 API 能够读取 Google 日历活动。在“第 1 步:选择并授权 API (Step 1: Select and authorize APIs)”下的界面中。

在使用您的 Google 帐号授权应用程序后,您将进入“第 2 步:将授权码兑换为令牌 (Step 2: Exchange authorization code for tokens)”。这将生成一个访问令牌,您可以在使用 Google 日历连接器的 API 请求中使用它:

使用 Google 日历连接器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from openai import OpenAI

client = OpenAI()

resp = client.responses.create(
    model="gpt-5",
    tools=[
        {
            "type": "mcp",
            "server_label": "google_calendar",
            "connector_id": "connector_googlecalendar",
            "authorization": "ya29.A0AS3H6...",
            "require_approval": "never",
        },
    ],
    input="What's on my Google Calendar for today?",
)

print(resp.output_text)

来自连接器的 MCP 工具调用看起来将与来自远程 MCP 服务器的 MCP 工具调用相同,均使用 mcp_call 输出项类型。在这种情况下,传给连接器的参数和连接器的响应都是 JSON 字符串:

1
2
3
4
5
6
7
8
9
10
{
  "id": "mcp_68a62ae1c93c81a2b98c29340aa3ed8800e9b63986850588",
  "type": "mcp_call",
  "approval_request_id": null,
  "arguments": "{\"time_min\":\"2025-08-20T00:00:00\",\"time_max\":\"2025-08-21T00:00:00\",\"timezone_str\":null,\"max_results\":50,\"query\":null,\"calendar_id\":null,\"next_page_token\":null}",
  "error": null,
  "name": "search_events",
  "output": "{\"events\": [{\"id\": \"2n8ni54ani58pc3ii6soelupcs_20250820\", \"summary\": \"Home\", \"location\": null, \"start\": \"2025-08-20T00:00:00\", \"end\": \"2025-08-21T00:00:00\", \"url\": \"https://www.google.com/calendar/event?eid=Mm44bmk1NGFuaTU4cGMzaWk2c29lbHVwY3NfMjAyNTA4MjAga3doaW5uZXJ5QG9wZW5haS5jb20&ctz=America/Los_Angeles\", \"description\": \"\\n\\n\", \"transparency\": \"transparent\", \"display_url\": \"https://www.google.com/calendar/event?eid=Mm44bmk1NGFuaTU4cGMzaWk2c29lbHVwY3NfMjAyNTA4MjAga3doaW5uZXJ5QG9wZW5haS5jb20&ctz=America/Los_Angeles\", \"display_title\": \"Home\"}], \"next_page_token\": null}",
  "server_label": "Google_Calendar"
}

每个连接器中可用的工具

可用的工具取决于您的 OAuth 令牌具有哪些可用范围。展开下表,查看连接到每个应用时可以使用的工具。

在 MCP 服务器中延迟加载工具

如果你正在使用 工具搜索,你可以延迟加载 MCP 服务器公开的函数,直到模型确定需要它们。为此,请设置 defer_loading: true 在 MCP 服务器工具定义上。

当你延迟加载 MCP 服务器时,模型仍然可以使用该 MCP 服务器的标签和描述来决定何时进行搜索,但各个函数定义只在需要时才会加载。这有助于减少整体的 token 使用量,对于提供大量函数的 MCP 服务器最为实用。

1
2
3
4
5
6
7
8
{
  "type": "mcp",
  "server_label": "dmcp",
  "server_description": "A Dungeons and Dragons MCP server to assist with dice rolling.",
  "server_url": "https://dmcp-server.deno.dev/sse",
  "defer_loading": true,
  "require_approval": "never"
}

风险与安全

MCP 工具允许你将 OpenAI 模型连接到外部服务。这是一项强大的功能,但也伴随着一些风险。

对于连接器,存在将敏感数据潜在发送给 OpenAI 的风险,或者允许模型读取这些服务中潜在敏感数据的风险。

远程 MCP 服务器同样存在这些风险,而且尚未经过 OpenAI 的验证。这些服务器可以允许模型访问、发送和接收数据,并在这些服务中执行操作。所有 MCP 服务器均为第三方服务,受其自身的条款和条件约束。

如果你遇到恶意的 MCP 服务器,请向 security@openai.com.

以下是集成连接器和远程 MCP 服务器时需要考虑的一些最佳实践。

提示注入

提示注入 在任何 LLM 应用中都是一个重要的安全考量,尤其是当你授予模型访问 MCP 服务器和连接器的权限,而这些工具又能访问敏感数据或执行操作时。如果模型的提示包含用户提供的内容,请在使用这些工具时保持适当的谨慎并采取缓解措施。

始终要求对敏感操作进行审批

使用可用的配置 require_approval and allowed_tools 参数,以确保任何敏感操作都需要经过审批流程。

MCP 工具调用和输出中的 URL

请求 URL 或嵌入由连接器或远程 MCP 服务器的工具调用输出提供的图片 URL 可能是危险的。在嵌入或在应用代码中使用这些 URL 之前,请确保你信任提供这些 URL 的域和服务。

连接到受信任的服务器

选择由服务提供商自行托管的官方服务器(例如,我们建议连接到由 Stripe 自身在 mcp.stripe.com 上托管的 Stripe 服务器,而不是由第三方托管的 Stripe MCP 服务器)。由于目前官方的远程 MCP 服务器并不多,你可能会想使用由非运营该服务的机构托管、仅通过你的 API 将请求代理到该服务的 MCP 服务器。如果必须这样做,请务必对这些“聚合器”进行额外的尽职调查,并仔细审查它们如何使用你的数据。

记录并审查与第三方 MCP 服务器共享的数据。

由于 MCP 服务器定义了各自的工具定义,它们可能会请求您并不总是愿意与该 MCP 服务器宿主共享的数据。因此,Responses API 中的 MCP 工具默认要求对每次发出的 MCP 工具调用进行批准。在开发应用程序时,请仔细且严格地审查与这些 MCP 服务器共享的数据类型。一旦您对该 MCP 服务器建立起信任,就可以跳过这些批准以获得更高的执行性能。

我们还建议记录发送到 MCP 服务器的任何数据。如果你将 Responses API 与 store=true,除非您的组织启用了零数据保留策略,否则这些数据已通过 API 记录了 30 天。您可能还希望将这些数据记录在您自己的系统中,并对其进行定期审查,以确保数据按照您的预期进行共享。

恶意的 MCP 服务器可能包含旨在让 OpenAI 模型产生异常行为的隐藏指令(提示注入)。虽然 OpenAI 已实施内置安全防护措施来帮助检测和阻止这些威胁,但务必仔细审查输入和输出,并确保仅与受信任的服务器建立连接。

MCP 服务器可能会意外更新工具行为,从而可能导致意外或恶意的操作。

对零数据保留和数据驻留的影响

MCP 工具兼容零数据保留和数据驻留,但需要注意的是,MCP 服务器是第三方服务,发送到 MCP 服务器的数据受其数据保留和数据驻留政策的约束。

换言之,如果你的组织要求数据驻留在欧洲,OpenAI 会将客户内容的推理和存储限制在欧洲范围内进行,直到与 MCP 服务器进行通信或发送数据为止。你有责任确保 MCP 服务器也遵守你可能具有的任何零数据保留或数据驻留要求。详细了解零数据保留和数据驻留 此处.

使用说明

API 可用性速率限制备注

层级 1
200 RPM

第 2 层和第 3 层
1000 RPM

第4层和第5层
2000 RPM

定价
ZDR 和数据驻留