公司动态

[MCP][]快速入门MCP开发

📅 2026/7/26 22:16:53
[MCP][]快速入门MCP开发
MCP快速入门MCP开发什么是MCPMCPModel Context Protocol模型上下文协议是一种由 Anthropic 提出的开放协议旨在标准化 AI 模型如大语言模型与外部工具、数据源之间的交互方式。简单来说MCP 为 AI 模型提供了一种“插件系统”让模型能够动态调用外部 API、查询数据库、执行代码等从而突破模型自身的知识边界。与传统的“硬编码”工具调用不同MCP 定义了一套统一的消息格式和生命周期管理让开发者可以像搭积木一样组合工具。无论是 Python、Node.js 还是 Go只要实现了 MCP 协议就能无缝集成到任何支持 MCP 的 AI 应用中。## 为什么需要MCP在开发 AI 应用时我们经常遇到以下痛点-模型能力有限模型无法访问实时数据如天气、股票价格。-工具集成复杂每个工具需要定制化接口难以复用。-安全与权限管理混乱没有统一机制控制模型能做什么。MCP 通过以下设计解决了这些问题-标准化所有工具暴露为统一的tool资源。-动态发现模型可以查询可用工具及其参数。-安全隔离工具执行在沙箱环境中模型不能直接操作系统。## 实战构建一个MCP服务器下面我们从零开始用 Python 实现一个简单的 MCP 服务器提供“获取当前时间”和“计算器”两个工具。### 环境准备首先安装 MCP Python SDKbashpip install mcp### 代码示例1基础MCP服务器python# server.py - 一个简单的MCP服务器示例import jsonfrom datetime import datetimefrom mcp.server import Serverfrom mcp.types import Tool, TextContent# 1. 创建MCP服务器实例server Server(my-mcp-server)# 2. 定义工具列表模型可以查询到的工具tools [ Tool( nameget_time, description获取当前服务器时间, parameters{ type: object, properties: {}, # 无参数 required: [] } ), Tool( namecalculator, description执行基本数学运算, parameters{ type: object, properties: { expression: { type: string, description: 数学表达式例如 2 3 * 4 } }, required: [expression] } )]# 3. 注册工具列表端点server.list_tools()async def handle_list_tools(): return tools# 4. 注册工具调用端点server.call_tool()async def handle_call_tool(name: str, arguments: dict): if name get_time: # 返回当前时间 current_time datetime.now().strftime(%Y-%m-%d %H:%M:%S) return [TextContent(typetext, textf当前时间{current_time})] elif name calculator: # 安全执行算术表达式生产环境需更严格校验 try: # 仅允许数字和运算符防止注入 expression arguments.get(expression, ) # 使用白名单字符过滤 allowed_chars set(0123456789-*/.() ) if not all(c in allowed_chars for c in expression): return [TextContent(typetext, text错误表达式包含非法字符)] result eval(expression) # 注意eval有安全风险这里仅为演示 return [TextContent(typetext, textf计算结果{result})] except Exception as e: return [TextContent(typetext, textf计算错误{str(e)})]# 5. 启动服务器使用标准IO传输if __name__ __main__: server.run(transportstdio)这段代码实现了- 通过server.list_tools()暴露工具列表。- 通过server.call_tool()处理工具调用。- 使用stdio传输适合命令行集成。### 代码示例2集成MCP客户端现在我们编写一个客户端连接到上面的服务器并调用工具。python# client.py - MCP客户端示例import asynciofrom mcp.client import Clientfrom mcp.transports.stdio import StdioServerParametersasync def main(): # 1. 配置服务器连接参数启动子进程 server_params StdioServerParameters( commandpython, args[server.py], # 运行我们刚才的服务器 env{} ) # 2. 创建客户端并连接 async with Client(server_params) as client: # 3. 初始化会话 await client.initialize() # 4. 查询可用工具 tools await client.list_tools() print(可用工具列表) for tool in tools: print(f - {tool.name}: {tool.description}) # 5. 调用get_time工具 print(\n 调用get_time ) result await client.call_tool(get_time, {}) for content in result: print(f {content.text}) # 6. 调用calculator工具 print(\n 调用calculator ) result await client.call_tool(calculator, {expression: 2 3 * 4}) for content in result: print(f 2 3 * 4 {content.text}) # 7. 测试错误处理 print(\n 测试非法输入 ) result await client.call_tool(calculator, {expression: rm -rf /}) for content in result: print(f 结果{content.text})if __name__ __main__: asyncio.run(main())运行客户端bashpython client.py预期输出可用工具列表 - get_time: 获取当前服务器时间 - calculator: 执行基本数学运算 调用get_time 当前时间2025-03-21 14:30:45 调用calculator 2 3 * 4 14 测试非法输入 结果错误表达式包含非法字符## 深入理解MCP协议核心MCP 协议基于 JSON-RPC 2.0通过以下步骤工作1.初始化客户端发送initialize请求交换协议版本和功能支持。2.工具发现客户端发送list_tools服务器返回工具列表名称、描述、参数模式。3.工具调用客户端发送call_tool包含工具名和参数服务器执行并返回结果。4.资源访问除了工具MCP 还支持resources静态数据和prompts预定义提示词。### 协议消息示例客户端发送的list_tools请求json{ jsonrpc: 2.0, id: 1, method: tools/list, params: {}}服务器响应json{ jsonrpc: 2.0, id: 1, result: { tools: [ { name: get_time, description: 获取当前服务器时间, parameters: { type: object, properties: {} } } ] }}## 进阶添加异步和日志生产环境中工具调用可能需要异步操作如查询数据库。我们可以用asyncio配合 MCPpython# 在server.py中添加异步工具import asyncioserver.call_tool()async def handle_call_tool(name: str, arguments: dict): if name fetch_data: # 模拟异步网络请求 await asyncio.sleep(1) return [TextContent(typetext, text数据已获取)]## 总结通过本文的实战演示你已经掌握了 MCP 的核心开发流程1.定义工具使用Tool数据类描述每个工具的名称、描述和参数。2.注册端点用装饰器server.list_tools()和server.call_tool()暴露功能。3.客户端集成通过Client类连接服务器调用工具并处理结果。MCP 的威力在于它的可扩展性和标准化。无论你是构建 AI 聊天机器人、自动化工作流还是为现有系统添加 AI 能力MCP 都能让你以统一的方式集成任意工具。下一步你可以尝试- 集成外部 API如天气、数据库。- 部署 MCP 服务器到 Docker 容器。- 使用 MCP 的resources功能暴露文件或配置。记住MCP 不是银弹但它为 AI 工具集成提供了一条清晰、可维护的路径。开始动手让你的 AI 模型“长出双手”吧