使用说明
MCP气象服务器
基于PHP 模型上下文协议(MCP) 通过Open-Meteo API提供天气信息的服务器。该项目演示了如何在PHP中构建MCP服务器,并将其与Claude Code等AI应用程序集成。
什么是MCP?
MCP(模型上下文协议)是用于将AI应用程序连接到外部系统的开源标准。把它想象成AI应用程序的USB-C端口——它提供了一种将AI应用程序连接到数据源、工具和工作流程的标准化方式。
特性
- 气象数据检索:获取任何城市的当前天气和预报
- 地理编码支持:自动将城市名称转换为坐标
- MCP协议:基于模型上下文协议构建,实现无缝的人工智能集成
- 自动发现:工具通过PHP属性自动发现
先决条件
- PHP 8.0或更高版本
- 作曲家
- 互联网连接(用于访问Open-Meteo API)
安装
-
克隆存储库:
git clone <repository-url> cd mcp-weather -
安装依赖项:
composer install
用法
运行服务器
MCP服务器使用stdio传输进行通信:
php weather.php
VS代码集成
服务器已预先配置为通过以下方式集成VS代码 .vscode/mcp.json这允许像Claude Code这样的人工智能助手自动发现和使用天气工具。
可用工具
fetch-weather
获取指定城市的天气信息。
参数:
city(string):城市名称(例如,“伦敦”、“纽约”、“东京”)
退货: 包含天气数据的JSON字符串,包括:
- 当前温度和条件
- 每小时预测
- 天气代码和说明
例子:
// Called via MCP protocol
fetch-weather("Paris")
建筑
MCP服务器配置
服务器(weather.php)使用MCP SDK的构建器模式构建:
- 用途
StdioTransport用于通信 - 自动发现工具
src/目录 - 工具通过PHP属性注册(
#[McpTool])
数据流
- 城市名称 → Open-Meteo地理编码API→ 纬度/经度
- 坐标 → Open-Meteo预测API→ 天气数据(JSON)
项目结构
mcp-weather/
├── src/
│ ├── Mcp/
│ │ └── Weather/
│ │ └── WeatherElements.php # Weather tool implementation
│ └── ZodPhp/ # Custom validation library
│ ├── Zod.php
│ ├── Schema.php
│ ├── NumberSchema.php
│ ├── StringSchema.php
│ └── BooleanSchema.php
├── weather.php # MCP server entry point
├── composer.json # Dependencies
└── CLAUDE.md # Claude Code instructions
发展
创建新工具
要添加新的MCP工具:
- 在中创建类
src/Mcp/或子目录 - 使用添加公共方法
#[McpTool]属性:
use Mcp\Attributes\McpTool;
class MyTools {
#[McpTool(
name: 'my-tool',
description: 'Description of what the tool does'
)]
public function myTool(string $param): string {
// Implementation
return "result";
}
}
- 服务器启动时将自动发现该工具
ZodPhp验证
该项目包括一个受Zod(TypeScript)启发的自定义验证库:
use Jorge\McpWeather\ZodPhp\Z;
// Validate numbers
$result = Z::number()->min(0)->max(100)->safe_parse($value);
// Validate strings
$result = Z::string()->min(3)->safe_parse($value);
// Validate booleans
$result = Z::boolean()->safe_parse($value);
测试验证库:
php test-zod.php
依赖项
mcp/sdk(dev-main)-MCP服务器功能guzzlehttp/guzzle-API请求的HTTP客户端
外部API
此项目使用以下免费API:
- Open-Meteo地理编码API -将城市名称转换为坐标
- Open-Meteo预测API -获取天气数据
许可证
[您的许可证在这里]
贡献
欢迎投稿!请随时提交拉取请求。
