MCP 协议 中级

动手实战:写一个自己的 MCP Server

用 Python FastMCP 从零实现一个能查课程信息的 MCP Server,并接入 Claude Desktop 使用。

十行起步:FastMCP

pip install "mcp[cli]"
# course_server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("course-library")

@mcp.tool()
def search_courses(keyword: str) -> str:
    """按关键词搜索 LangChain 学习中心的课程,返回课程标题与简介列表。"""
    # 实际项目中查数据库/调用 API
    return "找到 2 门:《RAG 检索增强生成:原理》《RAG 实战》"

if __name__ == "__main__":
    mcp.run()                     # 默认 stdio 传输

注意:函数签名 + docstring 就是工具描述 —— 模型靠它们判断何时调用(与《Tool Calling》课的 @tool 装饰器完全同源)。

接入 Claude Desktop

// claude_desktop_config.json
{
  "mcpServers": {
    "course-library": {
      "command": "python",
      "args": ["C:/path/to/course_server.py"]
    }
  }
}

重启 Claude Desktop,就能看到工具并直接对话调用 —— 你的代码成了整个生态的一等公民。

进阶方向

  • Resources@mcp.resource("courses://{course_id}") 暴露可读资源;
  • 远程部署:Streamable HTTP 传输 + OAuth 认证,把 Server 变成团队共享服务;
  • TypeScript SDK 同样简单(@mcp.tool() 装饰器),Node 生态项目可对应使用。

📝 课后练习

quiz-1 FastMCP 中 @mcp.tool() 装饰器的作用是?