Comprehensive Model Context Protocol server for managing Home Assistant through AI assistants.
ShowMeOnMap is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Ask in plain English, get a rendered, shareable map from live public data. 24 geospatial tools.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http showmeonmap-mcp https://showmeonmap.com/api/mcp
# 2 — ask your agent for something these tools do
# build_map, mutate_map, get_state and 23 more
ShowMeOnMap costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, read from the address; if the publisher says otherwise, swap that one word.
claude mcp add --scope user --transport http showmeonmap-mcp https://showmeonmap.com/api/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
26 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Create a new workspace from a natural-language query. Returns a map_id you can pass to mutate_map or get_state for follow-up actions. For the full Op catalog and predicate grammar that downstream tools (mutate_map, filter_layer, etc.) accept, fetch the MCP resource at showmeonmap://docs/workspace-ops-spec — do NOT guess the shapes.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | Natural language: "coffee shops in Tokyo", "GDP by country", "volcanoes in Indonesia", etc. |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Apply a natural-language instruction to an existing workspace. Valid mutations: filter a layer, remove a layer, change camera, change basemap. For ambiguous instructions the tool emits a clarification field. For unrelated instructions it emits outOfScope — build a new map in that case. For the full Op catalog and predicate grammar, fetch the MCP resource showmeonmap://docs/workspace-ops-spec.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | map_id from a prior build_map call |
| instruction | string | yes | e.g., "filter to where magnitude is greater than 5", "change basemap to dark" |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Return the current workspace, map plan, and active filters for a given map_id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Append a fully-constructed LayerPlan to an existing workspace without going through NL. Pass the same shape the workspace pipeline emits — { id, title, source, viz, geometry, ... }. Prefer this when you already have a structured plan; otherwise use mutate_map. For the full LayerPlan and Op spec, fetch the MCP resource showmeonmap://docs/workspace-ops-spec.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | map_id from a prior build_map call |
| layerPlan | object | yes | Full LayerPlan object. Must include id, title, source, viz, geometry. |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
| intent | string | no | Optional. Which mental model is this add_layer operating under? "primary-data" = the layer the user actually asked to see; "context-overlay" = supporting data layered on top of a primary; "reference-b |
Spatially join two existing layers and add a new layer that encodes both values per region as a 3x3 bivariate choropleth. Both layers must already exist in the workspace (call build_map or add_layer first). Auto-detects the numeric value field from each layer's viz config; pass value_field_a / value_field_b to override. Returns the new layer_id, correlation r, and matched-feature count. Required:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| layer_a_id | string | yes | — |
| layer_b_id | string | yes | — |
| mode | string | no | — |
| value_field_a | string | no | — |
| value_field_b | string | no | — |
| new_layer_id | string | no | — |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Spatially join two existing workspace layers and return the Pearson correlation coefficient r, sample size n, two-sided p-value approximation, plus human-readable strength and direction labels. Pure read — no layer is added, no op is committed, no credit charge. Use this when you want a numeric answer without rendering; use add_fusion_layer when the user wants the visualization. Required: map_id,
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| layer_a_id | string | yes | — |
| layer_b_id | string | yes | — |
| value_field_a | string | no | — |
| value_field_b | string | no | — |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Narrow a layer to features matching a structured predicate. append:true (default) conjoins with any existing filter; append:false replaces the chain.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| layerId | string | yes | id of the layer to filter |
| predicate | object | yes | Predicate in the Mongo-shape grammar. Examples: {op:"eq",field:"category",value:"cafe"}, {op:"gt",field:"magnitude",value:5}, {op:"within",geometry:{type:"Polygon",coordinates:[...]}}, {op:"and",child |
| append | boolean | no | Default true. false replaces the layer's existing filter chain. |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
| intent | string | no | Optional. Which mental model is this filter operating under? "narrow" = generic shrink-the-set; "isolate-outliers" = pull out anomalies for inspection; "compare-subset" = pre-step before a side-by-sid |
Create a new layer containing the source layer's features that lie within the supplied polygon. The source layer is untouched. Useful for "show me only the X inside this country/bbox/hand-drawn shape."
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| sourceLayerId | string | yes | — |
| newLayerId | string | yes | Id for the new layer. Must not already be in use in this workspace. |
| selection | object | yes | GeoJSON Polygon or MultiPolygon in [lng,lat] coordinate order. |
| inheritStyle | boolean | no | Default true. false emits a new layer with minimal default styling. |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Refine an existing layer to a NAMED area the server resolves from OpenStreetMap — a street corridor ("Broadway from Arbutus Street to Main Street"), a place ("Mount Pleasant"), or an intersection surroundings. Pass names only, never coordinates; unresolvable names return a clarification with real nearby candidates instead of guessed geometry. Emits ordinary undoable ops (filter / new layer + camer
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| layerId | string | yes | — |
| areaRef | yes | — | |
| mode | string | no | filter (default): hide features outside, reversible. select: copy matches into a new layer. clip: new layer with geometry trimmed at the boundary. |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Compute a spatial analysis server-side and append the finished, honestly-legended result as a new layer + camera; the result REPLACES its input layer(s) (undoable). hotspot = Getis-Ord Gi*: hot/cold significance classes (99/95/90%, Benjamini-Hochberg FDR-corrected) on a numeric field, or on hex-binned point density when valueField is omitted. zonal = aggregate points into polygon zones (an existin
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| analysis | string | yes | Which analysis to run. 'hotspot' = Getis-Ord Gi* with FDR-corrected significance classes. 'zonal' = aggregate a point layer into polygon zones (count/sum/mean/min/max choropleth). 'enrich' = join a US |
| layerId | string | yes | The workspace layer to analyze (geojson-backed; the point source for zonal; the point TARGET for join; the styling donor for merge). |
| valueField | string | no | Numeric property to analyze. hotspot: omit on point layers for incident-DENSITY mode (hex-binned counts). zonal: omit for count-only aggregation. |
| k | integer | no | hotspot only: nearest neighbors per feature (default 8). |
| hexMeters | number | no | hotspot density mode only: hex cell spacing in meters (default auto from the data extent). |
| zoneLayerId | string | no | zonal only: an existing polygon layer to aggregate into. Provide EXACTLY ONE of zoneLayerId or zones. |
| zones | object | no | zonal only: generate an h3 hex fishnet over the source extent instead of using a zone layer (resolution 3-10, default auto). Provide EXACTLY ONE of zoneLayerId or zones. |
| stats | array | no | zonal only: which statistics to attach per zone (default: count, plus sum/mean/min/max when valueField is set). |
| indicator | string | no | enrich only (required there): a US Census ACS preset id (e.g. 'median_household_income', 'median_home_value', 'median_rent') or a raw ACS variable code (e.g. 'B19013_001E'). |
| geoLevel | string | no | enrich only: containment geography (default tract). Tract/county fetch only the states the data touches, capped at 3 — filter first or use state for wider layers. |
| joinLayerId | string | no | join only (required there): the POLYGON layer providing the attributes. |
| fields | array | no | join only: which join-layer properties to transfer (default: auto-select up to 12 non-internal properties, overflow reported). |
| prefix | string | no | join only: prefix for a joined field whose name collides with an existing target property (default "join_"). |
| mergeLayerId | string | no | merge only (required there): the second layer — same geometry class (point/line/polygon) as layerId. |
| sourceField | string | no | merge only: name of the per-row provenance column naming each row's source layer (default "merge_source"; renamed on collision, reported). |
| nearLayerId | string | no | near only (required there): the POINT layer to search for each target point's nearest neighbor. |
| nearField | string | no | near only: property of the nearest feature to copy as its identity (default: first name-like property). |
| maxDistanceM | number | no | near only: search radius in meters — a point whose nearest neighbor is farther carries NO near fields (reported). |
| dissolveField | string | no | dissolve only: group-by property (omit = dissolve ALL into one footprint); missing values form their own "(no value)" group. |
Evaluate a predicate against a layer's inline features and return the matching subset. No Op is emitted and the workspace is not mutated. Handy for introspection ("how many X match Y?") before deciding whether to filter, subset, or build a new layer.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| layerId | string | yes | — |
| predicate | object | yes | Predicate in the Mongo-shape grammar. Examples: {op:"eq",field:"category",value:"cafe"}, {op:"gt",field:"magnitude",value:5}, {op:"within",geometry:{type:"Polygon",coordinates:[...]}}, {op:"and",child |
| limit | integer | no | Default 100, max 1000. Response sets truncated:true when clipped. |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Drop a layer from the workspace by id. Strict: removing an already-removed or never-added layer fails. Layer ids do NOT recycle — a removed id cannot be re-added later in the same workspace. GATED: this tool is destructive. Pass confirmed:true to proceed; otherwise a needs_confirmation envelope is returned.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| layerId | string | yes | — |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
| confirmed | boolean | no | Set to true to confirm this destructive action. If omitted or false, the call returns a needs_confirmation envelope. Layer ids are tombstoned — once removed, the same id cannot be re-added later in th |
Wipe every predicate currently applied to a layer's filter chain, making every source feature visible again. Inverse of filter_layer. No-op on layers that have no existing filter. GATED: pass confirmed:true to proceed; otherwise a needs_confirmation envelope is returned.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| layerId | string | yes | — |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
| confirmed | boolean | no | Set to true to confirm this sensitive action. If omitted or false, the call returns a needs_confirmation envelope. Wiping a filter chain is recoverable via undo, but autonomous agents lack a UI surfac |
Change a layer's id from oldLayerId to newLayerId. Re-keys any existing filter chain and preserves insertion order among sibling layers. Strict: newLayerId must not already be in use (current OR tombstoned) in this workspace. Subsequent ops must reference the layer by its new id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| oldLayerId | string | yes | — |
| newLayerId | string | yes | New id. Must be unique within the workspace. |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Adjust a layer's color and/or opacity. Within-palette changes only — the renderer silently ignores fields the current viz variant doesn't support. Pass at least one of color / opacity; passing neither is an accepted no-op.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| layerId | string | yes | — |
| color | string | no | CSS color string: hex (#RRGGBB), rgb/rgba, or named color. |
| opacity | number | no | 0 (transparent) to 1 (opaque). |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Override the workspace camera. Latest set_camera op wins during replay. Two modes: fitBounds with a [w,s,e,n] bbox (plus optional padding/animateMs), or flyTo with [lng,lat] center + zoom (plus optional pitch/bearing/animateMs). Use for "zoom to Japan", "center on Paris at z=10", or finishing a drill-down after filter_layer. Equivalent to the camera move mutate_map would emit, but skips the NL
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| camera | yes | — | |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Override the current time-range filter. Latest set_time op wins during replay. Use for "filter to 2020-2024" or "show only the last 7 days" intents. Not yet consumed by the renderer — the UI drives the slider directly — but the value is captured in the ops log and queryable via get_state.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| field | string | yes | Feature property carrying the time value (e.g. "date", "year", "timestamp"). |
| rangeStart | number | yes | Inclusive lower bound of the visible window. |
| rangeEnd | number | yes | Inclusive upper bound of the visible window. |
| format | string | no | How rangeStart/rangeEnd encode time. Default: unix_ms at render time. |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Label the current workspace state with a user-supplied name. The label is mirrored into workspace.meta.tags so UIs can render a named-revision history. Tagging the same label twice is idempotent — no error, no duplicate entry.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| name | string | yes | Checkpoint label, e.g. "before EV layer added" or "v1.0". |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Add a user-placed label at a specific coordinate. Annotations are independent of layers and live in their own id namespace. Strict: the id must not already be in use by another CURRENTLY-placed annotation (removed ids can be recycled).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| id | string | yes | Stable id for this annotation — caller-supplied. |
| coords | array | yes | [lng, lat] in WGS84. |
| label | string | no | Optional text rendered at the point. |
| color | string | no | Optional CSS color for the marker + label. |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Drop a previously-placed annotation by id. Strict: removing an already-removed or never-placed id fails. After removal, the id CAN be re-used by a later add_annotation (unlike layer ids, which are tombstoned for the session).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| annotationId | string | yes | — |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Return the current workspace document (ops log + cursor + meta) plus the materialized mapPlan and layerFilters, in a shape suitable for save-to-file / share-by-URL / inspection. Pure read — no mutation, no credit charge. Use this when you want the full raw state for serialization; use get_state when you want the compact envelope for display.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Export a single layer's features as a downloadable file. Returns a URL with Content-Disposition: attachment so the user's browser downloads it. CSV drops geometry beyond a (lng, lat) centroid — for full polygon/line geometry, use format: "geojson". The URL is an unguessable capability link that does NOT expire — treat it as shareable-forever, not temporary. Required: map_id, layer_id, format, rati
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| layer_id | string | yes | — |
| format | string | yes | — |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Returns a deep-link URL that opens the map in the user's browser and automatically triggers a PNG download. The user clicks the link, the browser renders the map at full resolution with the legend composited (if legend: true), and the file downloads. There is no server-side rendering; the user's browser is the renderer. Required: map_id, rationale. Optional: format (png default), legend (true defa
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| format | string | no | — |
| legend | boolean | no | — |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Rewind the workspace cursor by one, re-materializing the state as it was before the last mutation. Does NOT delete any ops — redo will fast-forward. Calling undo at the workspace genesis (cursor === 0, only the CreateWorkspace op is in scope) is a no-op that surfaces an error rather than silently doing nothing. GATED: pass confirmed:true to proceed; otherwise a needs_confirmation envelope is retur
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
| confirmed | boolean | no | Set to true to confirm this sensitive action. If omitted or false, the call returns a needs_confirmation envelope. Autonomous undo without user intent is a footgun — an agent that decides to "fix" som |
Advance the workspace cursor by one toward the tail of the ops log, replaying the next op that was previously undone. Calling redo when the cursor is already at the tail (no undone ops to fast-forward) fails rather than silently no-op. Note: any new op applied via apply-op / mutate-map after an undo truncates the redo tail (standard edit-stack semantics).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | yes | — |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
Tell the ShowMeOnMap team your agent hit something it could not accomplish — an unsupported intent, a missing tool, an unclear schema, an op that failed in a confusing way. Use this when build_map / mutate_map / a direct-op tool returns something you cannot recover from, OR when you would have wanted a different tool to exist. Records the report to a server-side log; does not unblock the current s
| Parameter | Type | Required | Notes |
|---|---|---|---|
| map_id | string | no | Optional. The map_id you were working on, if any. |
| what_i_was_trying | string | yes | High-level intent in one or two sentences. e.g. "merge two filtered choropleths into a fused bivariate map". |
| what_i_tried | string | yes | Which tools / inputs you attempted, in order. Be specific — tool name + key arg shape is ideal. |
| where_i_got_stuck | string | yes | The specific failure: what came back, what was missing, why you could not proceed. |
| suggested_capability | string | no | Optional. A new tool, op, or schema field that would have unblocked you. |
| rationale | string | yes | Short audit-log label (≤300 chars) stating the user-facing goal this call serves, e.g. "add wildfire layer for the user's California query". Required on every call. Stored in the operations log so map |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install ShowMeOnMap or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 0.1.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish ShowMeOnMap can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.