Skip to main content
Glama
microsoft

MCP Weather Server

by microsoft
README.md
# MCP Weather Server

A simple Model Context Protocol (MCP) server that provides real-time weather data to AI agents like GitHub Copilot.

## Quick Start

Clone the repository:

```bash
git clone https://github.com/microsoft/lets-learn-mcp-javascript.git
cd mcp-weather-server
```

### 1. Install Dependencies

```bash
npm install
```

### 2. Run the Server

Test with MCP Inspector:

```bash
npx -y @modelcontextprotocol/inspector npx -y tsx main.ts
```

### 3. Use with VS Code

1. Open the `mcp.json`file in `.vscode` folder
2. Click the start server button above line 4
3. Open Chat mode and select agent and choose a modal that supports MCPs such as Claude Sonnet
4. Type or speak into the chat and ask it what the weather is like in your city

## Features

- 🌤️ Real-time weather data for any city
- 🌍 No API key required (uses Open-Meteo)
- 🤖 Works with GitHub Copilot and other MCP-compatible AI tools
- ⚡ Easy to test with MCP Inspector

## Usage Examples

Ask GitHub Copilot:
- "What's the weather like in Tokyo?"
- "How's the weather in London today?"
- "Give me the current weather for Paris"

## How It Works

The server provides a `get-weather` tool that:
1. Converts city names to coordinates using geocoding
2. Fetches current weather data from Open-Meteo API
3. Returns structured data that AI agents can format beautifully

## Code Structure

```typescript
// Creates MCP server with weather tool
const server = new McpServer({
  name: "Weather Server",
  version: "1.0.0"
});

// Defines the get-weather tool
server.tool('get-weather', 'Tool to get the weather of a city', ...);

// Connects via stdio transport
const transport = new StdioServerTransport();
server.connect(transport);
```

## Dependencies

- `@modelcontextprotocol/sdk` - MCP server framework
- `zod` - Schema validation
- `tsx` - TypeScript execution (for development)

## API Used

- [Open-Meteo](https://open-meteo.com/) - Free weather API with no authentication required

TDQS

B3.1/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: get_alerts retrieves weather alerts for a state, while get_forecast provides weather forecasts for a location. There is no overlap in functionality, making it easy for an agent to select the correct tool based on the need for alerts versus forecasts.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern with 'get_' prefix and descriptive nouns (alerts, forecast). This uniformity enhances readability and predictability, making the tool set easy to navigate and understand.

Tool Count2/5

With only 2 tools, the server feels under-scoped for a weather domain, which typically involves more operations like current conditions, historical data, or radar information. This limited set may restrict agent capabilities in handling comprehensive weather-related tasks.

Completeness2/5

The tool surface is significantly incomplete for a weather server, lacking essential operations such as getting current conditions, historical weather data, or radar imagery. This creates notable gaps that could lead to agent failures when trying to perform common weather-related workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues