返回博客2025年3月27日

OpenAI Agents SDK 支持 MCP:入门指南

OpenAIMCPAgents SDKPython

OpenAI Agents SDK 支持 MCP:入门指南

OpenAI Agents SDK 支持 MCP

引言

今天发现 OpenAI 的 Agents SDK 已经支持 MCP 了!这真是个好消息。对于我们这些需要让 AI 与各种工具交互的开发者来说,这无疑是个福音。MCP(模型上下文协议)本质上就是一种标准化的方式,让 AI 模型能够与外部工具和数据源进行交互。

MCP 是什么鬼?

简单来说,MCP 就像是 AI 应用的 USB-C 接口。官方文档里有个挺形象的比喻:

就像 USB-C 为设备连接各种外设提供标准化方式一样,MCP 为 AI 模型连接不同数据源和工具提供了标准化方式。

我个人理解,MCP 就是让 AI 能够"插上"各种工具的标准接口,不用每次都重新发明轮子。OpenAI 把这个支持内置到了 Agents SDK 中,这样我们就能轻松地让 Agent 使用各种 MCP 服务器提供的工具了。

MCP 服务器种类

目前 MCP 有两种类型的服务器:

  1. stdio 服务器:这种就是在本地运行的,作为应用程序的子进程。
  2. HTTP over SSE 服务器:这种是远程的,通过 URL 连接。

OpenAI 提供了对应的类:MCPServerStdioMCPServerSse 来连接这两种服务器。挺方便的!

怎么用 MCP 服务器?

举个例子,如果想用官方的文件系统 MCP 服务器,代码大概是这样:

async with MCPServerStdio(
    params={
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-filesystem", samples_dir],
    },
) as server:
    tools = await server.list_tools()

这段代码会启动一个文件系统 MCP 服务器,然后获取它提供的所有工具。

把 MCP 服务器加到 Agent 里

要让 Agent 使用 MCP 服务器的工具,只需要在创建 Agent 时把服务器实例传进去就行了:

agent=Agent(
    name="Assistant",
    instructions="使用工具完成任务",
    mcp_servers=[mcp_server_1, mcp_server_2]
)

每次 Agent 运行时,SDK 会自动调用 list_tools() 让 LLM 知道有哪些工具可用。当 LLM 决定使用某个工具时,SDK 会调用相应服务器的 call_tool() 方法。整个过程对开发者来说是透明的,不用操心细节。

缓存小技巧

每次 Agent 运行都会调用 list_tools(),如果是远程服务器,这可能会导致一些延迟。有个小技巧是启用缓存:

async with MCPServerSse(
    params={...},
    cache_tools_list=True  # 启用缓存
) as server:
    # ...

不过要注意,只有当你确定工具列表不会变的情况下才应该这样做。如果工具列表变了,可以调用 invalidate_tools_cache() 来刷新缓存。

完整示例在哪?

如果想看完整的代码示例,可以去 examples/mcp 看看。那里有几个不同场景的示例,对入门很有帮助。

跟踪功能很赞

OpenAI 的跟踪功能也支持 MCP 了,它会自动记录:

  1. 调用 MCP 服务器列出工具的操作
  2. 函数调用中与 MCP 相关的信息

MCP 跟踪截图

这对调试超级有用,可以清楚地看到 Agent 是如何使用 MCP 工具的。

总结一下

总的来说,OpenAI Agents SDK 对 MCP 的支持让我们能够更轻松地将各种工具集成到 AI 应用中。不管是本地工具还是远程服务,只要遵循 MCP 协议,都可以无缝接入。这大大扩展了 AI 应用的能力边界,让我们能够构建更加强大和灵活的 AI 系统。

如果你正在开发 AI 应用,强烈建议试试这个功能!

参考资源

准备开始了吗?

先简单说明目标,我会给出最合适的沟通方式。