Skip to main content
Glama
gmailhasan

Weather MCP Server

by gmailhasan
README.md
# Weather MCP Server

A Model Context Protocol (MCP) server that provides weather data from the Open-Meteo API.

## Overview

This MCP server fetches weather data from the Open-Meteo API endpoint and communicates over **HTTP** using the Streamable HTTP transport.

```
https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41&current=temperature_2m,wind_speed_10m&hourly=temperature_2m,relative_humidity_2m,wind_speed_10m
```

## Features

- **HTTP Transport**: Communicate over HTTP for remote access
- **Current Weather**: Get current temperature and wind speed
- **Hourly Forecast**: Access hourly temperature, relative humidity, and wind speed data
- **Flexible Coordinates**: Query weather for any latitude/longitude coordinates
- **Session Management**: Supports multiple concurrent client sessions

## Installation

1. Install dependencies:

```bash
npm install
```

2. Build the server:

```bash
npm run build
```

3. Start the server:

```bash
node build/index.js
```

The server will start on `http://localhost:3000` by default. You can customize the port:

```bash
PORT=8080 node build/index.js
```

## Endpoints

- `POST /mcp` - Main MCP endpoint for tool calls and requests
- `GET /mcp` - Server-Sent Events (SSE) endpoint for streaming
- `DELETE /mcp` - Close session endpoint
- `GET /health` - Health check endpoint

## Tools

### get_weather

Fetches current weather and hourly forecast data for specified coordinates.

**Parameters:**

- `latitude` (number): Latitude coordinate (e.g., 52.52 for Berlin)
- `longitude` (number): Longitude coordinate (e.g., 13.41 for Berlin)

**Returns:**

- Current temperature (°C)
- Current wind speed (km/h)
- Hourly forecast data arrays
- Complete raw API response

## Usage with MCP Clients

### HTTP Client (Recommended)

Use the provided HTTP client to connect to the running server:

```bash
# Start the server in one terminal
node build/index.js

# Run the client in another terminal
node mcp-http-client.js
```

Or create your own HTTP client using the MCP SDK:

```javascript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const client = new Client(
  {
    name: "my-client",
    version: "1.0.0",
  },
  { capabilities: {} }
);

const transport = new StreamableHTTPClientTransport(
  new URL("http://localhost:3000/mcp")
);

await client.connect(transport);

// List tools
const tools = await client.listTools();

// Call a tool
const result = await client.callTool({
  name: "get_weather",
  arguments: { latitude: 47.6162, longitude: -122.0356 },
});
```

### VS Code

Add to your `.vscode/mcp.json`:

```json
{
  "servers": {
    "weather-mcp-server": {
      "type": "http",
      "url": "http://localhost:3000/mcp"
    }
  }
}
```

### Claude Desktop

The HTTP server can be accessed by any MCP client that supports HTTP transport. Configure your client to connect to:

```
http://localhost:3000/mcp
```

## Example Queries

Once connected to an MCP client, you can ask questions like:

- "What's the current weather in Berlin?" (latitude: 52.52, longitude: 13.41)
- "Get weather forecast for San Francisco" (latitude: 37.77, longitude: -122.42)
- "Show me the hourly temperature forecast for Tokyo" (latitude: 35.68, longitude: 139.65)

## Development

The server is built using:

- **MCP SDK**: [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk)
- **Zod**: For schema validation
- **TypeScript**: For type safety

## API Reference

Weather data is sourced from [Open-Meteo](https://open-meteo.com/), a free weather API that provides:

- Real-time weather data
- Hourly forecasts
- No API key required

## License

ISC