Stormworks MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SW_GAME_DIR | No | Stormworks install, for part definitions and workbench locations. Workshop tile mods are found through Steam. | Found through your Steam libraries |
| SW_DESIGNS_DIR | No | Saved design specs. | %APPDATA%\stormworks-hull-mcp\designs |
| SW_TOOL_TIMEOUT | No | Seconds a preview or save may run before the server stops it. | 300 |
| SW_VEHICLES_DIR | No | Where vehicles are read and saved. | %APPDATA%\Stormworks\data\vehicles |
| SW_DEFINITIONS_DIR | No | Part definitions directly. | <game>\rom\data\definitions |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| hull_design_guideA | Return the boat design guide as Markdown: workflow, units, every spec field, style rules and lessons from in-game testing. Read topic="workflow" before designing a boat, then fetch focused topics as needed instead of resending the full guide. Road and land vehicles have their own guide (land_vehicle_guide). Read-only. |
| get_runtime_statusA | Report the server version and the paths it uses: Stormworks vehicles folder, game part definitions, stored designs, build cache, and the tool timeout, with notes on anything missing. Use it when a tool cannot find the game, its parts or the player's vehicles. Read-only; it never creates folders. |
| list_hull_presetsA | List the built-in boat hull presets: name, one-line description, length x beam x depth
in metres, and whether it has an interior. Pass a name as |
| list_workbenchesA | List the workbench size keywords (S, M, L, XL, XXL, MAX) with each size in metres and
the edit areas in the player's game, including workbench mods, that are at least that big.
Ask the player which bench they will build at, then set it as |
| get_hull_specA | Return the fully resolved hull spec, every parameter with its value, for a preset or for the defaults. Use it to see what a preset sets or as a starting spec to copy and change; hull_design_guide(topic="spec") explains each field. Read-only. |
| preview_hullA | Build a hull and return a preview image (3/4 views from above and below, front, side, top) plus a text summary: size, part counts, deck heights, flotation estimate, bench fit and warnings. This is the design loop: preview, compare the image with the player's brief, adjust, repeat, then save_hull. Use inspect_view for one large close-up from any angle and preview_interior for rooms. Nothing is written. Spec sources apply in order: preset or design, spec_path, spec, patch. |
| preview_interiorA | Render an interior cutaway: a centreline section plus a labelled deck plan for every room
level, and a per-room report (clear size, floor width, doors with sill heights and floor
steps, engines, warnings). Use it after adding |
| deck_profileA | Tabulate the deck at stations from the transom: deck height above the keel, the |
| save_hullA | Write a hull into the Stormworks vehicles folder as .xml with its Load-menu thumbnail, and store the spec as a design of the same name. Use it once the preview is approved, e.g. save_hull(name="Iowa", design="Iowa"); drafts edited part by part (imports, land vehicles) use save_vehicle. Refuses a name already used by a vehicle this tool did not write, and replaces its own earlier save only with overwrite=true. Returns the file path, part count and summary; the player loads it from a workbench's Load menu. |
| store_designA | Keep a design spec on the server without writing a vehicle, so later calls can send only changes. Typical loop: store_design("Iowa", spec=...) once, then preview_hull(design="Iowa", patch=[...]) to try a change and store_design("Iowa", design="Iowa", patch=[...]) to keep it. Replaces any stored design of that name; save_hull(name, design=name) writes the vehicle when ready. design=X copies all of draft X: its spec, the parts added with edit_parts, and its wires and pipes (a patch that removes a part they use makes later calls ask you to reconnect it). Undo history is not copied. Stored designs are plain JSON files that every call re-reads, so editing one on disk takes effect at once. Returns the stored file's path. |
| list_designsA | List the names of drafts stored on this server, sorted: hull designs (store_design,
save_hull), imported vehicles (import_vehicle) and land drafts (create_land_vehicle). Pass a
name as |
| load_designA | Read a stored draft. A hull design returns its full spec; to change it, prefer design=name with patch=[...] in preview_hull or store_design over resending the spec. An imported or land draft returns its kind, source, current revision, coordinate frame and edit log; change those with query_parts and edit_parts, not a spec. Read-only; fails when no draft has that name. |
| search_partsA | Search the installed Stormworks part catalogue by definition id or display name. Each row gives the id, display name, size in blocks and metres, and mass, with the total and next_offset for paging. Use it to find a definition id, then get_part_definition for surfaces and sealing or get_part_orientation for mounting axes. search_land_parts groups land-build families; query_parts lists the parts inside a draft. Read-only. |
| get_part_definitionA | Return one installed part's definition: footprint voxels, attachment and sealing surfaces, logic nodes, settings, mass, seal coverage, and whether new placement is allowed (with the reason when it is not). Use it after search_parts to check how a part mounts, connects or seals; get_part_orientation solves its rotation. Read-only; fails when the definition is not installed. |
| get_part_orientationA | Explain a part's local mounting, motion and function axes and solve the rotation that points them in the requested world directions. Example Fin Rudder targets: mount_normal=[0,0,1], span_axis=[0,1,0]. Road wheel targets should include axle_axis, wheel_reference_up and wheel_forward; right placements can require mirror. Returns the effective rotation plus the proper r and mirror for edit_parts or XML. Read-only; arrow signs still need checking in game. |
| get_calibration_observationsA | Read the player's recorded in-game checks for one part: the latest result per test case and check, the number of stale reports (the definition or test vehicle changed since), and checks with contradictory results. Use it before relying on an orientation or mounting rule for that part. It reports evidence and runs no test. Read-only; returns no checks when nothing was recorded. |
| land_vehicle_guideA | Return the road and land vehicle guide as Markdown: workflow, installed parts, chassis spec, units, layout limits and the checks to do in game. Read it before create_land_vehicle or any land work; boats use hull_design_guide instead. Read-only. |
| search_land_partsA | List installed components useful for land builds, by family, with footprints and their actual connection ports, with paging. Use it to choose parts for a land draft. search_parts covers the whole catalogue without families; get_part_definition and get_part_orientation give one part's detail. Read-only. |
| find_land_vehiclesA | Scan the player's saved vehicles, or installed Workshop items, for wheel or track layouts to use as land-build references, including unnamed experiments, with paging. Counts vehicle body components only, not controller internals; wheeled boats or aircraft can match, so a hit says nothing about a vehicle's purpose or quality. Follow up on a match with analyze_land_vehicle; list_game_vehicles only lists names. Read-only. |
| analyze_land_vehicleA | Measure a saved vehicle or a land draft for land building: body-local axles, wheelbase, mounts, light axes, controls and equipment, one section per call with paging. Use it on references from find_land_vehicles or on your own draft before editing; general part audits of boats use analyze_vehicle. Axle span measures mounting origins, not tyre-centre track; multi-body vehicles stay separate; suspension, steering sweep and mesh fit still need game checks. Read-only. |
| create_land_vehicleA | Create a new land vehicle draft and return its preview image, notes and revision. The default utility buggy has bodywork, four suspension wheels, saddle, premade fuel tanks, engine, battery, radiator and lights; humvee_4x4 has four seats, open custom-door bays, compact glass and enclosed chassis pipework; utility_4x4 keeps the older sliding-door layout. Read land_vehicle_guide first. Writes only a stored draft, never a game file, and refuses an existing name. Then complete it with query_parts/edit_parts and the connection tools, check it with preflight_vehicle, and save it with save_vehicle. |
| analyze_vehicleA | Audit how a saved vehicle is built: parts, logic links, controllers, bodies, placement issues such as rudder mounting and motion, connection candidates and open transmission ports, one section per call with paging. Use it to learn from the player's vehicles or to debug a save. Wheel layouts use analyze_land_vehicle, and hull material and floor gaps use analyze_hull. Handles multi-body vehicles. Read-only; findings are observations, not game verification. |
| study_referencesA | Measure how vehicles the player rates are built: slope piece sizes, pyramid/inverse pairing, ballast, sub-bodies, detail parts, paint and logic. kind (boat/land/other) is detected from road wheels and marine propulsion unless given; mark hovercraft, aircraft and unusual builds "other" so they don't widen the boat range. Returns per-vehicle metrics and the min-max range per kind. Writes nothing unless save_as is given. Measurements describe habits, not quality. |
| score_vehicleA | Compare a saved vehicle (name), a draft or stored design, or a hull spec/preset with a reference set from study_references. Each construction metric is checked against the min-max of references of the same kind, with a hint where it falls outside. A miss says where to look, not that the vehicle is broken: references differ in size and purpose. Read-only. |
| suggest_hull_blocksA | Rank the game's slope block families (wedges, pyramids and inverse pyramids by slope ratio) by how closely they match a surface's outward normal, with the rules for choosing between them. Use it when placing hull slopes by hand. The angle alone cannot choose pyramid vs inverse, the position, or a watertight joint: check those with inspect_view and check_seal. Read-only. |
| analyze_hullA | Measure actual hull material, floor gaps and partial-face seams at z stations: keel, walking floor and rim separately, since a part's footprint is not its solid material. Use it before saving to check depth and floor height, or to study a saved hull. Procedural reports use the fixed build frame and include floor height above keel and drop from the rim; saved vehicles use their own body-local frame, so pick body_id when the largest body is not the hull. Read-only geometry, not a seal test (use check_seal). |
| import_vehicleA | Copy an existing single-body vehicle (data version 3) into a new editable draft; the source file is never changed. Use it to modify a vehicle the player already has, then query_parts/edit_parts, preview_vehicle, and save_vehicle under a different name. Configured and wired parts are protected. Fails when the draft name exists, the vehicle has several bodies or it uses an older data version. Returns the part count. |
| query_partsA | List a draft's parts and its current revision for exact editing. Rows include id, definition, position, scalar settings, proper rotation plus a local mirror bitmask, and the effective transform matrix. Coordinates are integer blocks (0.25 m): the uncentred build frame for generated hulls and land drafts, the original body-local frame for imports. Call it before edit_parts and pass its revision. A selection that cuts through a multi-voxel part is rejected; select its id instead. Read-only. |
| edit_partsA | Add, remove, move, rotate, paint or copy parts in a draft as one atomic batch. Pass the revision from query_parts. Ops: add(part/parts), fill(bounds,color), remove/replace/move/rotate/paint/copy/mirror/repeat. Selection ops need select={ids/bounds/name/definition}. move/copy/repeat use delta in blocks; repeat count is additional copies; rotate uses a local-to-world matrix or r string and pivot; mirror uses axis and plane. replace needs part; paint needs color. Added parts use definition, position in blocks, rotation, optional mirror (1=x, 2=y, 4=z), color, name and scalar settings. Placement rotation accepts an effective mirrored matrix; use that or proper rotation plus mirror. Prebuilt engines default to max_force_scale=1 (100%). Returns what changed (added parts with their new ids, such as edit:0:0, next to the names you gave), warnings and the new revision; preview=true adds the image and full notes. commit=true keeps one undo step (undo_edits). Wires and pipes use edit_connections and route_connections. |
| undo_editsA | Revert a draft to before its last committed batch from edit_parts, edit_connections, route_connections, repair_vehicle or apply_vehicle_assembly. Keeps up to ten batches; there is no redo. Fails when the revision is stale or nothing is left to undo. Returns the new revision and the number of undo steps remaining. |
| query_connectionsA | List a draft's connection points and links: each component's logic and electric node indices and its pipe/transmission surface indices, existing wires and routes with stable link ids, and the draft revision. Call it before edit_connections, route_connections or apply_vehicle_assembly. Wire endpoints are {part_id,port}; pipe endpoints are {part_id,surface_index}. Coordinates are uncentred integer blocks. Read-only, paged by component; query_parts lists geometry instead. |
| edit_connectionsA | Add or remove typed control and electrical wires in a draft. Uses the query_connections revision. Ops: {op:'connect',from:{part_id,port},to:{part_id,port}} or {op:'disconnect',link_id}. Signal outputs connect to inputs; electricity is bidirectional. One driver per signal input. Pipes and shafts use route_connections; whole starter, clutch, brake or light set-ups use apply_vehicle_assembly. Original XML and settings stay lossless. Returns the wires added and removed, warnings and the new revision; preview=true adds the image and full notes. commit=true keeps one undo step. |
| route_connectionsA | Lay physical pipes between transmission faces in a draft, preserving access and structure. Wires use edit_connections instead. Each route: {from:{part_id,surface_index},to:{part_id,surface_index},bounds?:[[lo],[hi]], waypoints?:[[x,y,z],...],name?:str,pipe_style?:auto|exposed|enclosed,through_blocks?:[part_id,...], color?:RRGGBB}. Bounds/waypoints use integer blocks. Routes minimize length, then bends. Default auto uses enclosed pipes for explicitly selected through_blocks; other cells use exposed pipes. through_blocks replaces only selected unconfigured/unlinked 01_block parts, retaining paint. Exposed pipes are colour-coded by contents (ISO 14726: fuel brown, cooling/fresh water blue, sea water green, exhaust black, air maroon, oil orange; shafts orange); color overrides it. Enclosed pipes keep the colour of the hull around them. All selected blocks must lie on the route (use waypoints if needed); removal restores them. Other structure and access are preserved; routes never join unrelated pipe networks. Clutch/gearbox ports may use several routes; create an explicit T-piece for a branch. Remove an added route with {op:'remove',route_id} from query_connections, then reroute. Returns the pipes added per route, warnings and the new revision; preview=true adds the image and full notes. commit=true keeps one undo step. |
| preflight_vehicleA | Check that a draft's systems are connected: engine fuel/air/exhaust/radiator paths, driveline (to wheels, or straight to a propeller on boats: no clutch or gearbox needed), electrical power and controls. By default lists only the faults, each once; detail=true adds every passing check, configuration_checks (explicit engine power), gearbox_configuration_checks, wheel_direction_checks and repair operations. A missing check's detail names what it expected and what the port does reach. Run it after wiring or routing and before saving; plan_vehicle_repairs turns its findings into fixes. Read-only; connected geometry still needs testing in game. |
| plan_vehicle_repairsA | Diagnose a draft's faults and test suggested edits, wires and pipes without changing it. Returns each finding's severity, affected ids, explanation, concrete operations, and whether it can be repaired automatically or needs a design choice. Pass the returned revision, plan_id and the ids of available findings to repair_vehicle. Read-only. |
| repair_vehicleA | Apply chosen fixes from plan_vehicle_repairs to a draft; previews by default, with overlays and a before/after preflight. commit=true applies the batch as one undo step; rerun preflight_vehicle afterwards. Stale revisions or plans and conflicting repairs are rejected. Manual findings need a design choice and are never applied here. |
| list_vehicle_assembliesA | List the reusable control assemblies (engine start and idle, clutch engagement, brake/reverse, lighting) with the part ids each must be bound to and the logic gates it expects. Place any required gates with edit_parts, then bind the queried ids with apply_vehicle_assembly. Geometry is not preset-specific. Read-only. |
| apply_vehicle_assemblyA | Configure and wire a reusable control set-up (starter and idle, clutch, brake/reverse or lights) using explicit current part ids, instead of wiring each link with edit_connections. Existing drivers of the target inputs are replaced atomically. Clutch needs its own gate, separate from the idle throttle gate. Starter is manual/hold; idle is open-loop, and reverse must be selected while stopped. engine_start_idle takes one engine id or a list (twins share the throttle gate and starter). Returns the operations and a compact preflight (detail=true for all of it, preview=true for the diagnostic image); commit=true creates one undo step. Tune behaviour in game. |
| preview_vehicle_diagnosticsA | Render a draft with its preflight faults drawn over it: red faulty parts, amber blocked exits, blue wheel and steering arrows. Returns the image and the preflight report. Use it to see where preflight_vehicle's findings are; open_in_viewer(design=..., diagnostics=true) gives the player an interactive version. Coordinates are draft blocks. Read-only. |
| prepare_vehicle_validationA | Export a draft as a separate test vehicle in the game folder and open a validation run: a seven-check in-game checklist tied to the file's exact SHA-256 and the draft revision. Use it when a draft is ready for the player to test; record their results with record_vehicle_validation and review them with get_vehicle_validation. Refuses vehicles this tool did not write and replaces its own only with overwrite=true. Checks start pending; connected geometry never counts as game evidence. |
| get_vehicle_validationA | Read a validation run: the checklist with any recorded results and evidence, plus export_matches and draft_matches, which say whether the exported file and the draft are still the ones tested. Read-only; fails when the run id is unknown. |
| record_vehicle_validationA | Record what the player observed in game for a validation run. Only human observations belong here, never preflight output. Each observation replaces any earlier result for the same check. Refuses a changed export, a mismatched hash or a different game version. The run passes only when all seven checks pass with evidence. |
| preview_vehicleA | Render a draft (imported, land or edited hull) with installed component meshes and return the image plus notes. yaw/pitch/zoom/focus give a close-up; layer=components hides bodywork to inspect seats, tanks and powertrain. Hull specs use preview_hull and vehicles in the game folder use preview_game_vehicle. Paint and wheel poses are approximate; the image is not an in-game screenshot. Read-only. |
| save_vehicleA | Write a stored draft into the Stormworks vehicles folder as .xml with its Load-menu thumbnail. Use it for drafts edited part by part (imports, land vehicles, edited hulls); save_hull is the shortcut for a hull spec. Refuses a name used by a vehicle this tool did not write and the imported original, even with overwrite=true; replaces its own earlier save only with overwrite=true. Returns the file path, part count and notes. |
| check_sealA | Test whether a draft is watertight by tracing from interior points to the outside: sealed, leaking or indeterminate per compartment. Returns an image with any escape path highlighted and a report of connected compartments. Use it after edits that touch the hull or doors. Unsupported sealing geometry nearby prevents a confident pass. Read-only. |
| list_game_vehiclesA | List the vehicle names in the player's Stormworks vehicles folder, sorted. Pass a name to preview_game_vehicle, inspect_view, analyze_vehicle or import_vehicle. Drafts stored on this server are listed by list_designs. Read-only; fails when the folder is missing (set SW_VEHICLES_DIR). |
| preview_game_vehicleA | Render a vehicle from the player's vehicles folder or an installed Workshop item and return the image plus a size and part summary, e.g. to study the player's existing boats. Uses installed component meshes, reporting any footprint fallbacks. Articulated vehicles show the largest body alone unless body_id is given. inspect_view points a camera at one detail; drafts use preview_vehicle. Read-only. |
| inspect_viewA | Render one large view of a hull design or saved vehicle from any angle, like a camera you can point, to check details the fixed previews hide. Returns the image and a caption; with highlight, the box's position in spec units and as game-metre heights above the keel. Views at pitch 0 or +-90 get metre rulers in spec units (z from the transom, y from the keel, x from the centreline). Use preview_hull for the standard set of views. Read-only. |
| open_in_viewerA | Open a vehicle or design in the interactive 3D viewer in the player's web browser so they can orbit and inspect it themselves. You cannot see that window: use inspect_view or the preview tools to look yourself. Writes one temporary HTML page, replaced on each call, and changes nothing else. Uses installed component meshes with explicit fallbacks; articulated vehicles show the largest body alone unless body_id is given. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 49 tools
The descriptions go to great lengths to cross-reference each other (e.g. 'boats use hull_design_guide instead', 'wires use edit_connections'), which helps, but the surface has many near-siblings: preview_hull vs preview_vehicle vs preview_game_vehicle vs preview_interior vs preview_vehicle_diagnostics, and analyze_vehicle vs analyze_land_vehicle vs analyze_hull vs study_references. An agent must carefully parse long prose to pick correctly, and similar tool names invite misselection.
Almost all tools use a predictable verb_noun snake_case pattern (list_, get_, preview_, analyze_, search_, save_, edit_, query_, apply_, prepare_, record_, plan_, repair_, check_, open_, import_, find_, score_, study_, suggest_, undo_). A few noun-first outliers (hull_design_guide, land_vehicle_guide, deck_profile) are minor deviations but still readable.
At 49 tools the surface is heavy even for a complex CAD-like domain, with many specialized variants (separate preview, analyze, guide, and save tools per resource type). Consolidation into parameterized tools would reduce the burden on an agent navigating this set.
The lifecycle is well covered: design from presets/specs, edit parts, wire/pipes, preflight and repair planning, validation runs, save, and analysis/scoring. Minor gaps exist (e.g. no delete/rename of stored drafts or saved vehicles), but agents can work around them.