MapNetwork MCP Server
This server generates styled map images, computes routes, and allows re-downloading maps with different settings. You can:
Generate map images (PNG/SVG) from a place name, coordinates, or a list of markers; customize with radius, bounding box, and 11 color themes
Compute walking or driving routes between two locations and overlay them on maps
Place markers/pins on maps
Re-download previously generated maps instantly in a different theme or format without regenerating data
Customize canvas size and edge weight
Open maps in the MapNetwork web editor for further editing
Save maps to the Downloads folder (or get links for remote use)
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MapNetwork MCP ServerGenerate a map around Shibuya Station"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mapnetwork-mcp
MCP server for MapNetwork — generate styled map images (PNG / SVG) for any location on Earth, directly from Claude or any MCP-compatible AI assistant.
Features
Generate maps from a place name, a list of markers, or a walking/driving route
11 color themes (white, darkBlue, darkGreen, popArt, lightBlue, lightGreen, beige, magenta, gray, black, brown)
PNG or SVG output, saved to your Downloads folder
Slow-to-generate maps are handled automatically —
generate_*tools poll internally, anddownload_mapcan pick up a job later if neededRe-download a previously generated map in a different theme or format without regenerating
Open any generated map in the MapNetwork web editor for manual customization
Related MCP server: geolabel-mcp
Example Usage
Prompt: "Generate a map around the 21st Century Museum of Contemporary Art, Kanazawa."
Here is the map it generated:
Prompt: "Redownload that map in a few different color themes."
The same map, redownloaded in different color themes:
Dark Green Style | Light Green Style | Pop Art Style | Black Style |
Installation
Claude Desktop
Using the .mcpb extension file (recommended)
The easiest way to install is via the .mcpb extension file available on the Releases page.
Download the latest
.mcpbfile from the Releases page.Open Claude Desktop and go to Settings → Extensions.
Drag the downloaded
.mcpbfile onto the Extensions panel to install.
Manual configuration
Add the following to your claude_desktop_config.json:
{
"mcpServers": {
"mapnetwork": {
"command": "uvx",
"args": ["mapnetwork-mcp"],
"alwaysAllow": ["generate_map", "generate_markers_map", "generate_route_map", "download_map", "redownload_map"]
}
}
}If you use pip instead of uvx:
pip install mapnetwork-mcp{
"mcpServers": {
"mapnetwork": {
"command": "mapnetwork-mcp"
}
}
}Remote MCP Server
You can also use MapNetwork through MCP without installing anything, via the remote MCP server:
https://mapnetwork.app/mcpIn Claude, go to Settings → Connectors → Add custom connector and register the URL above.
The key difference from this local server is how you receive the generated map image. Since mapnetwork-mcp runs on your PC, it can save the generated image directly to your Downloads folder. The remote server can't do this — most AI assistants are unable to properly display or save tool-result images within the chat — so instead of image data, it returns a text response with a download link and a link to edit the map at mapnetwork.app. Open the links in a browser to view or save the image, or to edit the map.
Tools
Tool | Description |
| Generate a styled map image centered on a single place and save it to Downloads |
| Generate a map with multiple pinned locations |
| Compute a walking or driving route between two places and generate a map with it overlaid |
| Check a pending |
| Re-download a previously generated map in a different color theme or format — instant, no regeneration |
Example prompts
Japanese
"東京タワー周辺の地図を作って"
"上野駅が最寄りの美術館・博物館を地図にして"
"赤坂駅から赤坂氷川神社までの徒歩ルートを地図にして"
"その地図を darkBlue テーマでSVG画像で出し直して"
"生成した地図の編集用リンクをください"
English
"Generate a map around Tokyo Tower"
"Show a map of the museums near Ueno Station"
"Show a walking route from Akasaka Station to Akasaka Hikawa Shrine on a map"
"Redownload that map as an SVG in the darkBlue theme"
"Give me a link to edit the generated map"
Links
Web UI: https://mapnetwork.app
Web UI Manual: https://mapnetwork.app/manual
API docs: https://mapnetwork.app/openapi.json
mcp-name: io.github.toruproject/mapnetwork-mcp
Available Tools
5 toolsdownload_mapAInspect
Check a pending generate_* job and download it once ready. If it's already done, returns the image immediately; otherwise waits internally (checking periodically) before returning — no need to wait between calls yourself. If still not ready when it returns, call it again with the same dataKey.
Example: download_map(data_key="20260618aBcDeFgHiJ")
| Name | Required | Description | Default |
|---|---|---|---|
| data_key | Yes | The dataKey returned by a generate_* call that reported it was still in progress. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full behavioral burden and does this well: it explains that the tool waits internally, checks periodically, returns immediately if ready, and may return before readiness, requiring a subsequent call. This is valuable, non-obvious behavior that an agent must know to use the tool correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: main purpose first, then conditional behavior, then retry instruction, then a concrete example. Every sentence earns its place without unnecessary detail or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema and no annotations, the description covers the essential invocation details: what to pass, what to expect, and how to handle retries. It doesn't describe response formats or error conditions, but those are not critical given the polling semantics and the presence of only one parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents data_key at 100% coverage, so the baseline is 3. The description adds meaningful value by providing a concrete example and emphasizing that the same dataKey must be reused on retry, which clarifies parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Check a pending generate_* job and download it once ready.' It specifies the resource (map) and the workflow stage (post-generation), distinguishing it from the generate_* siblings by focusing on downloading/checking rather than creating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage context: use it after a generate_* call returns a dataKey, and if the job isn't ready, call it again with the same dataKey. It doesn't explicitly contrast with redownload_map, so no direct exclusions or alternative routing is provided, but the intended workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_mapAInspect
Generate a styled map centered on a single place.
Example: generate_map(place="Tokyo Station")
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional: display name for the map. If omitted, the server derives one automatically from place. | |
| place | Yes | Place name to center the map on (geocoded server-side). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'styled map' and gives no details on output format, persistence, side effects, or return behavior. The schema notes server-side geocoding, but the description adds little behavioral context beyond the basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One purposeful sentence plus a concrete example, with no filler. The key constraint ('centered on a single place') is front-loaded before the example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, with two fully documented parameters and a good example, so the basics are covered. However, with no output schema, the description should clarify what a successful call returns or how the map is delivered, and that is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema documents both parameters at 100% coverage, including the optional display name and server-side geocoding. The description's example showing place='Tokyo Station' is useful, but it does not add meaningful parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Generate') on a specific resource ('a styled map') with a clear scoping constraint ('centered on a single place'). This distinguishes it from sibling tools like generate_markers_map and generate_route_map, which imply multi-point or route maps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'centered on a single place' and the example imply when to use this tool, but there is no explicit guidance about when to prefer a sibling tool. The routing to alternatives is left to inference rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_markers_mapBInspect
Generate a map with multiple pinned locations.
Example: generate_markers_map(markers=[{"label": "Tokyo Tower", "link": "https://www.tokyotower.co.jp/"}, {"label": "Zojoji Temple"}])
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Optional: display name for the map. If omitted, the server derives one automatically from place/markers. | |
| place | No | Optional: place to center the map on. If omitted, the center is computed automatically from the markers. | |
| markers | Yes | Locations to pin on the map. At least one required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden, but it only states what the tool does ('generate a map') and not how it behaves: geocoding labels, auto-completing missing links via Places API, side effects, or output format. The example hints at optional link behavior, but behavioral traits are largely undisclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One leading purpose sentence followed by a compact example; no filler or repeated schema text. It is front-loaded and every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-param tool with full schema coverage, the description plus example is nearly sufficient to invoke, but it lacks any selection guidance against siblings and any behavioral detail such as geocoding/auto-completion. The absence of annotations and output schema raises the burden, leaving moderate gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds a concrete invocation example showing the markers array with label and optional link, including a marker without a link. This demonstrates the expected JSON structure and mixed-optionality beyond the schema's formal definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Generate a map') and the distinguishing feature ('multiple pinned locations'), so an agent can tell it apart from route/generic map tools. It does not explicitly name sibling tools or exclusion criteria, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'multiple pinned locations' implies this is for multi-point map requests, but there is no explicit statement of when to choose it over generate_map, generate_route_map, or the download variants. No conditions, prerequisites, or alternatives are named, so the agent must infer usage from the name and single line.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_route_mapAInspect
Compute a walking/driving route between two places and generate a map with it overlaid. Both endpoints are pinned on the map automatically — do not also call generate_markers_map for them.
Example: generate_route_map(from="Tokyo Station", to="Tokyo Tower", mode="walking")
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Route end. Place name to geocode. | |
| from | Yes | Route start. Place name to geocode. | |
| mode | No | Default 'walking'. | walking |
| name | No | Optional: display name for the map. If omitted, the server derives one automatically from place/route. | |
| place | No | Optional: place to center the map on. If omitted, the center is computed automatically from the route. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It honestly states that endpoints are pinned automatically and that calling generate_markers_map would be redundant. Still, it omits what the tool returns (e.g., a file path, image, or download URL) and possible side effects such as creating, overwriting, or storing a map.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences plus a compact example. The core purpose is front-loaded, the anti-redundancy warning is useful, and the example is illustrative without bloat. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters, no output schema, and no annotations, the description covers the key usage context: what it computes, how endpoints behave, and the warning about the sibling tool. It lacks return-format or error-behavior details, but the example helps fill practical gaps. Minor incompleteness, so 4 rather than 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add meaning beyond the schema; the example demonstrates the from/to/mode combination but does not clarify edge cases, default behaviors, or how the optional name/place interact with route generation. Thus it meets the baseline but doesn't exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb+resource: compute a walking/driving route and generate a map with it overlaid. It also distinguishes itself from generate_markers_map by explicitly noting endpoints are pinned automatically, so the agent knows not to use that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on when to use this tool and notably includes a negative condition: 'do not also call generate_markers_map for them.' The example further clarifies invocation. However, it doesn't explicitly contrast with generate_map or explain when the generic map tool would be preferable, leaving some selection ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redownload_mapAInspect
Re-download a prior map in a different color theme or format — instant, no regeneration.
Example: redownload_map(data_key="20260618aBcDeFgHiJ", color_set="black")
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 'png' (raster) or 'svg' (vector). | png |
| data_key | Yes | The dataKey returned by a previous generate_* call. | |
| color_set | No | Color theme — see server instructions for the list. Only set when explicitly requested. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the operation is 'instant, no regeneration', which is useful behavioral context, but it does not mention return format, failure behavior for invalid data_key, or any side effects. Some value is added, but significant behavioral gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence plus an example, with no fluff. The key action and differentiator are front-loaded, and the example earns its place by demonstrating real usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with three parameters and no output schema, the description covers purpose, behavior, and parameter usage adequately. It implies the prerequisite (a prior generate_* call's data_key) through the example and schema. Missing an explicit statement of what the tool returns, but this is minor given the straightforward 'download' intent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by linking the two optional parameters to the core purpose ('color theme or format') and providing a concrete example with data_key and color_set, which clarifies how they are used together.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb ('Re-download') and resource ('a prior map'), and specifies exactly what varies: 'color theme or format'. This clearly differentiates it from the sibling generate_* tools, which create new maps, and check_map_status, which inspects progress.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'prior map' and the example using a data_key from a previous generate_* call make it clear this is for already-generated maps, not new generation. The 'no regeneration' note implies a lighter-weight alternative to regenerating. However, it does not explicitly say 'use this instead of generate_* when you have a data_key', leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v6.0.0- Removed
check_map_status - Added
download_map - Changed
generate_map1 field changed- added
Input schema / properties / nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional: display name for the map. If omitted, the server derives one automatically from place.", + "title": "Name" +}
- Changed
generate_markers_map1 field changed- added
Input schema / properties / nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional: display name for the map. If omitted, the server derives one automatically from place/markers.", + "title": "Name" +}
- Changed
generate_route_map1 field changed- added
Input schema / properties / nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional: display name for the map. If omitted, the server derives one automatically from place/route.", + "title": "Name" +}
6 tool updates
v5.0.0- Changed
check_map_status5 fields changed- removed
Input schema / properties / canvas_heightRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Canvas Height" -} - removed
Input schema / properties / canvas_widthRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Canvas Width" -} - removed
Input schema / properties / color_setRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Color Set" -} - added
Input schema / properties / data_key / descriptionAdded value: +"The dataKey returned by a generate_* call that reported it was still in progress." - removed
Input schema / properties / formatRemoved value: -{ - "default": "png", - "title": "Format", - "type": "string" -}
- Removed
compute_route - Changed
generate_map20 fields changed- removed
Input schema / $defsRemoved value: -{ - "Location": { - "properties": { - "lat": { - "title": "Lat", - "type": "number" - }, - "lng": { - "title": "Lng", - "type": "number" - } - }, - "required": [ - "lat", - "lng" - ], - "title": "Location", - "type": "object" - }, - "MapConfig": { - "properties": { - "patchworked": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Auto-color closed areas and building shapes on the drawing. Default true.", - "title": "Patchworked" - }, - "withBuilding": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Draw building shapes. Default true when building data is available.", - "title": "Withbuilding" - }, - "withSeaRibbon": { - "anyOf": [ - { - "type": "boolean" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Draw a band representing the sea along the coastline. Default true when coastline data is available.", - "title": "Withsearibbon" - } - }, - "title": "MapConfig", - "type": "object" - }, - "Marker": { - "properties": { - "label": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Place name for geocoding and/or display.", - "title": "Label" - }, - "location": { - "anyOf": [ - { - "$ref": "#/$defs/Location" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Explicit coordinates. If provided, geocoding of 'label' is skipped." - } - }, - "title": "Marker", - "type": "object" - }, - "RouteEndpoint": { - "properties": { - "label": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Place name for geocoding and/or display.", - "title": "Label" - }, - "location": { - "anyOf": [ - { - "$ref": "#/$defs/Location" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Explicit coordinates." - } - }, - "title": "RouteEndpoint", - "type": "object" - }, - "RouteInput": { - "description": "generate_mapのrouteパラメータ。compute_routeの戻り値をそのまま渡せる形にする。", - "properties": { - "color": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Optional line color as a CSS hex color (e.g. '#FF4500').", - "title": "Color" - }, - "coords": { - "anyOf": [ - { - "items": { - "items": { - "type": "number" - }, - "type": "array" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Ordered list of [lat, lng] pairs along the route.", - "title": "Coords" - }, - "from": { - "anyOf": [ - { - "$ref": "#/$defs/RouteEndpoint" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Route start point." - }, - "mode": { - "anyOf": [ - { - "enum": [ - "walking", - "driving" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Mode" - }, - "to": { - "anyOf": [ - { - "$ref": "#/$defs/RouteEndpoint" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Route end point." - } - }, - "title": "RouteInput", - "type": "object" - } -} - removed
Input schema / properties / canvas_heightRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Canvas Height" -} - removed
Input schema / properties / canvas_widthRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Canvas Width" -} - removed
Input schema / properties / color_setRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Color Set" -} - removed
Input schema / properties / configRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/MapConfig" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Input schema / properties / formatRemoved value: -{ - "default": "png", - "title": "Format", - "type": "string" -} - removed
Input schema / properties / latRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Lat" -} - removed
Input schema / properties / layersRemoved value: -{ - "anyOf": [ - { - "enum": [ - "default", - "road_and_railway", - "only_driving_road", - "fully_detailed" - ], - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Layers" -} - removed
Input schema / properties / lngRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Lng" -} - removed
Input schema / properties / markersRemoved value: -{ - "anyOf": [ - { - "items": { - "$ref": "#/$defs/Marker" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Markers" -} - removed
Input schema / properties / nameRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Name" -} - removed
Input schema / properties / place / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - removed
Input schema / properties / place / defaultRemoved value: -null - added
Input schema / properties / place / descriptionAdded value: +"Place name to center the map on (geocoded server-side)." - added
Input schema / properties / place / typeAdded value: +"string" - removed
Input schema / properties / radiusRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Radius" -} - removed
Input schema / properties / routeRemoved value: -{ - "anyOf": [ - { - "$ref": "#/$defs/RouteInput" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Input schema / properties / size_ewRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Size Ew" -} - removed
Input schema / properties / size_nsRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Size Ns" -} - added
Input schema / requiredAdded value: +[ + "place" +]
- Added
generate_markers_map - Added
generate_route_map - Changed
redownload_map7 fields changed- removed
Input schema / properties / canvas_heightRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Canvas Height" -} - removed
Input schema / properties / canvas_widthRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Canvas Width" -} - added
Input schema / properties / color_set / descriptionAdded value: +"Color theme — see server instructions for the list. Only set when explicitly requested." - added
Input schema / properties / data_key / descriptionAdded value: +"The dataKey returned by a previous generate_* call." - removed
Input schema / properties / edge_weightRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Edge Weight" -} - added
Input schema / properties / format / descriptionAdded value: +"'png' (raster) or 'svg' (vector)." - added
Input schema / properties / format / enumAdded value: +[ + "png", + "svg" +]
3 tool updates
v1.2.3- Added
check_map_status - Changed
compute_route9 fields changed- added
Input schema / $defsAdded value: +{ + "Location": { + "properties": { + "lat": { + "title": "Lat", + "type": "number" + }, + "lng": { + "title": "Lng", + "type": "number" + } + }, + "required": [ + "lat", + "lng" + ], + "title": "Location", + "type": "object" + }, + "RouteEndpoint": { + "properties": { + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Place name for geocoding and/or display.", + "title": "Label" + }, + "location": { + "anyOf": [ + { + "$ref": "#/$defs/Location" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Explicit coordinates." + } + }, + "title": "RouteEndpoint", + "type": "object" + } +} - added
Input schema / properties / from_location / $refAdded value: +"#/$defs/RouteEndpoint" - removed
Input schema / properties / from_location / additionalPropertiesRemoved value: -true - removed
Input schema / properties / from_location / titleRemoved value: -"From Location" - removed
Input schema / properties / from_location / typeRemoved value: -"object" - added
Input schema / properties / to_location / $refAdded value: +"#/$defs/RouteEndpoint" - removed
Input schema / properties / to_location / additionalPropertiesRemoved value: -true - removed
Input schema / properties / to_location / titleRemoved value: -"To Location" - removed
Input schema / properties / to_location / typeRemoved value: -"object"
- Changed
generate_map10 fields changed- added
Input schema / $defsAdded value: +{ + "Location": { + "properties": { + "lat": { + "title": "Lat", + "type": "number" + }, + "lng": { + "title": "Lng", + "type": "number" + } + }, + "required": [ + "lat", + "lng" + ], + "title": "Location", + "type": "object" + }, + "MapConfig": { + "properties": { + "patchworked": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Auto-color closed areas and building shapes on the drawing. Default true.", + "title": "Patchworked" + }, + "withBuilding": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Draw building shapes. Default true when building data is available.", + "title": "Withbuilding" + }, + "withSeaRibbon": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Draw a band representing the sea along the coastline. Default true when coastline data is available.", + "title": "Withsearibbon" + } + }, + "title": "MapConfig", + "type": "object" + }, + "Marker": { + "properties": { + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Place name for geocoding and/or display.", + "title": "Label" + }, + "location": { + "anyOf": [ + { + "$ref": "#/$defs/Location" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Explicit coordinates. If provided, geocoding of 'label' is skipped." + } + }, + "title": "Marker", + "type": "object" + }, + "RouteEndpoint": { + "properties": { + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Place name for geocoding and/or display.", + "title": "Label" + }, + "location": { + "anyOf": [ + { + "$ref": "#/$defs/Location" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Explicit coordinates." + } + }, + "title": "RouteEndpoint", + "type": "object" + }, + "RouteInput": { + "description": "generate_mapのrouteパラメータ。compute_routeの戻り値をそのまま渡せる形にする。", + "properties": { + "color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional line color as a CSS hex color (e.g. '#FF4500').", + "title": "Color" + }, + "coords": { + "anyOf": [ + { + "items": { + "items": { + "type": "number" + }, + "type": "array" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Ordered list of [lat, lng] pairs along the route.", + "title": "Coords" + }, + "from": { + "anyOf": [ + { + "$ref": "#/$defs/RouteEndpoint" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Route start point." + }, + "mode": { + "anyOf": [ + { + "enum": [ + "walking", + "driving" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Mode" + }, + "to": { + "anyOf": [ + { + "$ref": "#/$defs/RouteEndpoint" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Route end point." + } + }, + "title": "RouteInput", + "type": "object" + } +} - added
Input schema / properties / configAdded value: +{ + "anyOf": [ + { + "$ref": "#/$defs/MapConfig" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / edge_weightRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Edge Weight" -} - changed
Input schema / properties / layers / anyOfPrevious value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "default", + "road_and_railway", + "only_driving_road", + "fully_detailed" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / markers / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "$ref": "#/$defs/Marker" + }, + "type": "array" + }, + { + "type": "null" + } +] - removed
Input schema / properties / place_iconRemoved value: -{ - "anyOf": [ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Place Icon" -} - removed
Input schema / properties / poi_typesRemoved value: -{ - "anyOf": [ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Poi Types" -} - changed
Input schema / properties / route / anyOfPrevious value: -[ - { - "additionalProperties": true, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "$ref": "#/$defs/RouteInput" + }, + { + "type": "null" + } +] - removed
Input schema / properties / route / titleRemoved value: -"Route" - removed
Input schema / properties / titleRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "title": "Title" -}
3 tool updates
v0.1.1- First observed
compute_route - First observed
generate_map - First observed
redownload_map
TDQS
Each tool targets a clearly distinct operation: single-place maps, multi-marker maps, route maps, downloading a pending result, and re-downloading with different styling. The overlap between generate_map and generate_markers_map is minimal and the descriptions make the boundary clear.
All tool names follow a consistent verb_noun pattern using snake_case: generate_map, generate_markers_map, generate_route_map, download_map, redownload_map. The verb prefix clearly communicates the action while the noun identifies the target.
Five tools is well-scoped for a map generation server. Each tool covers a necessary part of the workflow—generating different map types, fetching results, and re-styling prior outputs—without redundancy or bloat.
The tool surface covers the full expected lifecycle: generate maps in three distinct forms, retrieve the async result, and re-download existing maps in alternate themes or formats. There are no obvious dead ends or missing core operations for the declared purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Use AI models for chat, image, and video generation from Claude Code and other MCP hosts.
Live Google Maps business search, review, and photo data for AI agents over MCP.
Geoapify MCP — wraps the Geoapify Location Platform (geoapify.com)
AI access to Mapbox docs, API references, style specs, and guides. No token required.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceConverts addresses to GPS coordinates and creates map visualizations using the Geoapify API, allowing Claude users to generate GeoJSON data and map images from location lists.4-
- AlicenseAqualityDmaintenanceTurn GPS coordinates into place name, category, and live opening hours via OpenStreetMap. Works in Claude, Hermes Agent, OpenClaw, and any MCP client.11MIT
- AlicenseAqualityDmaintenanceA Model Context Protocol (MCP) server that wraps the Amap (高德地图) Web Service APIs, giving AI assistants like Claude Code 9 map tools: geocoding, route planning (driving/transit/walking/cycling), POI search, nearby search, distance measurement, and IP location.1237MIT
- FlicenseNot gradedqualityCmaintenanceGives Claude and other MCP clients access to Google Maps Platform: geocoding, place search, place details, directions, distance matrix, and elevation.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/toruproject/mapnetwork-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server