MCP Server
by naggbagg
README.md
# MCP Server
An extensible [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server with weather and time tools. Built for learning — connect it to Claude Desktop and start chatting.
## Getting Started
### 1. Clone & Install
```bash
git clone <repo-url> && cd mcp-server
python3 -m venv .venv
source .venv/bin/activate # macOS / Linux / WSL
pip install -e .
```
Or with [uv](https://docs.astral.sh/uv/):
```bash
git clone <repo-url> && cd mcp-server
uv venv
source .venv/bin/activate
uv pip install -e .
```
### 2. Connect to Claude Desktop
Run the setup script to automatically write the Claude Desktop config file:
**macOS:**
```bash
python setup_claude_agent.py
```
This writes `~/Library/Application Support/Claude/claude_desktop_config.json` pointing to your project's `.venv/bin/python`.
If your project is in a non-standard location, pass it explicitly:
```bash
python setup_claude_agent.py --project-path /path/to/mcp-server
```
**Windows (via WSL):**
```bash
python3 setup_claude_agent.py --windows --win-user <YourWindowsUser> --wsl-user <YourWSLUser>
```
For example:
```bash
python3 setup_claude_agent.py --windows --win-user Cam --wsl-user cam
```
This writes `%APPDATA%\Claude\claude_desktop_config.json` and configures Claude Desktop to launch the server through WSL.
### 3. Restart Claude Desktop
Close and reopen Claude Desktop. To verify the server is connected, go to **Settings → Developer** — you should see `mcp-server` with a green **running** badge.
### 4. Try It Out
Ask Claude any of the following:
- **"What time is it?"** — uses the `get_current_time` tool
- **"Get weather alerts for California"** — uses the `weather://alerts/CA` resource
- **"What's the forecast for latitude 40.7128, longitude -74.0060?"** — uses the forecast resource
You don't need to start the server manually — Claude Desktop launches it automatically.
---
## Available Tools & Resources
| Type | Name | What it does |
|------|------|-------------|
| Tool | `get_current_time` | Returns current time with automatic timezone detection |
| Resource | `weather://alerts/{state}` | Weather alerts for a US state (e.g. `CA`, `NY`) |
| Resource | `weather://forecast/{lat}/{lon}` | 5-period forecast for coordinates |
| Prompt | `analyze_weather_prompt` | Guides Claude through a full weather analysis |
| Prompt | `timezone_helper_prompt` | Helps with timezone checks, conversions, comparisons |
## Adding Your Own Tools
Open `src/mcp_server/server.py` and add a function with the `@mcp.tool()` decorator:
```python
@mcp.tool()
async def my_tool(param: str) -> str:
"""Description of what this tool does."""
return f"Result for {param}"
```
Restart Claude Desktop to pick up the change.
For resources and prompts, see [CONTRIBUTING.md](CONTRIBUTING.md).
## Running Tests
```bash
pip install -e ".[dev]" # or: uv pip install -e ".[dev]"
pytest
```
## Project Structure
```
src/mcp_server/
├── server.py # MCP server entry point — register tools here
└── tools/
├── weather/ # Weather alerts & forecasts (NWS API)
├── time/ # IP-based timezone & current time
└── conversation/ # Conversation tools
```
## License
MIT
## Resources
- [Model Context Protocol Docs](https://modelcontextprotocol.io)
- [National Weather Service API](https://www.weather.gov/documentation/services-web-api)
- [Building an MCP Server](https://modelcontextprotocol.io/docs/develop/build-server)TDQS
A4.1/5.0
Scored across 4 tools
Disambiguation5/5
Each tool targets a distinct function: cache management, alerts, current time, and forecast. No overlap or ambiguity.
Naming Consistency5/5
All names follow a consistent verb_noun snake_case pattern (clear_old_cache, get_alerts, get_current_time, get_forecast).
Tool Count4/5
With 4 tools, the set is slightly sparse but well-scoped for a combined weather/time server. Each tool serves a clear purpose.
Completeness3/5
Missing current weather conditions and location-based time input; only alerts and forecast for weather, time only via IP. Notable gaps exist.
Maintenance
ActivityInactive
ResponsivenessNo issues