视频配套飞书版文档请见文末。
在本教程中,我们将构建一个简易的 MCP 天气服务器(参考MCP官方文档),并将其与一个主机(客户端),即 Cursor 客户端相连接。
当前,许多大语言模型(LLM)尚不具备获取天气预报及恶劣天气警报的能力。我们将借助 MCP 来解决这一问题!
我们会构建一个服务器,该服务器将暴露两个工具:get-alerts 和 get-forecast。随后,我们会把此服务器连接到一个 MCP 客户端。
众多编程语言都支持开发 MCP 服务器,例如 Python、JavaScript、Java、Kotlin、C# 等。在此,我们选用 Python 进行演示。
配套视频
搭建Python开发环境
首先,让我们安装 uv ,uv(Rust 版)需要 Python 3.8+ 环境:
通过 pip 安装(推荐):
以MacOS/Linux为例:
以Windows为例:
之后请务必重启你的终端,以确保 uv 命令被识别。
创建项目
现在,让我们创建并设置我们的项目:
以MacOS/Linux为例:
以Windows为例:
现在让我们深入构建你的服务器。
服务器代码编写
将如下代码添加到你的 weather.py 文件的顶部:
让我们详细解释FastMCP类的功能和用法。FastMCP是一个用于构建工具服务器的框架,具有以下主要特点:
1初始化
FastMCP实例化时需要一个名称参数,这里使用"weather"作为服务名称。这个名称用于标识该工具服务器。
1工具装饰器
FastMCP提供了@mcp.tool()装饰器,用于将函数注册为工具。例如:
这个装饰器将普通函数转换为可以通过MCP服务器调用的工具。
1异步支持
FastMCP完全支持异步操作,可以处理异步函数(使用async/await语法)。这在处理I/O密集型操作(如API请求)时特别有用。
1运行服务器
FastMCP提供了run()方法来启动服务器。可以指定不同的传输方式,这里使用'stdio'(标准输入输出)作为传输方式。
1依赖管理
从pyproject.toml文件可以看出,FastMCP是通过mcp[cli]包提供的,版本要求≥1.6.0:
在这个天气应用中,FastMCP被用来:
1创建一个天气服务工具服务器
1提供两个主要工具函数:
1get_alerts: 获取特定州的天气警报
1get_forecast: 获取特定位置的天气预报
1处理异步API请求
1格式化和返回天气数据
查询天气和格式化函数
接下来这2个函数,用于查询和格式化来自 National Weather Service API 的数据:
编写2个工具函数
Tool 函数负责实际执行每个 tool 的逻辑。让我们添加它:
运行服务器
最后,让我们初始化并运行 server:
Server 已经完成!运行 uv run weather.py 以确认一切正常。
现在让我们从现有的 MCP host(Cursor) 测试你的 server。
Cursor 连接你的Server
在Cursor中填写MCP的配置信息:
这告诉 Cursor:
1有一个名为 “weather” 的 MCP server。
1通过运行 uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER/weather run weather.py 来启动它。
底层执行流程
当你通过客户端(Cursor)提出问题时:
1客户端(client)将你的问题发送给 LLM;
1LLM 分析可用的 tools 并决定使用哪些 tool;
1客户端(client) 通过 MCP server 执行选择的 tool;
1结果被发回给 LLM;
1LLM 制定自然语言响应;
1响应显示给你;
领取专属 10元无门槛券
私享最新 技术干货