Skip to main content
Glama
neco001

OSM MCP Analytics Server

by neco001
README.md
# Enterprise OpenStreetMap (OSM) MCP Analytics Server

A modular, high-performance Model Context Protocol (MCP) server for OpenStreetMap. This implementation goes beyond simple geocoding, providing advanced geospatial analytics like neighborhood livability scoring and commute analysis.
## šŸš€ Why this server?

While there are many OSM MCP servers, this version is built for **stability**, **modular extension**, and **advanced insights**:

- **Modular Architecture**: Clean separation between API Client, Utility logic, and Tool definitions. Easy to audit and extend.
- **Enterprise Analytics**:
  - `analyze_neighborhood`: Calculates a "Livability Score" based on walking proximity to essential services (groceries, healthcare, parks).
  - `analyze_commute`: Multi-modal comparison of travel times (car, bike, foot) for lifestyle planning.
- **Efficient**: Uses FastMCP for asynchronous I/O and structured tool registration.
- **Windows Optimized**: Built and tested to run reliably as a background process on Windows environments.

## šŸ›  Features

### Core Tools
- **Geocoding**: `geocode_address`, `reverse_geocode`
- **Routing**: `get_route_directions` (OSRM based)
- **Search**: `find_nearby_places`, `search_category`
- **Analytics**: `explore_area`, `analyze_neighborhood`, `analyze_commute`

### Specialized Tools (Optional)
Found in `tools/extras.py` (not loaded by default for performance):
- `find_schools_nearby`
- `find_ev_charging_stations`
- `find_parking_facilities`
- `suggest_meeting_point`

### Resources
- `location://place/{query}`: Real-time place metadata.
- `location://map/{style}/{z}/{x}/{y}`: Interactive map tile retrieval.

## šŸ“¦ Installation

### Requirements
- Python 3.10+
- `uv` (recommended) or `pip`

### Method 1: Via MCP Config (Claude/Cursor)
Add this to your `mcp_config.json`:

```json
{
  "mcpServers": {
    "osm-mcp": {
      "command": "python",
      "args": [
        "c:/path/to/osm-mcp-server/src/openstreetmap_mcp/server.py"
      ],
      "env": {
        "PYTHONPATH": "c:/path/to/osm-mcp-server/src/openstreetmap_mcp"
      }
    }
  }
}
```

### Method 2: Local Development
```bash
git clone https://github.com/neco001/openstreetmap-mcp
cd openstreetmap-mcp
uv sync
```

## šŸ“‚ Project Structure

```text
src/openstreetmap_mcp/
ā”œā”€ā”€ server.py           # Main Entry Point
ā”œā”€ā”€ instance.py         # FastMCP lifecycle
ā”œā”€ā”€ client.py           # HTTP logic for OSM/OSRM/Overpass
ā”œā”€ā”€ utils.py            # Haversine & geometric helpers
ā”œā”€ā”€ tools/              # Categorized tool definitions
│   ā”œā”€ā”€ geocoding.py
│   ā”œā”€ā”€ routing.py
│   ā”œā”€ā”€ search.py
│   └── analysis.py
└── resources.py        # Map & Data resources
```

## āš–ļø License

MIT License - feel free to use, modify and distribute.

## Acknowledgments

Original logic & concepts by [Jagan Shanmugam](https://github.com/jagan-shanmugam). This repository is a modular refactor focused on Enterprise usage, Windows compatibility, and Analytics tools.