Skip to main content
Glama
yuxiaosenstar

weather-mcp-server-js

🌤️ Weather MCP Server (Node.js)

Сервер MCP (Model Context Protocol), реализованный на Node.js / Express. Предоставляет инструмент get_weather через Streamable HTTP transport, позволяя MCP-клиентам, таким как Claude Code, запрашивать текущую погоду в любом городе в реальном времени.

Данные о погоде поступают с wttr.in — бесплатно, без регистрации и без API-ключей.

✨ Возможности

  • 🛰️ Удалённый MCP-сервер: реализован на официальном @modelcontextprotocol/sdk с поддержкой Streamable HTTP, включая режимы JSON и SSE

  • 🌆 Поддержка городов по всему миру: достаточно передать название города (например, Beijing, Tokyo, Paris) для получения погоды

  • 🔌 Полное управление сессиями: автоматическая генерация/проверка Mcp-Session-Id, поддержка создания, повторного использования и закрытия сессий (DELETE)

  • 🧩 Один файл — и готово: не требуется база данных, нулевая конфигурация, достаточно одного server.js для запуска

Related MCP server: MCP Weather Server — Demo

📦 Требования к окружению

  • Node.js ≥ 18 (встроенный fetch, дополнительные зависимости не требуются)

🚀 Быстрый старт

# 1. 安装依赖
npm install

# 2. 启动服务(默认端口 3000)
npm start

# 后台运行(日志写入 logs/server.log)
npm run start:bg

После успешного запуска адрес сервиса:

http://localhost:3000/mcp

Часто используемые команды

Команда

Описание

npm start

Запуск сервера в переднем плане

npm start:bg

Запуск в фоне, лог в logs/server.log

npm run dev

Режим разработки, автоперезапуск

npm run status

Проверка, запущен ли сервис на порту 3000

npm run logs

Просмотр логов в реальном времени

npm run stop

Остановка сервера

npm run restart

Перезапуск сервера

npm run restart:bg

Перезапуск в фоновом режиме

🔌 Настройка MCP-клиента

В Claude Code или другом MCP-клиенте с поддержкой Streamable HTTP зарегистрируйте сервис как удалённый MCP-сервер.

Claude Code

Добавьте через список MCP-серверов (/mcp → Добавить → HTTP):

{
  "type": "http",
  "url": "http://localhost:3000/mcp"
}

Способ через JSON-конфигурацию

{
  "mcpServers": {
    "weather": {
      "type": "http",
      "url": "http://localhost:3000/mcp"
    }
  }
}

🧰 Предоставляемые инструменты

get_weather

Получение текущих погодных условий для указанного города.

Параметры

Параметр

Тип

Обязательный

Описание

city

string

✅

Название города, например Beijing, Tokyo

Пример ответа

当前 Beijing 的天气是晴(Sunny),温度 28°C(体感 30°C),湿度 45%,风速 12 km/h。

⚙️ Особенности реализации

  • Изоляция сессий: каждая сессия содержит собственный экземпляр Server + transport (метод connect() в SDK поддерживает только один transport), связь осуществляется через заголовок Mcp-Session-Id.

  • Создание новой сессии: POST-запрос без Mcp-Session-Id считается инициализирующим; сервер генерирует идентификатор сессии и возвращает его в заголовке ответа Mcp-Session-Id (заголовок явно раскрывается через CORS exposedHeaders для браузерных клиентов).

  • Совместимость: GET-запрос (SSE-зондирование) без идентификатора сессии поддерживает открытое SSE-соединение (а не возвращает 404/400), что позволяет клиентам, таким как Claude Code, продолжить POST-инициализацию.

  • Надёжная обработка ошибок: при сбое вызова API погоды возвращается результат с isError: true, а не вызывается падение всего запроса.

🗂️ Структура проекта

.
├── server.js          # 全部服务逻辑(单文件)
├── package.json       # 项目配置与脚本
├── logs/              # 运行时日志(已被 .gitignore 忽略)
└── LICENSE            # MIT 许可证

📄 Лицензия

MIT

Related MCP Connectors

Related MCP Servers