Skip to content

Case study: MapIron.com

Self-hosted map API with an agent-native surface

A production map API on OpenStreetMap data, engineered and operated in house: a Rust/Axum service for static map images, geocoding and tiles, a Cloudflare edge that serves and meters tiles from cache, and a hosted MCP server listed in the official MCP Registry.

The problem

Listing sites, marketplaces and local services need maps and geocoding, but the large map APIs bill per request past the free tier, often restrict caching static images or storing geocoding results, and default to an exact pin on someone's home. The goal was a map API with predictable flat pricing, results customers can keep, and a built-in way to show where a place is without showing exactly where.

Architecture

  1. 01

    Data and rendering

    OpenStreetMap data is rebuilt on our own servers into a PMTiles basemap and a Photon geocoding index, kept apart from the customer database. A Rust/Axum service renders static images and answers lookups, with two render nodes taking part of the tile and image load.

  2. 02

    Privacy by design

    Privacy area mode snaps each point to a grid and draws a circle that always contains it. The exact point never appears in the image, and every address in the same cell produces the identical map.

  3. 03

    Edge and metering

    Cloudflare fronts all public traffic. A Worker serves tiles from cache, validates keys against the origin with a short-lived cached answer, and reports tile counts in batches, so every plan has a hard monthly cap and never an overage bill.

  4. 04

    Agent surface

    A hosted MCP server, listed in the official MCP Registry as com.mapiron/maps, exposes geocoding, reverse geocoding, static maps, privacy area maps and interactive map setup. A zero-dependency stdio bridge covers clients that only launch local servers.

  5. 05

    Integrations

    Quickstarts for Leaflet, MapLibre GL JS, OpenLayers and WordPress, plus Google Sheets, Zapier, Make and a dedicated n8n node that AI Agent workflows can call as a tool.

  6. 06

    Security and billing

    API keys and session tokens are stored only as hashes, sign-in supports passkeys and authenticator apps, the managed PostgreSQL database accepts only private TLS connections, and Stripe handles every card.

Components

Rust/Axum map service
One Rust service renders static map images, answers geocoding and reverse geocoding through a self-hosted Photon index, and serves raster and vector tiles from a PMTiles basemap, with two render nodes sharing the load.
Privacy area mode
The real point is snapped to a grid and drawn as a circle that always contains it, with no pin. Every address in a cell gets the identical image, so listings show the neighbourhood without exposing a home.
Metered edge delivery
A Cloudflare Worker serves tiles from cache, checks each key with the origin, and reports usage in batches, so hard monthly caps hold without putting the origin on the hot path.
Agent and no-code surface
A hosted MCP server listed in the official MCP Registry, a zero-dependency stdio bridge, and an n8n node put geocoding and map images inside Claude, Cursor, VS Code, n8n, Zapier and Make.

In production

MapIron runs on its own infrastructure with a public status page, and Kulomo, a listings site, runs its maps on MapIron tiles. The service launched as PinSharing and was renamed MapIron in November 2026 with every existing key, endpoint and integration left working.

© 2026 Wells Software Consulting LLC. All rights reserved.

AI Systems, Autonomous GTM and Infrastructure Engineering