使用说明
本地MCP服务器(气象工具)
一种模型上下文协议(MCP)服务器 get_weather 具有多个界面的工具:
- MCP客户端的MCP stdio协议
- HTTP/JSON API端点
- 流式响应的服务器发送事件(SSE)
特性
- MCP stdio服务器实现
@modelcontextprotocol/sdk - 具有JSON和SSE端点的HTTP服务器
- 天气工具:
get_weather使用Open‑Meteo的当前、每小时和每日模式 - 通过键入验证
zod - 长时间运行的请求的进度更新
- 健康检查端点
需求
- Node.js 18+(推荐LTS)
- pnpm(项目集
packageManager: pnpm@10.x)
快速启动
pnpm install
pnpm dev
这将通过stdio启动MCP服务器。使用MCP兼容客户端(或下面的检查器)进行连接。
使用MCP检查器运行
该仓库包含一个帮助脚本,用于在MCP检查器中启动服务器:
pnpm run server:inspect
笔记:
- 在Windows上,脚本设置
DANGEROUSLY_OMIT_AUTH=true仅适用于检查员会议。 - 脚本在内部运行:
pnpm dlx @modelcontextprotocol/inspector pnpm dev.
工具: get_weather
检索给定城市的天气。
输入架构
city(字符串,必需):要查询的城市名称(例如“旧金山”)。units(“公制”|“英制”,可选,默认值:“公制”)。mode(“当前”|“每小时”|“每天”,可选,默认值:“当前”)。days(int,可选):仅适用于daily模式;必须为7-10(如果省略,则默认为7)。format(“json”|“text”,可选,默认:环境相关,见下文)。
响应格式
- 默认情况下为JSON。如果
format: "text"(或设置了下面的env-var),返回一个包含字符串化JSON的单个文本blob,以实现兼容性。
例子
当前条件(公制):
{
"name": "get_weather",
"arguments": { "city": "Tokyo" }
}
下一小时~24小时(英制):
{
"name": "get_weather",
"arguments": { "city": "Seattle", "mode": "hourly", "units": "imperial" }
}
每天7-10天(公制):
{
"name": "get_weather",
"arguments": { "city": "Berlin", "mode": "daily", "days": 7 }
}
环境变量
-
MCP_TEXT_OUTPUT=1- 强制工具响应的文本输出(字符串化JSON)。适用于仅显示文本的客户端。
-
PORT=5000- HTTP服务器的端口(默认值:5000)
-
DANGEROUSLY_OMIT_AUTH=true- 仅适用于本地检查员会话(已由设置
server:inspect在Windows上)。请勿在生产中使用。
- 仅适用于本地检查员会话(已由设置
脚本
pnpm dev--使用以下命令运行TypeScript服务器tsx(src/server.ts).pnpm build--类型检查并通过发送JStsc.pnpm run server:inspect--发射MCP检查员指向pnpm dev.
HTTP端点
GET/健康
健康检查端点。退货 { "status": "ok" } 当服务器正在运行时。
GET/GET_weather
获取JSON格式的天气数据。
查询参数:
city(必填):城市名称units:“公制”(默认)或“英制”mode:“当前”(默认)、“每小时”或“每天”days:天数(7-10,“每日”模式需要)format:“json”(默认)或“text”
GET/stream/GET_weather
使用服务器发送事件(SSE)流式传输天气数据。参数与 /get_weather.
POST/mcp
用于编程访问的MCP协议端点。
项目结构
src/server.ts--MCP和HTTP服务器实现- 处理MCP stdio协议
- 提供HTTP/JSON和SSE端点
- 实施天气服务
package.json--脚本和依赖关系.env--可选环境覆盖
实现细节
- 地理编码使用Open‑Meteo地理编码API(无API密钥)
- 通过检索预测数据
openmeteo软件开发工具包 - 通过stdio和HTTP实现MCP协议
- 提供JSON和文本响应格式
- 包括长时间运行的请求的进度事件
- 实施CORS用于Web访问
- 使用Zod验证所有输入
响应格式
当前天气
{
"location": "City, Region, Country",
"latitude": 0.0,
"longitude": 0.0,
"units": "metric",
"mode": "current",
"current": {
"temperature": 20.5,
"temperature_unit": "°C",
"wind_speed": 15.3,
"wind_speed_unit": "km/h"
}
}
逐时预报
{
"location": "City, Region, Country",
"units": "metric",
"mode": "hourly",
"hourly_next_24h": [
{
"time_iso": "2023-01-01T00:00:00.000Z",
"temperature": 18.5,
"temperature_unit": "°C",
"wind_speed": 12.3,
"wind_speed_unit": "km/h"
}
]
}
每日预报
{
"location": "City, Region, Country",
"units": "metric",
"mode": "daily",
"days": 7,
"daily": [
{
"date": "2023-01-01",
"t_max": 22.5,
"t_min": 16.2,
"temperature_unit": "°C",
"precipitation_sum": 0.5,
"precipitation_unit": "mm",
"wind_speed_10m_max": 25.1,
"wind_speed_unit": "km/h"
}
]
}
支持的单位
- 指标:温度为°C,风速为km/h
- 帝国的:温度为°F,风速为mph
构建
pnpm build
许可证
麻省理工学院