1. LangBot 接入 MCP 时 endpoint 到底该填什么
LangBot 里的 MCP 协议支持,本质上是让机器人框架通过标准 JSON-RPC 去发现和调用外部工具。MCP 全称 Model Context Protocol,它把「模型要调用什么工具、传什么参数、拿什么结果」抽象成一套统一接口。LangBot 作为聊天机器人框架,把 MCP 工具映射成内部可调用的函数,再交给大模型去决策。适合谁?适合已经在用 LangBot 跑机器人、想让机器人具备联网搜索、查数据库、调内部 API 这类外部能力的开发者。
很多人第一次配 LangBot 的 MCP 时,卡在endpoint这一项。默认示例里写的是http://localhost:8000/mcp这种本地地址,但如果你希望工具调用走一个统一的模型与工具网关,就需要把 endpoint 换成 TaoToken 提供的 MCP 接入地址。这里要区分两个概念:一个是 LangBot 作为 MCP 客户端去连的「MCP 服务端 endpoint」,另一个是模型推理时用的 Base URL。本文聚焦前者,也就是把 LangBot 的 MCP endpoint 指向 TaoToken,并完成一次工具调用的验证。
我试过在 LangBot 的config.yaml里直接改 endpoint,结果发现光改地址不够,鉴权头、协议版本、工具发现路径都得对上,否则要么 401,要么tools/list返回空。下面按「先讲清楚问题场景 → 准备 TaoToken 侧信息 → 给出可复制配置 → 发一次真实请求验证 → 排常见错」的顺序走一遍,你可以直接照着改。
先明确一点:LangBot 的 MCP 配置通常落在实例配置的mcp.servers数组里,每个 server 有uuid、name、endpoint、auth四个关键字段。endpoint决定请求发到哪,auth决定能不能过鉴权。TaoToken 的 MCP 接入地址是https://taotoken.net/api,注意这里不带任何查询参数,鉴权靠 Header 里的 Bearer Token。模型对话、Coding Plan、API Keys 这些入口在官网都能找到,MCP 走的是同一套 API 域名。
如果你之前只配过模型 Base URL,没配过 MCP endpoint,可以把 MCP 理解成「工具层的 API」:模型负责决定调哪个工具,MCP 负责真正执行。LangBot 把这两层串起来,所以 endpoint 必须指向一个能响应tools/list和tools/call的服务。TaoToken 的 MCP 网关就是干这个的。
2. 前置准备:TaoToken 的 Key、Base URL 与 Model ID
在改 LangBot 配置之前,先把三件套准备好:Base URL、API Key、Model ID。这三样在 MCP 场景里各有用途——Base URL 用于拼接 MCP endpoint,API Key 用于鉴权,Model ID 用于 LangBot 里负责决策的模型。缺一个都会在验证阶段报错。
Base URL 用https://taotoken.net/api。注意不要写成带 UTM 的官网地址,API 调用只认这个域名。API Key 在控制台的 API Keys 页面创建,格式通常是一串以sk-开头的字符串。创建后立刻复制保存,页面刷新后就看不到完整值了。Model ID 则取决于你想让 LangBot 用哪个模型来做工具决策,常见的有通用对话模型和偏代码的模型,具体以控制台模型列表为准。
这里有个容易踩的坑:LangBot 的 MCP 配置里,endpoint和模型 Base URL 是两个独立字段。有人把模型 Base URL 填进 MCP endpoint,结果 LangBot 发tools/list过去,对方返回的是模型列表而不是工具列表,解析直接失败。所以务必确认 MCP endpoint 指向的是工具网关路径。
如果你用的是 Claude Code 或 Cline 这类工具,它们的配置文件和 LangBot 不一样,但三件套的逻辑相同。LangBot 的 MCP 配置写在实例配置里,通常通过 Web 控制台或直接编辑config.yaml完成。下面给出两种写法,你按自己的部署方式选。
准备阶段还要确认网络能正常访问taotoken.net。如果你在容器里跑 LangBot,注意容器内的 DNS 和出网策略,别让请求卡在解析上。可以用curl -I https://taotoken.net/api先探一下连通性,返回 401 或 405 都说明网络通了,返回超时才是网络问题。
最后提醒:API Key 不要硬编码进会提交到 Git 的文件。LangBot 支持从环境变量读取,建议用${TAOTOKEN_API_KEY}这种占位方式,实际值放.env或系统环境变量里。这样即使配置文件被分享,Key 也不会泄露。
3. 可复制配置:LangBot 的 MCP endpoint 与鉴权片段
LangBot 的 MCP 配置核心是mcp.servers数组。下面这段 YAML 可以直接粘到你的实例配置里,把token换成你自己的 Key。注意endpoint指向 TaoToken 的 API 域名,auth.type用bearer。
mcp: servers: - uuid: "taotoken-mcp-1" name: "TaoToken MCP Gateway" endpoint: "https://taotoken.net/api" auth: type: "bearer" token: "${TAOTOKEN_API_KEY}" protocol_version: "2024-11-05" timeout: 30如果你更习惯用 JSON 管理配置,等价写法如下。LangBot 部分版本支持从 JSON 导入实例配置,字段名保持一致即可。
{ "mcp": { "servers": [ { "uuid": "taotoken-mcp-1", "name": "TaoToken MCP Gateway", "endpoint": "https://taotoken.net/api", "auth": { "type": "bearer", "token": "${TAOTOKEN_API_KEY}" }, "protocol_version": "2024-11-05", "timeout": 30 } ] } }几个字段说明。uuid是 LangBot 内部标识,随便起但别重复。name是显示名。endpoint必须是https://taotoken.net/api,不要加/mcp后缀,也不要带查询参数。auth.type固定bearer,token填你的 API Key。protocol_version建议写2024-11-05,这是 MCP 较通用的版本号,LangBot 会用它做协议协商。timeout单位秒,工具调用慢的可以调到 60。
如果你在 LangBot 里同时配了模型和 MCP,注意模型那块的 Base URL 也是https://taotoken.net/api,但字段位置不同。模型配置通常在provider或model段,MCP 在mcp段,两者不要混。下面给一个模型段的对照,方便你确认没填串。
provider: openai: base_url: "https://taotoken.net/api" api_key: "${TAOTOKEN_API_KEY}" model: "gpt-4o-mini"改完配置后重启 LangBot,或者通过控制台的热重载让配置生效。重启后在日志里搜MCP服务器 TaoToken MCP Gateway 连接成功,看到这行说明 endpoint 和鉴权都过了。如果看到连接失败,先别急着改代码,去第 5 节对照报错。
还有一点:LangBot 的 MCP 工具映射会把工具名加上mcp_前缀,比如工具原名search,映射后是mcp_search。你在流水线里调用时要用映射后的名字。这个前缀在MCPToolMapper里写死,改配置改不了,记住就行。
4. 验证请求:确认 LangBot 能发现并调用 MCP 工具
配置生效后,第一步验证工具发现。LangBot 启动时会调用tools/list,你可以在日志里看到返回的工具数量。如果日志没打详细内容,可以手动发一次 JSON-RPC 请求确认网关正常。下面用 curl 模拟 LangBot 的tools/list调用。
curl -s -X POST https://taotoken.net/api \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {} }'正常返回是一个 JSON,result里带tools数组,每个工具含name、description、inputSchema。如果返回result.tools为空数组,说明网关连上了但没有可用工具,检查你的账号是否开通了对应工具权限。如果返回 401,说明 Key 不对或没带 Authorization 头。
第二步验证工具调用。挑一个工具,用tools/call发一次真实请求。下面以调用一个搜索类工具为例,参数名以实际inputSchema为准。
curl -s -X POST https://taotoken.net/api \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "search", "arguments": { "query": "MCP protocol tools list" } } }'返回里result.content是工具执行结果。看到具体内容就说明整条链路通了。第三步回到 LangBot,在聊天窗口发一句会触发工具调用的话,比如「帮我搜一下 MCP 协议的最新版本」。LangBot 的流水线会先让模型决策,模型返回tool_calls,LangBot 再通过 MCP 执行,最后把结果拼回回复。控制台会打印执行了1个MCP工具调用,聊天窗口能看到带工具结果的回答。
如果模型没触发工具调用,检查两点:一是流水线里是否绑定了 MCP server,_pipeline_bound_mcp_servers变量要有值;二是模型是否支持 function calling,不支持工具调用的模型不会返回tool_calls。这两点确认后,工具调用基本就稳了。
验证通过后,你可以把tools/list的结果缓存起来,减少每次对话都去拉工具列表的开销。LangBot 的MCPManager在初始化时加载一次,运行中如果工具变动,手动触发重载即可。
5. 常见报错排查:401、local proxy failed 与 choices 解析失败
配 MCP 时最常见的报错是 401。LangBot 日志里会写HTTP 401: Unauthorized。原因通常是三个:Key 没填、Key 填错、Authorization 头没带上。检查auth.token是否真的读到了环境变量,${TAOTOKEN_API_KEY}这种写法要求环境变量存在,否则会变成空字符串。可以在 LangBot 启动脚本里echo $TAOTOKEN_API_KEY确认。另外注意 Bearer 和 token 之间有一个空格,少空格也会 401。
第二个高频报错是local proxy failed或连接超时。这通常不是鉴权问题,而是网络层。LangBot 跑在容器里时,容器可能没配 DNS,或者出网被限制。先在容器内curl -I https://taotoken.net/api,如果卡住就是网络。解决方式是给容器配可用的 DNS,或者确认宿主机网络策略允许出站 HTTPS。注意不要用任何非正规的网络中转手段,直接用正常网络访问即可。
第三个报错是reading choices或choices field missing。这个报错出现在模型调用阶段,不是 MCP 阶段。原因是 LangBot 把 MCP 的返回结构当成了模型响应去解析,或者模型 Base URL 配错,返回了非预期结构。检查模型配置的base_url是不是https://taotoken.net/api,以及请求是否真的发到了 chat completions 路径。MCP 的 JSON-RPC 响应里没有choices字段,如果你在 MCP 调用处看到这个错,说明代码路径串了,确认MCPClient和模型 requester 是分开的。
第四个是 OAuth 相关报错,比如OAuth token expired或invalid_grant。TaoToken 的 API Key 是静态 Bearer,不涉及 OAuth 刷新流程。如果你看到 OAuth 报错,多半是配置里混入了别的服务的鉴权方式,把auth.type改回bearer即可。LangBot 的_authenticate方法支持 bearer 和 basic,MCP 场景用 bearer。
第五个是工具名找不到,报MCP工具 mcp_xxx 未找到。这是因为调用时用了原始工具名,没加mcp_前缀,或者工具列表没刷新。确认tools/list返回里有这个工具,然后调用时用mcp_加原名。如果工具是刚加的,重启 LangBot 让MCPManager重新加载。
排错时建议把 LangBot 日志级别调到 DEBUG,能看到完整的请求和响应体。但注意日志里会包含 Authorization 头,分享日志前先把 Key 打码。
6. 把 MCP 能力接进你的 LangBot 流水线
配置和验证都过了之后,最后一步是让 MCP 工具真正参与对话。LangBot 的流水线里有一个mcp-tool-call阶段,它负责把绑定的 MCP 工具映射成 LLM 工具,再根据模型返回的tool_calls去执行。你需要在流水线配置里把 TaoToken 这个 server 的 uuid 绑上去,否则阶段里拿不到工具列表。
绑定方式是在流水线的变量里设置_pipeline_bound_mcp_servers,值是一个数组,填 server 的 uuid。比如["taotoken-mcp-1"]。这样每次消息进来,阶段会拉取这个 server 的工具,映射后交给模型。模型决策要调工具时,阶段执行tools/call,把结果拼回消息历史,再让模型生成最终回复。
如果你想让不同流水线用不同工具集,可以配多个 server,每个 server 指向不同的工具分组。TaoToken 的网关支持按 Key 区分权限,你可以在控制台建多个 Key,分别给不同流水线用。这样权限隔离更清晰,某个 Key 泄露也不影响其他流水线。
长期跑编码类或 Agent 类任务的话,可以考虑用 Coding Plan,它在工具调用频次和模型选择上更适合持续性的开发场景。模型对话入口适合临时验证某个模型对工具调用的支持情况,API Keys 页面则是管理所有 Key 的地方。接入文档里有完整的字段说明和示例,遇到配置项不确定时优先查文档。
最后给一个实用技巧:把tools/list的结果存一份到本地,写流水线时对照inputSchema构造参数,避免参数名写错导致工具执行失败。工具调用的参数校验在网关侧做,参数不对会返回错误信息,日志里能看到具体缺哪个字段。按这个流程走,LangBot 的 MCP endpoint 改到 TaoToken 并验证通过,基本就是十几分钟的事。