Geography
Render a GeoJSON FeatureCollection as a self-contained, tile-free static SVG map: OSM Carto-style water/greens/buildings and class-coloured roads, amenity/shop/tourism-classified POI pin icons with halo labels, highlighted route LineStrings with geodesic bearing arrows, scale bar, lat/lon graticule and the embedded OpenStreetMap attribution (ODbL). Optional Nominatim geocoding (max 5 queries, policy-compliant pacing and User-Agent) adds place markers.
Call this tool from your code in three languages.
curl -X POST 'http://127.0.0.1:3003/en/api/tools/openstreetmap-nominatim-geojson-static-svg-map-renderer-with-styled-poi-icons-and-route-overlay' \
-H 'Content-Type: application/json' \
-d '{"geojsonInput":"{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"natural\": \"water\",\n \"name\": \"Cold River\"\n },\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -1.235,\n 52.632\n ],\n [\n -1.225,\n 52.636\n ],\n [\n -1.212,\n 52.633\n ],\n [\n -1.205,\n 52.637\n ],\n [\n -1.198,\n 52.634\n ],\n [\n -1.2,\n 52.63\n ],\n [\n -1.21,\n 52.628\n ],\n [\n -1.222,\n 52.63\n ],\n [\n -1.235,\n 52.632\n ]\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"leisure\": \"park\",\n \"name\": \"Riverside Park\"\n },\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -1.232,\n 52.646\n ],\n [\n -1.218,\n 52.649\n ],\n [\n -1.21,\n 52.644\n ],\n [\n -1.222,\n 52.641\n ],\n [\n -1.232,\n 52.646\n ]\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"landuse\": \"residential\"\n },\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -1.205,\n 52.648\n ],\n [\n -1.192,\n 52.65\n ],\n [\n -1.188,\n 52.642\n ],\n [\n -1.2,\n 52.64\n ],\n [\n -1.205,\n 52.648\n ]\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"building\": \"yes\"\n },\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -1.203,\n 52.646\n ],\n [\n -1.199,\n 52.647\n ],\n [\n -1.197,\n 52.643\n ],\n [\n -1.201,\n 52.642\n ],\n [\n -1.203,\n 52.646\n ]\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"building\": \"yes\"\n },\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -1.196,\n 52.646\n ],\n [\n -1.193,\n 52.647\n ],\n [\n -1.192,\n 52.644\n ],\n [\n -1.195,\n 52.643\n ],\n [\n -1.196,\n 52.646\n ]\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"highway\": \"motorway\"\n },\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordinates\": [\n [\n -1.235,\n 52.651\n ],\n [\n -1.215,\n 52.647\n ],\n [\n -1.198,\n 52.649\n ],\n [\n -1.19,\n 52.652\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"highway\": \"residential\"\n },\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordinates\": [\n [\n -1.213,\n 52.635\n ],\n [\n -1.206,\n 52.64\n ],\n [\n -1.198,\n 52.644\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"name\": \"Ridge Trail\"\n },\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordinates\": [\n [\n -1.23,\n 52.65\n ],\n [\n -1.222,\n 52.648\n ],\n [\n -1.216,\n 52.644\n ],\n [\n -1.208,\n 52.645\n ],\n [\n -1.201,\n 52.648\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"amenity\": \"restaurant\",\n \"name\": \"Harbor Grill\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.21,\n 52.647\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"amenity\": \"cafe\",\n \"name\": \"Bean There\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.2,\n 52.642\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"tourism\": \"hotel\",\n \"name\": \"Lakeside Inn\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.194,\n 52.646\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"tourism\": \"viewpoint\",\n \"name\": \"Eagle Point\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.226,\n 52.648\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"amenity\": \"parking\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.216,\n 52.641\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"tourism\": \"attraction\",\n \"name\": \"Old Mill\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.205,\n 52.634\n ]\n }\n }\n ]\n}","nominatimQueries":"","svgWidth":960,"svgHeight":640,"showLabels":true,"showBearingArrows":true,"showScaleBar":true,"showGraticule":false,"writeSvgFile":false}'Send a POST request with your inputs as JSON. File parameters require a separate upload first.
POST http://127.0.0.1:3003/en/api/tools/openstreetmap-nominatim-geojson-static-svg-map-renderer-with-styled-poi-icons-and-route-overlay| Name | Type | Required | Description |
|---|---|---|---|
| geojsonInput | textarea | Yes | — |
| nominatimQueries | text | No | — |
| svgWidth | number | No | — |
| svgHeight | number | No | — |
| showLabels | checkbox | No | — |
| showBearingArrows | checkbox | No | — |
| showScaleBar | checkbox | No | — |
| showGraticule | checkbox | No | — |
| writeSvgFile | checkbox | No | — |
HTML result
{
"result": "<div>Processed HTML content</div>",
"error": "Error message (optional)",
"message": "Notification message (optional)",
"metadata": {
"key": "value"
}
}Add this tool to your Model Context Protocol server so AI agents can list and call it.
Add this block to your MCP client configuration:
{
"mcpServers": {
"elysiatools-openstreetmap-nominatim-geojson-static-svg-map-renderer-with-styled-poi-icons-and-route-overlay": {
"name": "openstreetmap-nominatim-geojson-static-svg-map-renderer-with-styled-poi-icons-and-route-overlay",
"description": "Render a GeoJSON FeatureCollection as a self-contained, tile-free static SVG map: OSM Carto-style water/greens/buildings and class-coloured roads, amenity/shop/tourism-classified POI pin icons with halo labels, highlighted route LineStrings with geodesic bearing arrows, scale bar, lat/lon graticule and the embedded OpenStreetMap attribution (ODbL). Optional Nominatim geocoding (max 5 queries, policy-compliant pacing and User-Agent) adds place markers.",
"baseUrl": "http://127.0.0.1:3003/mcp/sse?toolId=openstreetmap-nominatim-geojson-static-svg-map-renderer-with-styled-poi-icons-and-route-overlay",
"command": "",
"args": [],
"env": {},
"isActive": true,
"type": "sse"
}
}
}After connecting to the SSE endpoint, list the exposed tools:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}Invoke the tool by its id, passing arguments built from its parameters:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "openstreetmap-nominatim-geojson-static-svg-map-renderer-with-styled-poi-icons-and-route-overlay",
"arguments": {
"geojsonInput": "{\n \"type\": \"FeatureCollection\",\n \"features\": [\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"natural\": \"water\",\n \"name\": \"Cold River\"\n },\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -1.235,\n 52.632\n ],\n [\n -1.225,\n 52.636\n ],\n [\n -1.212,\n 52.633\n ],\n [\n -1.205,\n 52.637\n ],\n [\n -1.198,\n 52.634\n ],\n [\n -1.2,\n 52.63\n ],\n [\n -1.21,\n 52.628\n ],\n [\n -1.222,\n 52.63\n ],\n [\n -1.235,\n 52.632\n ]\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"leisure\": \"park\",\n \"name\": \"Riverside Park\"\n },\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -1.232,\n 52.646\n ],\n [\n -1.218,\n 52.649\n ],\n [\n -1.21,\n 52.644\n ],\n [\n -1.222,\n 52.641\n ],\n [\n -1.232,\n 52.646\n ]\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"landuse\": \"residential\"\n },\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -1.205,\n 52.648\n ],\n [\n -1.192,\n 52.65\n ],\n [\n -1.188,\n 52.642\n ],\n [\n -1.2,\n 52.64\n ],\n [\n -1.205,\n 52.648\n ]\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"building\": \"yes\"\n },\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -1.203,\n 52.646\n ],\n [\n -1.199,\n 52.647\n ],\n [\n -1.197,\n 52.643\n ],\n [\n -1.201,\n 52.642\n ],\n [\n -1.203,\n 52.646\n ]\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"building\": \"yes\"\n },\n \"geometry\": {\n \"type\": \"Polygon\",\n \"coordinates\": [\n [\n [\n -1.196,\n 52.646\n ],\n [\n -1.193,\n 52.647\n ],\n [\n -1.192,\n 52.644\n ],\n [\n -1.195,\n 52.643\n ],\n [\n -1.196,\n 52.646\n ]\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"highway\": \"motorway\"\n },\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordinates\": [\n [\n -1.235,\n 52.651\n ],\n [\n -1.215,\n 52.647\n ],\n [\n -1.198,\n 52.649\n ],\n [\n -1.19,\n 52.652\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"highway\": \"residential\"\n },\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordinates\": [\n [\n -1.213,\n 52.635\n ],\n [\n -1.206,\n 52.64\n ],\n [\n -1.198,\n 52.644\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"name\": \"Ridge Trail\"\n },\n \"geometry\": {\n \"type\": \"LineString\",\n \"coordinates\": [\n [\n -1.23,\n 52.65\n ],\n [\n -1.222,\n 52.648\n ],\n [\n -1.216,\n 52.644\n ],\n [\n -1.208,\n 52.645\n ],\n [\n -1.201,\n 52.648\n ]\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"amenity\": \"restaurant\",\n \"name\": \"Harbor Grill\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.21,\n 52.647\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"amenity\": \"cafe\",\n \"name\": \"Bean There\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.2,\n 52.642\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"tourism\": \"hotel\",\n \"name\": \"Lakeside Inn\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.194,\n 52.646\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"tourism\": \"viewpoint\",\n \"name\": \"Eagle Point\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.226,\n 52.648\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"amenity\": \"parking\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.216,\n 52.641\n ]\n }\n },\n {\n \"type\": \"Feature\",\n \"properties\": {\n \"tourism\": \"attraction\",\n \"name\": \"Old Mill\"\n },\n \"geometry\": {\n \"type\": \"Point\",\n \"coordinates\": [\n -1.205,\n 52.634\n ]\n }\n }\n ]\n}",
"nominatimQueries": "",
"svgWidth": 960,
"svgHeight": 640,
"showLabels": true,
"showBearingArrows": true,
"showScaleBar": true,
"showGraticule": false,
"writeSvgFile": false
}
}
}Questions or issues? Contact [email protected]