Skip to main content

Mapy.com MCP Server (unofficial)

🇬🇧 English · 🇨🇿 Čeština

CI PyPI Python License: MIT

An MCP server for the Mapy.com REST API — geocoding, route planning, distance matrices, elevation, route elevation profiles, static maps, panoramas and time zones.

Unofficial project. Not a product or service of Seznam.cz a.s. Map data © Seznam.cz a.s. and others.

The design write-up and the API pitfalls it works around are in DESIGN.md.

Installation

You need an API key from developer.mapy.com. The key must have the services you intend to use enabled in the portal — otherwise the API returns 403 even with a valid key.

Claude Code

claude mcp add mapy --env MAPY_API_KEY=your_key -- uvx mapy-cz-mcp-server-unofficial

Claude Desktop

{
  "mcpServers": {
    "mapy": {
      "command": "uvx",
      "args": ["mapy-cz-mcp-server-unofficial"],
      "env": { "MAPY_API_KEY": "your_key" }
    }
  }
}

Tools

Tool What it does Credits
mapy_geocode Find a place by name or address (mode="suggest" for autocomplete) 4
mapy_reverse_geocode Resolve an address and regional structure for coordinates 4
mapy_route Plan a route between places, optionally via waypoints 4 + geocoding
mapy_route_matrix Distance/time matrix between multiple points (max 100 cells) ~0.4 / cell
mapy_elevation Elevation for up to 256 points 4
mapy_elevation_profile Route elevation profile: ascent, descent, sparkline 8+
mapy_static_map A map image with markers and shapes — the model can see it 4
mapy_panorama A panoramic image from a place 4
mapy_timezone Time zone, local time and offset 1

Every coordinate-taking tool accepts either a place name or coordinates: start="Prague" works the same as start={"lat": 50.087, "lon": 14.421}.

Resources

URI Contents
mapy://attribution Required attribution text and logo-display rules
mapy://mapsets Map sets for static maps and for tiles
mapy://timezones List of IANA time zones
mapy://tilejson/{mapset} TileJSON for a client rendering its own map
mapy://usage Credits spent in this session

Prompts

naplanuj-vylet (plan a trip), porovnej-trasy (compare routes), kde-to-je (where is it).

Configuration

Variable Default Meaning
MAPY_API_KEY — API key (required for calls, not for starting the server)
MAPY_DEFAULT_LANG cs Response language
MAPY_CREDIT_BUDGET — Per-session credit ceiling; tools refuse to call once exceeded
MAPY_BASE_URL https://api.mapy.com API base URL
MAPY_TIMEOUT 20.0 Request timeout in seconds
MAPY_IMAGE_DIR temp dir Where to save images for output="file"

The key is sent only in the X-Mapy-Api-Key header, never in the URL — so it stays out of logs and history.

Attribution

Using data from the API requires displaying attribution. Static maps and panoramas have attribution burned into the image. For geocoding and routing your application must display it — every non-image response therefore carries an attribution field, and the full text is in the mapy://attribution resource.

Development

uv sync --extra dev
uv run pytest                          # tests run against fixtures, no credits
uv run ruff check src tests scripts
uv run ruff format src tests scripts
uv run python -m mapy_mcp              # run on stdio

Tests run against stored fixtures via respx, so they need no API key and spend no credits.

See CONTRIBUTING.md for the full contributor guide.

API drift watcher

The Mapy.com REST API specs are public, so there's no reason to wait for something to break in production:

uv run python scripts/api_drift.py            # compare against api-fingerprint.json
uv run python scripts/api_drift.py --update   # refresh the fingerprint after adapting to changes

api-fingerprint.json stores a fingerprint of the API surface — paths, parameters, their types, enumerations and limits, plus the auth scheme. It is not a copy of the specs but a derived description of the interface, so a diff shows exactly what this server cares about.

The Mapy.com REST API watcher workflow runs every Monday. When the interface changes the job fails and opens an issue with the diff (or comments on an already-open one).

Releasing

Publishing goes through PyPI Trusted Publishing, so there is no API token in the repository.

One-time setup:

  1. On PyPI, register a pending publisher for mapy-cz-mcp-server-unofficial: repository xxBedy/mapy-cz-mcp-server-unofficial, workflow release.yml, environment pypi.
  2. On GitHub, create the pypi environment (Settings → Environments).

Each release:

# 1. bump version in pyproject.toml
# 2. tag it — the tag must match the version, or the workflow fails
git tag v0.1.0 && git push origin v0.1.0

The release.yml workflow runs the full CI, builds the package and publishes it.

Contributing

Contributions are welcome! Read CONTRIBUTING.md (how to set up your environment, run tests and open a PR) and the CODE_OF_CONDUCT.md. Report vulnerabilities per SECURITY.md. Notable changes are tracked in CHANGELOG.md.

License

MIT — see LICENSE. The license covers this server's code, not the map data, which is subject to the Mapy.com terms.

Release files for mapy-cz-mcp-server-unofficial 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mapy-cz-mcp-server-unofficial 0.1.0
File Size Uploaded
mapy_cz_mcp_server_unofficial-0.1.0.tar.gz 63.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mapy-cz-mcp-server-unofficial 0.1.0
File Interpreter ABI Platform
mapy_cz_mcp_server_unofficial-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 107.3 kB

Release files / mapy_cz_mcp_server_unofficial-0.1.0.tar.gz

Download URL mapy_cz_mcp_server_unofficial-0.1.0.tar.gz
Size 63.6 kB
Tags Source
SHA-256 checksum
How to use checksums
2bc7a9928483563d2551171e0a1de6e58acb1c68605e93f70dc1946259eb69c8
BLAKE2b-256 checksum
How to use checksums
25d0b1e70baeff35dfa8139ee5cfa712dbf3d0e01ec5ffdd1e45851d8e809493
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release files / mapy_cz_mcp_server_unofficial-0.1.0-py3-none-any.whl

Download URL mapy_cz_mcp_server_unofficial-0.1.0-py3-none-any.whl
Size 43.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e83975e1b56e13fdaea1c6bacbc43399d0157e6f80f571d985738b8d6d48df8f
BLAKE2b-256 checksum
How to use checksums
991f9352376d434a3d2f1b39c88e2c004c38d0398444773faf985dc9923caf55
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 17, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.0

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page