Skip to main content
Glama
sauravkumar329

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 table

2 — Настройка окружения

cp .env.example .env
# Fill in COGNITO_REGION, COGNITO_USER_POOL_ID, COGNITO_DOMAIN_PREFIX from CloudFormation Outputs

3 — Запуск

Локально:

uv sync
uv run python -m weather_mcp.main

Docker:

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-эндпоинты

Эндпоинт

Аутентификация

Описание

GET /health

Нет

Проверка работоспособности

GET /.well-known/oauth-protected-resource

Нет

Документ обнаружения RFC 9728

POST /register

Нет

Динамическая регистрация клиентов RFC 7591

POST /mcp

Bearer token

Инструменты MCP (потоковый HTTP)


Инструменты MCP

Инструмент

Описание

get_current_weather

Текущая погода для любого местоположения по широте/долготе


Использование

Динамическая регистрация клиентов (без предварительной настройки)

# 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}'

Переменные окружения

Переменная

Описание

COGNITO_REGION

Регион AWS (например, us-east-1)

COGNITO_USER_POOL_ID

ID пула пользователей Cognito

COGNITO_DOMAIN_PREFIX

Префикс домена Hosted-UI

SERVER_URL

Публичный URL этого сервера (по умолчанию: http://localhost:8000)


Как работает аутентификация

  1. Запрос поступает на /mcp без токена → сервер отвечает 401 и заголовком WWW-Authenticate, указывающим на /.well-known/oauth-protected-resource

  2. Клиент получает документ обнаружения, чтобы найти сервер авторизации Cognito

  3. Клиент получает токен доступа JWT от Cognito (через client_credentials или динамическую регистрацию клиентов)

  4. Клиент включает Authorization: Bearer <token> в последующие запросы

  5. Промежуточное ПО проверяет подпись 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 образ закрепляется по дайджесту — см. руководство по развертыванию для получения информации о том, как его обновить.


F
license - not found
Not graded
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • NOAA and ECMWF weather forecast MCP for discovery, validation, and GribStream OAuth queries.

  • Open-Meteo MCP — weather forecast + historical reanalysis + sister APIs

  • OpenWeather MCP — wraps the OpenWeatherMap API (openweathermap.org)

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sauravkumar329/weather-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server