5分钟搭一个MCP Server!让AI Agent调用你的工具
原创
ladon
ladon
306Safe
2026年7月6日 09:31
北京
在小说阅读器读本章
去阅读
01 MCP是什么?为什么你要会写Server?
2024年11月,Anthropic发布了MCP(Model Context Protocol)协议——你可以把它理解成AI世界的USB接口。只要双方遵守同一套规范,任何模型都能无缝接入任何工具。
到2026年,MCP已经从Anthropic的私有协议变成行业事实标准:
- Python SDK在PyPI的月下载量突破1.64亿次
- 公开目录收录的MCP Server超过20,000个
- OpenAI、Google、Microsoft相继采纳同类协议
- 阿里、腾讯、魔搭MCP广场上线近1500个Server
但问题是:会用MCP Server的人多,会自己开发的人极少。这正是差异化技能的切入点。
02 核心概念:MCP协议架构
MCP采用客户端-服务端架构:
| 角色 | 说明 | 例子 |
| MCP Client | 发起请求的AI应用 | Claude Desktop、Cursor、VS Code Copilot |
| MCP Server | 提供工具和资源的服务程序 | 你要开发的那个 |
| Transport | 通信方式 | stdio(本地)或SSE(远程HTTP) |
协议核心三要素:
- Tools
:Server暴露的可调用函数(如查天气、读数据库)
* Resources
:Server提供的可读取数据(如文件、配置)
* Prompts
:Server定义的提示词模板(如代码审查模板)
03 实战:5步搭建你的第一个MCP Server
Step 1:环境准备
# 创建项目目录 mkdir my-mcp-server && cd my-mcp-server # 安装MCP Python SDK pip install mcp
Step 2:定义你的Tool
假设我们要开发一个\"安全漏洞查询\"Server,提供CVE信息查询工具:
# server.py from mcp.server import Server from mcp.types import Tool, TextContent server = Server(\"cve-lookup\") @server.tool( name=\"query_cve\", description=\"根据CVE编号查询漏洞详情\", parameters={ \"type\": \"object\", \"properties\": { \"cve_id\": { \"type\": \"string\", \"description\": \"CVE编号,如CVE-2026-1234\" } }, \"required\": [\"cve_id\"] } ) async def query_cve(cve_id: str) -> list[TextContent]: # 调用NVD API查询CVE详情 import httpx url = f\"https://services.nvd.nist.gov/rest/json/cves/2.0?cveId={cve_id}\" async with httpx.AsyncClient() as client: resp = await client.get(url) data = resp.json() vuln = data.get(\"vulnerabilities\", [{}])[0].get(\"cve\", {}) desc = vuln.get(\"descriptions\", [{}])[0].get(\"value\", \"未找到\") return [TextContent(type=\"text\", text=f\"CVE详情:{desc}\")]
Step 3:注册Resource(可选)
@server.resource(\"cve://recent\") async def get_recent_cves() -> str: # 返回最近高危CVE列表 return \"CVE-2026-1234: Log4j3 RCE\
CVE-2026-5678: Spring4Shell2\"
Step 4:启动Server
if __name__ == \"__main__\": from mcp.server.stdio import stdio_server import asyncio async def main(): async with stdio_server() as (read, write): await server.run(read, write) asyncio.run(main())
Step 5:在Client中配置
在Claude Desktop的配置文件claude\_desktop\_config.json中添加:
{ \"mcpServers\": { \"cve-lookup\": { \"command\": \"python\", \"args\": [\"server.py\"], \"cwd\": \"/path/to/my-mcp-server\" } } }
重启Claude Desktop,你就能在对话中直接调用query_cve工具了!
04 常见坑与排错
坑1:Server启动后Client找不到
检查cwd路径是否正确,Python解释器路径是否匹配。建议用绝对路径。
坑2:Tool参数schema不对
parameters必须是JSON Schema格式,每个字段都要有type和description。缺description会导致Client无法理解参数含义。
坑3:async函数忘记await
MCP Server默认用asyncio,所有tool函数必须是async,内部调用也必须await。
05 进阶:发布到MCP广场
开发完成后,你可以把Server发布到公开目录:
- 在项目根目录添加
pyproject.toml声明元数据 - 发布到PyPI:开发者直接
pip install即可使用 - 提交到Smithery或魔搭MCP广场,供全社区发现和使用
06 写在最后
MCP Server开发门槛不高,但会的人不多。掌握这个技能,意味着你能让任何AI Agent使用你的工具和数据——这在Agent时代是核心竞争力。
记住:AI的未来不是更会聊天,而是更会干活。而干活的接口,就是MCP。
作者:ladon
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论