← WebMCP Directory

Tool tree

thorsten.github.io

Media & PersonalTools verified
Website
Voltopia
Explore capabilities
    get_game_overviewAnswer

    Current state of the city: funds, population, jobs, happiness, zone demand, clock and season, weather, energy balance summary, budget per tick, tax rate, upgrades, goals, tile counts, grid size, grid islands (count, in deficit) and a disasters summary (intensity, warning/active counts, damaged tiles, repair cost — see get_disasters for the detail), and while a scenario runs its block (status, day, endedDay once over, rules, conditions), and finance (debt, debtCap, rating, open credits with daysLeft and repayable, gridFee and its happiness term, grantRemaining of the yearly grant pot, today's credit offers with rate and per-amount availability). sandbox: money is pinned at a huge value (unlimited); finance offers are refused with `sandbox`, goals are off, and build results carry sandbox: true instead of spent/money. Call this first and after every advance_time.

    View tool JSON
    {
      "name": "get_game_overview",
      "kind": "answer",
      "impl": "imperative",
      "description": "Current state of the city: funds, population, jobs, happiness, zone demand, clock and season, weather, energy balance summary, budget per tick, tax rate, upgrades, goals, tile counts, grid size, grid islands (count, in deficit) and a disasters summary (intensity, warning/active counts, damaged tiles, repair cost — see get_disasters for the detail), and while a scenario runs its block (status, day, endedDay once over, rules, conditions), and finance (debt, debtCap, rating, open credits with daysLeft and repayable, gridFee and its happiness term, grantRemaining of the yearly grant pot, today's credit offers with rate and per-amount availability). sandbox: money is pinned at a huge value (unlimited); finance offers are refused with `sandbox`, goals are off, and build results carry sandbox: true instead of spent/money. Call this first and after every advance_time.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    get_build_catalogAnswer

    Static rules of the game: what can be built, what it costs (money), upkeep per tick, placement rules, the power-line supply radius and how the grid works, plus finance (credit products, rating spreads and thresholds, renewable grant shares and pot, grid-fee range); plant entries carry grantShare. Read once.

    View tool JSON
    {
      "name": "get_build_catalog",
      "kind": "answer",
      "impl": "imperative",
      "description": "Static rules of the game: what can be built, what it costs (money), upkeep per tick, placement rules, the power-line supply radius and how the grid works, plus finance (credit products, rating spreads and thresholds, renewable grant shares and pot, grid-fee range); plant entries carry grantShare. Read once.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    get_energy_reportAnswer

    Full energy statistics for the current tick: generation per source, consumption per category, storage, curtailment, deficit, grid import/export, flexible-load figures (flexDeferred, flexRecovered, flexBacklog), the business load shed under the demand-response contract (shed), the unshifted curve, the sampled history of the last in-game day (oldest first), and per-island figures (islands: number, key, tiles, buildings, substations, generation, consumption, stored, capacity, deficit, curtailment, gridImport, gridExport, importCost) — see get_game_overview for the city-wide island count.

    View tool JSON
    {
      "name": "get_energy_report",
      "kind": "answer",
      "impl": "imperative",
      "description": "Full energy statistics for the current tick: generation per source, consumption per category, storage, curtailment, deficit, grid import/export, flexible-load figures (flexDeferred, flexRecovered, flexBacklog), the business load shed under the demand-response contract (shed), the unshifted curve, the sampled history of the last in-game day (oldest first), and per-island figures (islands: number, key, tiles, buildings, substations, generation, consumption, stored, capacity, deficit, curtailment, gridImport, gridExport, importCost) — see get_game_overview for the city-wide island count.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    get_mapAnswer

    ASCII map of the grid (or a window of it), one character per tile, rows from north to south. Choose a layer: overview (default), terrain, supply, density, power or transit. The result includes the legend. Row i of "rows" is y = origin.y + i; character j is x = origin.x + j.

    View tool JSON
    {
      "name": "get_map",
      "kind": "answer",
      "impl": "imperative",
      "description": "ASCII map of the grid (or a window of it), one character per tile, rows from north to south. Choose a layer: overview (default), terrain, supply, density, power or transit. The result includes the legend. Row i of \"rows\" is y = origin.y + i; character j is x = origin.x + j.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "layer": {
            "type": "string",
            "enum": [
              "overview",
              "terrain",
              "supply",
              "density",
              "power",
              "transit",
              "rail"
            ],
            "description": "Which layer to render."
          },
          "origin": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "Top-left tile of the window (default 0,0)."
          },
          "width": {
            "type": "integer",
            "description": "Window width in tiles (default: whole grid)."
          },
          "height": {
            "type": "integer",
            "description": "Window height in tiles (default: whole grid)."
          }
        }
      },
      "page": "/Voltopia/"
    }
    inspect_tileAnswer

    Everything about one tile: terrain, road, power line, zone, building density, plant, supply status, bus stop and coverage, damage (0 = intact), plus live figures (upkeep, tax, consumption, generation, storage, residents, jobs, demand) and the reasons the tile is not growing. On a geothermal hotspot or a geothermal plant, a "hotspot" field reports the field's quality, reservoir heat (0..1) and how many of its wells its capacity sustains — heat and every well's output fall once wells drilled exceed that capacity. On a heat plant a "heatPlant" field reports its road reach, buildings served, COP and whether it is active; a building reports "heated" (true when the district network heats it). On a supply plant, "supply" is not_connected when the plant is isolated (no power line attached and no building within the supply radius, neither at the plant nor at any plant of its park — supply plants standing within each other's supply radius form one park; its output still counts — see find_tiles isolated_plant) and connected means a power line is attached to it or to a plant of its park. See get_disasters for the events causing any damage.

    View tool JSON
    {
      "name": "inspect_tile",
      "kind": "answer",
      "impl": "imperative",
      "description": "Everything about one tile: terrain, road, power line, zone, building density, plant, supply status, bus stop and coverage, damage (0 = intact), plus live figures (upkeep, tax, consumption, generation, storage, residents, jobs, demand) and the reasons the tile is not growing. On a geothermal hotspot or a geothermal plant, a \"hotspot\" field reports the field's quality, reservoir heat (0..1) and how many of its wells its capacity sustains — heat and every well's output fall once wells drilled exceed that capacity. On a heat plant a \"heatPlant\" field reports its road reach, buildings served, COP and whether it is active; a building reports \"heated\" (true when the district network heats it). On a supply plant, \"supply\" is not_connected when the plant is isolated (no power line attached and no building within the supply radius, neither at the plant nor at any plant of its park — supply plants standing within each other's supply radius form one park; its output still counts — see find_tiles isolated_plant) and connected means a power line is attached to it or to a plant of its park. See get_disasters for the events causing any damage.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "x": {
            "type": "integer"
          },
          "y": {
            "type": "integer"
          }
        },
        "required": [
          "x",
          "y"
        ]
      },
      "page": "/Voltopia/"
    }
    find_tilesAnswer

    Coordinates of tiles matching a kind: empty_land, river, lake_shore (land next to the lake, for pumped storage), coastal_sea (empty sea tile touching land, for tidal plants), geothermal_hotspot (empty land tile carrying a hotspot, for geothermal plants), road, power_line, plant, zoned_empty, building, not_connected_building, undersupplied_building, factory (an industrial building), isolated_plant (a supply plant whose park — supply plants within each other's supply radius — has no power line attached and no building in any of its rings; its output still counts, nobody nearby uses it), bus_stop, damaged (out of service from a storm, fire or flood; see get_disasters), substation, island_without_substation (one tile — the island's key tile — per grid island that has no substation and so cannot import or export), rail_track, rail_station_due (a station not currently served), rail_yard_without_grid (a rail yard on an island with no power, so it cannot field trains). Optionally nearest to a point first.

    View tool JSON
    {
      "name": "find_tiles",
      "kind": "answer",
      "impl": "imperative",
      "description": "Coordinates of tiles matching a kind: empty_land, river, lake_shore (land next to the lake, for pumped storage), coastal_sea (empty sea tile touching land, for tidal plants), geothermal_hotspot (empty land tile carrying a hotspot, for geothermal plants), road, power_line, plant, zoned_empty, building, not_connected_building, undersupplied_building, factory (an industrial building), isolated_plant (a supply plant whose park — supply plants within each other's supply radius — has no power line attached and no building in any of its rings; its output still counts, nobody nearby uses it), bus_stop, damaged (out of service from a storm, fire or flood; see get_disasters), substation, island_without_substation (one tile — the island's key tile — per grid island that has no substation and so cannot import or export), rail_track, rail_station_due (a station not currently served), rail_yard_without_grid (a rail yard on an island with no power, so it cannot field trains). Optionally nearest to a point first.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "empty_land",
              "river",
              "lake_shore",
              "coastal_sea",
              "geothermal_hotspot",
              "road",
              "power_line",
              "plant",
              "zoned_empty",
              "building",
              "not_connected_building",
              "undersupplied_building",
              "factory",
              "isolated_plant",
              "bus_stop",
              "damaged",
              "substation",
              "island_without_substation",
              "rail_track",
              "rail_station_due",
              "rail_yard_without_grid"
            ]
          },
          "near": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "Sort by distance to this tile."
          },
          "limit": {
            "type": "integer",
            "description": "Max results (default 50)."
          }
        },
        "required": [
          "kind"
        ]
      },
      "page": "/Voltopia/"
    }
    get_lifetime_statsAnswer

    One sample per in-game day since the city was founded: population, jobs, happiness, average generation and consumption per tick, money (left out in a sandbox city), mean temperature, heating load, and per day the renewable output (incl. fuel cells), biogas output, grid import, grid export, curtailment (averages per tick) and the deficit ticks.

    View tool JSON
    {
      "name": "get_lifetime_stats",
      "kind": "answer",
      "impl": "imperative",
      "description": "One sample per in-game day since the city was founded: population, jobs, happiness, average generation and consumption per tick, money (left out in a sandbox city), mean temperature, heating load, and per day the renewable output (incl. fuel cells), biogas output, grid import, grid export, curtailment (averages per tick) and the deficit ticks.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    get_annual_reportAnswer

    The lifetime statistics folded into in-game years (daysPerYear days each, year 1 starts at founding): residents and jobs at year end, mean happiness, generation and consumption sums, renewable share (renewable / (renewable + biogas + import)), grid import/export, curtailment, deficit ticks, treasury at year end and its change (both left out in a sandbox city). The last row is the running year when complete is false. Energy figures are absent for years recorded before they were tracked.

    View tool JSON
    {
      "name": "get_annual_report",
      "kind": "answer",
      "impl": "imperative",
      "description": "The lifetime statistics folded into in-game years (daysPerYear days each, year 1 starts at founding): residents and jobs at year end, mean happiness, generation and consumption sums, renewable share (renewable / (renewable + biogas + import)), grid import/export, curtailment, deficit ticks, treasury at year end and its change (both left out in a sandbox city). The last row is the running year when complete is false. Energy figures are absent for years recorded before they were tracked.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    get_disastersAnswer

    Disasters: this city's intensity setting, the warnings currently counting down (storms and floods announce themselves hours ahead, fires never do), the events striking right now with the tiles they cover, how many tiles are damaged, and what repairs cost per tick. A damaged tile is out of service until it is repaired: plants stop generating, power lines stop conducting, buildings go dark. Use a warning to prepare — fill storage, charge the hydrogen tanks, or buy over the link.

    View tool JSON
    {
      "name": "get_disasters",
      "kind": "answer",
      "impl": "imperative",
      "description": "Disasters: this city's intensity setting, the warnings currently counting down (storms and floods announce themselves hours ahead, fires never do), the events striking right now with the tiles they cover, how many tiles are damaged, and what repairs cost per tick. A damaged tile is out of service until it is repaired: plants stop generating, power lines stop conducting, buildings go dark. Use a warning to prepare — fill storage, charge the hydrogen tanks, or buy over the link.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    build_roadAction

    Build a road along an L-shaped path from one tile to another (horizontal leg first), or on an explicit tile list. Existing roads on the path are kept and not charged. River tiles become bridges. Rejected as a whole when funds are short.

    View tool JSON
    {
      "name": "build_road",
      "kind": "act",
      "impl": "imperative",
      "description": "Build a road along an L-shaped path from one tile to another (horizontal leg first), or on an explicit tile list. Existing roads on the path are kept and not charged. River tiles become bridges. Rejected as a whole when funds are short.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "Start tile of an L-shaped path (horizontal leg first)."
          },
          "to": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "End tile; omit for a single tile."
          },
          "tiles": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "integer",
                  "description": "0-based column, 0 = west edge"
                },
                "y": {
                  "type": "integer",
                  "description": "0-based row, 0 = north edge"
                }
              },
              "required": [
                "x",
                "y"
              ]
            },
            "description": "Explicit tile list instead of from/to (any shape)."
          }
        }
      },
      "page": "/Voltopia/"
    }
    build_power_lineAction

    Build a power line along an L-shaped path (or explicit tiles). Lines may run over empty land, roads and water but not over buildings or plants; the whole path is rejected if any tile is blocked. Lines must touch a supply plant (or a line that does) to carry power.

    View tool JSON
    {
      "name": "build_power_line",
      "kind": "act",
      "impl": "imperative",
      "description": "Build a power line along an L-shaped path (or explicit tiles). Lines may run over empty land, roads and water but not over buildings or plants; the whole path is rejected if any tile is blocked. Lines must touch a supply plant (or a line that does) to carry power.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "Start tile of an L-shaped path (horizontal leg first)."
          },
          "to": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "End tile; omit for a single tile."
          },
          "tiles": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "integer",
                  "description": "0-based column, 0 = west edge"
                },
                "y": {
                  "type": "integer",
                  "description": "0-based row, 0 = north edge"
                }
              },
              "required": [
                "x",
                "y"
              ]
            },
            "description": "Explicit tile list instead of from/to (any shape)."
          }
        }
      },
      "page": "/Voltopia/"
    }
    build_bus_stopAction

    Mark bus stops along an L-shaped path (or explicit tiles). Only road tiles take a stop; tiles that already have one are kept and not charged. A path with no road tile at all is rejected (needsRoadTile). Stops need a bus depot in route reach to be served.

    View tool JSON
    {
      "name": "build_bus_stop",
      "kind": "act",
      "impl": "imperative",
      "description": "Mark bus stops along an L-shaped path (or explicit tiles). Only road tiles take a stop; tiles that already have one are kept and not charged. A path with no road tile at all is rejected (needsRoadTile). Stops need a bus depot in route reach to be served.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "Start tile of an L-shaped path (horizontal leg first)."
          },
          "to": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "End tile; omit for a single tile."
          },
          "tiles": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "integer",
                  "description": "0-based column, 0 = west edge"
                },
                "y": {
                  "type": "integer",
                  "description": "0-based row, 0 = north edge"
                }
              },
              "required": [
                "x",
                "y"
              ]
            },
            "description": "Explicit tile list instead of from/to (any shape)."
          }
        }
      },
      "page": "/Voltopia/"
    }
    build_overpassAction

    Upgrade the level crossing at x, y to a road overpass: the road crosses the track on a bridge, the barriers go and traffic never waits there. Needs a straight track, a straight road across it and plain straight road tiles (no track, no overpass, not river) on either side along the road for the ramps: two per side where both sides have room, else one. Rejected with needsLevelCrossing, needsStraightCrossing or needsRampRoom (not even one tile per side); ramps shrink to one tile or the overpass goes when a ramp road changes.

    View tool JSON
    {
      "name": "build_overpass",
      "kind": "act",
      "impl": "imperative",
      "description": "Upgrade the level crossing at x, y to a road overpass: the road crosses the track on a bridge, the barriers go and traffic never waits there. Needs a straight track, a straight road across it and plain straight road tiles (no track, no overpass, not river) on either side along the road for the ramps: two per side where both sides have room, else one. Rejected with needsLevelCrossing, needsStraightCrossing or needsRampRoom (not even one tile per side); ramps shrink to one tile or the overpass goes when a ramp road changes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "x": {
            "type": "integer",
            "description": "0-based column, 0 = west edge"
          },
          "y": {
            "type": "integer",
            "description": "0-based row, 0 = north edge"
          }
        },
        "required": [
          "x",
          "y"
        ]
      },
      "page": "/Voltopia/"
    }
    build_lanesAction

    Put a bike lane (kind "bike") or a pedestrian street (kind "pedestrian") on existing road tiles along an L-shaped path (or explicit tiles); kind "none" removes lanes for free. Tiles that are not roads or already carry the kind are skipped; a path with nothing to build is rejected (needsExistingRoad). A pedestrian street is closed to cars, vans and buses, which route around it, and is refused on a bus stop, a river bridge, a level crossing or an overpass ramp (pedestrianBlocked). Commuters within 4 road tiles of work walk; a lane route of at most 20 tiles between home and work makes them cycle. Either way the car stays home and draws no evening charging load.

    View tool JSON
    {
      "name": "build_lanes",
      "kind": "act",
      "impl": "imperative",
      "description": "Put a bike lane (kind \"bike\") or a pedestrian street (kind \"pedestrian\") on existing road tiles along an L-shaped path (or explicit tiles); kind \"none\" removes lanes for free. Tiles that are not roads or already carry the kind are skipped; a path with nothing to build is rejected (needsExistingRoad). A pedestrian street is closed to cars, vans and buses, which route around it, and is refused on a bus stop, a river bridge, a level crossing or an overpass ramp (pedestrianBlocked). Commuters within 4 road tiles of work walk; a lane route of at most 20 tiles between home and work makes them cycle. Either way the car stays home and draws no evening charging load.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "Start tile of an L-shaped path (horizontal leg first)."
          },
          "to": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "End tile; omit for a single tile."
          },
          "tiles": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "integer",
                  "description": "0-based column, 0 = west edge"
                },
                "y": {
                  "type": "integer",
                  "description": "0-based row, 0 = north edge"
                }
              },
              "required": [
                "x",
                "y"
              ]
            },
            "description": "Explicit tile list instead of from/to (any shape)."
          },
          "kind": {
            "type": "string",
            "enum": [
              "bike",
              "pedestrian",
              "none"
            ]
          }
        },
        "required": [
          "kind"
        ]
      },
      "page": "/Voltopia/"
    }
    build_railAction

    Lay railway track along an L-shaped path (or explicit tiles). Track shares tiles with roads (level crossings) and power lines, bridges the river at a higher price, and is refused on buildings, plants, lakes, the sea and steep tiles. Tiles that already carry track are kept and not charged. Stations, freight terminals and the rail yard are placed with place_plant beside the track; one yard per connected track network fields its trains.

    View tool JSON
    {
      "name": "build_rail",
      "kind": "act",
      "impl": "imperative",
      "description": "Lay railway track along an L-shaped path (or explicit tiles). Track shares tiles with roads (level crossings) and power lines, bridges the river at a higher price, and is refused on buildings, plants, lakes, the sea and steep tiles. Tiles that already carry track are kept and not charged. Stations, freight terminals and the rail yard are placed with place_plant beside the track; one yard per connected track network fields its trains.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "Start tile of an L-shaped path (horizontal leg first)."
          },
          "to": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "End tile; omit for a single tile."
          },
          "tiles": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "integer",
                  "description": "0-based column, 0 = west edge"
                },
                "y": {
                  "type": "integer",
                  "description": "0-based row, 0 = north edge"
                }
              },
              "required": [
                "x",
                "y"
              ]
            },
            "description": "Explicit tile list instead of from/to (any shape)."
          }
        }
      },
      "page": "/Voltopia/"
    }
    paint_zoneAction

    Zone every empty land tile in a rectangle as residential, commercial, retail or industrial. Buildings only grow on zoned tiles that touch a road and are supplied with energy.

    View tool JSON
    {
      "name": "paint_zone",
      "kind": "act",
      "impl": "imperative",
      "description": "Zone every empty land tile in a rectangle as residential, commercial, retail or industrial. Buildings only grow on zoned tiles that touch a road and are supplied with energy.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "One corner of the rectangle."
          },
          "to": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "Opposite corner; omit for a single tile."
          },
          "zone": {
            "type": "string",
            "enum": [
              "residential",
              "commercial",
              "retail",
              "industrial"
            ]
          }
        },
        "required": [
          "zone",
          "from"
        ]
      },
      "page": "/Voltopia/"
    }
    place_plantAction

    Place a plant on one tile: solar, wind, battery, biogas, charging_hub, park, run_of_river (river tile), pumped_storage (land tile next to the lake), hydrogen, tidal (coastal sea tile), geothermal (hotspot tile), logistics_depot, bus_depot, heat_plant, heat_store, substation, train_station (needs a track and a road; covers roads within 8 tiles), freight_terminal (needs a track; factories/depots within 6 tiles), rail_yard (needs a track; accepted anywhere beside one, but fields trains only while its tile is energised — find_tiles rail_yard_without_grid spots a dark yard). See get_build_catalog for costs and roles. Renewables and storage get a share of their price from the yearly grant pot (grantShare): 'spent' is the net price, 'grant' what the pot paid.

    View tool JSON
    {
      "name": "place_plant",
      "kind": "act",
      "impl": "imperative",
      "description": "Place a plant on one tile: solar, wind, battery, biogas, charging_hub, park, run_of_river (river tile), pumped_storage (land tile next to the lake), hydrogen, tidal (coastal sea tile), geothermal (hotspot tile), logistics_depot, bus_depot, heat_plant, heat_store, substation, train_station (needs a track and a road; covers roads within 8 tiles), freight_terminal (needs a track; factories/depots within 6 tiles), rail_yard (needs a track; accepted anywhere beside one, but fields trains only while its tile is energised — find_tiles rail_yard_without_grid spots a dark yard). See get_build_catalog for costs and roles. Renewables and storage get a share of their price from the yearly grant pot (grantShare): 'spent' is the net price, 'grant' what the pot paid.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "plant": {
            "type": "string",
            "enum": [
              "solar",
              "wind",
              "battery",
              "biogas",
              "charging_hub",
              "park",
              "run_of_river",
              "pumped_storage",
              "hydrogen",
              "tidal",
              "geothermal",
              "logistics_depot",
              "bus_depot",
              "heat_plant",
              "heat_store",
              "substation",
              "train_station",
              "freight_terminal",
              "rail_yard"
            ]
          },
          "x": {
            "type": "integer"
          },
          "y": {
            "type": "integer"
          }
        },
        "required": [
          "plant",
          "x",
          "y"
        ]
      },
      "page": "/Voltopia/"
    }
    bulldozeAction

    Clear every tile in a rectangle: removes roads, power lines, zones, buildings and plants (no refund). Use undo to revert the last build action instead.

    View tool JSON
    {
      "name": "bulldoze",
      "kind": "act",
      "impl": "imperative",
      "description": "Clear every tile in a rectangle: removes roads, power lines, zones, buildings and plants (no refund). Use undo to revert the last build action instead.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "One corner of the rectangle."
          },
          "to": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "Opposite corner; omit for a single tile."
          }
        },
        "required": [
          "from"
        ]
      },
      "page": "/Voltopia/"
    }
    undoAction

    Undo the most recent build action (road, line, zone, plant or bulldoze) and refund it.

    View tool JSON
    {
      "name": "undo",
      "kind": "act",
      "impl": "imperative",
      "description": "Undo the most recent build action (road, line, zone, plant or bulldoze) and refund it.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    set_speedAction

    Set the simulation speed: 0 pauses, 1 is normal (4 ticks/s), 3 is fast, 6 is very fast.

    View tool JSON
    {
      "name": "set_speed",
      "kind": "act",
      "impl": "imperative",
      "description": "Set the simulation speed: 0 pauses, 1 is normal (4 ticks/s), 3 is fast, 6 is very fast.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "speed": {
            "type": "integer",
            "enum": [
              0,
              1,
              3,
              6
            ]
          }
        },
        "required": [
          "speed"
        ]
      },
      "page": "/Voltopia/"
    }
    set_tax_rateAction

    Set the tax rate, 0 to 0.3. Above 0.12 happiness starts to suffer.

    View tool JSON
    {
      "name": "set_tax_rate",
      "kind": "act",
      "impl": "imperative",
      "description": "Set the tax rate, 0 to 0.3. Above 0.12 happiness starts to suffer.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "rate": {
            "type": "number",
            "minimum": 0,
            "maximum": 0.3
          }
        },
        "required": [
          "rate"
        ]
      },
      "page": "/Voltopia/"
    }
    set_smart_meter_rolloutAction

    Start or pause the smart-meter rollout. Crews install 15 meters per in-game day at 60 each; coverage (metered buildings / buildings) scales smart EV charging and the flexible-load pool that shifts household and heating load into renewable surplus. See smartMeters in get_game_overview.

    View tool JSON
    {
      "name": "set_smart_meter_rollout",
      "kind": "act",
      "impl": "imperative",
      "description": "Start or pause the smart-meter rollout. Crews install 15 meters per in-game day at 60 each; coverage (metered buildings / buildings) scales smart EV charging and the flexible-load pool that shifts household and heating load into renewable surplus. See smartMeters in get_game_overview.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          }
        },
        "required": [
          "active"
        ]
      },
      "page": "/Voltopia/"
    }
    set_demand_responseSensitive Action

    Sign or end the demand-response contract with the commercial, retail and industrial buildings. Under contract, up to 40 % of the business base load and 60 % of the industrial base load is shed automatically in a deficit — after storage and biogas, before import — whenever a call is cheaper than importing at the spot price or the import link cannot carry the shortfall, for at most 4 h a day. Costs 6 per business and day plus 0.2 per energy unit shed. See demandResponse in get_game_overview.

    View tool JSON
    {
      "name": "set_demand_response",
      "kind": "transact",
      "impl": "imperative",
      "description": "Sign or end the demand-response contract with the commercial, retail and industrial buildings. Under contract, up to 40 % of the business base load and 60 % of the industrial base load is shed automatically in a deficit — after storage and biogas, before import — whenever a call is cheaper than importing at the spot price or the import link cannot carry the shortfall, for at most 4 h a day. Costs 6 per business and day plus 0.2 per energy unit shed. See demandResponse in get_game_overview.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          }
        },
        "required": [
          "active"
        ]
      },
      "page": "/Voltopia/"
    }
    plant_forestAction

    Plant woods on a rectangle of empty land (60 per tile). Saplings grow over a few days, raise happiness nearby, and slow the wind for turbines standing in them.

    View tool JSON
    {
      "name": "plant_forest",
      "kind": "act",
      "impl": "imperative",
      "description": "Plant woods on a rectangle of empty land (60 per tile). Saplings grow over a few days, raise happiness nearby, and slow the wind for turbines standing in them.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "from": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "One corner of the rectangle."
          },
          "to": {
            "type": "object",
            "properties": {
              "x": {
                "type": "integer",
                "description": "0-based column, 0 = west edge"
              },
              "y": {
                "type": "integer",
                "description": "0-based row, 0 = north edge"
              }
            },
            "required": [
              "x",
              "y"
            ],
            "description": "Opposite corner; omit for a single tile."
          }
        },
        "required": [
          "from"
        ]
      },
      "page": "/Voltopia/"
    }
    set_market_tradingAction

    Enable or disable spot-market trading: storage sells the top slice of a nearly full pool at scarcity prices while a surplus refills it, and buys cheap regional surplus.

    View tool JSON
    {
      "name": "set_market_trading",
      "kind": "act",
      "impl": "imperative",
      "description": "Enable or disable spot-market trading: storage sells the top slice of a nearly full pool at scarcity prices while a surplus refills it, and buys cheap regional surplus.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ]
      },
      "page": "/Voltopia/"
    }
    buy_insulationSensitive Action

    Buy the one-off building insulation upgrade (4000 money) that halves the heating load.

    View tool JSON
    {
      "name": "buy_insulation",
      "kind": "transact",
      "impl": "imperative",
      "description": "Buy the one-off building insulation upgrade (4000 money) that halves the heating load.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    set_policyAction

    Switch a city ordinance on or off: rooftopPvMandate (new buildings get rooftop PV, subsidy per building), nightTariff (plain cars charge at home only at night, bigger flex pool), speedLimit (slower cars, less charging energy, more congestion), smartMeterMandate (rollout twice as fast, city pays half). Each costs money per day and moves happiness; see get_build_catalog.policies.

    View tool JSON
    {
      "name": "set_policy",
      "kind": "act",
      "impl": "imperative",
      "description": "Switch a city ordinance on or off: rooftopPvMandate (new buildings get rooftop PV, subsidy per building), nightTariff (plain cars charge at home only at night, bigger flex pool), speedLimit (slower cars, less charging energy, more congestion), smartMeterMandate (rollout twice as fast, city pays half). Each costs money per day and moves happiness; see get_build_catalog.policies.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "rooftopPvMandate",
              "nightTariff",
              "speedLimit",
              "smartMeterMandate"
            ]
          },
          "active": {
            "type": "boolean"
          }
        },
        "required": [
          "id",
          "active"
        ]
      },
      "page": "/Voltopia/"
    }
    take_creditAction

    Borrow money; it lands at once and the yearly rate is fixed from then on. loan: 5000 / 10000 / 20000, 10 days, base rate 0.08 a year, amortising (equal principal share per tick), repayable early without fee. bond: 50000 / 100000, 40 days, base rate 0.05 a year, interest only, the full principal due at maturity, not repayable early. The credit rating (A–D) adds a spread to the base rate; D gets no credit. More debt relative to income and days ending in the red lower the rating; at most 4 credits, total debt capped at 30 days of average daily operating income over the last 5 days (days not yet played count as 0, floor 1000 a day), so a new city gets loans and a bond needs a track record. Debt service is never skipped — a negative treasury pays 0.25 a year overdraft interest. See finance.offers in get_game_overview for today's rates and availability. In a sandbox city every credit is refused with `sandbox`.

    View tool JSON
    {
      "name": "take_credit",
      "kind": "act",
      "impl": "imperative",
      "description": "Borrow money; it lands at once and the yearly rate is fixed from then on. loan: 5000 / 10000 / 20000, 10 days, base rate 0.08 a year, amortising (equal principal share per tick), repayable early without fee. bond: 50000 / 100000, 40 days, base rate 0.05 a year, interest only, the full principal due at maturity, not repayable early. The credit rating (A–D) adds a spread to the base rate; D gets no credit. More debt relative to income and days ending in the red lower the rating; at most 4 credits, total debt capped at 30 days of average daily operating income over the last 5 days (days not yet played count as 0, floor 1000 a day), so a new city gets loans and a bond needs a track record. Debt service is never skipped — a negative treasury pays 0.25 a year overdraft interest. See finance.offers in get_game_overview for today's rates and availability. In a sandbox city every credit is refused with `sandbox`.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "loan",
              "bond"
            ]
          },
          "amount": {
            "type": "integer",
            "description": "One of the amounts on offer for the kind."
          }
        },
        "required": [
          "kind",
          "amount"
        ]
      },
      "page": "/Voltopia/"
    }
    repay_creditSensitive Action

    Pay off an open loan early, without fee, from the treasury (needs money for the full outstanding principal). Bonds cannot be repaid early. Ids are in finance.credits of get_game_overview. Less debt helps the credit rating.

    View tool JSON
    {
      "name": "repay_credit",
      "kind": "transact",
      "impl": "imperative",
      "description": "Pay off an open loan early, without fee, from the treasury (needs money for the full outstanding principal). Bonds cannot be repaid early. Ids are in finance.credits of get_game_overview. Less debt helps the credit rating.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          }
        },
        "required": [
          "id"
        ]
      },
      "page": "/Voltopia/"
    }
    set_grid_feeAction

    Set the grid fee billed to buildings per energy unit they consume, 0 to 0.02 (snapped to steps of 0.001). Smart-metered buildings pay 50 % less. Any fee costs happiness (10 per unit of fee); the income shows as gridFees in the budget and counts towards the credit rating.

    View tool JSON
    {
      "name": "set_grid_fee",
      "kind": "act",
      "impl": "imperative",
      "description": "Set the grid fee billed to buildings per energy unit they consume, 0 to 0.02 (snapped to steps of 0.001). Smart-metered buildings pay 50 % less. Any fee costs happiness (10 per unit of fee); the income shows as gridFees in the budget and counts towards the credit rating.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "rate": {
            "type": "number",
            "minimum": 0,
            "maximum": 0.02
          }
        },
        "required": [
          "rate"
        ]
      },
      "page": "/Voltopia/"
    }
    advance_timeAction

    Run the simulation for a number of ticks or days (max 3 days, 960 ticks per day) and return when done. Runs at very fast speed (6x) if the game is paused and restores the previous speed afterwards. Returns the resulting overview summary (in a sandbox city sandbox: true instead of money).

    View tool JSON
    {
      "name": "advance_time",
      "kind": "act",
      "impl": "imperative",
      "description": "Run the simulation for a number of ticks or days (max 3 days, 960 ticks per day) and return when done. Runs at very fast speed (6x) if the game is paused and restores the previous speed afterwards. Returns the resulting overview summary (in a sandbox city sandbox: true instead of money).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ticks": {
            "type": "integer",
            "minimum": 1
          },
          "days": {
            "type": "number",
            "minimum": 0,
            "description": "Alternative to ticks (fractions allowed)."
          }
        }
      },
      "page": "/Voltopia/"
    }
    save_gameAction

    Save the city to the autosave slot now (the game also autosaves periodically).

    View tool JSON
    {
      "name": "save_game",
      "kind": "act",
      "impl": "imperative",
      "description": "Save the city to the autosave slot now (the game also autosaves periodically).",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    list_savesAnswer

    List the named saves (the saves page), newest first: id, name, savedAt (ms since epoch), in-game day, population, money, map size and compatible (false = from another game version; can only be deleted). The autosave is not listed.

    View tool JSON
    {
      "name": "list_saves",
      "kind": "answer",
      "impl": "imperative",
      "description": "List the named saves (the saves page), newest first: id, name, savedAt (ms since epoch), in-game day, population, money, map size and compatible (false = from another game version; can only be deleted). The autosave is not listed.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    save_to_slotAction

    Save the running city as a named save. Without "id" a new save is created (name defaults to "Voltopia – day N"); with the "id" of an existing save it is overwritten (keeping its name unless "name" is given). Returns the save summary.

    View tool JSON
    {
      "name": "save_to_slot",
      "kind": "act",
      "impl": "imperative",
      "description": "Save the running city as a named save. Without \"id\" a new save is created (name defaults to \"Voltopia – day N\"); with the \"id\" of an existing save it is overwritten (keeping its name unless \"name\" is given). Returns the save summary.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "maxLength": 80
          },
          "id": {
            "type": "string",
            "description": "Existing save to overwrite (see list_saves)."
          }
        }
      },
      "page": "/Voltopia/"
    }
    load_saveAction

    Replace the running city with a named save (see list_saves); the current city is NOT saved first — use save_to_slot if it should be kept. The page reloads. Saves from another game version (compatible: false) are rejected.

    View tool JSON
    {
      "name": "load_save",
      "kind": "act",
      "impl": "imperative",
      "description": "Replace the running city with a named save (see list_saves); the current city is NOT saved first — use save_to_slot if it should be kept. The page reloads. Saves from another game version (compatible: false) are rejected.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      },
      "page": "/Voltopia/"
    }
    delete_saveSensitive Action

    Delete a named save for good (see list_saves for ids).

    View tool JSON
    {
      "name": "delete_save",
      "kind": "transact",
      "impl": "imperative",
      "description": "Delete a named save for good (see list_saves for ids).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      },
      "page": "/Voltopia/"
    }
    share_cityAction

    Pack the running city into a link (`…#city=<code>`) that opens it in Voltopia. Returns `url` and `bytes` (link length). The history is not included. Not available during a scenario.

    View tool JSON
    {
      "name": "share_city",
      "kind": "act",
      "impl": "imperative",
      "description": "Pack the running city into a link (`…#city=<code>`) that opens it in Voltopia. Returns `url` and `bytes` (link length). The history is not included. Not available during a scenario.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    open_shared_cityAction

    Add the city from a share link as a named save ('Shared city – <date>') and return its id. Does NOT load it — call load_save to switch.

    View tool JSON
    {
      "name": "open_shared_city",
      "kind": "act",
      "impl": "imperative",
      "description": "Add the city from a share link as a named save ('Shared city – <date>') and return its id. Does NOT load it — call load_save to switch.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "description": "A full share link or just the code after #city=."
          }
        },
        "required": [
          "url"
        ]
      },
      "page": "/Voltopia/"
    }
    start_new_cityAction

    Abandon the current city and start a new one (the page reloads; the old autosave is replaced). Optional map size (48, 64, 96, 128), difficulty (easy, normal, hard), seed, sandbox and disasters (off, mild, normal, harsh; default normal, off in a sandbox) — the same intensity dial as the new-game dialog; "off" founds a city with no storms, fires or floods.

    View tool JSON
    {
      "name": "start_new_city",
      "kind": "act",
      "impl": "imperative",
      "description": "Abandon the current city and start a new one (the page reloads; the old autosave is replaced). Optional map size (48, 64, 96, 128), difficulty (easy, normal, hard), seed, sandbox and disasters (off, mild, normal, harsh; default normal, off in a sandbox) — the same intensity dial as the new-game dialog; \"off\" founds a city with no storms, fires or floods.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "size": {
            "type": "integer",
            "enum": [
              48,
              64,
              96,
              128
            ]
          },
          "difficulty": {
            "type": "string",
            "enum": [
              "easy",
              "normal",
              "hard"
            ]
          },
          "seed": {
            "type": "integer",
            "description": "Fixed world seed; omit for a random map."
          },
          "disasters": {
            "type": "string",
            "enum": [
              "off",
              "mild",
              "normal",
              "harsh"
            ]
          },
          "sandbox": {
            "type": "boolean",
            "description": "Unlimited money, no credit, grant or goals; disasters default to off."
          }
        }
      },
      "page": "/Voltopia/"
    }
    list_scenariosAnswer

    The shipped scenarios: id, title, teaser, deadline in days, map size, starting money, disasterScale (0 = off .. 1.6 = harsh), rules (importCapacityFactor: 0 = no import link through substations; startSeason), win conditions (all must hold at the deadline) and fail conditions (any one ends the run). Metric `money` is net worth (money minus debt), `cash` is money on hand (the bankruptcy fail condition).

    View tool JSON
    {
      "name": "list_scenarios",
      "kind": "answer",
      "impl": "imperative",
      "description": "The shipped scenarios: id, title, teaser, deadline in days, map size, starting money, disasterScale (0 = off .. 1.6 = harsh), rules (importCapacityFactor: 0 = no import link through substations; startSeason), win conditions (all must hold at the deadline) and fail conditions (any one ends the run). Metric `money` is net worth (money minus debt), `cash` is money on hand (the bankruptcy fail condition).",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "page": "/Voltopia/"
    }
    start_scenarioAction

    Abandon the current city and start a shipped scenario (the page reloads; the autosave is replaced). See list_scenarios.

    View tool JSON
    {
      "name": "start_scenario",
      "kind": "act",
      "impl": "imperative",
      "description": "Abandon the current city and start a shipped scenario (the page reloads; the autosave is replaced). See list_scenarios.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "enum": [
              "island",
              "dunkelflaute",
              "oldTown",
              "stormSeason"
            ]
          }
        },
        "required": [
          "id"
        ]
      },
      "page": "/Voltopia/"
    }