news 2026/5/9 20:50:46

从零构建MCP-Server实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零构建MCP-Server实战

用Python从零构建MCP Server实战:让AI Agent连接万物

MCP(Model Context Protocol)正在成为AI Agent连接外部世界的标准协议。本文手把手教你用Python从零构建一个生产级MCP Server,让你的Agent能调用任何自定义工具。

前言

2024年底,Anthropic发布了MCP(Model Context Protocol)协议,目标是统一AI模型与外部工具、数据源之间的通信标准。简单来说,MCP就是AI世界的"USB接口"——任何工具只要实现了MCP协议,就能被任何支持MCP的AI模型使用。

我在第一次接触MCP时,觉得官方文档过于理论化,缺少实操指导。于是我决定自己从零实现一个MCP Server,过程中踩了不少坑:stdio通信的缓冲区问题、Schema不兼容、流式响应处理等等。

这篇文章会带你从协议原理开始,一步步实现一个完整的MCP Server,并与Claude和LangChain集成测试。


一、MCP协议核心概念

1.1 架构总览

MCP采用Client-Server架构:

AI应用(Host) ↓ MCP Client(内置在Host中) ↓ ← 传输层(stdio / HTTP SSE) MCP Server(你的代码) ↓ 外部资源(数据库、API、文件系统...)

核心概念:

  • Host:AI应用(如Claude Desktop、Cursor、你的Agent程序)
  • Client:MCP协议客户端,由Host管理,负责与Server通信
  • Server:你实现的服务,暴露工具(Tools)、资源(Resources)、提示词(Prompts)
  • Transport:通信方式,分stdio(标准输入输出)和HTTP SSE两种

1.2 三大能力

MCP Server可以暴露三种能力:

  1. Tools(工具):AI可以调用的函数(如查询数据库、发送邮件)
  2. Resources(资源):AI可以读取的数据(如文件内容、API数据)
  3. Prompts(提示词):预定义的提示词模板

1.3 传输层对比

特性stdioHTTP SSE
通信方式标准输入输出HTTP长连接 + Server-Sent Events
适用场景本地进程远程服务
延迟极低较低
部署方式本地安装Web服务
典型用户Claude Desktop、Cursor自定义Agent、Web应用

二、从零实现stdio MCP Server

2.1 环境准备

# 安装MCP Python SDKpipinstallmcp# 或者用uv(推荐)uvaddmcp

2.2 最小MCP Server

# server.py - 最简单的MCP Serverfrommcp.serverimportServerfrommcp.server.stdioimportstdio_serverimportasyncio# 创建Server实例server=Server("my-first-mcp")@server.tool()defadd(a:int,b:int)->int:"""两数相加"""returna+b@server.tool()defgreet(name:str)->str:"""打招呼"""returnf"你好,{name}!我是MCP Server。"asyncdefmain():asyncwithstdio_server()as(read_stream,write_stream):awaitserver.run(read_stream,write_stream,server.create_initialization_options())if__name__=="__main__":asyncio.run(main)

2.3 Claude Desktop配置

在Claude Desktop的配置文件中注册你的Server:

{"mcpServers":{"my-first-mcp":{"command":"python","args":["/path/to/server.py"]}}}

配置文件位置:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json

三、工具注册与参数验证

3.1 基础工具注册

frommcp.serverimportServerfrompydanticimportBaseModel,FieldfromtypingimportOptional server=Server("tool-server")# 方式1:简单函数(自动从类型注解生成Schema)@server.tool()defcalculate(expression:str)->str:"""计算数学表达式"""try:result=eval(expression)# 生产环境不要用eval!returnstr(result)exceptExceptionase:returnf"计算错误:{e}"# 方式2:使用Pydantic模型(更精确的Schema控制)classSearchInput(BaseModel):query:str=Field(description="搜索关键词")max_results:int=Field(default=10,description="最大结果数",ge=1,le=100)category:Optional[str]=Field(default=None,description="分类筛选")@server.tool()defsearch_products(input:SearchInput)->str:"""搜索商品"""results=[{"name":f"商品{i}","price":i*10}foriinrange(input.max_results)]returnjson.dumps(results,ensure_ascii=False)

3.2 复杂参数处理

classDatabaseQueryInput(BaseModel):table:str=Field(description="表名")columns:list[str]=Field(description="查询的列名列表")where:Optional[dict]=Field(default=None,description="查询条件,如 {'age': {'$gt': 18}}")order_by:Optional[str]=Field(default=None,description="排序字段")limit:int=Field(default=100,ge=1,le=10000)@server.tool()defquery_database(input:DatabaseQueryInput)->str:"""查询数据库"""# 构建SQL(简化示例,生产环境用ORM或参数化查询)cols=", ".join(input.columns)sql=f"SELECT{cols}FROM{input.table}"ifinput.where:conditions=[]forkey,valueininput.where.items():ifisinstance(value,dict
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/9 20:45:31

Node _ 初学版

目录 1. 认识 Node 2. Node 基本的命令行操作 3. Node 的模块化开发 1. 自定义模块 2. 内置模块 1. fs 模块:file system(文件系统) 1. 异步读取文件内容 2. 同步读取文件内容 3. 异步写入文件内容 4. 同步写入文件内容 2. path 模…

作者头像 李华
网站建设 2026/5/9 20:43:27

CANN TileLang算子代码生成

【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills name: tilelang-op-developer description: "基于设计文档生成 T…

作者头像 李华
网站建设 2026/5/9 20:42:41

前端性能优化终极指南:如何利用WebAssembly实现高性能计算

前端性能优化终极指南:如何利用WebAssembly实现高性能计算 【免费下载链接】Front-End-Performance-Checklist 🎮 The only Front-End Performance Checklist that runs faster than the others 项目地址: https://gitcode.com/gh_mirrors/fr/Front-En…

作者头像 李华
网站建设 2026/5/9 20:42:05

3分钟掌握DeepSeek集成:从新手到专家的完整配置指南

3分钟掌握DeepSeek集成:从新手到专家的完整配置指南 【免费下载链接】awesome-deepseek-integration Integrate the DeepSeek API into popular software 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-deepseek-integration 还在为如何将DeepS…

作者头像 李华
网站建设 2026/5/9 20:35:29

Slim序列化与持久化:数据安全存储与高效传输的完整指南

Slim序列化与持久化:数据安全存储与高效传输的完整指南 【免费下载链接】slim Surprisingly space efficient trie in Golang(11 bits/key; 100 ns/get). 项目地址: https://gitcode.com/gh_mirrors/slim2/slim Slim是一款基于Golang开发的高效Trie数据结构实…

作者头像 李华