Skip to main content
Glama
toruproject

MapNetwork MCP Server

by toruproject

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, and download_map can pick up a job later if needed

  • Re-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

The easiest way to install is via the .mcpb extension file available on the Releases page.

  1. Download the latest .mcpb file from the Releases page.

  2. Open Claude Desktop and go to SettingsExtensions.

  3. Drag the downloaded .mcpb file 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/mcp

In Claude, go to SettingsConnectorsAdd 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_map

Generate a styled map image centered on a single place and save it to Downloads

generate_markers_map

Generate a map with multiple pinned locations

generate_route_map

Compute a walking or driving route between two places and generate a map with it overlaid

download_map

Check a pending generate_* job and download it once ready

redownload_map

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"

mcp-name: io.github.toruproject/mapnetwork-mcp

Available Tools

5 tools
download_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")

ParametersJSON Schema
NameRequiredDescriptionDefault
data_keyYesThe dataKey returned by a generate_* call that reported it was still in progress.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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")

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional: display name for the map. If omitted, the server derives one automatically from place.
placeYesPlace name to center the map on (geocoded server-side).

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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"}])

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional: display name for the map. If omitted, the server derives one automatically from place/markers.
placeNoOptional: place to center the map on. If omitted, the center is computed automatically from the markers.
markersYesLocations to pin on the map. At least one required.

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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")

ParametersJSON Schema
NameRequiredDescriptionDefault
toYesRoute end. Place name to geocode.
fromYesRoute start. Place name to geocode.
modeNoDefault 'walking'.walking
nameNoOptional: display name for the map. If omitted, the server derives one automatically from place/route.
placeNoOptional: place to center the map on. If omitted, the center is computed automatically from the route.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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")

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo'png' (raster) or 'svg' (vector).png
data_keyYesThe dataKey returned by a previous generate_* call.
color_setNoColor theme — see server instructions for the list. Only set when explicitly requested.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 5 tool updatesv6.0.0
    • Removedcheck_map_status
    • Addeddownload_map
    • Changedgenerate_map1 field changed
      • addedInput schema / properties / name
        Added 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"
        +}
    • Changedgenerate_markers_map1 field changed
      • addedInput schema / properties / name
        Added 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"
        +}
    • Changedgenerate_route_map1 field changed
      • addedInput schema / properties / name
        Added 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"
        +}
  2. 6 tool updatesv5.0.0
    • Changedcheck_map_status5 fields changed
      • removedInput schema / properties / canvas_height
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Canvas Height"
        -}
      • removedInput schema / properties / canvas_width
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Canvas Width"
        -}
      • removedInput schema / properties / color_set
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Color Set"
        -}
      • addedInput schema / properties / data_key / description
        Added value: +"The dataKey returned by a generate_* call that reported it was still in progress."
      • removedInput schema / properties / format
        Removed value: -{
        -  "default": "png",
        -  "title": "Format",
        -  "type": "string"
        -}
    • Removedcompute_route
    • Changedgenerate_map20 fields changed
      • removedInput schema / $defs
        Removed 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"
        -  }
        -}
      • removedInput schema / properties / canvas_height
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Canvas Height"
        -}
      • removedInput schema / properties / canvas_width
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Canvas Width"
        -}
      • removedInput schema / properties / color_set
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Color Set"
        -}
      • removedInput schema / properties / config
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/$defs/MapConfig"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
      • removedInput schema / properties / format
        Removed value: -{
        -  "default": "png",
        -  "title": "Format",
        -  "type": "string"
        -}
      • removedInput schema / properties / lat
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Lat"
        -}
      • removedInput schema / properties / layers
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "enum": [
        -        "default",
        -        "road_and_railway",
        -        "only_driving_road",
        -        "fully_detailed"
        -      ],
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Layers"
        -}
      • removedInput schema / properties / lng
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Lng"
        -}
      • removedInput schema / properties / markers
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "$ref": "#/$defs/Marker"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Markers"
        -}
      • removedInput schema / properties / name
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Name"
        -}
      • removedInput schema / properties / place / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • removedInput schema / properties / place / default
        Removed value: -null
      • addedInput schema / properties / place / description
        Added value: +"Place name to center the map on (geocoded server-side)."
      • addedInput schema / properties / place / type
        Added value: +"string"
      • removedInput schema / properties / radius
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Radius"
        -}
      • removedInput schema / properties / route
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "$ref": "#/$defs/RouteInput"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
      • removedInput schema / properties / size_ew
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Size Ew"
        -}
      • removedInput schema / properties / size_ns
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "number"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Size Ns"
        -}
      • addedInput schema / required
        Added value: +[
        +  "place"
        +]
    • Addedgenerate_markers_map
    • Addedgenerate_route_map
    • Changedredownload_map7 fields changed
      • removedInput schema / properties / canvas_height
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Canvas Height"
        -}
      • removedInput schema / properties / canvas_width
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Canvas Width"
        -}
      • addedInput schema / properties / color_set / description
        Added value: +"Color theme — see server instructions for the list. Only set when explicitly requested."
      • addedInput schema / properties / data_key / description
        Added value: +"The dataKey returned by a previous generate_* call."
      • removedInput schema / properties / edge_weight
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Edge Weight"
        -}
      • addedInput schema / properties / format / description
        Added value: +"'png' (raster) or 'svg' (vector)."
      • addedInput schema / properties / format / enum
        Added value: +[
        +  "png",
        +  "svg"
        +]
  3. 3 tool updatesv1.2.3
    • Addedcheck_map_status
    • Changedcompute_route9 fields changed
      • addedInput schema / $defs
        Added 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"
        +  }
        +}
      • addedInput schema / properties / from_location / $ref
        Added value: +"#/$defs/RouteEndpoint"
      • removedInput schema / properties / from_location / additionalProperties
        Removed value: -true
      • removedInput schema / properties / from_location / title
        Removed value: -"From Location"
      • removedInput schema / properties / from_location / type
        Removed value: -"object"
      • addedInput schema / properties / to_location / $ref
        Added value: +"#/$defs/RouteEndpoint"
      • removedInput schema / properties / to_location / additionalProperties
        Removed value: -true
      • removedInput schema / properties / to_location / title
        Removed value: -"To Location"
      • removedInput schema / properties / to_location / type
        Removed value: -"object"
    • Changedgenerate_map10 fields changed
      • addedInput schema / $defs
        Added 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"
        +  }
        +}
      • addedInput schema / properties / config
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/MapConfig"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • removedInput schema / properties / edge_weight
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "integer"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Edge Weight"
        -}
      • changedInput schema / properties / layers / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "type": "string"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "default",
        +      "road_and_railway",
        +      "only_driving_road",
        +      "fully_detailed"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedInput schema / properties / markers / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "$ref": "#/$defs/Marker"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / place_icon
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "additionalProperties": true,
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Place Icon"
        -}
      • removedInput schema / properties / poi_types
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "items": {
        -        "type": "string"
        -      },
        -      "type": "array"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Poi Types"
        -}
      • changedInput schema / properties / route / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/RouteInput"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / route / title
        Removed value: -"Route"
      • removedInput schema / properties / title
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "title": "Title"
        -}
  4. 3 tool updatesv0.1.1
    • First observedcompute_route
    • First observedgenerate_map
    • First observedredownload_map

TDQS

A4.1/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityActive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Turn GPS coordinates into place name, category, and live opening hours via OpenStreetMap. Works in Claude, Hermes Agent, OpenClaw, and any MCP client.
    1
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A 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.
    12
    37
    MIT

Latest Blog Posts

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