给Agent装上“万能接口”:MCP工具接入完全指南

发布时间:2026/7/11 7:21:11
给Agent装上“万能接口”:MCP工具接入完全指南 在前两篇博客中我们认识了AI Agent的核心概念也学会了如何用LangChain为它定义Tools工具。你可能会想如果每个工具都要单独定义一遍那该多麻烦更不用说不同AI应用Claude、ChatGPT、本地模型的工具调用方式还不一样——这就是典型的碎片化问题。MCPModel Context Protocol模型上下文协议正是为解决这个问题而生的。它是一套开放标准让AI模型通过统一的接口调用任何遵循MCP协议的工具服务器。简单来说MCP就是AI世界的“USB-C接口”——一个标准连接所有外设。本文将带你从MCP是什么开始深入理解其架构、工作流程和传输协议并手把手教你如何编写MCP服务并在LangChain和VS Code中接入它。1. MCP是什么MCPModel Context Protocol是一个面向AI Agent的统一工具调用协议由AnthropicClaude背后的公司发起并开源。它定义了一套与模型无关的标准化通信语言让任意AI模型Claude、ChatGPT、本地开源模型等都能通过同一套接口调用外部工具和数据源。你可以把MCP理解为对工具提供方只需编写一个MCP Server任何支持MCP的客户端都能直接使用无需重复适配。对AI应用开发者无需为每个工具编写定制的集成代码只需接入MCP Server即可“即插即用”社区提供的海量工具。2. 为什么要用MCP在MCP出现之前AI应用调用外部工具存在三大痛点痛点具体表现碎片化每个模型需单独适配工具——OpenAI有Function CallingClaude有Tool Use写法各不相同高耦合工具逻辑与模型代码深度绑定难以复用和升级上下文丢失多轮工具调用时状态管理非常复杂MCP的核心价值在于标准化一套协议所有模型和工具通用。这意味着开发效率提升社区已有大量现成的MCP Server文件系统、GitHub、SQLite、Slack等拿来即用。安全可控MCP提供了明确的权限控制机制客户端可以限制Agent能访问哪些工具和数据。解耦与复用工具与模型代码分离工具可独立升级模型可随意替换。3. MCP的架构MCP采用经典的Client/Server 解耦架构------------------------------------------ | AI应用MCP Client | | (Claude Desktop / VS Code / LangChain) | ------------------------------------------- | MCP协议JSON-RPC v ------------------------------------------ | MCP Server工具提供方 | | (文件系统 / GitHub / SQLite / 自定义) | ------------------------------------------核心角色MCP ClientAI应用端发起工具调用请求。如Claude Desktop、VS Code、LangChain Agent等。MCP Server工具提供方暴露标准化能力。一个Server可以提供多个工具Tools。协议层基于JSON-RPC格式通信支持上下文传递、工具动态发现、流式响应等特性。关键设计Client和Server是双向解耦的——Server只管“我有什么工具”Client只管“我要用什么工具”两者通过标准协议沟通互不依赖。4. MCP的工作流程一个典型的MCP调用流程包含三个步骤步骤1工具发现DiscoveryClient启动时向Server请求工具清单通过/registry或初始化握手获取每个工具的名称、描述和参数Schema。这样Client就知道“对方能干什么”。步骤2发起调用RequestClient发送结构化JSON请求到Server包含context上下文信息用户ID、会话历史、状态等tool_name要调用的工具名称parameters调用参数{ context: {user_id: u123, session_id: s456}, tool_name: get_weather, parameters: {city: 北京, unit: celsius} }步骤3流式返回ResponseServer执行工具后通过SSEServer-Sent Events流式返回结果支持大数据量分块传输。Client收到结果后返回给LLMLLM生成最终答案。整个流程中上下文Context的持续传递是关键——它保证了多轮对话中状态不丢失实现了“有记忆的智能体”。5. 传输协议MCP目前定义了两种标准传输机制stdio标准输入/输出工作机制Client将MCP Server作为子进程启动通过stdin发送请求从stdout读取响应。优点无需网络端口适合本地开发进程生命周期由Client管理。典型场景VS Code、Claude Desktop等本地IDE和桌面应用。Client --(stdin)-- Server Process Client --(stdout)-- Server Process Client --(stderr)-- 日志输出可选HTTP SSE工作机制Server作为独立进程运行可远程Client通过HTTP POST发送请求通过SSE连接接收流式响应。优点支持多客户端并发连接适合生产环境部署。典型场景云端MCP服务、多租户系统。textClient ----(SSE连接)---- Server Client --(HTTP POST)---- Server Client --(SSE message)-- Server自定义传输协议本身是传输无关的开发者可以根据需要实现自己的传输机制如WebSocket、gRPC等。选择建议本地开发和调试推荐stdio生产环境推荐HTTPSSE。6. 编写MCP服务从Studio到自定义6.1 极速上手用studio-mcp/studio把任何CLI变成MCP工具如果你不想写Python/Node.js代码studio-mcp/studio提供了一个最简单的方式将任何命令行工具一键包装为MCP Server。npx -y studio-mcp/studio echo {text # 你想说的话}studio使用类Mustache模板语法定义参数{name # description}必填字符串参数[name]可选参数[args...]可选数组参数[--flag]可选布尔标志配置到Claude Desktopclaude_desktop_config.jsonjson{ mcpServers: { echo: { command: npx, args: [-y, studio-mcp/studio, echo, {text # 你想说的话}] } } }6.2 编写自定义MCP ServerPython示例如果需要更复杂的逻辑可以编写原生MCP Server。以下是一个简化的自定义Server示例使用fast-mcp库python# demo_tools.py from fast_mcp import mcp_tool mcp_tool(nameget_weather) def weather_api(city: str, unit: str celsius) - dict: 查询城市天气 # 调用真实天气API return {city: city, temp: 22, unit: unit, condition: sunny} mcp_tool(namecalculate) def calculate(expression: str) - float: 计算数学表达式 return eval(expression)启动MCP Serverbashpip install fast-mcp fast-mcp --tools demo_tools.pyServer启动后会暴露/registry工具发现和/execute工具调用端点任何MCP Client都可以连接使用。7. LangChain接入MCP让Agent“即插即用”LangChain提供了对MCP的一流支持。核心步骤非常简单步骤1导入模块并创建MCP会话pythonfrom langchain.tools.mcp import create_mcp_tool, MCPClientSession, MCPServerParameters from langchain_openai import ChatOpenAI from langchain.agents import AgentExecutor, create_tool_calling_agent from langchain_core.prompts import ChatPromptTemplate # 定义MCP服务器参数以filesystem为例 server_params MCPServerParameters( commandfilesystem, # MCP Server命令 args[--directory, /tmp] # 启动参数 ) # 创建MCP客户端会话 session MCPClientSession(server_paramsserver_params)步骤2从MCP Server动态生成LangChain工具python# 自动发现并转换所有工具 tools create_mcp_tool(session, namemcp-filesystem-tools) # tools是一个List[Tool]包含read_file、write_file等 # 查看有哪些工具可用 for tool in tools: print(f工具: {tool.name} | 描述: {tool.description})步骤3构建Agent并执行pythonllm ChatOpenAI(modelgpt-4o) prompt ChatPromptTemplate.from_messages([ (system, 你是一个文件管理助手可以读写文件。), (human, {input}), (placeholder, {agent_scratchpad}), ]) agent create_tool_calling_agent(llmllm, toolstools, promptprompt) executor AgentExecutor(agentagent, toolstools, verboseTrue) async def main(): async with session: # 管理MCP会话生命周期 result await executor.ainvoke({ input: 在/tmp目录下创建hello.txt并写入Hello MCP }) print(result[output])幕后发生了什么LangChain启动MCP Server子进程stdio模式通过初始化握手获取Server提供的所有工具及参数SchemaLLM根据工具描述决定调用哪个工具LangChain通过MCP协议将调用请求转发给ServerServer执行真正的操作如写文件返回结果LangChain将结果返回给LLM生成最终回答整个过程LangChain完全不关心工具内部实现只负责按MCP协议转发——这就是标准化的力量。8. 本地VS Code接入MCP工具VS Code从2025年开始原生支持MCP可以通过.vscode/mcp.json配置MCP Server。8.1 配置MCP Server以SQL MCP Server为例微软官方提供了SQL MCP Server的完整教程。以下是核心配置步骤步骤1创建.vscode/mcp.jsonstdio模式推荐本地开发VS Code自动管理进程生命周期json{ servers: { sql-mcp-server: { type: stdio, command: dab, args: [ start, --mcp-stdio, role:anonymous, --loglevel, error, --config, ${workspaceFolder}/dab-config.json ] } } }HTTP模式Server独立运行json{ servers: { sql-mcp-server: { type: sse, url: http://localhost:5000/mcp } } }步骤2配置数据源以SQL Server为例bash# 创建环境文件 .env MSSQL_CONNECTION_STRINGServerlocalhost;DatabaseProductsDb;Trusted_ConnectionTrue # 初始化配置 dab init --database-type mssql --connection-string env(MSSQL_CONNECTION_STRING) --config dab-config.json # 添加数据实体 dab add Products --source dbo.Products --permissions anonymous:read --description 商品库存信息步骤3在VS Code中使用配置完成后在VS Code的Copilot Chat中可以直接调用MCP工具textsql-mcp-server 查询库存低于20的商品有哪些Copilot会自动识别并调用SQL MCP Server的查询工具返回数据库结果。8.2 配置GitHub MCP ServerVS Code还支持一键配置GitHub MCP Server用于管理Issue、PR等按CtrlShiftP打开命令面板输入“MCP添加服务器”并选择选择HTTP类型输入https://api.githubcopilot.com/mcp/使用OAuth授权GitHub账号配置完成后Copilot可以直接帮你创建Issue、查看PR状态、分析代码等。总结MCP正在成为连接AI Agent与外部世界的“通用语言”。回顾本文章节核心要点1. MCP是什么面向AI Agent的统一工具调用协议解决碎片化问题2. 为什么用MCP标准化、解耦、安全、开发效率高3. 架构Client/Server解耦设计协议与模型无关4. 工作流程工具发现 → 发起调用 → 流式返回上下文持续传递5. 传输协议stdio本地和HTTPSSE远程两种标准6. 编写MCPstudio-mcp/studio极速上手或fast-mcp自定义开发7. LangChain接入通过create_mcp_tool动态生成工具即插即用8. VS Code本地通过mcp.json配置Copilot Chat直接调用有了MCP你的Agent再也不用为每个工具单独写适配代码了——一个标准接口连接无限可能。