ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MCP-Use 实战:用 Python 库把大语言模型接入 MCP 服务器,打造 AI 智能体工具链

MCP-Use 实战:用 Python 库把大语言模型接入 MCP 服务器,打造 AI 智能体工具链 1. 为什么大语言模型需要 MCP-Use 这层“转接头”大语言模型本身只会输出文本它没法直接读你本地的文件、查数据库、调浏览器。过去我们给模型接工具通常是每个工具写一套 function calling 的 schemaOpenAI 一套、Claude 一套、本地模型又一套工具一多胶水代码就爆炸。MCPModel Context Protocol想解决的就是这件事把“工具”抽象成标准化的 MCP 服务器模型侧只要会说这套协议就能复用整个生态里的工具。MCP-Use 是一个 Python 库定位就是“大语言模型 ↔ MCP 服务器”的桥。它把 MCP 客户端的连接、会话管理、工具发现、工具调用、流式输出这些脏活都封装好了你写十几行 Python 就能让模型用上文件系统、浏览器、搜索等工具。适合谁适合正在做 AI 智能体、想让模型真正“动手干活”的开发者尤其是已经有一堆 MCP 服务器、但不想为每个模型重写接入层的人。我试过直接用官方 mcp SDK 手搓客户端光是 stdio 子进程的生命周期管理和 session 复用就够喝一壶。MCP-Use 把这些收敛成MCPClient和MCPAgent两个核心对象配置用 JSON 描述模型侧通过 LangChain 适配器接入切换模型基本只改一个字符串。下面按“先跑通、再排错、最后接统一通道”的顺序走一遍每一步都能复制执行。2. 用 TaoToken 统一模型侧通道的前置准备MCP-Use 负责工具侧模型侧它默认走 LangChain 的 provider。如果你同时用 OpenAI、Claude、国产模型Key 和 Base URL 会散落在各处调试时很难定位是工具问题还是模型通道问题。我的做法是模型侧统一走 TaoToken 的 API 通道一个 Key、一个 Base URLMCP-Use 这边只认 OpenAI 兼容接口省去多套环境变量。先拿 Key打开 https://taotoken.net/api-keys 登录后创建一个 API Key复制保存。注意这个 Key 只在创建时完整显示一次丢了就重建。然后在控制台确认你要用的模型 ID比如claude-sonnet-4-5、gpt-4o这类模型列表在 https://taotoken.net/models 可以查。Base URL 固定用https://taotoken.net/api注意不要带末尾斜杠也不要加 UTM 参数否则某些 SDK 会拼出双斜杠导致 404。环境变量建议写进.envMCP-Use 和 LangChain 都会读# .env OPENAI_API_KEYsk-你的TaoToken密钥 OPENAI_BASE_URLhttps://taotoken.net/api这里有个坑LangChain 的ChatOpenAI读的是OPENAI_API_KEY和OPENAI_BASE_URL但有些版本对base_url参数大小写敏感稳妥起见在代码里显式传base_url。另外如果你之前装过openai老版本OPENAI_API_BASE和OPENAI_BASE_URL两个变量名会打架统一用OPENAI_BASE_URL把旧的从 shell profile 里删掉。TaoToken 在这里的角色就是模型侧的“统一出口”工具侧仍然是本地或远程的 MCP 服务器两边解耦。这样排错时可以先单独验证模型通道用模型对话页发一条消息再验证工具通道不会混在一起。3. 可复制的 MCP 服务器配置与 Python 调用示例先装依赖。MCP-Use 本体加上 OpenAI 兼容的 LangChain providerpip install mcp-use langchain-openai python-dotenv如果你要用文件系统工具还需要 Node 环境因为官方 filesystem server 是 npx 启动的。检查node -v和npx -v能输出版本即可。接下来建配置文件mcp_config.json。MCP-Use 支持mcpServers这种标准结构字段和 Claude Desktop 的配置基本一致方便你直接搬{ mcpServers: { filesystem: { command: npx, args: [ -y, modelcontextprotocol/server-filesystem, /Users/yourname/agent_workspace ] }, fetch: { command: npx, args: [-y, modelcontextprotocol/server-fetch] } } }把/Users/yourname/agent_workspace换成你真实想暴露给模型的目录别直接给根目录或家目录工具权限越大模型误操作的成本越高。fetch服务器提供网页抓取能力和 filesystem 组合就能做“抓页面→存文件”的链路。然后是 Python 调用。核心是MCPClient.from_config_file加载配置MCPAgent绑定模型和客户端agent.run执行任务import asyncio import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from mcp_use import MCPClient, MCPAgent load_dotenv() async def main(): client MCPClient.from_config_file(mcp_config.json) llm ChatOpenAI( modelclaude-sonnet-4-5, base_urlos.getenv(OPENAI_BASE_URL), api_keyos.getenv(OPENAI_API_KEY), temperature0, ) agent MCPAgent( llmllm, clientclient, max_steps15, use_server_managerTrue, ) result await agent.run( 在当前工作目录创建一个 notes 文件夹抓取 https://example.com 的内容 把正文摘要写入 notes/example.md ) print(result) await client.close_all_sessions() if __name__ __main__: asyncio.run(main())几个参数值得说清楚。max_steps15是防止模型陷入“调用→观察→再调用”的死循环步数太小任务做不完太大烧 token一般 10 到 30 之间。use_server_managerTrue让 MCP-Use 按需启动服务器而不是一次性全拉起多服务器场景下能省资源。temperature0是为了工具调用稳定创意类任务可以调高但工具参数生成会飘。模型 ID 这里填的是 TaoToken 支持的模型名如果你换成gpt-4o其他代码不用动这就是统一通道的好处。跑之前确认mcp_config.json和脚本在同一目录或者用绝对路径。4. 验证端到端工具调用是否真的跑通直接跑上面的脚本观察输出。成功的标志是模型先输出一段“思考”然后出现工具调用记录比如filesystem.write_file或fetch.fetch最后返回任务完成的结果。终端里能看到类似Calling tool: write_file的日志工作目录下真的出现了notes/example.md打开有内容。如果模型只回了一段文字、没有任何工具调用通常是两个原因一是模型本身不支持 function calling换gpt-4o或claude-sonnet-4-5这类支持工具调用的二是 MCP-Use 没把工具 schema 传给模型检查MCPAgent初始化时client是否真的加载了服务器可以在agent.run前打印client.sessions看会话数。想单独验证工具通道不经过模型可以直接调客户端async def list_tools(): client MCPClient.from_config_file(mcp_config.json) await client.create_all_sessions() for server_name, session in client.sessions.items(): tools await session.list_tools() print(server_name, [t.name for t in tools.tools]) await client.close_all_sessions()这段能列出每个服务器暴露的工具名说明 MCP 连接本身没问题。再单独验证模型通道用模型对话页发一条“你好”能正常回复说明 Key 和 Base URL 没问题。两边都通端到端才通。流式输出也值得试一下MCP-Use 支持异步流式能看到模型边想边调工具async for chunk in agent.stream(列出工作目录下的文件并统计数量): print(chunk, end, flushTrue)实测下来流式模式下工具调用的中间状态更直观调试时比等最终结果高效。5. 本篇常见报错与排查对照401 Unauthorized模型侧 Key 无效或没被读到。先确认.env里OPENAI_API_KEY是 TaoToken 的 Key且load_dotenv()在读取环境变量之前执行。如果 Key 里带了空格或换行也会 401重新复制一次。用print(os.getenv(OPENAI_API_KEY)[:8])打印前几位确认加载成功。local proxy failed / connection refusedMCP 服务器子进程没起来。filesystem server 依赖 npx如果 Node 没装或 npx 不在 PATH会报这个。手动在终端跑一遍npx -y modelcontextprotocol/server-filesystem /tmp看是否能启动。另外路径里有中文或空格时args 数组要确保路径是完整字符串别被 shell 拆开。reading choices of undefined模型返回体结构不符合 OpenAI 格式通常是 Base URL 拼错或模型 ID 不存在。检查base_url是不是https://taotoken.net/api模型 ID 是否在模型列表里。有些 SDK 会在 Base URL 后自动加/v1/chat/completions如果 Base URL 已经带了/v1就会变成/v1/v1/...所以 Base URL 只写到/api。OAuth / authentication_error如果你用的是需要 OAuth 的远程 MCP 服务器MCP-Use 的 stdio 配置不适用得走 HTTP/SSE 传输并配置 token。本地 stdio 服务器不会出这个错出现就说明配置里混进了远程服务器定义。工具调用死循环模型反复调同一个工具。先降max_steps再检查工具返回内容是不是空或报错模型看不到有效结果就会重试。filesystem 写文件失败时确认目标目录存在且有写权限。Codex auth.json 相关报错如果你同时用 Codex CLI它的~/.codex/auth.json和 MCP-Use 的环境变量是两套体系别混用。MCP-Use 只认环境变量或代码里显式传的 Key不会读 auth.json。排查顺序建议先list_tools验证工具通道再模型对话页验证模型通道最后跑agent.run。哪一步断问题就在哪一层别一上来就怀疑 MCP-Use 本身。6. 把 MCP-Use 接进你的智能体工具链跑通一次端到端之后接下来就是工程化。多服务器场景下把mcp_config.json按功能拆成多个文件比如fs_config.json、browser_config.json用MCPClient.from_config_file分别加载再合并会话权限控制更清晰。工具权限方面MCP-Use 支持在 agent 层限制可用工具别让模型拿到删除类工具除非你明确需要。长期跑编码类 Agent 的话模型侧建议走 Coding Plan额度和通道更稳配合 MCP-Use 的工具链能覆盖读写代码、跑测试、抓文档这些环节。接入文档在 https://taotoken.net/doc 有完整的 Base URL 和参数说明遇到通道问题先查那里。模型对话页 https://taotoken.net/chat 适合快速验证模型是否正常不用每次都跑脚本。最后提醒一句MCP 服务器暴露的能力就是模型能碰到的边界配置文件里的路径和命令要当成生产配置来审。先在小目录、只读工具上验证再逐步放开。工具链跑顺之后你会发现大语言模型从“会聊天”变成“能干活”中间差的往往就是 MCP-Use 这一层。
返回列表