使用说明
MCP气象服务器
一种模型上下文协议(MCP)服务器,使用带有承载令牌认证的Open-Meteo API提供天气数据。
特性
- 获取当前天气:获取任何位置的实时天气状况
- 获取预测:获取1-16天天气预报
- 承载令牌身份验证:使用基于令牌的身份验证进行安全访问
- Docker支持:使用Docker和Docker Compose轻松部署
先决条件
- Python 3.14+(用于本地开发)
- Docker和Docker Compose(用于容器化部署)
- MCP承载令牌(用于身份验证)
安装
本地开发
- 克隆存储库:
git clone <repository-url>
cd test-mcp-server
- 创建Python虚拟环境:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
- 安装依赖项:
pip install -e .
- 设置Bearer令牌:
export MCP_BEARER_TOKEN="your-secret-token-here"
- 运行服务器:
python main.py
服务器将于启动 http://localhost:8000/mcp
Docker部署
使用Docker
- 塑造形象:
docker build -t mcp-weather-server .
- 运行容器:
docker run -p 8000:8000 -e MCP_BEARER_TOKEN="your-secret-token" mcp-weather-server
使用Docker Compose(推荐)
创建一个 docker-compose.yml 项目根目录中的文件:
version: '3.8'
services:
mcp-weather:
build: .
container_name: mcp-weather-server
ports:
- "8000:8000"
environment:
MCP_BEARER_TOKEN: ${MCP_BEARER_TOKEN:-default-secret-token-change-me}
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "-H", "Authorization: Bearer ${MCP_BEARER_TOKEN:-default-secret-token-change-me}", "http://localhost:8000/mcp"]
interval: 30s
timeout: 10s
retries: 3
start_period: 5s
- 创建一个
.env使用您的令牌创建文件:
cat > .env << EOF
MCP_BEARER_TOKEN=your-secret-token-here
EOF
- 启动服务器:
docker-compose up -d
- 查看日志:
docker-compose logs -f mcp-weather
- 停止服务器:
docker-compose down
用法
认证
所有请求都需要承载令牌身份验证:
curl -H "Authorization: Bearer your-secret-token" http://localhost:8000/mcp
连接MCP客户端
使用MCP检查器
- 设置服务器URL:
http://localhost:8000/mcp - 添加授权标头:
Bearer your-secret-token
使用Python MCP客户端
from mcp.client.session import ClientSession
from mcp.client.streamable_http import streamable_http_client
headers = {"Authorization": "Bearer your-secret-token"}
async with streamable_http_client("http://localhost:8000/mcp", headers=headers) as (read_stream, write_stream, _):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
# List available tools
tools = await session.list_tools()
for tool in tools.tools:
print(f"- {tool.name}: {tool.description}")
可用工具
get_current_weather
获取某个位置的当前天气状况。
参数:
latitude(浮动):位置的纬度longitude(浮动):位置的经度
例子:
result = await session.call_tool("get_current_weather", latitude=40.7128, longitude=-74.0060)
get_forecast
获取某个地点的天气预报。
参数:
latitude(浮动):位置的纬度longitude(浮动):位置的经度days(int):要预测的天数(1-16,默认值:7)
例子:
result = await session.call_tool("get_forecast", latitude=40.7128, longitude=-74.0060, days=5)
测试
在本地运行测试
pip install pytest pytest-asyncio requests
pytest tests/ -v
测试覆盖率
测试套件包括:
- 服务器启动和初始化
- 承载令牌身份验证
- MCP工具清单和验证
- 与MCP客户端的集成测试
配置
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
MCP_BEARER_TOKEN |
用于身份验证的承载令牌 | default-secret-token-change-me |
服务器配置
服务器监听:
- 主机:
0.0.0.0(所有接口) - 端口:
8000 - 端点:
/mcp
Docker编写网络访问
要使服务器可从其他容器或主机访问,请执行以下操作:
从本地主机访问:
docker-compose up
curl -H "Authorization: Bearer your-token" http://localhost:8000/mcp
从其他容器进入:
# In another docker-compose.yml or service
services:
other-service:
depends_on:
- mcp-weather
environment:
MCP_SERVER_URL: http://mcp-weather:8000/mcp
从主机访问(在远程服务器上运行时):
curl -H "Authorization: Bearer your-token" http://<server-ip>:8000/mcp
CI/CD
该项目包括GitHub Actions CI管道,该管道:
- Lints Python代码(黑色、isort、flake8、pylint)
- 使用mypy进行类型检查
- 构建Docker镜像并将其推送到ghcr.io
- 使用pytest运行集成测试
看 .github/workflows/ci.yml 了解详情。
故障排除
服务器无法启动
检查服务器日志:
docker-compose logs -f mcp-weather
身份验证错误
验证Bearer令牌是否设置正确:
echo $MCP_BEARER_TOKEN
在中更新令牌 .env 文件并重新启动:
docker-compose down && docker-compose up -d
连接被拒绝
确保容器正在运行:
docker-compose ps
端口映射是正确的:
docker-compose port mcp-weather 8000
许可证
有关详细信息,请参阅LICENSE文件。
贡献
欢迎投稿!请随时提交拉取请求。