Skip to main content
Glama
shazforiot

MCP Weather Server — Demo

by shazforiot
README.md
# MCP Weather Server — Demo

> Demo project from the YouTube video: **"What is MCP? Model Context Protocol Explained (2026)"**

<div align="center">
  <h3>MCP Tutorial: Connect Claude to Any Tool (2026)</h3>
  <a href="https://www.youtube.com/watch?v=40k3SIwlFVM">
    <img src="https://img.youtube.com/vi/40k3SIwlFVM/maxresdefault.jpg" alt="Watch the MCP Tutorial" style="width:100%; max-width:600px;">
  </a>
  <p><i>Click the image to watch the MCP guide on YouTube</i></p>
</div>

This is a minimal **Model Context Protocol (MCP) server** written in Python. It exposes two tools that an AI assistant can call:

| Tool | Description |
|------|-------------|
| `get_weather` | Returns weather data for a given city |
| `list_cities` | Lists all cities with available data |

---

## Prerequisites

- Python 3.10 or higher
- pip

---

## Setup & Run

```bash
# 1. Clone or download this folder
cd demo/

# 2. (Optional) Create a virtual environment
python -m venv .venv
source .venv/bin/activate        # macOS / Linux
.venv\Scripts\activate           # Windows

# 3. Install the MCP SDK
pip install -r requirements.txt

# 4. Run the server
python weather_server.py
```

The server starts and listens on **stdio** — it's ready for an MCP host (like Claude Desktop or a custom client) to connect.

---

## Connect to Claude Desktop

Add this to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "weather": {
      "command": "python",
      "args": ["/full/path/to/demo/weather_server.py"]
    }
  }
}
```

Restart Claude Desktop. Then ask it:

> "What's the weather in Tokyo?"

Claude will automatically call the `get_weather` tool and return:

```
šŸŒ Weather in Tokyo:
šŸŒ”ļø  Temperature: 18°C
ā˜ļø  Condition:   Clear
šŸ’§ Humidity:    55%
šŸ’Ø Wind:        10 km/h NE
```

---

## Extend to a Real Weather API

Replace the `WEATHER_DATA` dict with a live API call:

```python
import httpx

async def fetch_live_weather(city: str) -> dict:
    url = f"https://api.openweathermap.org/data/2.5/weather"
    params = {"q": city, "appid": "YOUR_API_KEY", "units": "metric"}
    async with httpx.AsyncClient() as client:
        resp = await client.get(url, params=params)
        data = resp.json()
        return {
            "temp": data["main"]["temp"],
            "condition": data["weather"][0]["description"].title(),
            "humidity": data["main"]["humidity"],
            "wind": f"{data['wind']['speed']} m/s"
        }
```

---

## Project Structure

```
demo/
ā”œā”€ā”€ weather_server.py   # MCP server — all logic here
ā”œā”€ā”€ requirements.txt    # pip install mcp
└── README.md           # This file
```

---

## How MCP Works (Quick Recap)

```
Claude Desktop (Host)
    └── MCP Client (built into host)
            └── MCP Protocol (JSON-RPC 2.0 over stdio)
                    └── weather_server.py (YOUR server)
                            └── Returns weather data
```

The AI model never calls your server directly — the MCP client handles discovery, schema validation, and communication. You just implement the logic.

---

## Next Steps

- Add more tools: `get_forecast`, `get_air_quality`
- Switch transport from `stdio` to `HTTP + SSE` for a remote server
- Publish your server to the MCP community registry

---

## Official MCP Resources

### šŸ“– Documentation
| Resource | Link |
|----------|------|
| Official Docs | https://modelcontextprotocol.io/docs |
| Getting Started | https://modelcontextprotocol.io/introduction |
| All Examples | https://modelcontextprotocol.io/examples |
| GitHub Organization | https://github.com/modelcontextprotocol |
| All Official Servers | https://github.com/modelcontextprotocol/servers |

### šŸ”Œ Official MCP Server Examples (from the video)

These are production-ready servers maintained by Anthropic — install and use them today:

| Server | What it does | GitHub |
|--------|-------------|--------|
| šŸ™ **GitHub** | Browse repos, read files, manage PRs and issues via AI | https://github.com/modelcontextprotocol/servers/tree/main/src/github |
| šŸ—„ļø **PostgreSQL** | Query your database with natural language | https://github.com/modelcontextprotocol/servers/tree/main/src/postgres |
| šŸ“ **Filesystem** | Read and write local files directly from AI | https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem |
| šŸ” **Brave Search** | Real-time web search inside any AI chat | https://github.com/modelcontextprotocol/servers/tree/main/src/brave-search |
| šŸ’¬ **Slack** | Read channels, summarize threads, post messages | https://github.com/modelcontextprotocol/servers/tree/main/src/slack |
| 🧠 **Memory** | Persistent AI memory via a knowledge graph | https://github.com/modelcontextprotocol/servers/tree/main/src/memory |

### šŸ“¦ SDKs

| Language | Install | GitHub |
|----------|---------|--------|
| Python | `pip install mcp` | https://github.com/modelcontextprotocol/python-sdk |
| TypeScript / Node.js | `npm install @modelcontextprotocol/sdk` | https://github.com/modelcontextprotocol/typescript-sdk |