topostack.app
Choose a place, customize layered relief or flat engraving, and generate SVG artwork in the free TopoStack studio.
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 4 · Act 8 · Transact 0 · Score: Not yet scored
Tool inspector
plan_model
[Site-provided MCP tool — executes with your session credentials.] Validate a model request and estimate the result from sampled terrain: sheet count, stack height, fitted exaggeration and scale for layered output, or the contour interval for flat output. Returns notes and a studio link. The count is an estimate; the studio's is authoritative. Iterate on thickness, size, area or exaggeration here before sharing the link.
Page: /studio
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
requestVersion |
— | no | Optional; 1 is assumed. |
area |
— | yes | The ground to model. Use center + widthKm for a place and a span, or bounds to keep a whole box in view; the crop is fitted to the model's proportions. |
placeLabel |
string | no | Human-readable place name, e.g. from search_places. |
name |
string | no | Project name; defaults to the first part of placeLabel. |
widthMm |
number | no | Finished model width in millimetres (default 300). |
heightMm |
number | no | Finished model height in millimetres (default 200). |
shape |
— | no | Outline of the model (default rectangle). |
units |
— | no | Units for engraved labels and the scale bar (default metric). |
output |
— | no | layered: a stack of laser-cut sheets forming a 3D relief (default). flat: contour lines engraved on a single sheet. |
materialThicknessMm |
number | no | Sheet thickness in millimetres (default 3). Thicker material gives fewer, coarser layers. |
verticalExaggeration |
number | no | How much to stretch the terrain vertically (default 2). The layer count follows from scale, relief, exaggeration and thickness. |
contourCount |
integer | no | Flat output only: number of engraved contour lines (default 12). |
details |
object | no | Map details to include. Anything left out keeps the studio default: water, water depth, roads, trails, elevation labels, north arrow and scale bar on; road labels, boundaries and coordinate grid off. |
aviation |
object | no | FAA aviation detail, US and territories only; decorative, never for navigation. Every switch is off unless set: airspace (Class B, C and D boundaries), specialUse (restricted, MOA, warning and similar areas), runways, airports, navaids, obstacles (200 ft AGL and taller), labels (airport and navaid identifiers, and Class B, C and D altitudes). |
airspaceStack |
— | no | Airspace in acrylic, US and territories only, layered output only; decorative, never for navigation. Class B, C and special use airspace, and optional Class D lids, are cut from acrylic and held at true height over the terrain on rods the maker cuts to length. false turns it off. An object turns it on from the defaults (plates, 4 mm round rods glued in segments); on a design that has it, only the fields given change. A whole Class B separates into its shelves near 10× vertical exaggeration. |
title |
string | no | Optional engraved title: up to 3 lines separated by \n, 40 characters each. |
laser |
object | no | Laser settings. A work area smaller than the model splits each sheet into pieces that fit the bed. |
markers |
array | no | Points of interest engraved on the model. |
Raw JSON schema
{
"title": "TopoStack project request v1",
"type": "object",
"required": [
"area"
],
"additionalProperties": false,
"properties": {
"requestVersion": {
"const": 1,
"description": "Optional; 1 is assumed."
},
"area": {
"description": "The ground to model. Use center + widthKm for a place and a span, or bounds to keep a whole box in view; the crop is fitted to the model's proportions.",
"oneOf": [
{
"type": "object",
"title": "Center and width",
"required": [
"center",
"widthKm"
],
"additionalProperties": false,
"properties": {
"center": {
"type": "object",
"required": [
"lat",
"lon"
],
"additionalProperties": false,
"properties": {
"lat": {
"type": "number",
"minimum": -85.0511,
"maximum": 85.0511
},
"lon": {
"type": "number",
"minimum": -180,
"maximum": 180
}
}
},
"widthKm": {
"type": "number",
"minimum": 0.1,
"maximum": 2000,
"description": "Ground distance shown from west to east, in kilometres."
}
}
},
{
"type": "object",
"title": "Bounding box",
"required": [
"bounds"
],
"additionalProperties": false,
"properties": {
"bounds": {
"type": "object",
"required": [
"west",
"south",
"east",
"north"
],
"additionalProperties": false,
"description": "WGS84 degrees; south < north. West greater than east crosses the antimeridian, as in GeoJSON.",
"properties": {
"west": {
"type": "number",
"minimum": -180,
"maximum": 180
},
"south": {
"type": "number",
"minimum": -85.0511,
"maximum": 85.0511
},
"east": {
"type": "number",
"minimum": -180,
"maximum": 180
},
"north": {
"type": "number",
"minimum": -85.0511,
"maximum": 85.0511
}
}
}
}
}
]
},
"placeLabel": {
"type": "string",
"maxLength": 240,
"description": "Human-readable place name, e.g. from search_places."
},
"name": {
"type": "string",
"maxLength": 120,
"description": "Project name; defaults to the first part of placeLabel."
},
"widthMm": {
"type": "number",
"minimum": 20,
"maximum": 10000,
"description": "Finished model width in millimetres (default 300)."
},
"heightMm": {
"type": "number",
"minimum": 20,
"maximum": 10000,
"description": "Finished model height in millimetres (default 200)."
},
"shape": {
"enum": [
"rectangle",
"circle"
],
"description": "Outline of the model (default rectangle)."
},
"units": {
"enum": [
"metric",
"imperial"
],
"description": "Units for engraved labels and the scale bar (default metric)."
},
"output": {
"enum": [
"layered",
"flat"
],
"description": "layered: a stack of laser-cut sheets forming a 3D relief (default). flat: contour lines engraved on a single sheet."
},
"materialThicknessMm": {
"type": "number",
"minimum": 0.5,
"maximum": 25,
"description": "Sheet thickness in millimetres (default 3). Thicker material gives fewer, coarser layers."
},
"verticalExaggeration": {
"type": "number",
"minimum": 1,
"maximum": 10,
"description": "How much to stretch the terrain vertically (default 2). The layer count follows from scale, relief, exaggeration and thickness."
},
"contourCount": {
"type": "integer",
"minimum": 4,
"maximum": 40,
"description": "Flat output only: number of engraved contour lines (default 12)."
},
"details": {
"type": "object",
"additionalProperties": false,
"description": "Map details to include. Anything left out keeps the studio default: water, water depth, roads, trails, elevation labels, north arrow and scale bar on; road labels, boundaries and coordinate grid off.",
"properties": {
"water": {
"type": "boolean"
},
"waterDepth": {
"type": "boolean"
},
"roads": {
"type": "boolean"
},
"trails": {
"type": "boolean"
},
"roadLabels": {
"type": "boolean"
},
"boundaries": {
"type": "boolean"
},
"coordinateGrid": {
"type": "boolean"
},
"elevationLabels": {
"type": "boolean"
},
"northArrow": {
"type": "boolean"
},
"scaleBar": {
"type": "boolean"
}
}
},
"aviation": {
"type": "object",
"additionalProperties": false,
"description": "FAA aviation detail, US and territories only; decorative, never for navigation. Every switch is off unless set: airspace (Class B, C and D boundaries), specialUse (restricted, MOA, warning and similar areas), runways, airports, navaids, obstacles (200 ft AGL and taller), labels (airport and navaid identifiers, and Class B, C and D altitudes).",
"properties": {
"airspace": {
"type": "boolean"
},
"specialUse": {
"type": "boolean"
},
"runways": {
"type": "boolean"
},
"airports": {
"type": "boolean"
},
"navaids": {
"type": "boolean"
},
"obstacles": {
"type": "boolean"
},
"labels": {
"type": "boolean"
}
}
},
"airspaceStack": {
"description": "Airspace in acrylic, US and territories only, layered output only; decorative, never for navigation. Class B, C and special use airspace, and optional Class D lids, are cut from acrylic and held at true height over the terrain on rods the maker cuts to length. false turns it off. An object turns it on from the defaults (plates, 4 mm round rods glued in segments); on a design that has it, only the fields given change. A whole Class B separates into its shelves near 10× vertical exaggeration.",
"anyOf": [
{
"const": false
},
{
"type": "object",
"additionalProperties": false,
"properties": {
"form": {
"enum": [
"plates",
"tiers",
"volumes"
],
"description": "plates: a piece at each altitude where airspace starts or ends, cut to the whole airspace at that height. tiers: pieces only where each shelf starts and ends, like the chart users' guide's wedding cake; least acrylic. volumes: solid stacked sheets, which use far more acrylic. Plates and tiers differ most where special use airspace spans several levels."
},
"tint": {
"enum": [
"chart",
"clear"
],
"description": "chart: blue and magenta acrylic after the sectional. clear: every piece from clear acrylic, with the class shown by engraving. Defaults to clear for plates and chart for tiers and volumes."
},
"classes": {
"type": "object",
"additionalProperties": false,
"description": "Which airspace to build. Turning every kind off turns airspace off.",
"properties": {
"B": {
"type": "boolean",
"description": "Class B (default on)."
},
"C": {
"type": "boolean",
"description": "Class C (default on)."
},
"D": {
"type": "boolean",
"description": "Class D, as a flat lid over each tower airport (default off)."
},
"specialUse": {
"type": "boolean",
"description": "MOAs, restricted, warning and similar areas (default on)."
}
}
},
"ceilingCapFt": {
"type": "number",
"minimum": 1000,
"maximum": 60000,
"description": "Highest altitude built, in feet. By default the highest Class B or C ceiling in the area, or 10,000 ft."
},
"thicknessMm": {
"type": "number",
"minimum": 1,
"maximum": 10,
"description": "Acrylic thickness in millimetres; defaults to materialThicknessMm."
},
"kerfMm": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Laser kerf for the acrylic in millimetres; defaults to the laser kerf."
},
"rod": {
"type": "object",
"additionalProperties": false,
"description": "The rods that hold the pieces, standing in sockets cut into the terrain.",
"properties": {
"shape": {
"enum": [
"round",
"square"
],
"description": "Rod section (default round)."
},
"sizeMm": {
"type": "number",
"minimum": 2,
"maximum": 12,
"description": "Rod diameter, or a square rod's width, in millimetres (default 4)."
},
"fitClearanceMm": {
"type": "number",
"minimum": 0,
"maximum": 0.5,
"description": "Clearance around the rod in sockets and holes, in millimetres (default 0.1)."
},
"socketDepthMm": {
"type": "number",
"minimum": 1,
"maximum": 30,
"description": "Depth of the sockets in the terrain, in millimetres (default 6)."
},
"joint": {
"enum": [
"segments",
"through"
],
"description": "segments: short rods glued between levels. through: one rod per column, rising through holes in the pieces (default segments)."
}
}
}
}
}
]
},
"title": {
"type": "string",
"maxLength": 123,
"description": "Optional engraved title: up to 3 lines separated by \\n, 40 characters each."
},
"laser": {
"type": "object",
"additionalProperties": false,
"description": "Laser settings. A work area smaller than the model splits each sheet into pieces that fit the bed.",
"properties": {
"kerfMm": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Laser kerf in millimetres (default 0.15)."
},
"workAreaWidthMm": {
"anyOf": [
{
"const": 0
},
{
"type": "number",
"minimum": 20,
"maximum": 10000
}
],
"description": "Laser bed width in millimetres; 0 for unlimited (default)."
},
"workAreaHeightMm": {
"anyOf": [
{
"const": 0
},
{
"type": "number",
"minimum": 20,
"maximum": 10000
}
],
"description": "Laser bed height in millimetres; 0 for unlimited (default)."
}
}
},
"markers": {
"type": "array",
"maxItems": 20,
"description": "Points of interest engraved on the model.",
"items": {
"type": "object",
"required": [
"lat",
"lon"
],
"additionalProperties": false,
"properties": {
"lat": {
"type": "number",
"minimum": -85.0511,
"maximum": 85.0511
},
"lon": {
"type": "number",
"minimum": -180,
"maximum": 180
},
"symbol": {
"enum": [
"pin",
"circle",
"triangle",
"star",
"cross"
],
"description": "Marker shape (default pin)."
},
"name": {
"type": "string",
"maxLength": 60
}
}
}
}
}
}
Similar websites
wfsim.app
A Warframe calculator that simulates the fight instead of estimating it — builder, simulator, optimizer. Every formula cites its source, and the golden tests ar…
commonplace-webmcp.vercel.app
Commonplace is an editable social reading space built for people and their browser agents.
pixelforge-studio.appcaster.chatgpt.site
A professional browser pixel-art editor for drawing, frame animation, palettes, sprite sheets, GIF export, and WebMCP automation.
pixelite.taskcraft.site
Pixelite