npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mapsi-mcp

v1.0.0

Published

MCP server for Mapsi APIs — geocoding, routing, isochrone, places, tiles and more

Readme

mapsi-mcp

MCP server for Mapsi — 18 geospatial tools for AI coding assistants. Connect Claude Code, Cursor, Windsurf, or any MCP-compatible IDE directly to Mapsi APIs.

OpenStreetMap-based · Self-hosted infrastructure · No Google Maps vendor lock-in

Quick Start

1. Get your API key at mapsi.dev/console/api-keys (free tier: 1,000 calls/day, no credit card)

2. Add the config to your IDE:

Claude Code / Claude Desktop

Add to ~/.claude.json (or .mcp.json in your project root):

{
  "mcpServers": {
    "mapsi": {
      "command": "npx",
      "args": ["-y", "mapsi-mcp"],
      "env": { "MAPSI_API_KEY": "msk_your_key_here" }
    }
  }
}

Cursor

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "mapsi": {
      "command": "npx",
      "args": ["-y", "mapsi-mcp"],
      "env": { "MAPSI_API_KEY": "msk_your_key_here" }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json — same JSON format as Cursor above.

VS Code + Cline

Open Cline settings → MCP Servers → Add server → paste:

{
  "mapsi": {
    "command": "npx",
    "args": ["-y", "mapsi-mcp"],
    "env": { "MAPSI_API_KEY": "msk_your_key_here" }
  }
}

Zed

Add to your Zed settings under "context_servers":

{
  "mapsi-mcp": {
    "command": { "path": "npx", "args": ["-y", "mapsi-mcp"] },
    "env": { "MAPSI_API_KEY": "msk_your_key_here" }
  }
}

3. Restart your IDE — then ask your AI in plain English.


What You Can Ask Your AI

Geocode all addresses in my CSV and add lat/lon columns
Build an address autocomplete input for this React form using Mapsi
Draw a 20-minute drive isochrone from our warehouse at this coordinate
Find the 5 nearest hospitals to this coordinate
Migrate this Google Maps geocoding call to Mapsi
Add a MapLibre map with Mapsi light tiles and drop markers from this array
Calculate a distance matrix between 10 warehouses and 50 delivery stops
Snap this GPS trace to the road network and calculate total distance

Available Tools (18)

Geocoding

| Tool | Description | |------|-------------| | geocode | Address or place name → lat/lon. Returns confidence score (0–1); treat scores below 0.6 as ambiguous. | | reverse_geocode | lat/lon → formatted address, street, city, postcode, country. | | autocomplete | Real-time address suggestions as user types (min 2 chars). For UI input fields. | | normalize_address | Standardize messy/inconsistent addresses. Returns structured fields + coordinates. | | timezone | IANA timezone name + UTC offset + DST status for any coordinate. | | elevation | Altitude in metres for any coordinate (~30m resolution globally). |

Routing

| Tool | Description | |------|-------------| | route | Turn-by-turn directions. Modes: auto, truck, bicycle, pedestrian, motor_scooter. | | isochrone | Reachability polygon within N minutes or N metres. Returns GeoJSON for MapLibre/Leaflet. | | matrix | Travel time + distance matrix for up to 50×50 origin-destination pairs in one call. | | map_match | Snap a GPS trace to the road network. Coordinates are [lon, lat] order (GeoJSON). | | nearest_road | Find nearest routable road point. Call this if route returns "no route found". |

Places

| Tool | Description | |------|-------------| | places_search | Find nearby POIs by category (restaurant, hospital, pharmacy, ATM…). Returns name, coords, categories. |

Spatial

| Tool | Description | |------|-------------| | point_in_polygon | Admin hierarchy for a coordinate: country, region, city, neighbourhood. | | h3_index | Convert coordinate to H3 hexagonal grid cell at resolution 0–15. |

Batch

| Tool | Description | |------|-------------| | batch_geocode | Geocode up to 30,000 addresses in a single call. Never loop geocode for bulk data. | | batch_reverse_geocode | Reverse geocode multiple coordinates in one call. |

Tiles

| Tool | Description | |------|-------------| | get_tile_style_url | MapLibre GL style URL. Styles: light, dark, streets, topo, grayscale, black, white, liberty. | | get_static_map_url | Static PNG map URL for use in <img> tags, emails, and PDFs. |


Auth

  • API calls: X-API-Key header (handled automatically by the MCP server)
  • Tile URLs: ?key= query param (browser-safe; returned by get_tile_style_url)

Common Patterns for Agents

Geocode once, reuse the result:

Don't re-geocode the same address twice within a session. Cache the lat/lon and pass it directly to route, isochrone, and places_search.

Bulk data → batch tools:

For more than 1 address or coordinate pair, always use batch_geocode / batch_reverse_geocode.

Route fails → nearest_road first:

If route returns an error near the origin or destination, call nearest_road to snap the point to a routable road, then retry route with the snapped coordinates.

Isochrone — time vs distance:

Use contours_minutes for time-based reachability (delivery ETAs, commute zones).
Use contours_meters for fixed-radius circles on the road network.
Provide only one, not both.

Pricing

| Plan | Calls/day | Batch size | |------|-----------|------------| | Free | 1,000 | 10 | | Growth | 50,000 | 5,000 | | Business | Unlimited | 30,000 |

Full pricing at mapsi.dev/pricing


Links


License

MIT — algolayer.com