Aeralas Maps

Print-ready annotated aerial maps of US addresses for real estate and engineering, paid via x402.

Should I use this

Quality & Safety

B
Description quality
86%
Schema completeness
73%
Naming quality
92%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'get_service_info' description lacks action verbin get_service_info

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~9,160Tokens (tool definitions)
~20.8 KBTypical response size
Significant attention impact (7.16% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "aerial-maps": {
      "url": "https://maps.aeralas.com/mcp"
    }
  }
}

Remote endpoints

https://maps.aeralas.com/mcpstreamable-http

What it can do

Tool inventory

Tools (5)

🟒 Read-only🟑 WriteπŸ”΄ Deleteβšͺ Unknown
🟒get_service_info

What the maps contain, the price, imagery coverage and quality, how to pay over x402, and how a person can buy one directly. Free.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟒check_map(address, center, groundWidthM, pageSize, orientation, ...)

Lay out the map and report what it had to compromise on -- overlapping labels, truncated text, annotations off the page -- plus the imagery quality and what was drawn, so drafted labels can be edited. Returns no image. Free; iterate here before make_map.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "description": "US street address, city and state. Geocoded via the US Census.",
      "type": "string",
      "minLength": 5,
      "maxLength": 200
    },
    "center": {
      "description": "[longitude, latitude] in WGS84. Alternative to address.",
      "type": "array",
      "items": [
        {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        }
      ],
      "additionalItems": false,
      "minItems": 2,
      "maxItems": 2
    },
    "groundWidthM": {
      "default": 500,
      "description": "True ground width of the frame in meters. 500 fits a typical retail plaza; 20000-40000 makes a regional map, where autoLabel drafts cities, highway shields and water instead of tenants.",
      "type": "number",
      "minimum": 100,
      "maximum": 40000
    },
    "pageSize": {
      "default": "tabloid",
      "type": "string",
      "enum": [
        "letter",
        "legal",
        "tabloid"
      ]
    },
    "orientation": {
      "default": "portrait",
      "type": "string",
      "enum": [
        "portrait",
        "landscape"
      ]
    },
    "dpi": {
      "default": 200,
      "type": "integer",
      "minimum": 150,
      "maximum": 300
    },
    "imagerySourceId": {
      "description": "Imagery source id. Defaults to the sharpest source covering the frame.",
      "type": "string"
    },
    "annotations": {
      "description": "Callouts to draw. Placement, collision avoidance and leader lines are automatic.",
      "maxItems": 40,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Your id for this annotation. Echoed back in warnings so you can match them up.",
            "type": "string",
            "maxLength": 64
          },
          "type": {
            "type": "string",
            "enum": [
              "tenant_callout",
              "subject_property",
              "road_label",
              "traffic_count",
              "place_label",
              "route_shield",
              "water_label",
              "subject_pin",
              "panel"
            ]
          },
          "at": {
            "description": "[lon, lat]. Required for tenant_callout and traffic_count.",
            "type": "array",
            "items": [
              {
                "type": "number",
                "minimum": -180,
                "maximum": 180
              },
              {
                "type": "number",
                "minimum": -90,
                "maximum": 90
              }
            ],
            "additionalItems": false,
            "minItems": 2,
            "maxItems": 2
          },
          "path": {
            "description": "[[lon,lat],...] along the road. Required for road_label.",
            "minItems": 2,
            "type": "array",
            "items": {
              "type": "array",
              "items": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "additionalItems": false,
              "minItems": 2,
              "maxItems": 2
            }
          },
          "polygon": {
            "description": "[[lon,lat],...] ring. Required for subject_property.",
            "minItems": 3,
            "type": "array",
            "items": {
              "type": "array",
              "items": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "additionalItems": false,
              "minItems": 2,
              "maxItems": 2
            }
          },
          "label": {
            "type": "string",
            "maxLength": 120
          },
          "sublabel": {
            "description": "Second line, e.g. \"24,500 SF\".",
            "type": "string",
            "maxLength": 120
          },
          "aadt": {
            "description": "Traffic count, for traffic_count.",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "tier": {
            "description": "place_label size class.",
            "type": "string",
            "enum": [
              "city",
              "town",
              "village"
            ]
          },
          "network": {
            "description": "route_shield: interstate, US route or state route.",
            "type": "string",
            "enum": [
              "I",
              "US",
              "SR"
            ]
          },
          "number": {
            "description": "route_shield route number, e.g. \"5\" or \"99W\".",
            "type": "string",
            "maxLength": 5
          },
          "monogram": {
            "description": "subject_pin: up to three characters shown in the pin, e.g. initials.",
            "type": "string",
            "maxLength": 3
          },
          "stat": {
            "description": "panel: the figure in the header, e.g. \"100,000+ jobs\".",
            "type": "string",
            "maxLength": 60
          },
          "body": {
            "description": "panel: a grid of logos, one large logo, a photo, or header only.",
            "type": "string",
            "enum": [
              "logos",
              "logo",
              "photo",
              "none"
            ]
          },
          "logos": {
            "maxItems": 16,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "description": "Brand name, looked up for a public-domain logo.",
                  "type": "string",
                  "maxLength": 80
                },
                "wikidata": {
                  "type": "string",
                  "pattern": "^Q\\d+$"
                },
                "image": {
                  "description": "Your own logo as a data: URI (PNG, JPEG or WebP).",
                  "type": "string",
                  "maxLength": 4000000
                }
              }
            }
          },
          "photo": {
            "description": "panel: a photo as a data: URI (PNG, JPEG or WebP), up to 8 MB.",
            "type": "object",
            "properties": {
              "image": {
                "type": "string",
                "maxLength": 11000000
              }
            },
            "required": [
              "image"
            ]
          },
          "color": {
            "description": "panel: header bar colour.",
            "type": "string",
            "maxLength": 32
          },
          "outline": {
            "description": "panel: the offset frame. Default on.",
            "type": "boolean"
          },
          "outlineColor": {
            "type": "string",
            "maxLength": 32
          },
          "width": {
            "description": "panel: width as a fraction of the page.",
            "type": "number",
            "minimum": 0.1,
            "maximum": 0.6
          },
          "anchor": {
            "description": "panel: top-left corner as fractions of the page. Omit to dock the panel beside the place it points at.",
            "type": "object",
            "properties": {
              "x": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "y": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              }
            },
            "required": [
              "x",
              "y"
            ]
          },
          "stylePreset": {
            "default": "light",
            "description": "light reads on dark pavement and roofs in shadow; dark reads on bright roofs and sunlit parking; accent is survey orange, meant for the subject property only.",
            "type": "string",
            "enum": [
              "light",
              "dark",
              "accent"
            ]
          },
          "offset": {
            "description": "Move the label box relative to its pin, in preview pixels (the page is 1397 wide at 11x17 portrait). Setting this turns the auto-placer OFF for this annotation, so it is the fix for a label_overlap warning you want resolved a specific way.",
            "type": "object",
            "properties": {
              "dx": {
                "type": "number",
                "minimum": -2000,
                "maximum": 2000
              },
              "dy": {
                "type": "number",
                "minimum": -2000,
                "maximum": 2000
              }
            },
            "required": [
              "dx",
              "dy"
            ]
          },
          "textScale": {
            "description": "Multiplier on text size. Lower it to clear a text_truncated warning.",
            "type": "number",
            "minimum": 0.6,
            "maximum": 2
          },
          "strokeScale": {
            "description": "Multiplier on pin, leader and outline weights.",
            "type": "number",
            "minimum": 0.5,
            "maximum": 4
          },
          "boxColor": {
            "description": "CSS colour for the label box fill.",
            "type": "string",
            "maxLength": 32
          },
          "inkColor": {
            "description": "CSS colour for the label text.",
            "type": "string",
            "maxLength": 32
          },
          "markColor": {
            "description": "CSS colour for the pin and leader line.",
            "type": "string",
            "maxLength": 32
          }
        },
        "required": [
          "type"
        ]
      }
    },
    "autoLabel": {
      "default": false,
      "description": "Draft tenant callouts from OpenStreetMap and road names from Census TIGER before drawing your own. Use this when you do not know what is at the location. Pass an object to control how many: fewer labels is the simplest cure for a crowded page.",
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "object",
          "properties": {
            "mode": {
              "default": "auto",
              "description": "site drafts tenants and road names; regional drafts cities, highway shields and water. auto picks regional for frames 3000 m wide or more.",
              "type": "string",
              "enum": [
                "auto",
                "site",
                "regional"
              ]
            },
            "maxTenants": {
              "default": 10,
              "type": "integer",
              "minimum": 0,
              "maximum": 20
            },
            "maxRoads": {
              "default": 4,
              "type": "integer",
              "minimum": 0,
              "maximum": 8
            },
            "maxPlaces": {
              "default": 8,
              "type": "integer",
              "minimum": 0,
              "maximum": 15
            },
            "maxShields": {
              "default": 6,
              "type": "integer",
              "minimum": 0,
              "maximum": 12
            },
            "maxWater": {
              "default": 4,
              "type": "integer",
              "minimum": 0,
              "maximum": 8
            },
            "brandsOnly": {
              "default": false,
              "description": "Keep only recognised chains. A flyer wants anchors, not every barber.",
              "type": "boolean"
            }
          }
        }
      ]
    },
    "labelScale": {
      "default": 1,
      "description": "Text size multiplier applied to every annotation that does not set its own textScale. Drop to ~0.8 to fit more labels; raise for a map read at arm’s length.",
      "type": "number",
      "minimum": 0.6,
      "maximum": 2
    },
    "titleBlockScale": {
      "default": 1,
      "description": "Size multiplier for the title block.",
      "type": "number",
      "minimum": 0.6,
      "maximum": 2
    },
    "overlays": {
      "default": [],
      "description": "Thematic layers drawn under the annotations. A legend is added automatically. fema-flood: regulated floodplain (blank means no mapped hazard β€” FEMA draws Zone X with no symbol). nwi-wetlands: USFWS National Wetlands Inventory.",
      "maxItems": 2,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "fema-flood",
          "nwi-wetlands"
        ]
      }
    },
    "pageElements": {
      "default": {
        "titleBlock": true,
        "northArrow": true,
        "scaleBar": true,
        "locatorInset": false,
        "insetZoomOut": 14
      },
      "description": "Page furniture. Turn elements off to free up room for labels.",
      "type": "object",
      "properties": {
        "titleBlock": {
          "default": true,
          "type": "boolean"
        },
        "northArrow": {
          "default": true,
          "type": "boolean"
        },
        "scaleBar": {
          "default": true,
          "type": "boolean"
        },
        "locatorInset": {
          "default": false,
          "description": "A small USGS topo overview showing where this frame sits in the wider area, with the frame outlined on it. Worth the corner it costs whenever the reader may not know the town.",
          "type": "boolean"
        },
        "insetZoomOut": {
          "default": 14,
          "description": "How many times wider than the frame the inset covers.",
          "type": "number",
          "minimum": 4,
          "maximum": 60
        }
      }
    },
    "title": {
      "description": "Title block heading. Defaults to the address.",
      "type": "string",
      "maxLength": 200
    },
    "mapId": {
      "description": "Revise a map you already bought. Returned as X-Map-Id on your paid export. Re-exports are free for 7 days as long as the FRAME is unchanged β€” change labels, styling, overlays and page elements freely; changing address, center, groundWidthM, pageSize, orientation or dpi makes it a different map.",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒preview_map(address, center, groundWidthM, pageSize, orientation, ...)

Render the map at screen size with a PREVIEW watermark and return it as an image, so the user can see the layout before buying. Same request as make_map. Free.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "description": "US street address, city and state. Geocoded via the US Census.",
      "type": "string",
      "minLength": 5,
      "maxLength": 200
    },
    "center": {
      "description": "[longitude, latitude] in WGS84. Alternative to address.",
      "type": "array",
      "items": [
        {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        }
      ],
      "additionalItems": false,
      "minItems": 2,
      "maxItems": 2
    },
    "groundWidthM": {
      "default": 500,
      "description": "True ground width of the frame in meters. 500 fits a typical retail plaza; 20000-40000 makes a regional map, where autoLabel drafts cities, highway shields and water instead of tenants.",
      "type": "number",
      "minimum": 100,
      "maximum": 40000
    },
    "pageSize": {
      "default": "tabloid",
      "type": "string",
      "enum": [
        "letter",
        "legal",
        "tabloid"
      ]
    },
    "orientation": {
      "default": "portrait",
      "type": "string",
      "enum": [
        "portrait",
        "landscape"
      ]
    },
    "dpi": {
      "default": 200,
      "type": "integer",
      "minimum": 150,
      "maximum": 300
    },
    "imagerySourceId": {
      "description": "Imagery source id. Defaults to the sharpest source covering the frame.",
      "type": "string"
    },
    "annotations": {
      "description": "Callouts to draw. Placement, collision avoidance and leader lines are automatic.",
      "maxItems": 40,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Your id for this annotation. Echoed back in warnings so you can match them up.",
            "type": "string",
            "maxLength": 64
          },
          "type": {
            "type": "string",
            "enum": [
              "tenant_callout",
              "subject_property",
              "road_label",
              "traffic_count",
              "place_label",
              "route_shield",
              "water_label",
              "subject_pin",
              "panel"
            ]
          },
          "at": {
            "description": "[lon, lat]. Required for tenant_callout and traffic_count.",
            "type": "array",
            "items": [
              {
                "type": "number",
                "minimum": -180,
                "maximum": 180
              },
              {
                "type": "number",
                "minimum": -90,
                "maximum": 90
              }
            ],
            "additionalItems": false,
            "minItems": 2,
            "maxItems": 2
          },
          "path": {
            "description": "[[lon,lat],...] along the road. Required for road_label.",
            "minItems": 2,
            "type": "array",
            "items": {
              "type": "array",
              "items": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "additionalItems": false,
              "minItems": 2,
              "maxItems": 2
            }
          },
          "polygon": {
            "description": "[[lon,lat],...] ring. Required for subject_property.",
            "minItems": 3,
            "type": "array",
            "items": {
              "type": "array",
              "items": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "additionalItems": false,
              "minItems": 2,
              "maxItems": 2
            }
          },
          "label": {
            "type": "string",
            "maxLength": 120
          },
          "sublabel": {
            "description": "Second line, e.g. \"24,500 SF\".",
            "type": "string",
            "maxLength": 120
          },
          "aadt": {
            "description": "Traffic count, for traffic_count.",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "tier": {
            "description": "place_label size class.",
            "type": "string",
            "enum": [
              "city",
              "town",
              "village"
            ]
          },
          "network": {
            "description": "route_shield: interstate, US route or state route.",
            "type": "string",
            "enum": [
              "I",
              "US",
              "SR"
            ]
          },
          "number": {
            "description": "route_shield route number, e.g. \"5\" or \"99W\".",
            "type": "string",
            "maxLength": 5
          },
          "monogram": {
            "description": "subject_pin: up to three characters shown in the pin, e.g. initials.",
            "type": "string",
            "maxLength": 3
          },
          "stat": {
            "description": "panel: the figure in the header, e.g. \"100,000+ jobs\".",
            "type": "string",
            "maxLength": 60
          },
          "body": {
            "description": "panel: a grid of logos, one large logo, a photo, or header only.",
            "type": "string",
            "enum": [
              "logos",
              "logo",
              "photo",
              "none"
            ]
          },
          "logos": {
            "maxItems": 16,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "description": "Brand name, looked up for a public-domain logo.",
                  "type": "string",
                  "maxLength": 80
                },
                "wikidata": {
                  "type": "string",
                  "pattern": "^Q\\d+$"
                },
                "image": {
                  "description": "Your own logo as a data: URI (PNG, JPEG or WebP).",
                  "type": "string",
                  "maxLength": 4000000
                }
              }
            }
          },
          "photo": {
            "description": "panel: a photo as a data: URI (PNG, JPEG or WebP), up to 8 MB.",
            "type": "object",
            "properties": {
              "image": {
                "type": "string",
                "maxLength": 11000000
              }
            },
            "required": [
              "image"
            ]
          },
          "color": {
            "description": "panel: header bar colour.",
            "type": "string",
            "maxLength": 32
          },
          "outline": {
            "description": "panel: the offset frame. Default on.",
            "type": "boolean"
          },
          "outlineColor": {
            "type": "string",
            "maxLength": 32
          },
          "width": {
            "description": "panel: width as a fraction of the page.",
            "type": "number",
            "minimum": 0.1,
            "maximum": 0.6
          },
          "anchor": {
            "description": "panel: top-left corner as fractions of the page. Omit to dock the panel beside the place it points at.",
            "type": "object",
            "properties": {
              "x": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "y": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              }
            },
            "required": [
              "x",
              "y"
            ]
          },
          "stylePreset": {
            "default": "light",
            "description": "light reads on dark pavement and roofs in shadow; dark reads on bright roofs and sunlit parking; accent is survey orange, meant for the subject property only.",
            "type": "string",
            "enum": [
              "light",
              "dark",
              "accent"
            ]
          },
          "offset": {
            "description": "Move the label box relative to its pin, in preview pixels (the page is 1397 wide at 11x17 portrait). Setting this turns the auto-placer OFF for this annotation, so it is the fix for a label_overlap warning you want resolved a specific way.",
            "type": "object",
            "properties": {
              "dx": {
                "type": "number",
                "minimum": -2000,
                "maximum": 2000
              },
              "dy": {
                "type": "number",
                "minimum": -2000,
                "maximum": 2000
              }
            },
            "required": [
              "dx",
              "dy"
            ]
          },
          "textScale": {
            "description": "Multiplier on text size. Lower it to clear a text_truncated warning.",
            "type": "number",
            "minimum": 0.6,
            "maximum": 2
          },
          "strokeScale": {
            "description": "Multiplier on pin, leader and outline weights.",
            "type": "number",
            "minimum": 0.5,
            "maximum": 4
          },
          "boxColor": {
            "description": "CSS colour for the label box fill.",
            "type": "string",
            "maxLength": 32
          },
          "inkColor": {
            "description": "CSS colour for the label text.",
            "type": "string",
            "maxLength": 32
          },
          "markColor": {
            "description": "CSS colour for the pin and leader line.",
            "type": "string",
            "maxLength": 32
          }
        },
        "required": [
          "type"
        ]
      }
    },
    "autoLabel": {
      "default": false,
      "description": "Draft tenant callouts from OpenStreetMap and road names from Census TIGER before drawing your own. Use this when you do not know what is at the location. Pass an object to control how many: fewer labels is the simplest cure for a crowded page.",
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "object",
          "properties": {
            "mode": {
              "default": "auto",
              "description": "site drafts tenants and road names; regional drafts cities, highway shields and water. auto picks regional for frames 3000 m wide or more.",
              "type": "string",
              "enum": [
                "auto",
                "site",
                "regional"
              ]
            },
            "maxTenants": {
              "default": 10,
              "type": "integer",
              "minimum": 0,
              "maximum": 20
            },
            "maxRoads": {
              "default": 4,
              "type": "integer",
              "minimum": 0,
              "maximum": 8
            },
            "maxPlaces": {
              "default": 8,
              "type": "integer",
              "minimum": 0,
              "maximum": 15
            },
            "maxShields": {
              "default": 6,
              "type": "integer",
              "minimum": 0,
              "maximum": 12
            },
            "maxWater": {
              "default": 4,
              "type": "integer",
              "minimum": 0,
              "maximum": 8
            },
            "brandsOnly": {
              "default": false,
              "description": "Keep only recognised chains. A flyer wants anchors, not every barber.",
              "type": "boolean"
            }
          }
        }
      ]
    },
    "labelScale": {
      "default": 1,
      "description": "Text size multiplier applied to every annotation that does not set its own textScale. Drop to ~0.8 to fit more labels; raise for a map read at arm’s length.",
      "type": "number",
      "minimum": 0.6,
      "maximum": 2
    },
    "titleBlockScale": {
      "default": 1,
      "description": "Size multiplier for the title block.",
      "type": "number",
      "minimum": 0.6,
      "maximum": 2
    },
    "overlays": {
      "default": [],
      "description": "Thematic layers drawn under the annotations. A legend is added automatically. fema-flood: regulated floodplain (blank means no mapped hazard β€” FEMA draws Zone X with no symbol). nwi-wetlands: USFWS National Wetlands Inventory.",
      "maxItems": 2,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "fema-flood",
          "nwi-wetlands"
        ]
      }
    },
    "pageElements": {
      "default": {
        "titleBlock": true,
        "northArrow": true,
        "scaleBar": true,
        "locatorInset": false,
        "insetZoomOut": 14
      },
      "description": "Page furniture. Turn elements off to free up room for labels.",
      "type": "object",
      "properties": {
        "titleBlock": {
          "default": true,
          "type": "boolean"
        },
        "northArrow": {
          "default": true,
          "type": "boolean"
        },
        "scaleBar": {
          "default": true,
          "type": "boolean"
        },
        "locatorInset": {
          "default": false,
          "description": "A small USGS topo overview showing where this frame sits in the wider area, with the frame outlined on it. Worth the corner it costs whenever the reader may not know the town.",
          "type": "boolean"
        },
        "insetZoomOut": {
          "default": 14,
          "description": "How many times wider than the frame the inset covers.",
          "type": "number",
          "minimum": 4,
          "maximum": 60
        }
      }
    },
    "title": {
      "description": "Title block heading. Defaults to the address.",
      "type": "string",
      "maxLength": 200
    },
    "mapId": {
      "description": "Revise a map you already bought. Returned as X-Map-Id on your paid export. Re-exports are free for 7 days as long as the FRAME is unchanged β€” change labels, styling, overlays and page elements freely; changing address, center, groundWidthM, pageSize, orientation or dpi makes it a different map.",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟒make_map(address, center, groundWidthM, pageSize, orientation, ...)

Render the print-resolution map and return a download link. Costs $1 USDC, paid over x402: the first call returns the payment requirements; sign and call again with the payment. Charged only if the render succeeds. Includes 7 days of free revisions via revise_map.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "description": "US street address, city and state. Geocoded via the US Census.",
      "type": "string",
      "minLength": 5,
      "maxLength": 200
    },
    "center": {
      "description": "[longitude, latitude] in WGS84. Alternative to address.",
      "type": "array",
      "items": [
        {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        }
      ],
      "additionalItems": false,
      "minItems": 2,
      "maxItems": 2
    },
    "groundWidthM": {
      "default": 500,
      "description": "True ground width of the frame in meters. 500 fits a typical retail plaza; 20000-40000 makes a regional map, where autoLabel drafts cities, highway shields and water instead of tenants.",
      "type": "number",
      "minimum": 100,
      "maximum": 40000
    },
    "pageSize": {
      "default": "tabloid",
      "type": "string",
      "enum": [
        "letter",
        "legal",
        "tabloid"
      ]
    },
    "orientation": {
      "default": "portrait",
      "type": "string",
      "enum": [
        "portrait",
        "landscape"
      ]
    },
    "dpi": {
      "default": 200,
      "type": "integer",
      "minimum": 150,
      "maximum": 300
    },
    "format": {
      "default": "pdf",
      "type": "string",
      "enum": [
        "pdf",
        "png"
      ]
    },
    "imagerySourceId": {
      "description": "Imagery source id. Defaults to the sharpest source covering the frame.",
      "type": "string"
    },
    "annotations": {
      "description": "Callouts to draw. Placement, collision avoidance and leader lines are automatic.",
      "maxItems": 40,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Your id for this annotation. Echoed back in warnings so you can match them up.",
            "type": "string",
            "maxLength": 64
          },
          "type": {
            "type": "string",
            "enum": [
              "tenant_callout",
              "subject_property",
              "road_label",
              "traffic_count",
              "place_label",
              "route_shield",
              "water_label",
              "subject_pin",
              "panel"
            ]
          },
          "at": {
            "description": "[lon, lat]. Required for tenant_callout and traffic_count.",
            "type": "array",
            "items": [
              {
                "type": "number",
                "minimum": -180,
                "maximum": 180
              },
              {
                "type": "number",
                "minimum": -90,
                "maximum": 90
              }
            ],
            "additionalItems": false,
            "minItems": 2,
            "maxItems": 2
          },
          "path": {
            "description": "[[lon,lat],...] along the road. Required for road_label.",
            "minItems": 2,
            "type": "array",
            "items": {
              "type": "array",
              "items": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "additionalItems": false,
              "minItems": 2,
              "maxItems": 2
            }
          },
          "polygon": {
            "description": "[[lon,lat],...] ring. Required for subject_property.",
            "minItems": 3,
            "type": "array",
            "items": {
              "type": "array",
              "items": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "additionalItems": false,
              "minItems": 2,
              "maxItems": 2
            }
          },
          "label": {
            "type": "string",
            "maxLength": 120
          },
          "sublabel": {
            "description": "Second line, e.g. \"24,500 SF\".",
            "type": "string",
            "maxLength": 120
          },
          "aadt": {
            "description": "Traffic count, for traffic_count.",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "tier": {
            "description": "place_label size class.",
            "type": "string",
            "enum": [
              "city",
              "town",
              "village"
            ]
          },
          "network": {
            "description": "route_shield: interstate, US route or state route.",
            "type": "string",
            "enum": [
              "I",
              "US",
              "SR"
            ]
          },
          "number": {
            "description": "route_shield route number, e.g. \"5\" or \"99W\".",
            "type": "string",
            "maxLength": 5
          },
          "monogram": {
            "description": "subject_pin: up to three characters shown in the pin, e.g. initials.",
            "type": "string",
            "maxLength": 3
          },
          "stat": {
            "description": "panel: the figure in the header, e.g. \"100,000+ jobs\".",
            "type": "string",
            "maxLength": 60
          },
          "body": {
            "description": "panel: a grid of logos, one large logo, a photo, or header only.",
            "type": "string",
            "enum": [
              "logos",
              "logo",
              "photo",
              "none"
            ]
          },
          "logos": {
            "maxItems": 16,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "description": "Brand name, looked up for a public-domain logo.",
                  "type": "string",
                  "maxLength": 80
                },
                "wikidata": {
                  "type": "string",
                  "pattern": "^Q\\d+$"
                },
                "image": {
                  "description": "Your own logo as a data: URI (PNG, JPEG or WebP).",
                  "type": "string",
                  "maxLength": 4000000
                }
              }
            }
          },
          "photo": {
            "description": "panel: a photo as a data: URI (PNG, JPEG or WebP), up to 8 MB.",
            "type": "object",
            "properties": {
              "image": {
                "type": "string",
                "maxLength": 11000000
              }
            },
            "required": [
              "image"
            ]
          },
          "color": {
            "description": "panel: header bar colour.",
            "type": "string",
            "maxLength": 32
          },
          "outline": {
            "description": "panel: the offset frame. Default on.",
            "type": "boolean"
          },
          "outlineColor": {
            "type": "string",
            "maxLength": 32
          },
          "width": {
            "description": "panel: width as a fraction of the page.",
            "type": "number",
            "minimum": 0.1,
            "maximum": 0.6
          },
          "anchor": {
            "description": "panel: top-left corner as fractions of the page. Omit to dock the panel beside the place it points at.",
            "type": "object",
            "properties": {
              "x": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "y": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              }
            },
            "required": [
              "x",
              "y"
            ]
          },
          "stylePreset": {
            "default": "light",
            "description": "light reads on dark pavement and roofs in shadow; dark reads on bright roofs and sunlit parking; accent is survey orange, meant for the subject property only.",
            "type": "string",
            "enum": [
              "light",
              "dark",
              "accent"
            ]
          },
          "offset": {
            "description": "Move the label box relative to its pin, in preview pixels (the page is 1397 wide at 11x17 portrait). Setting this turns the auto-placer OFF for this annotation, so it is the fix for a label_overlap warning you want resolved a specific way.",
            "type": "object",
            "properties": {
              "dx": {
                "type": "number",
                "minimum": -2000,
                "maximum": 2000
              },
              "dy": {
                "type": "number",
                "minimum": -2000,
                "maximum": 2000
              }
            },
            "required": [
              "dx",
              "dy"
            ]
          },
          "textScale": {
            "description": "Multiplier on text size. Lower it to clear a text_truncated warning.",
            "type": "number",
            "minimum": 0.6,
            "maximum": 2
          },
          "strokeScale": {
            "description": "Multiplier on pin, leader and outline weights.",
            "type": "number",
            "minimum": 0.5,
            "maximum": 4
          },
          "boxColor": {
            "description": "CSS colour for the label box fill.",
            "type": "string",
            "maxLength": 32
          },
          "inkColor": {
            "description": "CSS colour for the label text.",
            "type": "string",
            "maxLength": 32
          },
          "markColor": {
            "description": "CSS colour for the pin and leader line.",
            "type": "string",
            "maxLength": 32
          }
        },
        "required": [
          "type"
        ]
      }
    },
    "autoLabel": {
      "default": false,
      "description": "Draft tenant callouts from OpenStreetMap and road names from Census TIGER before drawing your own. Use this when you do not know what is at the location. Pass an object to control how many: fewer labels is the simplest cure for a crowded page.",
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "object",
          "properties": {
            "mode": {
              "default": "auto",
              "description": "site drafts tenants and road names; regional drafts cities, highway shields and water. auto picks regional for frames 3000 m wide or more.",
              "type": "string",
              "enum": [
                "auto",
                "site",
                "regional"
              ]
            },
            "maxTenants": {
              "default": 10,
              "type": "integer",
              "minimum": 0,
              "maximum": 20
            },
            "maxRoads": {
              "default": 4,
              "type": "integer",
              "minimum": 0,
              "maximum": 8
            },
            "maxPlaces": {
              "default": 8,
              "type": "integer",
              "minimum": 0,
              "maximum": 15
            },
            "maxShields": {
              "default": 6,
              "type": "integer",
              "minimum": 0,
              "maximum": 12
            },
            "maxWater": {
              "default": 4,
              "type": "integer",
              "minimum": 0,
              "maximum": 8
            },
            "brandsOnly": {
              "default": false,
              "description": "Keep only recognised chains. A flyer wants anchors, not every barber.",
              "type": "boolean"
            }
          }
        }
      ]
    },
    "labelScale": {
      "default": 1,
      "description": "Text size multiplier applied to every annotation that does not set its own textScale. Drop to ~0.8 to fit more labels; raise for a map read at arm’s length.",
      "type": "number",
      "minimum": 0.6,
      "maximum": 2
    },
    "titleBlockScale": {
      "default": 1,
      "description": "Size multiplier for the title block.",
      "type": "number",
      "minimum": 0.6,
      "maximum": 2
    },
    "overlays": {
      "default": [],
      "description": "Thematic layers drawn under the annotations. A legend is added automatically. fema-flood: regulated floodplain (blank means no mapped hazard β€” FEMA draws Zone X with no symbol). nwi-wetlands: USFWS National Wetlands Inventory.",
      "maxItems": 2,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "fema-flood",
          "nwi-wetlands"
        ]
      }
    },
    "pageElements": {
      "default": {
        "titleBlock": true,
        "northArrow": true,
        "scaleBar": true,
        "locatorInset": false,
        "insetZoomOut": 14
      },
      "description": "Page furniture. Turn elements off to free up room for labels.",
      "type": "object",
      "properties": {
        "titleBlock": {
          "default": true,
          "type": "boolean"
        },
        "northArrow": {
          "default": true,
          "type": "boolean"
        },
        "scaleBar": {
          "default": true,
          "type": "boolean"
        },
        "locatorInset": {
          "default": false,
          "description": "A small USGS topo overview showing where this frame sits in the wider area, with the frame outlined on it. Worth the corner it costs whenever the reader may not know the town.",
          "type": "boolean"
        },
        "insetZoomOut": {
          "default": 14,
          "description": "How many times wider than the frame the inset covers.",
          "type": "number",
          "minimum": 4,
          "maximum": 60
        }
      }
    },
    "title": {
      "description": "Title block heading. Defaults to the address.",
      "type": "string",
      "maxLength": 200
    },
    "mapId": {
      "description": "Revise a map you already bought. Returned as X-Map-Id on your paid export. Re-exports are free for 7 days as long as the FRAME is unchanged β€” change labels, styling, overlays and page elements freely; changing address, center, groundWidthM, pageSize, orientation or dpi makes it a different map.",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟑revise_map(address, center, groundWidthM, pageSize, orientation, ...)

Re-export a map bought with make_map, free for 7 days: change labels, annotations, styling, overlays or page elements. The frame must stay the same -- address or center, groundWidthM, pageSize, orientation, dpi. Requires the mapId make_map returned.

Input Schema

{
  "type": "object",
  "properties": {
    "address": {
      "description": "US street address, city and state. Geocoded via the US Census.",
      "type": "string",
      "minLength": 5,
      "maxLength": 200
    },
    "center": {
      "description": "[longitude, latitude] in WGS84. Alternative to address.",
      "type": "array",
      "items": [
        {
          "type": "number",
          "minimum": -180,
          "maximum": 180
        },
        {
          "type": "number",
          "minimum": -90,
          "maximum": 90
        }
      ],
      "additionalItems": false,
      "minItems": 2,
      "maxItems": 2
    },
    "groundWidthM": {
      "default": 500,
      "description": "True ground width of the frame in meters. 500 fits a typical retail plaza; 20000-40000 makes a regional map, where autoLabel drafts cities, highway shields and water instead of tenants.",
      "type": "number",
      "minimum": 100,
      "maximum": 40000
    },
    "pageSize": {
      "default": "tabloid",
      "type": "string",
      "enum": [
        "letter",
        "legal",
        "tabloid"
      ]
    },
    "orientation": {
      "default": "portrait",
      "type": "string",
      "enum": [
        "portrait",
        "landscape"
      ]
    },
    "dpi": {
      "default": 200,
      "type": "integer",
      "minimum": 150,
      "maximum": 300
    },
    "format": {
      "default": "pdf",
      "type": "string",
      "enum": [
        "pdf",
        "png"
      ]
    },
    "imagerySourceId": {
      "description": "Imagery source id. Defaults to the sharpest source covering the frame.",
      "type": "string"
    },
    "annotations": {
      "description": "Callouts to draw. Placement, collision avoidance and leader lines are automatic.",
      "maxItems": 40,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Your id for this annotation. Echoed back in warnings so you can match them up.",
            "type": "string",
            "maxLength": 64
          },
          "type": {
            "type": "string",
            "enum": [
              "tenant_callout",
              "subject_property",
              "road_label",
              "traffic_count",
              "place_label",
              "route_shield",
              "water_label",
              "subject_pin",
              "panel"
            ]
          },
          "at": {
            "description": "[lon, lat]. Required for tenant_callout and traffic_count.",
            "type": "array",
            "items": [
              {
                "type": "number",
                "minimum": -180,
                "maximum": 180
              },
              {
                "type": "number",
                "minimum": -90,
                "maximum": 90
              }
            ],
            "additionalItems": false,
            "minItems": 2,
            "maxItems": 2
          },
          "path": {
            "description": "[[lon,lat],...] along the road. Required for road_label.",
            "minItems": 2,
            "type": "array",
            "items": {
              "type": "array",
              "items": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "additionalItems": false,
              "minItems": 2,
              "maxItems": 2
            }
          },
          "polygon": {
            "description": "[[lon,lat],...] ring. Required for subject_property.",
            "minItems": 3,
            "type": "array",
            "items": {
              "type": "array",
              "items": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "additionalItems": false,
              "minItems": 2,
              "maxItems": 2
            }
          },
          "label": {
            "type": "string",
            "maxLength": 120
          },
          "sublabel": {
            "description": "Second line, e.g. \"24,500 SF\".",
            "type": "string",
            "maxLength": 120
          },
          "aadt": {
            "description": "Traffic count, for traffic_count.",
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          },
          "tier": {
            "description": "place_label size class.",
            "type": "string",
            "enum": [
              "city",
              "town",
              "village"
            ]
          },
          "network": {
            "description": "route_shield: interstate, US route or state route.",
            "type": "string",
            "enum": [
              "I",
              "US",
              "SR"
            ]
          },
          "number": {
            "description": "route_shield route number, e.g. \"5\" or \"99W\".",
            "type": "string",
            "maxLength": 5
          },
          "monogram": {
            "description": "subject_pin: up to three characters shown in the pin, e.g. initials.",
            "type": "string",
            "maxLength": 3
          },
          "stat": {
            "description": "panel: the figure in the header, e.g. \"100,000+ jobs\".",
            "type": "string",
            "maxLength": 60
          },
          "body": {
            "description": "panel: a grid of logos, one large logo, a photo, or header only.",
            "type": "string",
            "enum": [
              "logos",
              "logo",
              "photo",
              "none"
            ]
          },
          "logos": {
            "maxItems": 16,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "description": "Brand name, looked up for a public-domain logo.",
                  "type": "string",
                  "maxLength": 80
                },
                "wikidata": {
                  "type": "string",
                  "pattern": "^Q\\d+$"
                },
                "image": {
                  "description": "Your own logo as a data: URI (PNG, JPEG or WebP).",
                  "type": "string",
                  "maxLength": 4000000
                }
              }
            }
          },
          "photo": {
            "description": "panel: a photo as a data: URI (PNG, JPEG or WebP), up to 8 MB.",
            "type": "object",
            "properties": {
              "image": {
                "type": "string",
                "maxLength": 11000000
              }
            },
            "required": [
              "image"
            ]
          },
          "color": {
            "description": "panel: header bar colour.",
            "type": "string",
            "maxLength": 32
          },
          "outline": {
            "description": "panel: the offset frame. Default on.",
            "type": "boolean"
          },
          "outlineColor": {
            "type": "string",
            "maxLength": 32
          },
          "width": {
            "description": "panel: width as a fraction of the page.",
            "type": "number",
            "minimum": 0.1,
            "maximum": 0.6
          },
          "anchor": {
            "description": "panel: top-left corner as fractions of the page. Omit to dock the panel beside the place it points at.",
            "type": "object",
            "properties": {
              "x": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              },
              "y": {
                "type": "number",
                "minimum": 0,
                "maximum": 1
              }
            },
            "required": [
              "x",
              "y"
            ]
          },
          "stylePreset": {
            "default": "light",
            "description": "light reads on dark pavement and roofs in shadow; dark reads on bright roofs and sunlit parking; accent is survey orange, meant for the subject property only.",
            "type": "string",
            "enum": [
              "light",
              "dark",
              "accent"
            ]
          },
          "offset": {
            "description": "Move the label box relative to its pin, in preview pixels (the page is 1397 wide at 11x17 portrait). Setting this turns the auto-placer OFF for this annotation, so it is the fix for a label_overlap warning you want resolved a specific way.",
            "type": "object",
            "properties": {
              "dx": {
                "type": "number",
                "minimum": -2000,
                "maximum": 2000
              },
              "dy": {
                "type": "number",
                "minimum": -2000,
                "maximum": 2000
              }
            },
            "required": [
              "dx",
              "dy"
            ]
          },
          "textScale": {
            "description": "Multiplier on text size. Lower it to clear a text_truncated warning.",
            "type": "number",
            "minimum": 0.6,
            "maximum": 2
          },
          "strokeScale": {
            "description": "Multiplier on pin, leader and outline weights.",
            "type": "number",
            "minimum": 0.5,
            "maximum": 4
          },
          "boxColor": {
            "description": "CSS colour for the label box fill.",
            "type": "string",
            "maxLength": 32
          },
          "inkColor": {
            "description": "CSS colour for the label text.",
            "type": "string",
            "maxLength": 32
          },
          "markColor": {
            "description": "CSS colour for the pin and leader line.",
            "type": "string",
            "maxLength": 32
          }
        },
        "required": [
          "type"
        ]
      }
    },
    "autoLabel": {
      "default": false,
      "description": "Draft tenant callouts from OpenStreetMap and road names from Census TIGER before drawing your own. Use this when you do not know what is at the location. Pass an object to control how many: fewer labels is the simplest cure for a crowded page.",
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "object",
          "properties": {
            "mode": {
              "default": "auto",
              "description": "site drafts tenants and road names; regional drafts cities, highway shields and water. auto picks regional for frames 3000 m wide or more.",
              "type": "string",
              "enum": [
                "auto",
                "site",
                "regional"
              ]
            },
            "maxTenants": {
              "default": 10,
              "type": "integer",
              "minimum": 0,
              "maximum": 20
            },
            "maxRoads": {
              "default": 4,
              "type": "integer",
              "minimum": 0,
              "maximum": 8
            },
            "maxPlaces": {
              "default": 8,
              "type": "integer",
              "minimum": 0,
              "maximum": 15
            },
            "maxShields": {
              "default": 6,
              "type": "integer",
              "minimum": 0,
              "maximum": 12
            },
            "maxWater": {
              "default": 4,
              "type": "integer",
              "minimum": 0,
              "maximum": 8
            },
            "brandsOnly": {
              "default": false,
              "description": "Keep only recognised chains. A flyer wants anchors, not every barber.",
              "type": "boolean"
            }
          }
        }
      ]
    },
    "labelScale": {
      "default": 1,
      "description": "Text size multiplier applied to every annotation that does not set its own textScale. Drop to ~0.8 to fit more labels; raise for a map read at arm’s length.",
      "type": "number",
      "minimum": 0.6,
      "maximum": 2
    },
    "titleBlockScale": {
      "default": 1,
      "description": "Size multiplier for the title block.",
      "type": "number",
      "minimum": 0.6,
      "maximum": 2
    },
    "overlays": {
      "default": [],
      "description": "Thematic layers drawn under the annotations. A legend is added automatically. fema-flood: regulated floodplain (blank means no mapped hazard β€” FEMA draws Zone X with no symbol). nwi-wetlands: USFWS National Wetlands Inventory.",
      "maxItems": 2,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "fema-flood",
          "nwi-wetlands"
        ]
      }
    },
    "pageElements": {
      "default": {
        "titleBlock": true,
        "northArrow": true,
        "scaleBar": true,
        "locatorInset": false,
        "insetZoomOut": 14
      },
      "description": "Page furniture. Turn elements off to free up room for labels.",
      "type": "object",
      "properties": {
        "titleBlock": {
          "default": true,
          "type": "boolean"
        },
        "northArrow": {
          "default": true,
          "type": "boolean"
        },
        "scaleBar": {
          "default": true,
          "type": "boolean"
        },
        "locatorInset": {
          "default": false,
          "description": "A small USGS topo overview showing where this frame sits in the wider area, with the frame outlined on it. Worth the corner it costs whenever the reader may not know the town.",
          "type": "boolean"
        },
        "insetZoomOut": {
          "default": 14,
          "description": "How many times wider than the frame the inset covers.",
          "type": "number",
          "minimum": 4,
          "maximum": 60
        }
      }
    },
    "title": {
      "description": "Title block heading. Defaults to the address.",
      "type": "string",
      "maxLength": 200
    },
    "mapId": {
      "description": "Revise a map you already bought. Returned as X-Map-Id on your paid export. Re-exports are free for 7 days as long as the FRAME is unchanged β€” change labels, styling, overlays and page elements freely; changing address, center, groundWidthM, pageSize, orientation or dpi makes it a different map.",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded5 tools