Skip to main content
Glama

create_map

Make a map in the dashboard's map builder from pins, a spreadsheet the human pasted (csv, addresses looked up for them, one search each), and lines or areas, with its settings: a store locator, a list beside the map, category colours and symbols, a look. It shows on any site with one tag (map_code) and changes there within a minute of every later edit. Owner or admin. Within the plan's number of maps and pins per map; past them it answers site_map_limit or site_map_pin_limit, an upgrade to offer.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "name": "<name>"
    },
    "name": "create_map"
  }
}

Input Schema

NameRequiredDescriptionDefault
csvNoA spreadsheet the human pasted, as CSV with a header row, instead of pins: columns such as name, address, city, postcode, country, latitude, longitude, phone, website, category, hours, notes, photo, button, button_url and features ("Parking | Wheelchair access") (other spellings are understood). Rows without coordinates are looked up by their address, one search each, remembered for the map so the same address is never looked up twice.
nameYesThe map's name, as the dashboard lists it.
pinsNoPins as the embed reads them, each {lng, lat, title, text, address, phone, url, category, hours, photo, glyph, button, buttonUrl, closedUntil, notice, features}: hours in OpenStreetMap's opening_hours spelling ("Mo-Fr 09:00-17:30; Sa 10:00-14:00"), glyph a built-in symbol (shop, food, coffee, bar, hotel, parking, health, school, park, … 62 in all), closedUntil YYYY-MM-DD, features a list of what the place has (["Parking", "Wheelchair access"], at most 20). Each needs lng and lat; to place by address use csv. An id is given to any pin without one.
glyphsNoA built-in symbol per category, e.g. {"Cafés": "coffee"}.
shapesNoLines and areas, each {kind: "line" or "area", geometry: a GeoJSON LineString, MultiLineString, Polygon or MultiPolygon, title, text, url, color, width, opacity, dash, category}: a route, a delivery zone, a park. Up to 500 a map and 20,000 points across them.
settingsNoSettings by name, the rest left at their defaults: style (a built-in look: meadow, midnight, neon, vintage, blueprint, sakura; auto for light or dark as the visitor's device is; or style:<id> of a published style), locator (true for a store locator: a search for the nearest place, with a list), list ("left", "right" or "below": a list of the places beside the map), search (true: a place search box), filter (true: category buttons), locate (true: a "where am I" button), directions ("auto", "google", "apple", "off", or "route" to draw routes on the page), cluster ("auto", "true", "false"), units ("km", "mi"), radius (km, 1-1000), country (["ie", "gb"]: where the locator searches), timezone ("Europe/Dublin"), language (a label language, e.g. "de"), center ([lng, lat]) and zoom (0-24; both left out to fit the pins), controls ("zoom,fullscreen,scale" or "none"), gestures ("auto", "greedy", "off"), consent (true: a "Show map" button before anything loads), accent ("#0a7cff"), theme ("auto", "light", "dark"), features (true: in the locator or the list, a button per feature the pins carry, each narrowing the places to those that have it).
categoriesNoColours by category name, e.g. {"Shops": "#e11d48", "Cafés": "#2563eb"}.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / csv / description
      Previous value: -"A spreadsheet the human pasted, as CSV with a header row, instead of pins: columns such as name, address, city, postcode, country, latitude, longitude, phone, website, category, hours, notes, photo, button and button_url (other spellings are understood). Rows without coordinates are looked up by their address, one search each, remembered for the map so the same address is never looked up twice."New value: +"A spreadsheet the human pasted, as CSV with a header row, instead of pins: columns such as name, address, city, postcode, country, latitude, longitude, phone, website, category, hours, notes, photo, button, button_url and features (\"Parking | Wheelchair access\") (other spellings are understood). Rows without coordinates are looked up by their address, one search each, remembered for the map so the same address is never looked up twice."
    • changedInput schema / properties / pins / description
      Previous value: -"Pins as the embed reads them, each {lng, lat, title, text, address, phone, url, category, hours, photo, glyph, button, buttonUrl, closedUntil, notice}: hours in OpenStreetMap's opening_hours spelling (\"Mo-Fr 09:00-17:30; Sa 10:00-14:00\"), glyph a built-in symbol (shop, food, coffee, bar, hotel, parking, health, school, park, … 62 in all), closedUntil YYYY-MM-DD. Each needs lng and lat; to place by address use csv. An id is given to any pin without one."New value: +"Pins as the embed reads them, each {lng, lat, title, text, address, phone, url, category, hours, photo, glyph, button, buttonUrl, closedUntil, notice, features}: hours in OpenStreetMap's opening_hours spelling (\"Mo-Fr 09:00-17:30; Sa 10:00-14:00\"), glyph a built-in symbol (shop, food, coffee, bar, hotel, parking, health, school, park, … 62 in all), closedUntil YYYY-MM-DD, features a list of what the place has ([\"Parking\", \"Wheelchair access\"], at most 20). Each needs lng and lat; to place by address use csv. An id is given to any pin without one."
    • changedInput schema / properties / settings / description
      Previous value: -"Settings by name, the rest left at their defaults: style (a built-in look: meadow, midnight, neon, vintage, blueprint, sakura; auto for light or dark as the visitor's device is; or style:<id> of a published style), locator (true for a store locator: a search for the nearest place, with a list), list (\"left\", \"right\" or \"below\": a list of the places beside the map), search (true: a place search box), filter (true: category buttons), locate (true: a \"where am I\" button), directions (\"auto\", \"google\", \"apple\", \"off\", or \"route\" to draw routes on the page), cluster (\"auto\", \"true\", \"false\"), units (\"km\", \"mi\"), radius (km, 1-1000), country ([\"ie\", \"gb\"]: where the locator searches), timezone (\"Europe/Dublin\"), language (a label language, e.g. \"de\"), center ([lng, lat]) and zoom (0-24; both left out to fit the pins), controls (\"zoom,fullscreen,scale\" or \"none\"), gestures (\"auto\", \"greedy\", \"off\"), consent (true: a \"Show map\" button before anything loads), accent (\"#0a7cff\"), theme (\"auto\", \"light\", \"dark\")."New value: +"Settings by name, the rest left at their defaults: style (a built-in look: meadow, midnight, neon, vintage, blueprint, sakura; auto for light or dark as the visitor's device is; or style:<id> of a published style), locator (true for a store locator: a search for the nearest place, with a list), list (\"left\", \"right\" or \"below\": a list of the places beside the map), search (true: a place search box), filter (true: category buttons), locate (true: a \"where am I\" button), directions (\"auto\", \"google\", \"apple\", \"off\", or \"route\" to draw routes on the page), cluster (\"auto\", \"true\", \"false\"), units (\"km\", \"mi\"), radius (km, 1-1000), country ([\"ie\", \"gb\"]: where the locator searches), timezone (\"Europe/Dublin\"), language (a label language, e.g. \"de\"), center ([lng, lat]) and zoom (0-24; both left out to fit the pins), controls (\"zoom,fullscreen,scale\" or \"none\"), gestures (\"auto\", \"greedy\", \"off\"), consent (true: a \"Show map\" button before anything loads), accent (\"#0a7cff\"), theme (\"auto\", \"light\", \"dark\"), features (true: in the locator or the list, a button per feature the pins carry, each narrowing the places to those that have it)."
  2. First observed

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the write/idempotency profile; the description goes well beyond by disclosing post-creation propagation ('changes there within a minute of every later edit'), the deployment mechanism (one map_code tag on any site), an external cost side effect (each address row triggers one geocoding search, remembered thereafter), and input mutation (an id is assigned to pins lacking one).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with verb and resource, and nearly every clause carries information an agent needs (permissions, limits, error codes, propagation latency). It drifts into a long run-on with stacked parentheticals, and the 'addresses looked up for them, one search each' clause duplicates the csv schema description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter creation tool with annotations and a rich schema, the description covers inputs, side effects, permissions, quota failures, and how the map is subsequently consumed. The remaining gap is the return value — no output schema exists and the description never says what is returned (e.g., map id and map_code), only that a code exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the per-field descriptions are exceptionally detailed, so the description's parameter mentions are largely restatements. The only added meaning is provenance ('a spreadsheet the human pasted') and the shorthand that 'a look' means the style setting; otherwise the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Make a map in the dashboard's map builder') and enumerates the exact source materials it accepts: pins, a pasted CSV, and lines/areas, plus its settings. This clearly separates it from list_maps (read), update_map (edit), and create_style (styling) without needing the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real preconditions: 'Owner or admin' and 'Within the plan's number of maps and pins per map', plus the failure mode (site_map_limit / site_map_pin_limit with an upgrade offer). It stops short of explicitly routing to alternatives such as 'use update_map to change an existing map', so there is no true when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources