{
  "markdown": "# 🌍 bbox-mcp-server\n\n**Ask AI about anything, anywhere — and verify the answer on a map. For Free**\n\nThe geospatial toolkit for AI agents. **6 tools, zero config** — give any LLM the ability to find, query, convert, and aggregate spatial data using open data. No API keys or signups required to start.\n\nEvery response includes a shareable verification link to **[vibhorsingh.com/boundingbox](https://vibhorsingh.com/boundingbox/)** — click it to visually confirm results on an interactive map. No other MCP server does this.\n\n[![Node.js](https://img.shields.io/badge/node-%3E%3D18-green)](https://nodejs.org/) [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](./LICENSE)\n\n\n---\n\n## What Can You Do With This?\n\n**You don't have to be a GIS professional to make use of this.** Any AI agent with this MCP server can answer spatial questions using real OpenStreetMap data and not spit out hallucinated garbage.\n\n| Ask your AI agent... | What happens under the hood |\n|---|---|\n| *\"How many EV chargers are in downtown Denver?\"* | Overpass query → H3 hex binning → density analysis |\n| *\"Is there a hospital near this Airbnb?\"* | POI search with structured tags → map verification link |\n| *\"Find all playgrounds within 1km of this address*\"* | Overpass query + radius filter → pinned results on a shareable map |\n| *\"Convert this WKT to GeoJSON in EPSG:3857\"* | Format conversion across 6 inputs, 9 outputs, 3,900+ projections |\n| *\"Show me all bike-share stations in Amsterdam\"* | Curated OSM tags → Overpass query → results on map |\n| *\"Compare park density across Seattle neighborhoods\"* | Overpass + H3 aggregation → hex-binned spatial analysis |\n\nEvery answer comes with a link. Click it, see if the AI got it right and you can also share it with someone else.\n\n---\n\n## What Makes This Different\n\nMost AI tools give you text you have to trust. This one gives you an interactive map you can check and verify!\n\n- **Verifiable** — Every response includes a public URL where you (or anyone) can visually confirm the results. This is the only MCP server that does this in any domain.\n- **Deterministic** — Queries hit real OpenStreetMap data and return real coordinates. The AI interprets your question. The data comes from all the hard work done by all the awesome OSM volunteers.\n- **Free** — No paid services. Overpass API is free, OSM data is free, the tool is free. A Mapbox token (free tier, no payment info) unlocks natural language location search but isn't required.\n- **Zero config** — `npx -y bbox-mcp-server` and you're running.\n\n---\n\n## Why This Exists\n\n| The problem | How bbox-mcp solves it |\n|---|---|\n| *\"I have WKT but the API needs a GeoJSON bbox in EPSG:3857.\"* | Parses 6 input formats, projects to 3,900+ EPSG codes, outputs in 9 formats — in one call. |\n| *\"I keep getting the wrong OSM tags for Overpass queries.\"* | `list_osm_tags` returns curated tag combos. No more hallucinated `amenity=grocery`. |\n| *\"How many hospitals are in this district?\"* | `aggregate_overpass_h3` queries Overpass and bins results into H3 hexagons server-side. |\n| *\"Is this bounding box actually correct?\"* | Every response includes a clickable map link for visual verification. |\n\n---\n\n## Tools at a Glance\n\n| Tool | What it does | Key params |\n|---|---|---|\n| `get_bounds` | Convert and project a bbox across formats and coordinate systems | `bbox`, `epsg`, `format`, `coord_order`, `zoom` |\n| `get_h3_indices` | Generate H3 hex cell indices covering a bbox | `bbox`, `resolution`, `compact` |\n| `generate_share_url` | Create a shareable map link for a bbox | `bbox` |\n| `search_overpass` | Query OpenStreetMap via Overpass QL within a bbox or radius | `bbox`, `query`, `limit`, `radius_meters` |\n| `list_osm_tags` | Look up correct OSM tags for a category | `category` |\n| `aggregate_overpass_h3` | Run an Overpass query and bin results into H3 hexagons | `bbox`, `query`, `resolution` |\n\nAll tools accept `location` (natural language, requires Mapbox token) or `bbox` (coordinates, WKT, GeoJSON, etc).\n\n---\n\n## Quick Start\n\nAdd to your MCP client config:\n\n<details>\n<summary><b>Claude Desktop</b> <i>(Click to expand)</i></summary>\n\nAdd to `claude_desktop_config.json`:\n```json\n{\n  \"mcpServers\": {\n    \"bbox\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"bbox-mcp-server\"]\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>Cursor</b> <i>(Click to expand)</i></summary>\n\nAdd to `.cursor/mcp.json`:\n```json\n{\n  \"mcpServers\": {\n    \"bbox\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"bbox-mcp-server\"]\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>Windsurf</b> <i>(Click to expand)</i></summary>\n\nAdd to `~/.codeium/windsurf/mcp_config.json`:\n```json\n{\n  \"mcpServers\": {\n    \"bbox\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"bbox-mcp-server\"]\n    }\n  }\n}\n```\n</details>\n\n<details>\n<summary><b>VS Code (GitHub Copilot) or Google Antigravity</b> <i>(Click to expand)</i></summary>\n\nAdd to `.vscode/mcp.json` in your workspace:\n```json\n{\n  \"servers\": {\n    \"bbox\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"bbox-mcp-server\"]\n    }\n  }\n}\n```\n</details>\n\n<br/>\n\n> Try: *\"Find all coffee shops within 500m of Times Square\"*\n\n### Optional Configuration\n\n```json\n{\n  \"mcpServers\": {\n    \"bbox\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"bbox-mcp-server\"],\n      \"env\": {\n        \"MAPBOX_ACCESS_TOKEN\": \"pk.your-token-here\",\n        \"OVERPASS_API_URL\": \"https://your.custom.overpass.instance/api/interpreter\",\n        \"NOMINATIM_API_URL\": \"https://your.custom.nominatim.instance\"\n      }\n    }\n  }\n}\n```\n\n| Variable | Default | Description |\n|---|---|---|\n| `MAPBOX_ACCESS_TOKEN` | — | Enables natural language location search (e.g. *\"San Francisco\"*) |\n| `OVERPASS_API_URL` | auto | Custom Overpass endpoint. By default, rotates between `overpass-api.de` and `kumi.systems`. |\n| `NOMINATIM_API_URL` | `https://nominatim.openstreetmap.org` | Custom Nominatim endpoint. Set this if hosting as a shared/remote MCP server or using a commercial provider. |\n| `MAX_H3_CELLS` | `50000` | Safety cap for H3 grid generation |\n\n*Or install globally: `npm install -g bbox-mcp-server`*\n\n---\n\n## Tool Reference\n\n### `get_bounds`\n\nConvert and project a bounding box across 6 input formats, 9 output formats, and 3,900+ coordinate systems. Returns the center point and tile coordinates for the centroid.\n\n| Param | Type | Default | Description |\n|---|---|---|---|\n| `bbox` | string | — | Input geometry (coordinates, WKT, GeoJSON, ogrinfo extent) |\n| `epsg` | string | `\"4326\"` | Target projection. Unknown codes auto-fetched from epsg.io. |\n| `format` | string | `\"csv\"` | Output: `csv`, `wkt`, `geojson-bbox`, `geojson-polygon`, `leaflet`, `overpass`, `ogc-bbox`, `kml`, `stac-bbox` |\n| `coord_order` | string | `\"lng,lat\"` | Swap to `\"lat,lng\"` for APIs that expect latitude first |\n| `zoom` | number | `15` | Zoom level for tile coordinate calculation |\n| `precision` | number | `6` | Decimal places in formatted output |\n\n**💡 Prompt:** *\"Get the bounding box for Central Park in WKT format projected to EPSG:32618\"*\n\n---\n\n### `get_h3_indices`\n\nGenerate Uber H3 hexagonal cell indices covering a bounding box.\n\n| Param | Type | Default | Description |\n|---|---|---|---|\n| `bbox` | string | — | Input geometry |\n| `resolution` | number | — | H3 resolution (0–15) |\n| `compact` | boolean | `false` | Merge cells into coarser parents where possible |\n| `return_geometry` | boolean | `false` | Include GeoJSON hex boundaries |\n\n**💡 Prompt:** *\"Give me H3 cells at resolution 7 for downtown Chicago, include the hex geometries\"*\n\n---\n\n### `search_overpass`\n\nExecute an Overpass query within a bounding box or radius. Returns structured results with names, coordinates, and tags. The verification link plots each result as a pin on the map.\n\n| Param | Type | Default | Description |\n|---|---|---|---|\n| `bbox` | string | — | Input geometry |\n| `query` | string | — | Overpass QL (e.g. `nwr[\"amenity\"=\"cafe\"]`). The server wraps it in the appropriate spatial filter automatically. |\n| `radius_meters` | number | — | Search radius in metres. Use only when the user specifies an explicit distance (e.g. `2000` for \"within 2km\"). Omit for area/region queries. |\n| `limit` | number | `100` | Max elements returned |\n\n**💡 Prompt:** *\"Find all parking within 2km of JFK airport\"*\n\n**💡 Prompt:** *\"Search for hospitals in Manhattan, limit 50\"*\n\n---\n\n### `list_osm_tags`\n\nLook up the correct OpenStreetMap tags for a category before writing an Overpass query.\n\n| Param | Type | Description |\n|---|---|---|\n| `category` | string | Broad category (e.g. `\"food\"`, `\"health\"`, `\"transport\"`) |\n\n**💡 Prompt:** *\"What are the correct OSM tags for supermarkets?\"*\n\n---\n\n### `aggregate_overpass_h3`\n\nRun an Overpass query and bin results into H3 hexagons for spatial density analysis. Returns counts per cell and GeoJSON hex boundaries.\n\n| Param | Type | Default | Description |\n|---|---|---|---|\n| `bbox` | string | — | Input geometry |\n| `query` | string | — | Overpass QL core query |\n| `resolution` | number | `8` | H3 resolution for binning |\n\n**💡 Prompt:** *\"Aggregate all hospitals in Seattle into H3 bins at resolution 7\"*\n\n---\n\n### `generate_share_url`\n\nGenerate a shareable link to visualize a bounding box on the interactive map at vibhorsingh.com/boundingbox.\n\n| Param | Type | Description |\n|---|---|---|\n| `bbox` | string | Input geometry |\n\n**💡 Prompt:** *\"Generate a share link for bbox 40.7128,-74.0060,40.7580,-73.9855\"*\n\n---\n\n## Supported Input Formats\n\nAll tools auto-detect the input format. No need to specify which one you're using.\n\n| Format | Example |\n|---|---|\n| Raw coordinates | `40.7128,-74.0060,40.7580,-73.9855` |\n| WKT | `POLYGON((-74.006 40.712, -73.985 40.712, ...))` |\n| GeoJSON | `{\"type\":\"Feature\",\"geometry\":{...}}` |\n| GeoJSON bbox | `{\"bbox\":[-74.006,40.712,-73.985,40.758]}` |\n| ogrinfo extent | `Extent: (-74.006, 40.712) - (-73.985, 40.758)` |\n| Space-separated | `40.7128 -74.0060 40.7580 -73.9855` |\n\n---\n\n## 🤖 For AI Agent Developers\n\n### Response structure\n\nEvery tool returns two content blocks:\n\n1. **Human-readable text** — formatted output with the map verification link\n2. **Structured JSON** — all computed data, machine-parseable\n\nExample `get_bounds` JSON response:\n\n```json\n{\n  \"original_wgs84\": { \"lat1\": 40.7128, \"lng1\": -74.006, \"lat2\": 40.758, \"lng2\": -73.9855 },\n  \"projected\": { \"xmin\": -8238310.23, \"ymin\": 4970241.32, \"xmax\": -8235527.11, \"ymax\": 4976491.56 },\n  \"center\": { \"lat\": 40.7354, \"lng\": -73.99575 },\n  \"tile_indices\": { \"z\": 15, \"x\": 9660, \"y\": 12284 },\n  \"epsg\": \"3857\",\n  \"coord_order\": \"lng,lat\",\n  \"area_km2\": 8.681,\n  \"dimensions\": { \"width_km\": 1.714, \"height_km\": 5.066 },\n  \"share_url\": \"https://vibhorsingh.com/boundingbox/#40.712800,-74.006000,40.758000,-73.985500\"\n}\n```\n\n\n### Error handling\n\nAll errors return `isError: true` with a descriptive message. Invalid coordinates, unknown EPSG codes, and oversized H3 requests all return clean errors — the server never crashes on bad input.\n\n### Logging\n\nStructured JSON logs go to **stderr** (stdout is reserved for MCP protocol). Each entry includes timestamp, level, and context.\n\n---\n## Acknowledgments & Fair Use\n\n### OpenStreetMap\n\nThis tool is built on [OpenStreetMap](https://www.openstreetmap.org/): A global dataset created and maintained by millions of volunteers. Every query you run returns data that someone walked, mapped, or verified by hand. If you find this useful, consider [contributing to OSM](https://wiki.openstreetmap.org/wiki/How_to_contribute).\n\n### Responsible Usage\n\nThe public Overpass and Nominatim API instances are free community resources with limited capacity. Avoid tight loops, excessive polling, or bulk-scraping. If hosting this as a shared/remote MCP server, point `NOMINATIM_API_URL` and `OVERPASS_API_URL` at your own instance or a commercial provider (see [Overpass API installation](https://wiki.openstreetmap.org/wiki/Overpass_API/Installation) and [Nominatim installation](https://nominatim.org/release-docs/latest/admin/Installation/)). The default server rotation for Overpass helps spread load, but it's not a substitute for responsible usage.\n\n---\n## License\nMIT\n\n[![MCP Badge](https://lobehub.com/badge/mcp-full/iamvibhorsingh-bbox-mcp-server)](https://lobehub.com/mcp/iamvibhorsingh-bbox-mcp-server)\n",
  "bytes": 12295,
  "sha": "d3ac855be98320ac364400703a7f4705e2c0ac0c1a856522e57cec6eb71bea26",
  "repo_slug": "iamvibhorsingh/bbox-mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_iamvibhorsingh_bbox_mcp_server_c3bf033b/readme"
}