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 | Read first. Topics: full, workflow, units, spec, interior, archetypes, style, limits, staged, building, testing, smoothing. Focused topics avoid resending the entire spec reference. |
| get_runtime_statusB | Diagnose version, runtime paths, game definitions and timeout without writing files. |
| list_hull_presetsA | List built-in hull archetypes with a one-line description and main dimensions. |
| list_workbenchesA | Bench size keywords (S, M, L, XL, XXL, MAX) with their size in metres and the edit areas
in the player's game (including workbench mods) that are at least that big. Set one as
|
| get_hull_specB | Full resolved spec (every parameter) for a preset, or the defaults. Use as a starting point. |
| preview_hullA | Build a hull and return a preview image (3/4 above and below, front, side, top) plus stats. spec: partial or full hull spec (see hull_design_guide); merged over the preset if given.
preset: optional preset name to start from.
design: a stored design (store_design / save_hull) to start from instead of a preset.
patch: JSON-Patch ops applied last, e.g. [{"op": "replace", "path":
"/superstructure/bridge/height", "value": 2.5}]. List items can be named instead of indexed.
spec_path: a .json file holding a spec (or a stored design), read before |
| preview_interiorA | Cutaway of the interior: a section on the centreline 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 after adding |
| deck_profileB | Deck height above the keel, the |
| save_hullA | Save a hull into the Stormworks vehicles folder so it can be loaded at a workbench. name: vehicle name shown in the game's Load menu. The spec is also stored as a design of the same name. overwrite: replace an earlier design saved by this tool under the same name. Vehicles not made by this tool are never overwritten. design/patch: as in preview_hull, e.g. save_hull(name="Iowa", design="Iowa"). |
| 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. spec_path: read the spec from a .json file instead of sending it. Stored designs are plain JSON files that every call re-reads, so editing one on disk takes effect at once. |
| list_designsC | Names of stored hull, land and imported drafts. |
| load_designD | Hull spec, or land/import draft metadata and revision. Use part tools to edit land/imports. |
| search_partsB | Search installed part definitions by name/id; returns actual sizes, mass and pagination. |
| get_part_definitionC | Installed footprint, attachment/sealing surfaces and relevant part settings. |
| get_part_orientationB | Explain local mounting/motion/function axes and solve their 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 effective rotation plus proper r/mirror for XML. Arrow signs still need game checks. |
| get_calibration_observationsB | Read recorded in-game checks for a part; expose stale evidence and contradictory reports. |
| complaintA | Report an encountered problem or improvement request; save local JSON and Markdown reports. Required: title and description. Include failing tool/arguments, expected vs actual behavior, error messages, steps, affected design/vehicle/definition and a suggested improvement if known. Categories: placement, rotation, smoothing, connections, definitions, performance, tool_error, usability, missing_feature, other. Severity: low, medium, high, blocker. Returns a report id and file paths; no external issue is published. |
| list_complaintsB | List locally recorded complaints newest first; filter by text, category or severity. |
| get_complaintB | Read a complaint's complete reproduction evidence and Markdown report by its id. |
| land_vehicle_guideC | Road vehicle workflow, installed parts, chassis spec, units, layout limits and game checks. |
| search_land_partsB | Installed components useful for land builds, with footprints and actual connection ports. Categories: wheels, tracks, lights, controls, propulsion, transmission, power, fuel, cooling, body, logic, utility. Use get_part_definition/get_part_orientation for details. Family filters are a convenience; search_parts exposes the full installed catalogue. |
| find_land_vehiclesB | Read the player's saves for wheel/track examples, including unnamed experiments. kind=wheeled/tracked/all. Counts only vehicle body components, not controller internals. Wheel-based boats/aircraft can match; this does not establish vehicle purpose or quality. |
| analyze_land_vehicleA | Analyze a saved v3 vehicle or draft: body-local axles, wheelbase, mounts and light axes. Sections: wheels, lights, controls, equipment, issues. All component rows are paginated. forward is a horizontal unit vector; otherwise infer each body's driver-seat facing, falling back to +z explicitly. Axle span measures mounting origins, not tyre-centre track. Multi-body references stay separate. Suspension/steering sweep and mesh edits need game checks. |
| create_land_vehicleA | Create a land draft: default utility_buggy, or preset=chassis for a custom bare layout. Read land_vehicle_guide for the spec. Dimensions/positions are game metres on the 0.25 m grid. Buggy includes bodywork, four suspension wheels, saddle, premade fuel tanks, engine, battery, radiator and actual lights. Parts must fit, mount and leave driver/service access. preset=humvee_4x4 has open custom-door bays, compact glass and enclosed chassis pipes. humvee_4x4 and utility_4x4 include radiator/fuel/air/exhaust/driveline pipes and typed links. Use query_connections/edit_connections/route_connections/preflight_vehicle to complete custom layouts. Extend through query_parts/edit_parts/preview_vehicle, then save_vehicle. |
| analyze_vehicleA | Read saved-vehicle examples, body groups, link coverage and rudder mounting/motion issues. Supports multi-body references without editing them. Observations are not game verification. Search rudder/propeller/engine/trans to focus evidence. Sections: parts, links, controllers, bodies, placement_issues, connection_candidates, open_transmission_ports. All are paginated. |
| suggest_hull_blocksB | Rank real block slope families by an outward x/y/z normal. Read the selection rules: the angle alone cannot choose pyramid vs inverse, location, or a watertight joint. |
| analyze_hullA | Measure actual hull material, floor gaps, and partial-face seams at z stations. x/stations are integer BLOCK coordinates. name reads a saved v3 vehicle (one body at a time); otherwise build spec/preset/design in the fixed build frame. Procedural reports include floor height above keel and drop from rim, so verify depth before saving. Imported saved vehicles use their original body-local frame; choose body_id explicitly when the largest structural body isn't the hull. source="backups" reads data/backups/vehicles, e.g. name="autosave9". This is read-only geometry, not a seal test. |
| import_vehicleB | Import an existing single-body version-3 vehicle into a new draft; never changes the source. Existing configured/wired parts are protected. Use query_parts/edit_parts and save_vehicle. |
| query_partsC | Parts and revision for precise editing. select: ids, name, definition or inclusive bounds [[min_x,min_y,min_z],[max_x,max_y,max_z]]. Coordinates are integer blocks (0.25 m), in the uncentred build frame for generated hulls/land drafts and original body-local frame for imports. Rows include scalar settings, proper rotation plus a local mirror bitmask, and the effective transform matrix. Partial multi-voxel selections are rejected; select an id to target the whole component. |
| edit_partsA | Atomic part edits; defaults to preview only. 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%). commit=true keeps one undo step. |
| undo_editsC | Restore the previous committed edit batch. Keeps up to ten batches of undo history. |
| query_connectionsC | Installed/configured node indices, transmission surface indices, wires and draft revision. Wire endpoints: {part_id,port}; pipe endpoints: {part_id,surface_index}. Coordinates are uncentred integer blocks. Paginate components; links retain stable IDs for disconnect. |
| edit_connectionsA | Preview/commit typed control and electrical wires. 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. Power/fluid use route_connections. Original XML/settings remain lossless; commit has undo. |
| route_connectionsA | Preview/commit actual pipes between transmission faces, preserving access and structure. 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,...]}. 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. 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. |
| preflight_vehicleB | Check engine fuel/air/exhaust/radiator paths, driveline, electrical power and controls. Reports configuration_checks (explicit engine power), gearbox_configuration_checks (saved off/on ratio indices, including reverse-off warnings) and wheel_direction_checks (drive arrows and steering signs for supported direct/inverting paths). Unknown logic stays unknown. Includes blocked transmission exits. Separates physical pipes from typed wires and keeps functional component circuits distinct. Connected geometry still needs in-game testing. |
| plan_vehicle_repairsA | Diagnose faults and test suggested edits/wires/pipes without changing the draft. Returns severity, affected IDs, explanations, concrete operations and manual-review reasons. Use the returned revision, plan_id and available finding IDs with repair_vehicle. |
| repair_vehicleB | Preview selected repairs with overlays and before/after preflight. commit=true applies the whole batch as one undo step. Revision/plan guards reject stale suggestions and conflicting repairs. |
| list_vehicle_assembliesB | Reusable controls, required ID bindings and gate definitions. Place any required gates using edit_parts, then bind queried IDs with apply_vehicle_assembly; geometry is not preset-specific. |
| apply_vehicle_assemblyA | Configure/wire reusable controls using explicit current part IDs. Existing target drivers 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. Preview includes diagnostics. commit=true creates one undo step; tune behavior in game. |
| preview_vehicle_diagnosticsB | Show red fault parts, amber blocked exits and blue wheel/steering arrows over geometry. Repair and assembly previews additionally show proposed green wires/pipes. Uses draft block coordinates. |
| prepare_vehicle_validationC | Export a separate test vehicle and create a seven-check in-game checklist tied to its exact XML SHA-256 and draft revision. Starts pending; topology never counts as game evidence. |
| get_vehicle_validationB | Read game-test evidence and report whether the export bytes and draft revision still match. |
| record_vehicle_validationA | Record human-observed pass/fail/skipped results with evidence and measurements. Refuses a changed export or mismatched hash. All seven checks need pass evidence for a passed run. |
| preview_vehicleA | Preview a draft using installed meshes. yaw/pitch/zoom/focus gives a close-up. layer=all/components/structure; components hides bodywork to inspect seats/tanks/powertrain. Paint and wheel neutral poses are approximate; the image is not an in-game screenshot. |
| save_vehicleC | Save any draft. Imported originals are never overwritten, even with overwrite=true. |
| check_sealA | Trace finished geometry from interior to outside: sealed, leaking or indeterminate. Generated drafts choose room/hull seeds automatically. Imported drafts require seeds: [[x,y,z],...] or [{name,position:[x,y,z]}], in integer blocks in their original body frame. door_state=closed/open models supported doors. Returns connected compartments and a highlighted escape path. Unsupported nearby sealing geometry prevents a confident pass. |
| list_game_vehiclesC | Vehicles in the player's Stormworks vehicles folder, optionally filtered by a substring. |
| preview_game_vehicleA | Render any vehicle from the player's vehicles folder, e.g. to study their existing boats. Uses installed component meshes, with reported footprint fallbacks. source=workshop reads an installed numeric item ID. For articulated vehicles choose body_id; by default show the largest body alone, without pretending unrelated local frames line up. |
| inspect_viewA | Render one large view of a hull design or saved vehicle from any angle, like a camera you can point. Use it to check details the fixed previews hide. name: a vehicle in the player's vehicles folder, or pass spec/preset/design(+patch). yaw: 0 = side view with bow to the right, 90 = from the bow, 180 = other side, 270 = stern. pitch: degrees above (+) or below (-) the horizon; -30 shows the hull bottom. zoom: 1 = whole vehicle, 2-6 = close-up. focus: [fx, fy, fz] fractions of the bounding box to centre on (x across, y up, z stern to bow), e.g. [0.5, 0.3, 0.9] = low on the bow. highlight: a superstructure box name (designs only): painted magenta and labelled, and its position is reported 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). |
| open_in_viewerC | Open a vehicle in the interactive 3D viewer in the player's web browser. name: saved vehicle or installed numeric workshop item (source=workshop). design supports hull/land/imported drafts. Uses installed component meshes, with explicit fallbacks. For articulated references choose body_id; otherwise shows the largest body alone. |
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 50 tools
Several tool clusters overlap: analyze_vehicle vs analyze_land_vehicle vs analyze_hull, preview_vehicle vs preview_game_vehicle vs inspect_view vs open_in_viewer, and search_parts vs search_land_parts vs query_parts. The detailed descriptions clarify contexts, but an agent could still misselect within these families, especially for preview and analysis tasks.
Most tools follow a snake_case verb_noun pattern (list_*, get_*, query_*, edit_*, preview_*, save_*). A few deviate by using noun phrases or unusual forms (complaint, deck_profile, hull_design_guide, land_vehicle_guide, open_in_viewer), but the overall convention is readable and predictable.
50 tools is heavy for a single MCP server, even for a complex domain like Stormworks vehicle design. Many tools could be consolidated or split into sub-servers (e.g., hull design, land design, part editing, validation, previews). The count exceeds the practical sweet spot and increases selection burden.
The surface covers hull and land vehicle design, part editing, connection routing, validation lifecycle, previews, and complaint reporting very thoroughly. Minor gaps exist such as no explicit delete/rename design tool and no aircraft-specific design guide, but core workflows are fully supported.