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

我们将构建什么

我们将构建一个暴露两个工具的服务器:get_alertsget_forecast。然后我们将服务器连接到一个 MCP 宿主(在本例中是 Claude for Desktop):
服务器可以连接到任何客户端。为简单起见我们在这里选择了 Claude for Desktop,但我们也有一份构建你自己的客户端的指南。

MCP 核心概念

MCP 服务器可以提供三种主要类型的能力:
  1. 资源(Resources):可以被客户端读取的类文件数据(如 API 响应或文件内容)
  2. 工具(Tools):可以被 LLM 调用的函数(需用户批准)
  3. 提示(Prompts):帮助用户完成特定任务的预先编写的模板
本教程将主要聚焦于工具。
让我们开始构建我们的天气服务器!你可以在这里找到我们将构建内容的完整代码。

前置知识

本快速开始假设你熟悉:
  • 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 类型提示和文档字符串(docstring)来自动生成工具定义,使得创建和维护 MCP 工具变得容易。

辅助函数

接下来,让我们添加用于查询和格式化来自 National Weather Service API 数据的辅助函数:

实现工具执行

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

运行服务器

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

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

Claude for Desktop 尚未在 Linux 上提供。Linux 用户可以继续阅读构建客户端教程,构建一个连接到我们刚构建的服务器的 MCP 客户端。
首先,确保你已安装 Claude for Desktop。你可以在这里安装最新版本。 如果你已经有了 Claude for Desktop,请确保它已更新到最新版本。我们需要为你想使用的任何 MCP 服务器配置 Claude for Desktop。为此,在文本编辑器中打开你位于 ~/Library/Application Support/Claude/claude_desktop_config.json 的 Claude for Desktop App 配置。如果该文件不存在,请务必创建它。例如,如果你安装了 VS Code
然后你将在 mcpServers 键中添加你的服务器。只有在至少一个服务器被正确配置时,MCP UI 元素才会在 Claude for Desktop 中显示。在本例中,我们将像这样添加我们单个的天气服务器:
你可能需要在 command 字段中放入 uv 可执行文件的完整路径。你可以通过在 macOS/Linux 上运行 which uv 或在 Windows 上运行 where uv 来获取它。
确保你传入服务器的绝对路径。你可以通过在 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

用命令测试

让我们确保 Claude for Desktop 正在识别我们在 weather 服务器中暴露的两个工具。你可以通过查找 “Add files, connectors, and more /” 图标来做到这一点:
点击加号图标后,将鼠标悬停在 “Connectors” 菜单上。你应该看到列出的 weather 服务器:
如果你的服务器没有被 Claude for Desktop 识别,请前往故障排查一节获取调试提示。 如果服务器已经出现在 “Connectors” 菜单中,你现在可以通过在 Claude for Desktop 中运行以下命令来测试你的服务器:
  • What’s the weather in Sacramento?
  • What are the active weather alerts in Texas?
由于这是美国 National Weather Service,查询将只对美国地点有效。

底层发生了什么

当你提问时:
  1. 客户端将你的问题发送给 Claude
  2. Claude 分析可用的工具并决定使用哪个(些)
  3. 客户端通过 MCP 服务器执行所选的工具
  4. 结果被发送回 Claude
  5. Claude 组织出一段自然语言响应
  6. 该响应被展示给你!

故障排查

从 Claude for Desktop 获取日志Claude.app 中与 MCP 相关的日志被写入到 ~/Library/Logs/Claude 中的日志文件:
  • mcp.log 将包含关于 MCP 连接和连接失败的一般日志。
  • 名为 mcp-server-SERVERNAME.log 的文件将包含来自指定服务器的错误(stderr)日志。
你可以运行以下命令来列出最近的日志并跟踪任何新日志:
服务器未在 Claude 中出现
  1. 检查你的 claude_desktop_config.json 文件语法
  2. 确保你项目的路径是绝对路径而非相对路径
  3. 完全重启 Claude for Desktop
要正确地重启 Claude for Desktop,你必须完全退出该应用:
  • Windows:右键点击系统托盘中的 Claude 图标(它可能隐藏在”隐藏图标”菜单中)并选择 “Quit” 或 “Exit”。
  • macOS:使用 Cmd+Q 或从菜单栏选择 “Quit Claude”。
仅仅关闭窗口不会完全退出应用,你的 MCP 服务器配置更改将不会生效。
工具调用静默失败如果 Claude 尝试使用工具但它们失败了:
  1. 检查 Claude 的日志中是否有错误
  2. 验证你的服务器能够无错误地构建和运行
  3. 尝试重启 Claude for Desktop
这些都不管用。我该怎么办?请参阅我们的调试指南以获取更好的调试工具和更详细的指导。
错误:Failed to retrieve grid point data这通常意味着以下之一:
  1. 坐标在美国之外
  2. NWS API 出现问题
  3. 你正在被速率限制
修复:
  • 验证你使用的是美国坐标
  • 在请求之间添加一个小的延迟
  • 检查 NWS API 状态页面
错误:No active alerts for [STATE]这不是一个错误——它只是意味着该州当前没有天气警报。尝试一个不同的州,或在恶劣天气期间检查。
有关更高级的故障排查,查看我们关于调试 MCP的指南

后续步骤

构建客户端

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

示例服务器

查看我们的官方 MCP 服务器和实现的图库

调试指南

了解如何有效地调试 MCP 服务器和集成

使用 Agent Skills 构建

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