Moving Polygons
Create, edit and publish animated historical maps in your Moving Polygons account.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"maps": {
"url": "https://www.movingpolygons.com/mcp"
}
}
}Remote endpoints
https://www.movingpolygons.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (14)
π’get_import_format
The JSON format for maps: layers with timed polygon keyframes, point markers and a style.
Input Schema
{
"type": "object",
"properties": {}
}π’get_account
The signed-in user's public handle, plan and how many maps they can still create.
Input Schema
{
"type": "object",
"properties": {}
}π’list_maps(search, limit)
The user's maps, most recently changed first, with their ids and links.
Input Schema
{
"type": "object",
"properties": {
"search": {
"description": "Only maps whose name contains this text",
"type": "string"
},
"limit": {
"description": "Default 50",
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}π’get_map(mapId)
A summary of one of the user's maps (layers, keyframe dates, markers) and a 15-minute download link for its full import JSON, which can be several MB.
Input Schema
{
"type": "object",
"properties": {
"mapId": {
"type": "string",
"description": "The map id"
}
},
"required": [
"mapId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}π‘create_map(map)
Create a new private draft map from an import JSON of up to about 1 MB.
Input Schema
{
"type": "object",
"properties": {
"map": {
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
{
"type": "string"
}
],
"description": "The map in the Moving Polygons import format, as a JSON object or a JSON string"
}
},
"required": [
"map"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}π’create_upload_link(mode, mapId)
A one-off link (valid 15 minutes) for uploading a map JSON file of up to 40 MB with curl. It creates a new draft map, or with mode replace overwrites an existing map's content. The curl output reports the result.
Input Schema
{
"type": "object",
"properties": {
"mode": {
"description": "create (default): a new map. replace: overwrite mapId's content",
"type": "string",
"enum": [
"create",
"replace"
]
},
"mapId": {
"description": "Required for mode replace",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}π‘start_map_upload(mode, mapId)
Opens an upload (valid 2 hours) for a map JSON text that is sent in numbered parts through tool calls rather than over the network. It creates a new draft map, or with mode replace overwrites an existing map's content.
Input Schema
{
"type": "object",
"properties": {
"mode": {
"description": "create (default): a new map. replace: overwrite mapId's content",
"type": "string",
"enum": [
"create",
"replace"
]
},
"mapId": {
"description": "Required for mode replace",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}π‘upload_map_part(uploadId, part, text)
Stores one numbered piece of a chunked map upload. The pieces are joined in part order with nothing in between; sending a part number again replaces that part. Returns the piece's length and SHA-256.
Input Schema
{
"type": "object",
"properties": {
"uploadId": {
"type": "string"
},
"part": {
"type": "integer",
"minimum": 1,
"maximum": 400,
"description": "1 for the first piece"
},
"text": {
"type": "string",
"maxLength": 250000,
"description": "This piece of the map JSON text, verbatim"
}
},
"required": [
"uploadId",
"part",
"text"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}π΄finish_map_upload(uploadId, parts)
Joins parts 1 to the given count of a chunked upload, validates the map and creates the draft map (or replaces the map's content, keeping a backup). Reports missing parts or where the JSON breaks.
Input Schema
{
"type": "object",
"properties": {
"uploadId": {
"type": "string"
},
"parts": {
"type": "integer",
"minimum": 1,
"maximum": 400,
"description": "How many parts were sent"
}
},
"required": [
"uploadId",
"parts"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}π΄replace_map_content(mapId, map)
Overwrite an existing map's layers, markers, name, description and casualty bar (and style, if given) with an import JSON of up to about 1 MB. The link and publish state stay; the old content is backed up.
Input Schema
{
"type": "object",
"properties": {
"mapId": {
"type": "string"
},
"map": {
"anyOf": [
{
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
{
"type": "string"
}
],
"description": "The map in the Moving Polygons import format, as a JSON object or a JSON string"
}
},
"required": [
"mapId",
"map"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}π‘publish_map(mapId)
Make one of the user's maps public at its /map/<handle>/<slug> link, where anyone can view it.
Input Schema
{
"type": "object",
"properties": {
"mapId": {
"type": "string"
}
},
"required": [
"mapId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}βͺunpublish_map(mapId)
Make one of the user's maps private again (its public link stops working).
Input Schema
{
"type": "object",
"properties": {
"mapId": {
"type": "string"
}
},
"required": [
"mapId"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}π’search_maps(query, year, limit)
Find published animated maps on Moving Polygons (history, wars, empires, borders, epidemics, sea iceβ¦) by words in their title or description and/or a year they cover. Returns links to the interactive map, its text version and its article.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "Words to match, e.g. 'Ottoman', 'Holy Roman Empire', 'Ukraine war'",
"type": "string"
},
"year": {
"description": "Only maps whose timeline includes this year; negative for BC (-44 = 44 BC)",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"limit": {
"description": "Default 10",
"type": "integer",
"minimum": 1,
"maximum": 50
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}π’get_public_map(url, username, slug)
One published map as Markdown: description and sources, the timeline of keyframes (date and caption), layers, events, and the iframe code to embed the interactive map. Pass its URL, or the handle and slug.
Input Schema
{
"type": "object",
"properties": {
"url": {
"description": "e.g. https://www.movingpolygons.com/map/Chris/the-ottoman-empire-12991923",
"type": "string"
},
"username": {
"type": "string"
},
"slug": {
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence