MCP 怎么接 OpenAI 兼容 API?两条路线与可运行配置
简答:MCP 怎么接 OpenAI 兼容 API,取决于接口能力:支持 Responses API 的服务可按原生 MCP 方式传入远程 Server;只有 /v1/chat/completions 的接口,通常要增加 LiteLLM 这类桥接层,或由应用自行完成 function calling 循环。仅修改 Base URL、API Key 和模型名,不会自动让普通兼容接口获得 MCP 能力。
定义:MCP 是连接模型与外部工具的协议;OpenAI 兼容 API 只是请求格式和接口行为的兼容层,是否支持 MCP 还要看服务端是否实现 MCP 工具字段、传输协议和工具执行流程。
先判断路线:三端分别负责什么
本文核验日期为 2026-10-31。本站是第三方 AI API 接入指南,下面只讨论通用接口和桥接方法,不把某个兼容网关的行为泛化为所有平台规则。
| 你的接口条件 | 适合的路线 | 最小成功判定 |
|---|---|---|
明确支持 Responses API,并在文档中提供 tools 的 type: mcp | Responses API 原生连接远程 MCP | 返回工具结果,或返回待审批的 MCP 工具请求 |
只有 /v1/chat/completions,但希望自动发现和执行 MCP 工具 | LiteLLM MCP Gateway | tools/list 能发现工具,模型请求能完成工具调用 |
| 不想部署网关,应用可以自己控制工具流程 | 手动 function calling | 应用完成工具定义、调用 MCP、回传工具结果和二次模型请求 |
先记住三个边界:模型 API 的 base_url 指向模型接口;MCP Server URL 指向工具服务;网关 URL 是客户端访问桥接层的地址。三者不要互相替换。
OpenAI 当前文档说明,Responses API 连接远程 MCP 时会尝试发现工具,并支持 Streamable HTTP 或 HTTP/SSE;LiteLLM 文档则说明其代理可以把 MCP 工具转换为 OpenAI 兼容的工具调用。可分别查看 OpenAI MCP servers 文档 和 LiteLLM MCP Overview。
路线一:Responses API 原生连接远程 MCP
这条路线的前提不是“有 Responses API”这么简单,而是服务端还要实际支持远程 MCP、对应的传输协议、MCP Server 鉴权,以及审批和工具筛选字段。OpenAI 官方示例使用 type: mcp、server_url、server_label 和 require_approval 连接远程 Server,并支持 allowed_tools 限制工具范围。参考 OpenAI MCP servers 官方指南。
下面的地址和模型名是占位符,不能直接当成真实服务:
curl https://api.openai.com/v1/responses -H "Content-Type: application/json" -H "Authorization: Bearer $OPENAI_API_KEY" -d '{"model":"MODEL_ID","tools":[{"type":"mcp","server_label":"demo_mcp","server_url":"https://mcp.example.com/mcp","require_approval":"always","allowed_tools":["read_only_tool"]}],"input":"请使用允许的只读工具完成一次查询"}'
- 将
MODEL_ID替换为当前接口实际支持且具备工具调用能力的模型 ID。 - 将
server_url替换为 MCP 服务方明确提供的远程地址,确认它使用 Streamable HTTP 或 HTTP/SSE。 - 若 MCP Server 需要 OAuth 或 Bearer Token,按服务方文档配置授权,不要把模型 API Key 当作 MCP Token。
- 首次验证保留
require_approval: always,并优先使用只读工具;确认权限范围后,再按工具粒度调整审批。
成功不应只看 HTTP 200。应检查响应是否出现 MCP 工具发现结果、工具调用事件、待审批请求或最终工具结果。若只有普通文本,先确认模型是否真的选择了工具,而不是把“工具已配置”误判为“工具已执行”。
路线二:LiteLLM 桥接到 OpenAI 兼容 Chat Completions
如果你的模型网关只有 /v1/chat/completions,LiteLLM 的当前文档提供了对应路径:在请求的 tools 数组中放入 MCP 工具定义,代理负责发现工具、转换为 OpenAI 兼容函数调用,并在 require_approval 为 never 时自动执行工具调用。相关说明见 LiteLLM Chat Completions MCP 文档。
版本边界:本文不虚构一个固定 LiteLLM 版本。LiteLLM 官方页面会持续更新,下面配置按 2026-10-31 可核验的文档结构编写;部署前应在当前文档中确认镜像、字段和协议版本,并记录实际使用的镜像标签。
1. 安装或启动网关
官方快速开始同时提供 CLI 和容器方式。若使用容器,可先准备一个目录和 config.yaml,再按官方代理启动方式运行:
docker run -v "$PWD/config.yaml:/app/config.yaml" -e MODEL_API_KEY="$MODEL_API_KEY" -e LITELLM_MASTER_KEY="$LITELLM_MASTER_KEY" -p 4000:4000 docker.litellm.ai/berriai/litellm:latest --config /app/config.yaml
该启动命令中的 latest 不是固定版本。生产环境应改用你已经验证过的具体镜像标签,并在升级前重新检查 MCP 配置。LiteLLM 官方代理启动示例见 LiteLLM Getting Started。
2. 准备最小 config.yaml
下面的模型地址、模型名和 MCP 地址均为占位符;其中 transport: http 对应 Streamable HTTP,旧式 SSE Server 必须改为 transport: sse:
mcp_servers:
demo_mcp:
url: "https://mcp.example.com/mcp"
transport: "http"
auth_type: "none"
model_list:
- model_name: "MODEL_ID"
litellm_params:
model: "openai/MODEL_ID"
api_key: "os.environ/MODEL_API_KEY"
api_base: "https://api.example.com/v1"
如果上游 MCP 需要静态 API Key,可按官方配置参考改用 auth_type: api_key 和 auth_value: os.environ/MCP_API_KEY;如果需要 Bearer Token,则使用对应的 Bearer 配置。模型密钥、网关密钥和 MCP 凭据应分别放在不同环境变量中。具体字段以 LiteLLM MCP Configuration Reference 为准。
3. 先验证 MCP 工具发现
LiteLLM 官方配置参考明确将 /mcp 用作直接 MCP 客户端访问入口,并给出了 tools/list 的 JSON-RPC 冒烟测试:
curl -s -X POST http://localhost:4000/mcp -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -H "x-litellm-api-key: Bearer $LITELLM_MASTER_KEY" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
成功判定是 JSON-RPC 响应中的 result.tools 数组包含可访问工具。若返回 401,先查网关 Key;若返回工具为空,检查 MCP Server 地址、传输类型、上游凭据和网关 Key 的访问权限。不要把 /mcp 的 JSON-RPC 测试结果与模型调用结果混为一谈。
4. 再调用兼容的 /v1/chat/completions
LiteLLM 文档给出的 Chat Completions 选择器是 litellm_proxy/mcp/<server_alias>,它是请求体里的逻辑选择器,不是公网 URL:
curl -s http://localhost:4000/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer $LITELLM_MASTER_KEY" -d '{"model":"MODEL_ID","messages":[{"role":"user","content":"请使用可用的只读工具完成一次查询"}],"tools":[{"type":"mcp","server_url":"litellm_proxy/mcp/demo_mcp","server_label":"demo_mcp","require_approval":"never"}]}'
如果不希望自动执行工具,可省略 require_approval 或不要设置为 never,让工具调用返回给客户端审核。若只允许部分工具,可增加 allowed_tools。LiteLLM 对 litellm_proxy、litellm_proxy/mcp/<server_alias> 和网络形式的 /mcp 入口有明确区分,不能把它们随意替换。
第三条路线:不用网关时,手动完成 function calling
当兼容接口不支持 MCP、又不想部署 LiteLLM 时,可以由应用自己做桥接。function calling 不是 MCP,它只是模型与应用之间约定工具名称、参数 Schema 和调用结果的一种方式。应用需要承担完整循环:
- 通过 MCP Client 连接 MCP Server,并调用
tools/list获取工具名、描述和输入 Schema。 - 将 MCP 工具 Schema 转成模型接口接受的 OpenAI 兼容
tools定义。 - 把用户问题和工具定义发送到
/v1/chat/completions。 - 如果模型返回
tool_calls,应用校验工具名和参数,再调用对应的 MCP 工具。 - 把工具结果以
role: tool和对应的tool_call_id加回消息,再发起第二次模型请求。
最小流程可以抽象为:
客户端 → OpenAI 兼容模型接口 → 返回 tool_calls → 应用调用 MCP Server → 返回工具结果 → 再次请求模型 → 最终回答
这条路线的优点是控制细,缺点是需要自行处理工具名称冲突、参数校验、超时、重试、并发、审批和敏感操作拦截。LiteLLM 官方 Python SDK 示例也展示了“读取工具调用、调用 MCP、把结果追加回 messages、再次请求模型”的循环,可参考 LiteLLM Python SDK MCP Bridge。
凭据、传输和排错:按调用链分层检查
| 凭据或地址 | 作用 | 检查位置 |
|---|---|---|
| 模型 API Key | 网关访问模型服务 | model_list、环境变量和模型服务响应 |
| 网关 Key | 客户端访问 LiteLLM | Authorization 或 x-litellm-api-key |
| MCP Token 或 OAuth 凭据 | 网关访问具体 MCP Server | MCP Server 的 auth_type、上游请求头或按服务器转发的 Header |
| 模型 Base URL | 接收模型请求 | 兼容网关的 /v1 地址 |
| MCP Server URL | 接收 MCP JSON-RPC | 远程 MCP 配置中的 /mcp 或 SSE 地址 |
固定排查闭环:先确认模型 API Key、网关 Key、MCP Token 没有混用;再确认模型 Base URL 和 MCP Server URL 分开;然后用 tools/list 验证发现;最后再测试模型工具调用。
- 401:区分是模型服务、LiteLLM 网关还是 MCP Server 返回,分别检查对应凭据。
- 403:检查网关 Key 是否获准访问该 MCP Server、工具是否被权限策略过滤,以及上游账号是否有权限。
- 404:检查模型请求路径、MCP 路径、Server alias 和传输端点,不要把模型的
/v1/chat/completions当成 MCP 地址。 - 工具列表为空:检查 MCP Server 是否可达、传输类型是否匹配、上游认证是否成功,以及工具是否被
allowed_tools或权限策略过滤。 - 模型不调用工具:确认后端支持 tool calling,提示词确实需要工具,并检查是否设置了错误的工具选择器或审批策略。
- 超时或流式中断:分别测试模型请求、网关到 MCP Server 的连接和 MCP 工具本身,避免只根据一个状态码判断故障来源。
对于公网 MCP Server,先核对 TLS、传输协议和服务端鉴权;对于内网或本机 MCP Server,应让桥接层位于能访问该网络的位置。stdio 适合由网关主机启动本地进程,不能把 stdio 命令直接填成远程 URL。LiteLLM 的传输矩阵和 OpenAI Agents 文档分别说明了 http、SSE 与 stdio 的配置边界,可参考 LiteLLM 传输配置参考 和 OpenAI MCP connections 文档。
结论:怎么选最小实现
如果接口确实实现了远程 MCP,优先用 Responses API 原生路线;如果只有 /v1/chat/completions,优先使用 LiteLLM MCP Gateway,并先完成 /mcp 的 tools/list 冒烟测试;如果无法部署网关,再由应用手动完成 function calling 循环。
无论选择哪条路线,都要把模型接口、网关、MCP Server 和三类凭据分别验证。真正的成功标准不是“配置文件能启动”,而是工具能够被发现、参数经过校验、调用结果能回传模型,并且敏感操作仍处于可控的审批范围内。
常见问题
OpenAI 兼容 API 能直接使用 MCP 吗?
不一定。OpenAI 兼容通常只说明部分请求路径、鉴权或响应格式接近 OpenAI;是否支持 MCP,要看接口是否实现 MCP 工具类型、远程传输和工具执行流程。只有普通 /v1/chat/completions 时,通常需要网关桥接或手动 function calling。
MCP Server 地址应该填到 Base URL 里吗?
通常不应该。模型 Base URL 指向模型 API,MCP Server URL 指向工具服务。原生 Responses API 通过 MCP 工具字段配置,LiteLLM 则在 mcp_servers 中注册,并在模型请求中使用对应的逻辑选择器。
LiteLLM 的 litellm_proxy/mcp/demo_mcp 是公网地址吗?
不是。它是 LiteLLM 模型请求体中的逻辑选择器,用于选择已注册的 MCP Server。直接 MCP 客户端访问 LiteLLM 时,才使用实际网络地址,例如网关的 /mcp 入口。
为什么 tools/list 成功,但模型不调用工具?
工具可发现不等于模型一定会调用。先确认模型或后端支持 tool calling,再检查提示词是否需要工具、工具是否被 allowed_tools 或权限策略过滤、审批设置是否阻止自动执行,以及请求中的 Server 选择器是否正确。
Streamable HTTP、SSE 和 stdio 怎么选?
远程 MCP Server 应先按服务方文档确认使用 Streamable HTTP 还是旧式 HTTP/SSE;stdio 适合由本机或网关主机启动的子进程。LiteLLM 的配置需要显式设置 transport,避免不同入口使用不同默认值。
模型 API Key、网关 Key 和 MCP Token 能共用吗?
不建议共用,也不能假设它们可以互换。模型 API Key 用于网关访问模型,网关 Key 用于客户端访问网关,MCP Token 或 OAuth 凭据用于访问具体 MCP Server。分开配置更容易定位 401、403 和权限问题。
相关阅读
- 继续看 Open WebUI 的 OpenAI 兼容接口配置
- 查看 Dify 接入 OpenAI 兼容模型的步骤
- 了解 LangChain 调用兼容接口时的字段与排错
- 补充 API Key 安全和密钥管理清单
参考资料
- OpenAI API:MCP servers
- OpenAI API:MCP connections
- LiteLLM:MCP Overview(docs.litellm.ai)
- LiteLLM:Using your MCP(docs.litellm.ai)
- LiteLLM:MCP Configuration Reference(docs.litellm.ai)
- LiteLLM:Getting Started(docs.litellm.ai)
