Weather MCP Server
MCP-сервер погоды
Сервер Model Context Protocol, предоставляющий данные о погоде в реальном времени, защищенный аутентификацией по токену AWS Cognito OAuth 2.1 Bearer.
Реализует полную спецификацию авторизации MCP (2025-11-25):
RFC 9728 — Обнаружение метаданных защищенных ресурсов (PRM)
RFC 6750 — Использование токенов Bearer
RFC 7591 — Динамическая регистрация клиентов (DCR), связанная с Cognito
Архитектура
Client / AI Agent
│
├─ GET /.well-known/oauth-protected-resource → discover auth server
├─ POST /register → dynamic client registration (optional)
├─ POST Cognito /oauth2/token → exchange credentials for JWT
└─ POST /mcp Authorization: Bearer <token> → call MCP toolsДанные о погоде поступают из Open-Meteo — бесплатно, ключ API не требуется.
Related MCP server: MCP Authentication Example
Структура проекта
weather-mcp/
├── weather_mcp/
│ ├── __init__.py
│ ├── config.py # Env var loading (COGNITO_REGION/USER_POOL_ID/DOMAIN_PREFIX, SERVER_URL)
│ ├── auth.py # JWT validation, middleware, PRM + DCR handlers
│ ├── tools.py # MCP instance + weather tools
│ └── main.py # Starlette app factory + uvicorn entrypoint
├── infra/
│ └── cognito.yaml # CloudFormation — Cognito User Pool, IAM role
├── docs/
│ └── deploy-ecs-express.md # ECS Express Mode deployment guide
├── pyproject.toml
├── Dockerfile
├── .env.example
└── README.mdПредварительные требования
Python 3.13+ и uv
Учетная запись AWS с настроенным CLI (
aws configure)Docker (опционально, для контейнеризированного развертывания)
Быстрый старт
1 — Развертывание AWS Cognito
aws cloudformation deploy \
--template-file infra/cognito.yaml \
--stack-name weather-mcp \
--region us-east-1 \
--capabilities CAPABILITY_NAMED_IAMПолучите выходные значения:
aws cloudformation describe-stacks \
--stack-name weather-mcp \
--query "Stacks[0].Outputs" \
--output table2 — Настройка окружения
cp .env.example .env
# Fill in COGNITO_REGION, COGNITO_USER_POOL_ID, COGNITO_DOMAIN_PREFIX from CloudFormation Outputs3 — Запуск
Локально:
uv sync
uv run python -m weather_mcp.mainDocker:
docker build -t weather-mcp:local .
docker run --env-file .env -p 8000:8000 weather-mcp:localСервер запускается по адресу http://0.0.0.0:8000.
Развертывание в AWS ECS Express Mode:
Полное руководство см. в docs/deploy-ecs-express.md — оно описывает сборку образа, отправку в ECR и создание публичного HTTPS-сервиса с автоматическим масштабированием.
API-эндпоинты
Эндпоинт | Аутентификация | Описание |
| Нет | Проверка работоспособности |
| Нет | Документ обнаружения RFC 9728 |
| Нет | Динамическая регистрация клиентов RFC 7591 |
| Bearer token | Инструменты MCP (потоковый HTTP) |
Инструменты MCP
Инструмент | Описание |
| Текущая погода для любого местоположения по широте/долготе |
Использование
Динамическая регистрация клиентов (без предварительной настройки)
# 1. Register a new client
curl -s -X POST http://localhost:8000/register \
-H "Content-Type: application/json" \
-d '{"client_name":"my-agent","grant_types":["client_credentials"],"scope":"weather-mcp/read"}'
# 2. Get a token
curl -s -X POST https://weather-mcp-auth.auth.us-east-1.amazoncognito.com/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=<CLIENT_ID>&client_secret=<CLIENT_SECRET>&scope=weather-mcp/read"
# 3. Call MCP
curl -s -X POST http://localhost:8000/mcp \
-H "Authorization: Bearer <TOKEN>" \
-H "Accept: application/json, text/event-stream" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"tools/list","id":1}'Переменные окружения
Переменная | Описание |
| Регион AWS (например, |
| ID пула пользователей Cognito |
| Префикс домена Hosted-UI |
| Публичный URL этого сервера (по умолчанию: |
Как работает аутентификация
Запрос поступает на
/mcpбез токена → сервер отвечает401и заголовкомWWW-Authenticate, указывающим на/.well-known/oauth-protected-resourceКлиент получает документ обнаружения, чтобы найти сервер авторизации Cognito
Клиент получает токен доступа JWT от Cognito (через
client_credentialsили динамическую регистрацию клиентов)Клиент включает
Authorization: Bearer <token>в последующие запросыПромежуточное ПО проверяет подпись JWT по эндпоинту JWKS в Cognito (RS256, кэшируется на 1 час)
Примечания
MCP-сервер привязывается к
0.0.0.0:8000с отключенной защитой от DNS-ребиндинга (host="0.0.0.0"). Это необходимо при работе за балансировщиком нагрузки (например, ECS Express Mode ALB), где заголовокHostявляется публичным доменом, а неlocalhost.При развертывании в ECS Express Mode образ закрепляется по дайджесту — см. руководство по развертыванию для получения информации о том, как его обновить.
This server cannot be deployed
Maintenance
Related MCP Connectors
NOAA and ECMWF weather forecast MCP for discovery, validation, and GribStream OAuth queries.
Hosted MCP server for Xweather weather data: conditions, forecasts, alerts, and more.
Weather MCP — wraps Open-Meteo API (free, no auth)
Open-Meteo MCP — weather forecast + historical reanalysis + sister APIs
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables real-time weather data streaming through a secure MCP server. Features authentication using Descope and can be deployed to Fly.io for remote access.5 npm-
- FlicenseNot gradedqualityDmaintenanceDemonstrates OAuth2/OIDC authentication for MCP servers using Asgardeo, with JWT validation and a sample weather tool to showcase secured API access.-
- FlicenseNot gradedqualityDmaintenanceProvides weather information from the National Weather Service API with full MCP OAuth 2.1 compliance, including weather alerts and forecasts for US locations through secure Azure AD authentication.27-
- AlicenseNot gradedqualityDmaintenanceDemonstrates how to secure an MCP server with OAuth 2.1 using AWS Cognito, with support for dynamic client registration and client ID metadata documents.68MIT