前言

说白了,MCP 这个东西火了大半年了,但很多开发者还停留在"听过但没用过"的阶段。今天这篇就一个目的:带你从零写一个 MCP Server,然后用 Claude 调用它。 整个过程不超过 30 分钟。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

先说清楚 MCP 是干嘛的。你可以把它理解成 AI 模型和外部工具之间的"USB 接口"——以前每个 AI 应用都要自己写一套工具调用逻辑,现在有了统一标准,工具写一次,到处能用。

环境准备

你需要这几样东西:

  • Python 3.10+(推荐 3.12)
  • uv 包管理器(比 pip 快太多,强烈推荐)
  • 一个 Anthropic API Key

安装 uv:

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

创建项目:

uv init mcp-server-demo
cd mcp-server-demo
uv add mcp anthropic

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

写一个最简单的 MCP Server

直接上代码。这个 Server 提供一个 get_weather 工具,返回模拟天气数据:

# server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("weather-server")

@mcp.tool()
async def get_weather(city: str) -> str:
    """获取指定城市的天气信息"""
    # 这里用模拟数据,实际项目可以接真实 API
    mock_data = {
        "北京": "晴,28°C,湿度 45%",
        "上海": "多云,26°C,湿度 65%",
        "深圳": "雷阵雨,30°C,湿度 80%",
    }
    return mock_data.get(city, f"{city}:暂无数据")

@mcp.tool()
async def list_cities() -> str:
    """返回支持查询的城市列表"""
    return "北京、上海、深圳"

if __name__ == "__main__":
    mcp.run(transport="stdio")

就这么多。没错,MCP Server 的核心就是这么简洁。装饰器 @mcp.tool() 会自动把函数注册为工具,函数的 docstring 就是工具的描述——Claude 会根据这个描述决定什么时候调用它。

用 Claude Desktop 测试

打开 Claude Desktop 的配置文件:

# macOS
vim ~/Library/Application\ Support/Claude/claude_desktop_config.json

# Windows
notepad %APPDATA%\Claude\claude_desktop_config.json

加入你的 Server:

{
  "mcpServers": {
    "weather": {
      "command": "uv",
      "args": ["run", "python", "server.py"],
      "cwd": "你的项目路径"
    }
  }
}

重启 Claude Desktop,你会看到工具图标多了一个小锤子。试着问它"北京天气怎么样"——它会自动调用你的 get_weather 工具。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进阶:添加 Resource 和 Prompt

MCP 不只是工具调用,它还有 Resource(资源)和 Prompt(提示模板)两个概念:

@mcp.resource("config://app")
async def get_config():
    """返回应用配置信息"""
    return {"version": "1.0", "debug": False}

@mcp.prompt()
async def weather_report(city: str) -> str:
    """生成天气报告的提示模板"""
    return f"请根据以下信息为 {city} 生成一份简洁的天气报告,包含出行建议。"

Resource 让 AI 能读取你的数据,Prompt 让你能定义标准化的交互模板。

常见问题

Q:MCP Server 能用 TypeScript 写吗?
能,而且官方 SDK 同时支持 Python 和 TypeScript。TypeScript 版用 @modelcontextprotocol/sdk 这个包。

Q:除了 stdio,还有别的通信方式吗?
有。MCP 还支持 SSE(Server-Sent Events)和 HTTP Streamable transport,适合远程部署的场景。

Q:和 OpenAI Function Calling 有什么区别?
Function Calling 是 OpenAI 自己的标准,绑定在 OpenAI 的 API 上。MCP 是开放标准,任何模型都能用——DeepSeek、Gemini、本地模型都支持。

Q:安全性怎么保证?
MCP Server 运行在本地,默认不暴露网络。如果要远程部署,需要加上认证和权限控制。

总结

MCP 的核心价值就是标准化。以前每个 AI 应用都在重复造轮子,现在大家用同一套协议,工具生态可以共享。如果你在做 AI Agent 相关的开发,MCP 几乎是必学的。

下一步可以看看:

有问题评论区见 👇

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐