MCP 学习----Model Context Protocol
初识 MCP:为什么我觉得它很重要
说实话,刚开始看到 MCP 这个名字时,我以为又是一个普通的 API 规范。但深入了解后发现,这东西解决的是我在开发 AI 应用时一直头疼的问题——如何让 AI 助手更优雅地访问外部数据和工具。
以前我在做聊天机器人项目时,要让 AI 访问数据库、调用 API、读取文件,都需要写一堆胶水代码。每接入一个新的数据源,就要重新写一遍集成逻辑。MCP 的出现让我看到了标准化的希望。
MCP 到底是什么?
用我自己的理解来说,MCP 就像是 AI 世界的 USB 接口标准。
还记得以前每个设备都有自己专属的接口吗?手机充电器、键盘、鼠标都不一样。USB 出现后,所有设备都能用统一的接口连接。MCP 做的事情类似——它定义了一套标准协议,让 AI 应用能够以统一的方式连接各种数据源和工具。
传统方式:
AI应用 ← 自定义接口1 → 数据库
AI应用 ← 自定义接口2 → API服务
AI应用 ← 自定义接口3 → 文件系统
MCP方式:
AI应用 ← MCP协议 → MCP服务器1(数据库)
→ MCP服务器2(API服务)
→ MCP服务器3(文件系统)我的第一个 MCP 实验
理论看多了容易晕,我决定直接上手试试。第一个小目标:创建一个简单的 MCP 服务器,让roo code等 能够读取我本地的笔记文件。
步骤 1:环境准备
# 安装 MCP 的 Python SDK
pip install mcp-server
# 创建项目目录
mkdir my-first-mcp-server
cd my-first-mcp-server步骤 2:编写服务器代码
# server.py
import asyncio
from mcp.server import Server
from mcp.types import Tool, TextContent
import os
# 创建 MCP 服务器实例
server = Server("my-notes-server")
@server.tool()
async def read_note(filename: str) -> str:
"""读取指定的笔记文件"""
notes_dir = os.path.expanduser("~/Documents/notes")
file_path = os.path.join(notes_dir, filename)
try:
with open(file_path, 'r', encoding='utf-8') as f:
return f.read()
except FileNotFoundError:
return f"文件 {filename} 不存在"
@server.tool()
async def list_notes() -> str:
"""列出所有笔记文件"""
notes_dir = os.path.expanduser("~/Documents/notes")
files = os.listdir(notes_dir)
return "\n".join([f for f in files if f.endswith('.md')])
# 启动服务器
async def main():
await server.start()
print("MCP 服务器已启动...")
await asyncio.Event().wait()
if __name__ == "__main__":
asyncio.run(main())步骤 3:配置 mcp
{
"mcpServers": {
"my-notes": {
"command": "python",
"args": ["/path/to/server.py"]
}
}
}MCP 的实际应用场景
经过这段时间的学习和实践,我发现 MCP 特别适合以下场景:
- 企业知识库集成:让 AI 助手访问公司内部文档、Wiki
- 开发工具集成:连接 Git、JIRA、CI/CD 系统
- 数据分析:让 AI 直接查询数据库,生成报表
- 自动化工作流:触发各种自动化任务