Skip to main content
Glama

изображение предпросмотра

weather-mcp

TypeScript MCP сервер, предоставляющий инструменты для работы с погодой на базе OpenWeatherMap.

Инструменты

Инструмент

Описание

get_current_weather

Текущие погодные условия по названию города или широте/долготе

get_forecast

Прогноз на 5 дней / 3 часа по широте/долготе

Транспорты

Режим

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

Когда использовать

stdio (по умолчанию)

TRANSPORT=stdio

Локальный Cursor / Claude Desktop

Streamable HTTP

TRANSPORT=http

Деплой (Render и т.п.) / удалённый URL

Официальная документация MCP: https://modelcontextprotocol.io/docs/

Удалённый сервер (Render)

Развёрнут на бесплатном тарифе Render:

Конфигурация Cursor (удалённо)

Добавьте это в Settings → MCP или ~/.cursor/mcp.json:

{
  "mcpServers": {
    "weather": {
      "url": "https://weather-mcp-ts.onrender.com/mcp"
    }
  }
}

Локальная сборка или API-ключ в Cursor не нужны — ключ хранится в переменных окружения Render.

Бесплатный тариф Render: сервис выключается после ~15 минут бездействия. Следующий запрос — это холодный старт, который может занять до ~50 секунд, прежде чем MCP ответит. Если инструменты Cursor выглядят зависшими при пробуждении, один раз обратитесь к /health.

Related MCP server: mcp-weatherapi

Предварительные требования (только для локального запуска)

Настройка (локально)

pnpm install
cp .env.example .env

Отредактируйте .env и укажите свой ключ:

OPEN_WEATHER_MAP_API_KEY=your_key_here
TRANSPORT=stdio

Соберите сервер:

pnpm run build

Это создаст исполняемую точку входа в dist/index.js.

Добавление в Cursor (локальный stdio)

Cursor по умолчанию не запускает этот процесс из корня проекта для загрузки переменных окружения, поэтому передайте файл окружения с абсолютным путём через флаг --env-file Node.js.

  1. Откройте Cursor Settings → MCP или отредактируйте ~/.cursor/mcp.json.

  2. Добавьте запись weather в раздел mcpServers:

{
  "mcpServers": {
    "weather": {
      "command": "node",
      "args": [
        "--env-file",
        "/ABSOLUTE/PATH/TO/weather-mcp/.env",
        "/ABSOLUTE/PATH/TO/weather-mcp/dist/index.js"
      ]
    }
  }
}

Замените /ABSOLUTE/PATH/TO/weather-mcp на реальный путь к проекту (например, выполните pwd из корня репозитория). Оставьте TRANSPORT=stdio (или не задавайте) в .env.

Альтернатива: переменные окружения в строке

{
  "mcpServers": {
    "weather": {
      "command": "node",
      "args": [
        "/ABSOLUTE/PATH/TO/weather-mcp/dist/index.js"
      ],
      "env": {
        "OPEN_WEATHER_MAP_API_KEY": "your_key_here",
        "TRANSPORT": "stdio"
      }
    }
  }
}

Предпочтительнее использовать .env + --env-file, чтобы ключ не попадал в mcp.json.

  1. Сохраните, затем переключите сервер в Settings → MCP (или перезапустите Cursor).

  2. Убедитесь, что сервер отображается как подключённый и перечисляет get_current_weather и get_forecast.

После изменений в коде

pnpm run build

Затем перезагрузите MCP-сервер в Cursor.

Streamable HTTP (локально)

Режим HTTP обслуживает MCP на POST/GET /mcp (настраивается) плюс GET /health. Streamable HTTP настраивается через официальный SDK createMcpHandler + toNodeHandler.

pnpm run build
TRANSPORT=http PORT=3000 pnpm run start
# or
pnpm run start:http

Вы должны увидеть что-то вроде:

Weather MCP Server running on http://0.0.0.0:3000/mcp (Streamable HTTP)

Деплой на Render

  1. Создайте Web Service из этого репозитория (корень проекта).

  2. Сборка: pnpm install && pnpm run build (или эквивалент для npm).

  3. Запуск: node dist/index.js (или pnpm run start).

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

    • TRANSPORT=http

    • OPEN_WEATHER_MAP_API_KEY=...

    • PORT задаётся Render автоматически

  5. MCP URL: https://<your-service>.onrender.com/mcp
    Этот деплой: https://weather-mcp-ts.onrender.com/mcp

HTTP-эндпоинт не защищён аутентификацией. Любой, у кого есть URL, может вызывать инструменты. Добавьте аутентификацию перед широким распространением.

Ручная проверка (OpenWeatherMap)

С настроенным .env:

node --env-file=.env -e "
import { getApiKey, buildCurrentWeatherUrl, makeOWMRequest, formatCurrentWeather } from './dist/utils.js';
const apiKey = getApiKey();
const data = await makeOWMRequest(buildCurrentWeatherUrl({ apiKey, city: 'Yaounde,CM', units: 'metric' }));
console.log(data ? formatCurrentWeather(data, 'metric') : 'failed');
"

Удалённая проверка здоровья:

curl -s https://weather-mcp-ts.onrender.com/health

Структура репозитория

weather-mcp/
├── README.md
├── package.json
├── tsconfig.json
├── .env.example
└── src/
    ├── index.ts      # stdio + Streamable HTTP entry
    ├── server.ts     # tool registration
    ├── types.ts
    └── utils.ts

Примечания

  • Никогда не коммитьте .env (он в gitignore).

  • Stdio-серверы не должны писать в stdout ничего, кроме MCP JSON-RPC; логи идут в stderr (console.error).

  • Бесплатные тарифы OpenWeatherMap покрывают текущую погоду и прогноз на 5 дней / 3 часа, используемые здесь.

Лицензия

ISC

Related MCP Connectors

Related MCP Servers