Yandex Weather MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Yandex Weather MCPWhat's the current weather in Moscow?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Yandex Weather MCP
Локальный MCP-сервер для получения данных из API Яндекс Погоды по координатам. Сервер прячет API-ключ от MCP-клиента, валидирует входные параметры, нормализует ответ API и кэширует запросы на 5-15 минут.
Технический консилиум
Backend-разработчик: на первом этапе нужны четыре инструмента MCP: текущая погода, прогноз, короткая сводка и сравнение двух точек. Запрашивать стоит координаты, язык, лимит дней, почасовой прогноз и расширенные поля. Пользователю полезны температура, ощущается как, состояние, ветер, влажность, давление, осадки, рассвет/закат и служебный признак кэша.
DevOps-инженер: локальный Docker-запуск должен получать секреты только через env, работать не от root и иметь простой healthcheck. Риски: stdio MCP плохо сочетается с обычной HTTP-проверкой, .env легко случайно закоммитить, а сеть из контейнера должна иметь доступ к API.
Специалист по API-интеграциям: клиенту нужен таймаут, понятная обработка 401/403/404/429/400, аккуратный JSON parsing и endpoint, который можно переопределить через env. Для первого этапа не стоит делать агрессивные retry: погодный запрос безопасен, но повтор при 429 только быстрее сожжет лимит.
Специалист по MCP: инструменты лучше возвращать JSON как text content, потому что это совместимо с большинством MCP-клиентов и удобно для отладки. Ошибки возвращаются структурированно в { error: { code, message, details } }.
Специалист по типизации и качеству: TypeScript + Zod дают строгие контракты на входе и нормализацию на выходе. В тестах нужно закрыть координаты, маппинг состояний, отсутствующий ключ, ошибки API, кэш и нормализацию.
Related MCP server: Open Weather13 MCP Server
Архитектурное решение
Для первого этапа выбран TypeScript / Node.js. Python быстрее для прототипа, Rust надежнее для production-бинарника, но TypeScript дает лучший баланс MCP-экосистемы, строгих типов, Docker-упаковки и скорости разработки.
Проект устроен так:
src/
index.ts
server.ts
config.ts
yandexWeatherClient.ts
tools/
schemas/
utils/
Dockerfile
docker-compose.yml
README.md
.env.exampleПо документации: публично используемый endpoint Яндекс Погоды для прогноза обычно выглядит как https://api.weather.yandex.ru/v2/forecast с ключом в заголовке X-Yandex-API-Key. В коде endpoint вынесен в YANDEX_WEATHER_API_URL, чтобы без изменения сервера перейти на endpoint вашего тарифа, если в личном кабинете доступна другая версия.
Настройка
Получите API-ключ в кабинете Яндекс Погоды / Яндекс API, затем создайте .env:
cp .env.example .envЗаполните:
YANDEX_WEATHER_API_KEY=your_api_key_here
YANDEX_WEATHER_LANG=ru_RU
CACHE_TTL_SECONDS=600
LOG_LEVEL=info
MCP_TRANSPORT=http
HOST=0.0.0.0
PORT=3000Не храните настоящий ключ в коде, Dockerfile или README.
Локальный запуск
npm install
npm run build
npm startДля разработки:
npm run devDocker
Для серверного запуска используется HTTP transport MCP на /mcp. Создайте .env перед запуском:
cp .env.example .envЗаполните YANDEX_WEATHER_API_KEY, затем запустите:
docker compose up --buildПроверка здоровья:
curl http://localhost:3000/healthMCP endpoint:
http://localhost:3000/mcpЕсли нужен локальный stdio-режим для MCP-клиента, запускайте Node напрямую или переопределите MCP_TRANSPORT=stdio:
{
"mcpServers": {
"yandex-weather": {
"command": "npm",
"args": ["start"],
"env": {
"YANDEX_WEATHER_API_KEY": "your_api_key_here"
}
}
}
}MCP tools
get_current_weather
Вход:
{
"lat": 55.7558,
"lon": 37.6173,
"lang": "ru_RU"
}Возвращает location, current и meta.
get_weather_forecast
Вход:
{
"lat": 55.7558,
"lon": 37.6173,
"lang": "ru_RU",
"days": 3
}Возвращает прогноз по дням, частям суток и почасовым данным, если они доступны для тарифа/API.
get_weather_summary
Вход:
{
"lat": 55.7558,
"lon": 37.6173
}Пример ответа:
{
"summary": "Сейчас +18°C, ощущается как +16°C. Пасмурно, ветер 4 м/с, влажность 78%.",
"advice": "Вероятность осадков повышенная, стоит взять зонт или дождевик."
}compare_weather
Вход:
{
"first": { "lat": 55.7558, "lon": 37.6173, "name": "Москва" },
"second": { "lat": 59.9386, "lon": 30.3141, "name": "Санкт-Петербург" },
"lang": "ru_RU"
}Возвращает две нормализованные погодные карточки и сравнение по температуре, ветру и влажности.
Деплой на VDS
Требования
Docker 24+ и Docker Compose V2 (
docker compose)Открытый порт на сервере (например 3000) или Nginx как reverse proxy
Шаги
# 1. Клонировать репозиторий на сервер
git clone <url> yandex-weather-mcp
cd yandex-weather-mcp
# 2. Создать директорию для базы данных планировщика
mkdir -p data
# 3. Создать .env и вписать ключ
cp .env.example .env
nano .env # выставить YANDEX_WEATHER_API_KEY и, если нужно, PORT
# 4. Запустить
docker compose up -d --build
# 5. Проверить
curl http://localhost:3000/healthПосле этого MCP endpoint доступен на http://<vds-ip>:3000/mcp.
Nginx reverse proxy (рекомендуется)
Позволяет закрыть прямой доступ к порту 3000 и выставить наружу только 443/80.
server {
listen 443 ssl;
server_name weather-mcp.example.com;
ssl_certificate /etc/letsencrypt/live/weather-mcp.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/weather-mcp.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 30s;
}
}После этого можно держать порт 3000 закрытым в firewall и обращаться к https://weather-mcp.example.com/mcp.
Firewall
Если Nginx не используется и порт открыт напрямую — ограничьте доступ по IP:
# UFW пример
ufw allow from <trusted-ip> to any port 3000
ufw deny 3000Управление контейнером
# Посмотреть логи (включая тики планировщика)
docker compose logs -f
# Перезапустить
docker compose restart
# Обновить после git pull
git pull && docker compose up -d --build
# Остановить (данные БД сохраняются в ./data/)
docker compose down
# Остановить и удалить данные БД
docker compose down && rm -rf data/Контейнер настроен на restart: unless-stopped — поднимается автоматически после перезагрузки сервера.
Персистентность базы данных планировщика
Планировщик хранит историю наблюдений в SQLite (weather.db). Без volume файл живёт внутри контейнера и пропадает при docker compose down или пересборке образа.
docker-compose.yml уже настроен на монтирование ./data/weather.db — достаточно создать директорию перед первым запуском:
mkdir -p dataПуть к файлу управляется переменной WEATHER_DB_PATH в .env. Менять не нужно, если устраивает ./data/weather.db.
MCP endpoint для клиента
{
"mcpServers": {
"yandex-weather": {
"url": "http://<vds-ip>:3000/mcp"
}
}
}Или с Nginx:
{
"mcpServers": {
"yandex-weather": {
"url": "https://weather-mcp.example.com/mcp"
}
}
}Ошибки
Ошибки возвращаются в едином формате:
{
"error": {
"code": "AUTH_ERROR",
"message": "Yandex Weather API rejected the API key",
"details": {}
}
}Поддержанные коды: CONFIGURATION_ERROR, VALIDATION_ERROR, AUTH_ERROR, RATE_LIMITED, NOT_FOUND, TIMEOUT, NETWORK_ERROR, INVALID_JSON, UNEXPECTED_RESPONSE, UNSUPPORTED_API_PARAMETER, YANDEX_API_ERROR.
Тестирование
npm test
npm run typecheckТесты покрывают:
валидацию координат;
маппинг погодных состояний;
отсутствующий API-ключ;
ошибку API;
работу кэша;
нормализацию ответа Яндекс Погоды.
Ограничения
Сервер не делает геокодинг по названию города.
Набор полей зависит от тарифа и endpoint Яндекс Погоды.
Кэш хранится только в памяти процесса.
HTTP healthcheck проверяет живой процесс и конфигурацию, но не дергает внешний API Яндекс Погоды.
Roadmap второго этапа
геокодинг по названию города;
хранение избранных локаций;
Prometheus-метрики;
Grafana dashboard;
rate limiting;
persistent cache через SQLite/Redis;
поддержка нескольких weather-провайдеров;
алерты: дождь, мороз, сильный ветер;
интеграция с Home Assistant.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/aleks-yustas/yandex-weather-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server