README.md•3.92 kB
# 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¤t=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