Skip to main content
在本教程中,我们将构建一个简单的 MCP 天气服务器,并将其连接到主机(Claude for Desktop)。

我们将构建什么

我们将构建一个提供两个工具的服务器:get_alertsget_forecast。然后我们将把服务器连接到一个 MCP 主机(在本例中是 Claude for Desktop):
Servers can connect to any client. We’ve chosen Claude for Desktop here for simplicity, but we also have a guide on building your own client.

核心 MCP 概念

MCP 服务器可以提供三种主要能力:
  1. Resources: File-like data that can be read by clients (like API responses or file contents)
  2. Tools: Functions that can be called by the LLM (with user approval)
  3. Prompts: Pre-written templates that help users accomplish specific tasks
本教程将主要聚焦于工具。
让我们开始构建我们的天气服务器吧! 你可以在这里找到我们将要构建的完整代码。

先决知识

本快速入门假设你已经熟悉:
  • Python
  • 像 Claude 这样的 LLM

登录 MCP 服务器

在实现 MCP 服务器时,请小心处理日志输出方式:基于 STDIO 的服务器: 永远不要向 stdout 写入内容。向 stdout 写入会破坏 JSON-RPC 消息并导致你的服务器失效。print() 函数默认会写入 stdout,但可以通过 file=sys.stderr 安全使用。基于 HTTP 的服务器: 标准输出日志是没问题的,因为它不会干扰 HTTP 响应。

最佳实践

  • 使用一个写入 stderr 或写入文件的日志库。

快速示例

系统要求

  • 安装了 Python 3.10 或更高版本。
  • 你必须使用 Python MCP SDK 1.2.0 或更高版本。

配置你的环境

首先,安装 uv 并设置我们的 Python 项目和环境:
确保在之后重新启动你的终端,以确保能识别到 uv 命令。接下来,我们创建并设置我们的项目:
现在让我们进入构建你的服务器。

构建你的服务器

导入包并设置实例

将以下内容添加到你的 weather.py 文件顶部:
FastMCP 类使用 Python 的类型标注和文档字符串来自动生成工具定义,这使得创建和维护 MCP 工具变得容易。

辅助函数

接下来,让我们添加用于查询并格式化来自国家气象服务(National Weather Service)API 的数据的辅助函数:

实现工具执行

工具执行处理器负责实际执行每个工具的逻辑。让我们添加它:

运行服务器

最后,让我们初始化并运行服务器:
你的服务器已经完成了! 运行 uv run weather.py 来启动 MCP 服务器,它将监听来自 MCP 主机的消息。现在,让我们使用现有的 MCP 主机来测试你的服务器——Claude for Desktop。

使用 Claude for Desktop 测试你的服务器

使用 Claude for Desktop 测试你的服务器

Claude for Desktop is not yet available on Linux. Linux users can proceed to the Building a client tutorial to build an MCP client that connects to the server we just built.
首先,确保你已安装 Claude for Desktop。 你可以在这里安装最新版本。 如果你已经安装了 Claude for Desktop,请确认已更新到最新版本。我们需要为你想使用的任意 MCP 服务器配置 Claude for Desktop。 为此,在文本编辑器中打开 Claude for Desktop 应用配置文件:~/Library/Application Support/Claude/claude_desktop_config.json。 如果文件不存在,请先创建它。例如,如果你安装了 VS Code
然后在 mcpServers 键中添加你的服务器。 只有当至少有一个服务器被正确配置时,MCP UI 元素才会显示在 Claude for Desktop 中。在这种情况下,我们将按下面方式添加我们的单个天气服务器:
你可能需要在 command 字段中填写 uv 可执行文件的完整路径。 你可以在 macOS/Linux 上运行 which uv,在 Windows 上运行 where uv 来获取它。
请确保在 cwd(此处为目录参数)中传入你服务器的绝对路径。 你可以在 macOS/Linux 上通过运行 pwd 获取;在 Windows 的命令提示符中通过运行 cd 获取。 在 Windows 中,请记得在 JSON 路径里使用双反斜杠(\\)或正斜杠(/)。
这会告诉 Claude for Desktop:
  1. 有一个名为“weather”的 MCP 服务器
  2. 通过运行 uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER/weather run weather.py 来启动它
保存文件,然后重启 Claude for Desktop

使用命令进行测试

Let’s make sure Claude for Desktop is picking up the two tools we’ve exposed in our weather server. You can do this by looking for the “Add files, connectors, and more /” icon:
点击加号图标后,将鼠标悬停在“连接器(Connectors)”菜单上。你应该会看到列出的 weather 服务器:
如果你的服务器没有被 Desktop 版的 Claude 识别,请继续查看 故障排查(Troubleshooting) 部分以获取调试建议。 如果你的服务器已经出现在“连接器(Connectors)”菜单中,你现在可以通过在 Desktop 版的 Claude 中运行以下命令来测试你的服务器:
  • 萨克拉门托(Sacramento)的天气怎么样?
  • 德克萨斯(Texas)有哪些生效的天气警报(active weather alerts)?
由于这是美国国家气象服务(National Weather service),因此这些查询只对美国境内的位置有效。

后台发生了什么

当你提出问题时:
  1. 客户端将你的问题发送给 Claude
  2. Claude 分析可用工具,并决定使用哪一个或哪些工具
  3. 客户端通过 MCP 服务器执行所选工具
  4. 将结果发送回 Claude
  5. Claude 生成自然语言回复
  6. 回复会显示给你!

故障排查(Troubleshooting)

从 Claude for Desktop 获取日志与 MCP 相关的 Claude.app 日志会写入 ~/Library/Logs/Claude 目录中的日志文件:
  • mcp.log 将包含关于 MCP 连接和连接失败的常规日志。
  • 名称为 mcp-server-SERVERNAME.log 的文件将包含来自指定服务器的错误(stderr)日志。
你可以运行以下命令来列出最近的日志,并持续跟踪任何新日志:
服务器未在 Claude 中显示
  1. 检查你的 claude_desktop_config.json 文件语法
  2. 确保你的项目路径是绝对路径,而不是相对路径
  3. 完全重启 Desktop 版的 Claude
要正确重启 Desktop 版的 Claude,你必须彻底退出应用程序:
  • Windows:在系统托盘中(可能在“隐藏图标(hidden icons)”菜单里)右键单击 Claude 图标,然后选择“退出(Quit)”或“离开(Exit)”。
  • macOS:使用 Cmd+Q,或在菜单栏中选择“退出 Claude(Quit Claude)”。
仅仅关闭窗口并不会完全退出应用程序,而你的 MCP 服务器配置更改也不会生效。
工具调用静默失败如果 Claude 尝试使用这些工具但失败了:
  1. 查看 Claude 的日志以查找错误
  2. 验证你的服务器构建和运行没有错误
  3. 尝试重启 Desktop 版的 Claude
都没有效果。该怎么办?Please refer to our debugging guide for better debugging tools and more detailed guidance.
错误:无法获取网格点数据(Failed to retrieve grid point data)这通常意味着以下情况之一:
  1. 坐标超出了美国范围
  2. NWS API 出现了问题
  3. 你被限流了(rate limited)
修复方法:
  • 确认你使用的是美国坐标
  • 在请求之间加入一点小延迟
  • 查看 NWS API 状态页面
错误:[STATE] 没有活动警报(No active alerts for [STATE])这不是错误——只是表示该州目前没有天气警报。尝试换一个州,或在严重天气发生时再查看。
For more advanced troubleshooting, check out our guide on Debugging MCP

下一步

构建客户端(Building a client)

了解如何构建你自己的 MCP 客户端,以连接到你的服务器

示例服务器(Example servers)

查看我们官方 MCP 服务器和实现的画廊

Debugging Guide

Learn how to effectively debug MCP servers and integrations

使用 Agent Skills 构建(Build with Agent Skills)

使用 agent skills 引导 AI 代码助手完成服务器设计