Geocoding, static maps and privacy-safe area maps from OpenStreetMap data. Hard caps, no overage.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer followed by your MapIron API key (ps_…). Free keys: https://mapiron.com/dashboard
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
List the Texas special taxing districts that contain a latitude/longitude: municipal utility districts (MUD), water control and improvement districts (WCID), fresh water supply, levee and management districts statewide (TCEQ), and public improvement districts (PID) where cities publish them (coverage in the answer). For each: name, type, status, counties, the district's self-reported tax rate per $100 of taxable value with its report year, outstanding debt (Texas Comptroller), website, and the statute for the purchaser's notice (Texas Water Code §49.452 or Property Code §5.014). Geocode an address first (geocode tool) or use a point inside the parcel (parcel_lookup). result is districts_found, none_found or outside_coverage. none_found is NOT proof that no district applies; near_boundary and nearby mean the lot may straddle a boundary. Report null figures as unknown, never infer a tax rate, and never say whether a notice is required: cite the statute and the district's own notice form. Growth plans and up; counts 1 address lookup.
Latitude of the property (a point inside the parcel is best)
Longitude of the property
Include each district's boundary
Also list inactive or dissolved districts
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http maps https://api.mapiron.com/v1/mcp \ --header 'Authorization: Bearer YOUR_TOKEN'
Headers
Authorization (required): Bearer followed by your MapIron API key (ps_…). Free keys: https://mapiron.com/dashboardList the Texas special taxing districts that contain a latitude/longitude: municipal utility districts (MUD), water control and improvement districts (WCID), fresh water supply, levee and management districts statewide (TCEQ), and public improvement districts (PID) where cities publish them (coverage in the answer). For each: name, type, status, counties, the district's self-reported tax rate per $100 of taxable value with its report year, outstanding debt (Texas Comptroller), website, and the statute for the purchaser's notice (Texas Water Code §49.452 or Property Code §5.014). Geocode an address first (geocode tool) or use a point inside the parcel (parcel_lookup). result is districts_found, none_found or outside_coverage. none_found is NOT proof that no district applies; near_boundary and nearby mean the lot may straddle a boundary. Report null figures as unknown, never infer a tax rate, and never say whether a notice is required: cite the statute and the district's own notice form. Growth plans and up; counts 1 address lookup.
| Argument | Type | Description |
|---|---|---|
| lat* | number | Latitude of the property (a point inside the parcel is best) |
| lon* | number | Longitude of the property |
| geometry | string | Include each district's boundary |
| include_inactive | boolean | Also list inactive or dissolved districts |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude of the property (a point inside the parcel is best)"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude of the property"
},
"geometry": {
"enum": [
"none",
"simplified",
"full"
],
"type": "string",
"default": "none",
"description": "Include each district's boundary"
},
"include_inactive": {
"type": "boolean",
"default": false,
"description": "Also list inactive or dissolved districts"
}
},
"additionalProperties": false
}Look up an address, place name or point of interest and get coordinates (lat, lon), a readable label and address parts, from OpenStreetMap data. Use it before static_map or privacy_area_map when you only have an address. Counts 1 address lookup against the account's monthly cap. Results may be stored: up to 30 days on the Free plan, indefinitely on paid plans. Show "© OpenStreetMap contributors" with results.
| Argument | Type | Description |
|---|---|---|
| bbox | array | [min_lon, min_lat, max_lon, max_lat] |
| lang | string | Preferred language for names, e.g. en, de, fr |
| near | object | Prefer matches near this point |
| limit | integer | Maximum number of matches |
| query* | string | Address, place or point of interest, e.g. "233 S Wacker Dr, Chicago" or "Oswego, Illinois" |
{
"type": "object",
"required": [
"query"
],
"properties": {
"bbox": {
"type": "array",
"items": {
"type": "number"
},
"maxItems": 4,
"minItems": 4,
"description": "[min_lon, min_lat, max_lon, max_lat]"
},
"lang": {
"type": "string",
"maxLength": 8,
"minLength": 2,
"description": "Preferred language for names, e.g. en, de, fr"
},
"near": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees (WGS84)"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees (WGS84)"
}
},
"description": "Prefer matches near this point",
"additionalProperties": false
},
"limit": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1,
"description": "Maximum number of matches"
},
"query": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "Address, place or point of interest, e.g. \"233 S Wacker Dr, Chicago\" or \"Oswego, Illinois\""
}
},
"additionalProperties": false
}Get ready-to-paste HTML/JavaScript for an interactive, zoomable MapIron map in a web page (MapLibre GL JS vector map, Leaflet or OpenLayers raster map), or the raster tile URL template for any other library. Replace YOUR_KEY with a key restricted to the website. Needs no key and uses no quota; the map itself counts map tiles when viewed.
| Argument | Type | Description |
|---|---|---|
| style | string | Map style: light (default), dark, white or grayscale |
| library* | string | maplibre = vector map (sharpest); leaflet or openlayers = raster tiles; tile_url = just the XYZ URL template |
{
"type": "object",
"required": [
"library"
],
"properties": {
"style": {
"enum": [
"light",
"dark",
"white",
"grayscale"
],
"type": "string",
"default": "light",
"description": "Map style: light (default), dark, white or grayscale"
},
"library": {
"enum": [
"maplibre",
"leaflet",
"openlayers",
"tile_url"
],
"type": "string",
"description": "maplibre = vector map (sharpest); leaflet or openlayers = raster tiles; tile_url = just the XYZ URL template"
}
},
"additionalProperties": false
}Get the property parcel (lot) at a latitude/longitude, or by parcel_id: its boundary, the county parcel number (APN), area in m² and acres, and the public source and date. US coverage from open government data only (see mapiron.com/docs/parcels for the counties covered); owner names and values are never included. Lines are approximate and not a survey. Growth plans and up; counts 1 address lookup. Results from open-licensed sources may be stored indefinitely on paid plans.
| Argument | Type | Description |
|---|---|---|
| lat | number | Latitude of a point inside the parcel (use with lon) |
| lon | number | Longitude of a point inside the parcel (use with lat) |
| geometry | string | Boundary detail: simplified (about 1 m, smaller), full, or none |
| parcel_id | string | A parcel_id from an earlier lookup, e.g. us-37183-0794123456 (instead of lat/lon) |
{
"type": "object",
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude of a point inside the parcel (use with lon)"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude of a point inside the parcel (use with lat)"
},
"geometry": {
"enum": [
"simplified",
"full",
"none"
],
"type": "string",
"default": "simplified",
"description": "Boundary detail: simplified (about 1 m, smaller), full, or none"
},
"parcel_id": {
"type": "string",
"maxLength": 48,
"description": "A parcel_id from an earlier lookup, e.g. us-37183-0794123456 (instead of lat/lon)"
}
},
"additionalProperties": false
}Show roughly where a place is without revealing the exact point. The point is snapped to a grid and drawn as a shaded circle that always contains the true point, with no pin; every address in the same grid cell gets the identical image, so the exact location cannot be recovered or averaged out across listings. Use it for real-estate, rental and marketplace listings, people's homes, or any location that should stay private. The image is returned inline, with a reusable URL that contains only the snapped point. Counts 1 static image against the account's monthly cap.
| Argument | Type | Description |
|---|---|---|
| lat* | number | Latitude of the exact place to hide. It is snapped to the grid before use and never returned |
| lon* | number | Longitude of the exact place to hide. It is snapped to the grid before use and never returned |
| color | string | Circle colour as hex, e.g. 0f766e |
| scale | integer | Pixel density: 2 renders a sharper image for high-density screens at double the pixel size |
| style | string | Map style: light (default), dark, white or grayscale |
| width | integer | Image width in CSS pixels |
| format |
Find the nearest address or place to a latitude/longitude, from OpenStreetMap data. Counts 1 address lookup against the account's monthly cap. Same storage terms and attribution as geocode.
| Argument | Type | Description |
|---|---|---|
| lat* | number | Latitude of the point to look up, in decimal degrees (WGS84) |
| lon* | number | Longitude of the point to look up, in decimal degrees (WGS84) |
| lang | string | Preferred language for names, e.g. en, de, fr |
| limit | integer | Maximum number of nearby addresses or places to return |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude of the point to look up, in decimal degrees (WGS84)"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude of the point to look up, in decimal degrees (WGS84)"
},
"lang": {
"type": "string",
"maxLength": 8,
"minLength": 2,
"description": "Preferred language for names, e.g. en, de, fr"
},
"limit": {
"type": "integer",
"default": 1,
"maximum": 5,
"minimum": 1,
"description": "Maximum number of nearby addresses or places to return"
}
},
"additionalProperties": false
}Render a map as an image (returned inline) with optional pins (markers) and a line (path, e.g. a route). Give center and zoom, or just markers and/or path and the view is fitted automatically. Also returns a reusable image URL for web pages (add your key). Counts 1 static image against the account's monthly cap. Do not use this to show a private address such as someone's home; use privacy_area_map instead.
| Argument | Type | Description |
|---|---|---|
| path | array | A line through these points, in order |
| zoom | number | 0 = world, 10 = city, 15 = streets, 18 = buildings |
| scale | integer | Pixel density: 2 renders a sharper image for high-density screens at double the pixel size |
| style | string | Map style: light (default), dark, white or grayscale |
| width | integer | Image width in CSS pixels |
| center | object | Map centre; use with zoom |
| format | string | Image format. jpg and webp are smaller than png |
| height | integer | Image height in CSS pixels |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 9, 2026.
| string |
| Image format. jpg and webp are smaller than png |
| height | integer | Image height in CSS pixels |
| radius_m | number | Minimum circle radius in metres; it is raised if needed so the circle always contains the true point |
| snap_deg | number | Grid size in degrees (0.01 is about 1 km). 0 turns snapping off and is not recommended |
{
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude of the exact place to hide. It is snapped to the grid before use and never returned"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude of the exact place to hide. It is snapped to the grid before use and never returned"
},
"color": {
"type": "string",
"pattern": "^#?[0-9a-fA-F]{6}$",
"description": "Circle colour as hex, e.g. 0f766e"
},
"scale": {
"enum": [
1,
2
],
"type": "integer",
"default": 1,
"description": "Pixel density: 2 renders a sharper image for high-density screens at double the pixel size"
},
"style": {
"enum": [
"light",
"dark",
"white",
"grayscale"
],
"type": "string",
"default": "light",
"description": "Map style: light (default), dark, white or grayscale"
},
"width": {
"type": "integer",
"default": 600,
"maximum": 1280,
"minimum": 16,
"description": "Image width in CSS pixels"
},
"format": {
"enum": [
"png",
"jpg",
"webp"
],
"type": "string",
"default": "png",
"description": "Image format. jpg and webp are smaller than png"
},
"height": {
"type": "integer",
"default": 400,
"maximum": 1280,
"minimum": 16,
"description": "Image height in CSS pixels"
},
"radius_m": {
"type": "number",
"default": 1000,
"maximum": 25000,
"minimum": 100,
"description": "Minimum circle radius in metres; it is raised if needed so the circle always contains the true point"
},
"snap_deg": {
"type": "number",
"default": 0.01,
"maximum": 0.1,
"minimum": 0,
"description": "Grid size in degrees (0.01 is about 1 km). 0 turns snapping off and is not recommended"
}
},
"additionalProperties": false
}| markers |
| array |
| Pins to draw |
| padding | integer | Space in pixels kept around markers and paths when the view is fitted automatically |
| parcels | boolean | Draw property parcel lines (visible from zoom 13; Growth plans and up). Not available on privacy_area_map |
| parcel_id | string | Highlight one parcel (a parcel_id from parcel_lookup, e.g. us-37183-0794123456); the view fits it if no center is given |
{
"type": "object",
"properties": {
"path": {
"type": "array",
"items": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees (WGS84)"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees (WGS84)"
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 2,
"description": "A line through these points, in order"
},
"zoom": {
"type": "number",
"maximum": 20,
"minimum": 0,
"description": "0 = world, 10 = city, 15 = streets, 18 = buildings"
},
"scale": {
"enum": [
1,
2
],
"type": "integer",
"default": 1,
"description": "Pixel density: 2 renders a sharper image for high-density screens at double the pixel size"
},
"style": {
"enum": [
"light",
"dark",
"white",
"grayscale"
],
"type": "string",
"default": "light",
"description": "Map style: light (default), dark, white or grayscale"
},
"width": {
"type": "integer",
"default": 600,
"maximum": 1280,
"minimum": 16,
"description": "Image width in CSS pixels"
},
"center": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees (WGS84)"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees (WGS84)"
}
},
"description": "Map centre; use with zoom",
"additionalProperties": false
},
"format": {
"enum": [
"png",
"jpg",
"webp"
],
"type": "string",
"default": "png",
"description": "Image format. jpg and webp are smaller than png"
},
"height": {
"type": "integer",
"default": 400,
"maximum": 1280,
"minimum": 16,
"description": "Image height in CSS pixels"
},
"markers": {
"type": "array",
"items": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude in decimal degrees (WGS84)"
},
"lon": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude in decimal degrees (WGS84)"
}
},
"additionalProperties": false
},
"maxItems": 25,
"description": "Pins to draw"
},
"padding": {
"type": "integer",
"maximum": 200,
"minimum": 0,
"description": "Space in pixels kept around markers and paths when the view is fitted automatically"
},
"parcels": {
"type": "boolean",
"default": false,
"description": "Draw property parcel lines (visible from zoom 13; Growth plans and up). Not available on privacy_area_map"
},
"parcel_id": {
"type": "string",
"maxLength": 48,
"description": "Highlight one parcel (a parcel_id from parcel_lookup, e.g. us-37183-0794123456); the view fits it if no center is given"
}
},
"additionalProperties": false
}