article-8-mcp-tutorial-clean.md
什么是MCP协议
MCP(Model Context Protocol,模型上下文协议)是Anthropic在2024年底发布的开放协议,被称为“AI智能体的HTTP”。它的核心思想很简单:如果HTTP让浏览器能和任何服务器通信,那么MCP让AI模型能和任何工具/数据源通信。

在2026年,MCP已成为AI Agent开发的实际标准。OpenAI、Google、Microsoft都已支持MCP,GitHub上MCP Server数量超过1万个。
为什么需要MCP
不用MCP时,每个AI应用如果要接入外部工具(数据库、API、文件系统),都需要写定制集成代码。用MCP后:
– 一次编写,到处使用:一个MCP Server写好,Claude Desktop、Cursor、Copilot等所有MCP客户端都能调用
– 标准化通信:JSON-RPC 2.0 + 标准化的工具/资源/Prompt定义
– 安全隔离:MCP Server运行在独立进程中,权限可控
概念速查
| 概念 | 类比 | 说明 |
|——|——|——|
| MCP Client | 浏览器 | AI应用(Claude Desktop、Cursor等) |
| MCP Server | Web服务器 | 提供工具/数据/能力的服务 |
| Tool | API端点 | LLM可调用的函数 |
| Resource | 文件/数据 | LLM可读取的上下文 |
| Transport | HTTP/stdio | 通信方式 |
实操:用Python搭建第一个MCP Server
### 1. 安装SDK
pip install mcp### 2. 创建天气查询Server
创建一个文件 `weather_server.py`:
from mcp.server import Server, NotificationOptions
from mcp.server.models import InitializationCapabilities
from mcp.server.stdio import stdio_server
import json
# 创建MCP Server实例
server = Server("weather-server")
@server.list_tools()
async def list_tools():
"""告诉LLM我能提供哪些工具"""
return [
{
"name": "get_weather",
"description": "查询指定城市的天气信息",
"inputSchema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "城市名称,如'北京'"
}
},
"required": ["city"]
}
}
]
@server.call_tool()
async def call_tool(name: str, arguments: dict):
"""当LLM调用工具时执行的逻辑"""
if name == "get_weather":
city = arguments["city"]
# 实际项目替换为真实API调用
weather_data = {
"北京": {"temp": 32, "condition": "晴"},
"上海": {"temp": 35, "condition": "多云"},
"深圳": {"temp": 30, "condition": "阵雨"}
}
result = weather_data.get(city, {"temp": 25, "condition": "未知"})
return [{"type": "text", "text": json.dumps(result, ensure_ascii=False)}]
async def main():
async with stdio_server() as (read_stream, write_stream):
await server.run(
read_stream,
write_stream,
InitializationCapabilities(
tools=NotificationOptions()
)
)
if __name__ == "__main__":
import asyncio
asyncio.run(main())### 3. 配置Claude Desktop
编辑Claude Desktop的配置文件(macOS):
# 配置文件路径
code ~/Library/Application\ Support/Claude/claude_desktop_config.json添加MCP Server配置:
{
"mcpServers": {
"weather": {
"command": "python3",
"args": ["/path/to/weather_server.py"]
}
}
}### 4. 测试
重启Claude Desktop,输入:
北京今天天气怎么样?
Claude会自动发现并调用 `get_weather` 工具,返回北京天气。你可以看到工具调用的过程——Claude会展示它”决定调用哪个工具、传了什么参数、拿到了什么结果”。
MCP生态现状
截至2026年7月,MCP Server生态已覆盖:
– 数据库:PostgreSQL、MySQL、SQLite、MongoDB
– 云服务:AWS、GCP、Azure、Cloudflare
– 开发工具:GitHub、GitLab、Jira、Linear
– 搜索与数据:Brave Search、Google Maps、Exa
– 文件系统:本地文件读写、PDF解析、图片处理
你可以在 [github.com/modelcontextprotocol/servers](https://github.com/modelcontextprotocol/servers) 找到官方维护的Server集合。
进阶:构建RAG MCP Server
如果你想让Claude访问你自己的知识库,只需要把上面的 `get_weather` 替换成向量搜索逻辑:
@server.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "search_knowledge_base":
query = arguments["query"]
# 1. 用 embedding 模型将 query 转向量
# 2. 在向量数据库中搜索相似文档
# 3. 返回 top-k 结果
results = search(query) # 你的向量搜索逻辑
return [{"type": "text", "text": results}]这样你的Claude就能”读懂”整个公司的内部文档了。
总结
MCP协议的5分钟理解:
1. MCP是AI应用与外部世界通信的标准协议
2. 你写一个MCP Server → 所有MCP客户端都能用
3. LLM自动发现工具、决定何时调用、解释结果
4. 生态正在爆发:从数据库到云服务,已有1万+ MCP Server
现在就去写你的第一个MCP Server吧——天气查询只要20行代码,但它打开了让AI接入任何系统的大门。
MCP与Function Calling有什么区别
初学者常问:LLM本来就有Function Calling能力,为什么还需要MCP?关键区别在于耦合度与复用性。
Function Calling是LLM厂商各自的API规范——你在OpenAI API里定义的工具,Claude不认识;你在Claude里定义的工具,Gemini不认识。MCP解决了这个互操作性问题:写一个MCP Server,所有支持MCP的LLM客户端都能调用。
更深层的区别在生产部署上。Function Calling要求你的工具逻辑和LLM调用在同一个请求上下文中——这对简单查询没问题,但如果你需要让LLM访问企业内部数据库(涉及认证、权限、审计),把数据库连接信息放在每次API调用的参数中既不安全也不现实。MCP Server作为独立进程运行,LLM通过标准协议调用它,不直接接触数据库的认证信息——安全边界更清晰,审计日志更完整。
这就是为什么越来越多的企业选择MCP而非裸Function Calling来构建生产级AI应用。
🔥 关注LC智趣厅,每周一篇实用技术教程,帮你跟上AI开发的最前沿。
👇 关注不错过
— END —
LC 智趣厅 · 科技与生活的交点
ihygg.cn
