{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T16:28:28.879Z","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp","markdownUrl":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp.md","server":{"slug":"richy7734-stori3d-mcp","name":"Stori3D","registryName":"io.github.richy7734/stori3d-mcp","description":"See and edit the building project open in Stori3D: walls, rooms, openings, finishes, skies.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"stori3d-mcp","type":"npm","identifier":"stori3d-mcp","withdrawn":false,"url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp","version":"0.9.0","transport":"stdio","scoredAt":"2026-11-05T05:17:14.364Z"},"score":{"total":70,"tier":"medium","status":"scored","weekDelta":3,"history":[{"date":"2026-11-05","total":70},{"date":"2026-11-04","total":70},{"date":"2026-11-03","total":70},{"date":"2026-11-02","total":69},{"date":"2026-11-01","total":69},{"date":"2026-10-31","total":68},{"date":"2026-10-30","total":68},{"date":"2026-10-29","total":67},{"date":"2026-10-28","total":67},{"date":"2026-10-27","total":66},{"date":"2026-10-26","total":66},{"date":"2026-10-25","total":65},{"date":"2026-10-24","total":65},{"date":"2026-10-23","total":64},{"date":"2026-10-22","total":64},{"date":"2026-10-21","total":63},{"date":"2026-10-20","total":63},{"date":"2026-10-19","total":63},{"date":"2026-10-18","total":62},{"date":"2026-10-17","total":62},{"date":"2026-10-16","total":61},{"date":"2026-10-15","total":61},{"date":"2026-10-14","total":61},{"date":"2026-10-13","total":31},{"date":"2026-10-12","total":31},{"date":"2026-10-11","total":31},{"date":"2026-10-07","total":16}]},"categories":[{"name":"Supply Chain Security","score":98,"verdict":"partial","reasons":["No malware found by supply-chain analysis.","No known CVEs affecting this package version or its production dependencies.","No install/post-install scripts declared.","30 of 93 dependencies flagged as unhealthy."],"codes":[{"code":"supplychain.malware_clean","args":{}},{"code":"cve.none","args":{}},{"code":"installscript.none","args":{}},{"code":"dephealth.assessed","args":{"deps":"93","unhealthy":"30"}}]},{"name":"Provenance & Transparency","score":6,"verdict":"fail","reasons":["Repository check failed: no source repository is declared.","Provenance check failed: no build-provenance attestation is published.","Licence could not be checked: the licence is shipped as a file inside the package, not declared as a standard (SPDX) licence identifier, so we cannot tell whether it is OSI-approved.","Actively maintained (last published 19 days ago).","Security-disclosure policy not yet verified: we couldn't inspect the source repository."],"codes":[{"code":"provenance.repo_none","args":{}},{"code":"provenance.none","args":{}},{"code":"license.inconclusive","args":{"reason":"license_file_only"}},{"code":"maintenance.recent","args":{"age_days":"19"}},{"code":"disclosure.repo_inconclusive","args":{"reason":"no_repo_declared"}}]},{"name":"Schema Quality & AI Usability","score":75,"verdict":"fail","reasons":["100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).","AI-judged instruction clarity (good).","Context-footprint check failed: tool/resource definitions use about 10254 tokens (~131/item across 78 items; 77 tools + 1 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.descriptions","args":{"pct":"100"}},{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_heavy","args":{"avg":"131","items":"78","tools":"77","tokens":"10254","resources":"1"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":73,"verdict":"partial","reasons":["Stability observed for 22 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"22"}}]},{"name":"Tool Coverage","score":77,"verdict":"partial","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","32% of tool parameters carry a description."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"32"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","All 6 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.","An AI judge read all 79 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_declared","args":{"pct":"100","annotated":"6","destructive":"6"}},{"code":"toolsafety.manipulation_clean","args":{"units":"79","judged":"79"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28."],"codes":[{"code":"protocol.supported","args":{"latest":"2026-07-28","version":"2025-11-25"}}]}],"inconclusive":["Licence could not be checked: the licence is shipped as a file inside the package, not declared as a standard (SPDX) licence identifier, so we cannot tell whether it is OSI-approved.","Security-disclosure policy not yet verified: we couldn't inspect the source repository."],"malware":[],"components":[{"slug":"stori3d-mcp","type":"npm","identifier":"stori3d-mcp","withdrawn":false,"score":70,"current":true,"url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp","markdownUrl":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp.md"}],"facts":[{"label":"Registry","value":"npm"},{"label":"Package","value":"stori3d-mcp"},{"label":"Version","value":"0.9.0"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"connect","title":"Connect to Stori3D","description":"Pair with the Stori3D tab showing this 6-digit code (Stori3D → AI agent → Connect). Needed once per session before the other tools work.","inputs":[{"name":"code","type":"string","required":true,"description":"The 6-digit code shown in Stori3D"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":60},{"name":"status","title":"Connection status","description":"Whether Stori3D is connected, and to which project.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":20},{"name":"project_summary","title":"Project summary","description":"Start here. The open project at a glance: levels (id, name, elevation and floor-to-floor height in mm, room count and usable room area in m²), element counts, custom property definitions, site location and sun, the active level and the selection. Units: lengths mm, areas m², angles degrees; plan x east, y north.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":81},{"name":"list_elements","title":"List elements","description":"Elements of the model as plain data, filtered and paged. Kinds: level, wall (start/end points, length along the centre line, bulge and radius for curved walls, height, thickness, face area m², opening ids), slab, roof, stair, door, window (width, height, sill, host wall id, size limits), furniture (type, position, rotation, size, limits), room (area m², enclosed, tag), column, beam (start/end, width, depth, top), ramp (start = foot, end = top, rise, gradient), lift (position, shaft size, height, stops), parking (aisle start/end, count, accessible, bay size, angle), grid (origin, rotation, spacings, labels; not on a level), model (an imported IFC storey, SketchUp/glTF/OBJ model, or a group: source, file, position, rotation, bounds, part count, IFC classes; its parts with list_model_parts). Outlines are summarised unless detail is \"full\". Every element has id, kind, name, level (the level's id) and properties (custom data).","inputs":[{"name":"detail","type":"string","required":false,"description":"full includes outlines"},{"name":"kind","type":null,"required":false,"description":"Only these kinds"},{"name":"level","type":"string","required":false,"description":"Level id or name"},{"name":"limit","type":"integer","required":false,"description":"Default 100"},{"name":"offset","type":"integer","required":false,"description":null},{"name":"property","type":"object","required":false,"description":"Only elements with this custom property (set to this value)"},{"name":"selected","type":"boolean","required":false,"description":"Only what the user has selected"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":326},{"name":"get_element","title":"Get element","description":"One element by id, in full (outlines included).","inputs":[{"name":"id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":27},{"name":"get_selection","title":"Get selection","description":"What the user has selected in Stori3D right now — use it when they say \"this wall\" or \"these doors\".","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"get_schedule","title":"Get schedule","description":"A schedule table: standard columns for the kind plus a column per custom property. openings = doors and windows (type, width, height, sill, wall); rooms (area, gross area, perimeter, enclosed); walls (length, height, thickness, face area, openings); slabs; stairs (risers, riser height, going); columns; beams; ramps (rise, gradient, transitions, headroom); lifts; parking (bays, accessible bays, bay numbers per row); furniture.","inputs":[{"name":"format","type":"string","required":false,"description":"Default json ({ columns, rows })"},{"name":"kind","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":129},{"name":"list_catalogue","title":"List catalogue","description":"What can be placed: furniture types for place_furniture (with default sizes in mm, category and style), including about 180 realistic models from the asset library (\"ph:…\": furniture, Lighting, Decor, Office, plants and trees; ceiling and wall lamps and pictures are hung automatically), the user's My library pieces (\"custom:…\"), and door and window types for place_opening. The built-in pieces (no prefix) are one modern set: prefer them, and library models of style \"modern\" or \"any\", unless the user wants a period look (classic, vintage, industrial, oriental). Filter by category in your own reasoning: the list is long.","inputs":[{"name":"kind","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":152},{"name":"list_finishes","title":"List finishes","description":"Finishes for paint_surface: id, name, group (Paint & plaster, Brick & block, Concrete & stone, Timber, Tiles, Flooring, Roofing, Metal & glass, Fabric, Landscape), tile (mm per pattern repeat) and source (built-in; ambientCG: photographed PBR materials, \"acg:…\"; or Poly Haven: photographed textures, \"pht:…\", e.g. oak and walnut veneers, linen, bouclé, wool, leather, render and microcement in several colours). Filter with group and/or search words (e.g. \"oak\", \"terrazzo\", \"white paint\"). With element instead: that element's surfaces and the finish on each (a room gives walls, floor and ceiling).","inputs":[{"name":"element","type":"string","required":false,"description":"An element or room id: list its surfaces and their finishes instead"},{"name":"group","type":"string","required":false,"description":null},{"name":"search","type":"string","required":false,"description":"Words to match in id, name or group"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":203},{"name":"list_skies","title":"List skies","description":"Skies for set_sky (HDRI environments: clear, cloudy, sunset, overcast, city, countryside, night, studio) with id, name and group, plus the project's current sky and its settings (null: the default lighting).","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":59},{"name":"list_palettes","title":"List style palettes","description":"Style palettes for apply_palette: matched sets of finishes (walls, floor, light and dark timber, fabric, bouclé, textiles, lamp shades, an accent, leather, stone, worktop, metal, brass, tapware, joinery, rug, pots) such as Warm modern, Scandi, Japandi, Industrial and Coastal, with the finish id in each slot and which one the project uses.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":92},{"name":"list_properties","title":"List custom properties","description":"The project's custom property definitions (name, type text/number/boolean/choice, unit, choices, which kinds they apply to).","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"get_plan_svg","title":"Get plan (SVG)","description":"The architectural 2D plan of a level as SVG text (walls cut at 1.2 m, doors and swings, dimensions in mm with chains through doors and windows, room names and areas, a north arrow). For a picture you can look at, use capture_view with mode \"plan\".","inputs":[{"name":"level","type":"string","required":false,"description":"Level id or name (default: the active level)"},{"name":"scale","type":"number","required":false,"description":"Drawing scale denominator, default 100 (1:100); US scales too, e.g. 48 for 1/4\" = 1'-0\""}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":126},{"name":"get_drawing_svg","title":"Get elevation or section (SVG)","description":"An elevation (south/north/east/west: the façade seen from that side), a section (section-ew: an east–west cut looking north; section-ns: a north–south cut looking east), or a section line the user placed on the plan (section: its letter) of the whole building as SVG text: hidden-line drawing, cut walls/slabs/roofs solid, level lines with elevations. Drawing units are metres, y down. For a picture, use capture_view with mode \"drawing\".","inputs":[{"name":"flip","type":"boolean","required":false,"description":"Sections: look the other way (south / west)"},{"name":"offset","type":"number","required":false,"description":"Sections: where to cut, mm (north for section-ew, east for section-ns). Default: through the middle"},{"name":"scale","type":"number","required":false,"description":"Drawing scale denominator, default 100"},{"name":"section","type":"string","required":false,"description":"A section line placed on the plan, by its letter (e.g. \"A\"); plans show them as section marks"},{"name":"view","type":"string","required":false,"description":"Default south; ignored with section"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":222},{"name":"list_views","title":"List saved views","description":"The project's saved camera views (id and name). Go to one with go_to_view or picture it with capture_view mode \"view\".","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"list_sheets","title":"List sheets","description":"The drawing sheets (number, name, paper, orientation, status, revision and revisions, and each drawing on them: id, kind plan|elevation|view|schedule|note, level or view, scale, position in mm from the top left), the title block (project, practice, project number, drawn by, layout, extra fields), the notes and dimensions on drawings, and the choices: paper sizes, statuses, schedules.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":98},{"name":"list_comments","title":"Read client comments","description":"The comments clients left on the project's review link: each thread's number (as on its pin), open or resolved, where it's pinned (plan point mm and height, level and element ids: get_element or capture_view mode \"element\" to see it) and its messages (who, what, when). For \"summarise the client's comments\" or \"which ones are about the kitchen\".","inputs":[{"name":"status","type":"string","required":false,"description":"Default open"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":97},{"name":"export_file","title":"Export a file","description":"Save the project, or a drawing of it, as a file on the user's computer (Downloads unless path says where): ifc (IFC 4, for Revit, Archicad, consultants), glb, gltf, usdz (Apple AR), stl (3D printing), obj (the selection), dxf or svg (a level's plan, or drawing south|north|east|west|section-ew|section-ns; at scale, default 1:100), pdf (every sheet, one a page), xlsx (every schedule, a sheet each) or stori3d (the project file). Returns where it was saved.","inputs":[{"name":"drawing","type":"string","required":false,"description":"dxf/svg: plan (default) or an elevation or section"},{"name":"format","type":"string","required":true,"description":null},{"name":"level","type":"string","required":false,"description":"dxf/svg plans: level id or name (default the active level)"},{"name":"path","type":"string","required":false,"description":"Where to save: a folder or a file path (~ allowed). Default: Downloads"},{"name":"scale","type":"number","required":false,"description":"dxf/svg: 100 = 1:100"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":234},{"name":"export_image","title":"Export an image","description":"A presentation image (PNG) as the viewport draws it, at full size, saved on the user's computer: from the current camera, the overview or a saved view. transparent: the building alone on transparency (for brochures). For photo-real images use render_image. Returns where it was saved.","inputs":[{"name":"height","type":"integer","required":false,"description":"Pixels, default 2000"},{"name":"path","type":"string","required":false,"description":null},{"name":"transparent","type":"boolean","required":false,"description":null},{"name":"view","type":"string","required":false,"description":"current (default), overview, or a saved view's id or name"},{"name":"width","type":"integer","required":false,"description":"Pixels, default 3000"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":128},{"name":"render_image","title":"Render a realistic image","description":"A path-traced (photo-real) image: glass, lamps and the sky's light, saved on the user's computer. Takes from under a minute to many minutes: samples 64 is a quick draft, 256 good (default), 1024 best; bigger images take longer. Set the sky (set_sky) and sun (set_sun) and the camera (a saved view) first. The user sees Stori3D busy meanwhile. Returns where it was saved.","inputs":[{"name":"format","type":"string","required":false,"description":null},{"name":"height","type":"integer","required":false,"description":"Pixels, default 1080"},{"name":"path","type":"string","required":false,"description":null},{"name":"samples","type":"integer","required":false,"description":null},{"name":"view","type":"string","required":false,"description":"current (default), overview, or a saved view"},{"name":"width","type":"integer","required":false,"description":"Pixels, default 1920"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":171},{"name":"export_video","title":"Export a tour video","description":"A walkthrough tour as an MP4 video (H.264), saved on the user's computer: about as long to make as the tour lasts. 1920 × 1080 at 30 fps by default; 1080 × 1920 for phones and Reels. Returns where it was saved.","inputs":[{"name":"fps","type":null,"required":false,"description":null},{"name":"height","type":"integer","required":false,"description":null},{"name":"path","type":"string","required":false,"description":null},{"name":"tour","type":"string","required":true,"description":"Tour id or name"},{"name":"width","type":"integer","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":107},{"name":"list_tours","title":"List walkthrough tours","description":"The project's walkthrough tours: camera paths played like a video (stops with plan positions in mm and heights above the ground in mm, travel and pause seconds, loop, where visitors may walk from, and the player-only `link` and scroll `story` link if shared), plus the project details shown with shared tours.","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":74},{"name":"capture_view","title":"Look at the model","description":"A picture, so you can check your work. mode: \"overview\" (the whole building from the south-east, above; site context hidden), \"plan\" (the 2D plan drawing of a level, north up, with dimensions), \"drawing\" (an elevation or section, see get_drawing_svg), \"element\" (one element framed), \"view\" (a saved view), \"current\" (exactly what the user sees). Look after significant changes.","inputs":[{"name":"context","type":"boolean","required":false,"description":"Include site context (terrain, neighbouring buildings)"},{"name":"drawing","type":"string","required":false,"description":"For mode \"drawing\" (default south)"},{"name":"element","type":"string","required":false,"description":"Element id for mode \"element\""},{"name":"height","type":"integer","required":false,"description":"Pixels, default 768 (plans keep their proportions)"},{"name":"level","type":"string","required":false,"description":"Level id or name for mode \"plan\""},{"name":"mode","type":"string","required":false,"description":"Default current"},{"name":"offset","type":"number","required":false,"description":"For a section drawing: where to cut, mm"},{"name":"underlays","type":"boolean","required":false,"description":"Show underlays (plans or drawings the user traced over; hidden by default). Use with mode \"current\" or \"overview\" from above to read a plan you are asked to model"},{"name":"view","type":"string","required":false,"description":"Saved view id or name, for mode \"view\""},{"name":"width","type":"integer","required":false,"description":"Pixels, default 1024"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":281},{"name":"list_model_parts","title":"List a model's parts","description":"The parts of an imported model (list_elements kind model): each part's id, name and, for IFC, its class (IFCWALL, IFCDOOR…), GlobalId and property sets (e.g. Pset_WallCommon FireRating). Filter by IFC class; paged. Part ids work with select and capture_view mode \"element\".","inputs":[{"name":"id","type":"string","required":true,"description":"The model's id"},{"name":"ifcClass","type":"string","required":false,"description":"e.g. IFCWALL, IFCWINDOW"},{"name":"limit","type":"integer","required":false,"description":"Default 100"},{"name":"offset","type":"integer","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":127},{"name":"list_underlays","title":"List underlays","description":"The underlays: plans and drawings (images, PDF pages, DXF linework) the user brought in to trace over, with their file, level, extent in plan (mm) and whether they show. To read one, capture_view with underlays: true (mode \"current\" after set_camera from above, or \"overview\").","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":78},{"name":"select","title":"Select","description":"Select elements in Stori3D so the user sees them highlighted and their properties (e.g. the doors that fail a check). Empty ids clears the selection.","inputs":[{"name":"ids","type":"array","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":47},{"name":"set_camera","title":"Move the camera","description":"Move the user's view: preset \"overview\", \"top\" (plan view of the active level) or \"element\" (frame one element), or an eye position and target (plan mm plus height in mm above ground).","inputs":[{"name":"element","type":"string","required":false,"description":null},{"name":"position","type":"object","required":false,"description":null},{"name":"preset","type":"string","required":false,"description":null},{"name":"target","type":"object","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":81},{"name":"go_to_view","title":"Go to a saved view","description":"Move the user's camera to a saved view (id or name from list_views).","inputs":[{"name":"view","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":32},{"name":"set_active_level","title":"Switch level","description":"Make a level the active one (the one being edited and drawn in plan; others show ghosted or hidden). New elements go on the active level unless you name one.","inputs":[{"name":"level","type":"string","required":true,"description":"Level id or name"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":55},{"name":"set_section","title":"Section cut","description":"Cut the model to see inside: \"plan\" (horizontal, height mm above the active floor), \"x\" (vertical at plan x = offset mm), \"y\" (vertical at plan y = offset mm), or \"off\".","inputs":[{"name":"height","type":"number","required":false,"description":null},{"name":"mode","type":"string","required":true,"description":null},{"name":"offset","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":77},{"name":"set_sun","title":"Set the sun","description":"Sun and shadows for the site (needs a site location: set_site): it changes the project's saved sun (not an undo step). Date YYYY-MM-DD and time in hours local to the site (e.g. 9.5 = 09:30). Returns the sun's azimuth (degrees clockwise from north) and altitude. Use with capture_view for shadow studies.","inputs":[{"name":"date","type":"string","required":false,"description":null},{"name":"enabled","type":"boolean","required":false,"description":null},{"name":"time","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":106},{"name":"set_site","title":"Set the site location","description":"Put the project on the map: an address (looked up; the first match is used, and the matches are returned) or latitude/longitude, and north: degrees true north is turned clockwise from the plan's north (up). The map, terrain and neighbouring buildings load around it, and set_sun can then light it. Changes the project's saved site (not an undo step).","inputs":[{"name":"address","type":"string","required":false,"description":"Street address or place, e.g. \"322 King William St, Adelaide\""},{"name":"lat","type":"number","required":false,"description":null},{"name":"lon","type":"number","required":false,"description":null},{"name":"north","type":"number","required":false,"description":"Degrees clockwise from plan north (default: unchanged, 0 for a new site)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":146},{"name":"update_element","title":"Update element","description":"Change an element. Lengths in mm, angles in degrees. By kind: level {name, elevation, height}; wall {length (along its centre line), height, thickness, type (a wall type name or null), bulge (curves it: mm its middle bows out, + to the left going start to end, 0 straight, at most half its straight length), start, end (moves its ends; walls joined there follow)}; slab {thickness}; roof {roofType flat|shed|gable|hip, pitch, overhang, thickness}; stair {width, going, maxRiser, rise, shape straight|L|U, turn left|right, winders (true: an L or U turns on tapered treads instead of a landing), position, rotation}; door/window {width, height, open 0–1, hand left|right, offset (slides it along its wall: mm from the wall's start to its centre)}, window also {sill}; model {position, rotation} (moves an imported model or group); furniture {position, rotation, width, depth, height, lamp {on, lumens, kelvin}}; column {shape rect|round, width, depth, height, position, rotation}; beam {start, end, width, depth, top}; ramp {start, end, width, rise, thickness, transition, headroom}; lift {position, rotation, width, depth, wall, height, doorWidth, doorHeight}; parking {start, end, count, accessible, bayWidth, bayLength, angle, startNumber} (moving start/end refits the count unless count is given); grid {origin, rotation, xSpacings, ySpacings, numbers, letters, extension}; room {name}. wall also {attachTop: true} to extend it up to the roof over it. Any: {name}. Fields a kind doesn't have are an error. A size outside the element's limits fails with the allowed range unless clamp is true.","inputs":[{"name":"changes","type":"object","required":true,"description":null},{"name":"clamp","type":"boolean","required":false,"description":null},{"name":"id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":447},{"name":"create_walls","title":"Draw walls","description":"Walls along a polyline of plan points (wall centre lines, mm). closed joins the last point back to the first. Corners join automatically. Default height 2700, thickness 200 (mm). bulges curves segments: bulges[i] is how far segment i (point i to the next) bows out at its middle, mm, + to the left going along the polyline, − to the right, 0 straight; at most half the segment's length (a half circle). type: a wall type (its layers set the thickness; the types are in the guide).","inputs":[{"name":"bulges","type":"array","required":false,"description":"Per segment, mm; missing or 0 = straight"},{"name":"closed","type":"boolean","required":false,"description":null},{"name":"height","type":"number","required":false,"description":null},{"name":"level","type":"string","required":false,"description":"Level id or name (default: the active level)"},{"name":"points","type":"array","required":true,"description":null},{"name":"thickness","type":"number","required":false,"description":null},{"name":"type","type":"string","required":false,"description":"Wall type name, e.g. \"Brick cavity 300\""}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":213},{"name":"split_wall","title":"Split a wall","description":"Split a wall in two, offset mm from its start (along its centre line): the wall keeps the first part and its id, a new wall (returned) takes the rest with the doors and windows in it. Not through a door or window, nor within 50 mm of an end. Curved walls split into two arcs of the same circle.","inputs":[{"name":"offset","type":"number","required":true,"description":null},{"name":"wall","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":94},{"name":"create_slab","title":"Create floor slab","description":"A floor slab over any outline (plan points, mm; closed for you), on a level: for a terrace, a landing or a floor that isn't a room. Rooms get theirs from create_room. Default thickness 200 mm.","inputs":[{"name":"level","type":"string","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"outline","type":"array","required":true,"description":null},{"name":"thickness","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":84},{"name":"create_roof","title":"Create roof","description":"A roof over a room (its id or name) or an outline (wall centre lines, mm). roofType gable (default), hip, shed or flat; pitch in degrees (default 30); overhang past the wall centre lines (default 400 mm); thickness (default 180 mm). It sits on the tallest wall of the level unless eave (mm above the level floor) says where; walls under it are cut to its slope, and attachTop on a wall (update_element) runs it up to the roof. L, T and U shaped rooms get joined roofs with valleys.","inputs":[{"name":"eave","type":"number","required":false,"description":null},{"name":"level","type":"string","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"outline","type":"array","required":false,"description":null},{"name":"overhang","type":"number","required":false,"description":null},{"name":"pitch","type":"number","required":false,"description":null},{"name":"roofType","type":"string","required":false,"description":null},{"name":"room","type":"string","required":false,"description":"Room id or name (or give outline)"},{"name":"thickness","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":206},{"name":"create_stair","title":"Create stair","description":"A stair from a level up to the next: position = the foot of its first riser, at the middle of its width (plan mm); rotation = the way it climbs, degrees counter-clockwise from east (0 east, 90 north). shape straight, L (quarter turn) or U (half turn), turning left or right; winders: true turns on tapered treads instead of a landing. The riser count follows from the rise (default the level's floor-to-floor height) and maxRiser (default 180). It opens a stairwell in the slab above it. Check the footprint with capture_view mode \"plan\". Defaults: width 1000, going 280 mm.","inputs":[{"name":"going","type":"number","required":false,"description":null},{"name":"level","type":"string","required":false,"description":null},{"name":"maxRiser","type":"number","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"position","type":"object","required":true,"description":"Plan point in mm (x east, y north), relative to its level"},{"name":"rise","type":"number","required":false,"description":null},{"name":"rotation","type":"number","required":false,"description":null},{"name":"shape","type":"string","required":false,"description":null},{"name":"turn","type":"string","required":false,"description":null},{"name":"width","type":"number","required":false,"description":null},{"name":"winders","type":"boolean","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":248},{"name":"create_room","title":"Create room","description":"A room in one step: walls around the outline (wall centre lines; edges that an existing wall already covers are skipped, so rooms can share walls), a floor slab, and a room tag holding its name and custom properties. Returns the room (area = usable floor inside the walls, m²).","inputs":[{"name":"height","type":"number","required":false,"description":"Wall height mm (default 2700)"},{"name":"level","type":"string","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"outline","type":"array","required":true,"description":"Wall centre lines in order; closed for you"},{"name":"properties","type":"object","required":false,"description":null},{"name":"slab","type":"boolean","required":false,"description":"Floor slab (default true)"},{"name":"thickness","type":"number","required":false,"description":"Wall thickness mm (default 200)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":147},{"name":"place_opening","title":"Place door or window","description":"A door or window in a wall. offset = mm from the wall's start point to the opening's centre (get the wall's start/end/length from list_elements). Windows take a sill height (mm above the floor); doors stand on the floor. flip turns it to face the other side (door swing); hand puts the hinges on the right. Fails with the allowed range if it doesn't fit or overlaps another opening, unless clamp is true. Types: list_catalogue.","inputs":[{"name":"clamp","type":"boolean","required":false,"description":null},{"name":"flip","type":"boolean","required":false,"description":null},{"name":"hand","type":"string","required":false,"description":"Hinges on the left (default) or right, seen from the side it opens to"},{"name":"height","type":"number","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"offset","type":"number","required":true,"description":null},{"name":"sill","type":"number","required":false,"description":null},{"name":"type","type":"string","required":true,"description":null},{"name":"wall","type":"string","required":true,"description":null},{"name":"width","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":195},{"name":"place_furniture","title":"Place furniture","description":"A piece of furniture: type from list_catalogue, position (plan mm, its centre) and rotation in degrees counter-clockwise: 0 faces south (back to the north), 90 faces east, 180 north, 270 west. Against a wall, face away from it. Sizes in mm within its limits (fixed dimensions can't change) unless clamp is true. Leave clearances: ~900 mm walkways, 600 mm in front of storage.","inputs":[{"name":"clamp","type":"boolean","required":false,"description":null},{"name":"depth","type":"number","required":false,"description":null},{"name":"height","type":"number","required":false,"description":null},{"name":"level","type":"string","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"position","type":"object","required":true,"description":"Plan point in mm (x east, y north), relative to its level"},{"name":"rotation","type":"number","required":false,"description":null},{"name":"type","type":"string","required":true,"description":null},{"name":"width","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":181},{"name":"place_column","title":"Place column","description":"A structural column standing on its level: position = centre of its foot (plan mm), shape rect (width × depth) or round (width = diameter), default 300 × 300 mm and the level's floor-to-floor height. rotation in degrees counter-clockwise. Cut solid in plans and sections.","inputs":[{"name":"clamp","type":"boolean","required":false,"description":null},{"name":"depth","type":"number","required":false,"description":null},{"name":"height","type":"number","required":false,"description":null},{"name":"level","type":"string","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"position","type":"object","required":true,"description":"Plan point in mm (x east, y north), relative to its level"},{"name":"rotation","type":"number","required":false,"description":null},{"name":"shape","type":"string","required":false,"description":null},{"name":"width","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":148},{"name":"place_beam","title":"Place beam","description":"A horizontal beam along its centre line from start to end (plan mm), default 400 wide × 600 deep with its top just under the floor above (the level's floor-to-floor height − 200). top = height of its top above the level floor, mm. For a transfer beam carrying apartment walls over a car park, make it deeper (e.g. 600 × 1200) and run it along the walls above. Beams above the plan cut are drawn dashed in plans; cut solid in sections.","inputs":[{"name":"clamp","type":"boolean","required":false,"description":null},{"name":"depth","type":"number","required":false,"description":null},{"name":"end","type":"object","required":true,"description":"Plan point in mm (x east, y north), relative to its level"},{"name":"level","type":"string","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"start","type":"object","required":true,"description":"Plan point in mm (x east, y north), relative to its level"},{"name":"top","type":"number","required":false,"description":null},{"name":"width","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":202},{"name":"place_ramp","title":"Place ramp","description":"A straight ramp rising from start (its foot, on the level floor) to end, by default rising the level's floor-to-floor height so it arrives at the floor above, which is then opened over it where headroom (default 2200 mm) would be lost. Default width 3600 (one-way car ramp; two-way ≈ 6100), slab 200 thick, with a 2000 mm half-gradient transition at each end (AS/NZS 2890.1 needs them over 1:8; pass transition 0 for none). The returned gradient is the main slope; residential car ramps up to 1:4 if 20 m or shorter, 1:5 if longer (public 1:5 / 1:6); ramps for people 1:14. To go down to a basement, place it on the lower level, foot at the bottom.","inputs":[{"name":"clamp","type":"boolean","required":false,"description":null},{"name":"end","type":"object","required":true,"description":"Plan point in mm (x east, y north), relative to its level"},{"name":"headroom","type":"number","required":false,"description":null},{"name":"level","type":"string","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"rise","type":"number","required":false,"description":null},{"name":"start","type":"object","required":true,"description":"Plan point in mm (x east, y north), relative to its level"},{"name":"thickness","type":"number","required":false,"description":null},{"name":"transition","type":"number","required":false,"description":null},{"name":"width","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":295},{"name":"place_lift","title":"Place lift","description":"A lift shaft centred on position (plan mm), default 2000 × 2200 clear inside, 200 walls, rising from its level through every level above plus a 3600 overrun, with 900 × 2100 landing doors at each floor it reaches (they follow the levels). The floors it passes through are opened inside the shaft. rotation in degrees: at 0 the doors face south (−y).","inputs":[{"name":"clamp","type":"boolean","required":false,"description":null},{"name":"depth","type":"number","required":false,"description":null},{"name":"doorHeight","type":"number","required":false,"description":null},{"name":"doorWidth","type":"number","required":false,"description":null},{"name":"height","type":"number","required":false,"description":null},{"name":"level","type":"string","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"position","type":"object","required":true,"description":"Plan point in mm (x east, y north), relative to its level"},{"name":"rotation","type":"number","required":false,"description":null},{"name":"wall","type":"number","required":false,"description":null},{"name":"width","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":190},{"name":"place_parking","title":"Lay out parking bays","description":"A row of marked car bays along an aisle line from start to end (plan mm); the bays lie to the LEFT of start → end seen from above (so start (0,0) → end (24000,0) puts them north of y = 0). As many bays as fit unless count is given. Defaults: 2400 × 5400 bays at 90° (AS/NZS 2890.1 class 1A). angle 30–90° for angled parking. accessible = how many bays at the start of the row are accessible ones, each with a 2400 hatched shared area beside it (AS/NZS 2890.6). startNumber numbers the bays. Allow a 5800 aisle (90°) between facing rows. Plans draw the lines and bay numbers; get_schedule kind parking and project_summary give the bay count.","inputs":[{"name":"accessible","type":"integer","required":false,"description":null},{"name":"angle","type":"number","required":false,"description":null},{"name":"bayLength","type":"number","required":false,"description":null},{"name":"bayWidth","type":"number","required":false,"description":null},{"name":"clamp","type":"boolean","required":false,"description":null},{"name":"count","type":"integer","required":false,"description":null},{"name":"end","type":"object","required":true,"description":"Plan point in mm (x east, y north), relative to its level"},{"name":"level","type":"string","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"start","type":"object","required":true,"description":"Plan point in mm (x east, y north), relative to its level"},{"name":"startNumber","type":"integer","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":300},{"name":"create_grid","title":"Add structural grid","description":"A structural (setting-out) grid for the whole building: numbered lines 1, 2, 3… running north–south at xSpacings (mm, between consecutive lines, eastwards from origin) and lettered lines A, B, C… (no I or O) running east–west at ySpacings (northwards). origin = where lines 1 and A cross (plan mm). Every floor plan shows it with bubbles; it isn't on a level. Typical car park spans: 8400 (three 2400 bays between columns) or 7800–8100. numbers/letters override the labels. Place columns on its crossings.","inputs":[{"name":"extension","type":"number","required":false,"description":"mm the lines run past the outer lines, default 1500"},{"name":"letters","type":"array","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"numbers","type":"array","required":false,"description":null},{"name":"origin","type":"object","required":true,"description":"Plan point in mm (x east, y north), relative to its level"},{"name":"rotation","type":"number","required":false,"description":null},{"name":"xSpacings","type":"array","required":true,"description":"mm between consecutive numbered lines; [] for just line 1"},{"name":"ySpacings","type":"array","required":true,"description":"mm between consecutive lettered lines; [] for just line A"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":260},{"name":"solid_operation","title":"Solid tools (booleans)","description":"Boolean on closed objects, by id (elements or other objects): union (merge), subtract (the first minus the others, which are removed), trim (the same, the others kept) or intersect (only the overlap). The first id is kept and becomes a plain mesh (it loses parametric data, so walls, slabs, roofs, stairs and columns can only cut, not be cut). A door or window used to cut cuts its rough opening and stays, e.g. to open an imported wall. Objects that aren't closed solids are refused. Returns the result's id.","inputs":[{"name":"ids","type":"array","required":true,"description":"The first is kept"},{"name":"operation","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":143},{"name":"paint_surface","title":"Paint surfaces","description":"Put a finish (list_finishes) on surfaces of one or more elements, as one undo step. surface by kind: room — walls (every wall face inside the room), floor (its floor slab), ceiling (the underside of the slab above); wall — left, right (seen walking from its start to its end) or both; slab — top or underside; roof — roofing or gables; stair — flights or rails; column, furniture, door, window — all, or a part name (list_finishes with element lists them). Default: a room's walls, a wall's both sides, a slab's top, otherwise all. A wall face is one surface along its whole length: painting one room's walls also colours that face where the wall continues past the room. Asset library models (\"ph:…\") keep their own materials. scale multiplies the tile size (2 = pattern twice as big); rotation turns the pattern (90 for boards or tiles running the other way).","inputs":[{"name":"finish","type":"string","required":true,"description":"Finish id from list_finishes"},{"name":"ids","type":null,"required":true,"description":"Element or room id(s)"},{"name":"rotation","type":"number","required":false,"description":"Degrees"},{"name":"scale","type":"number","required":false,"description":null},{"name":"surface","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":255},{"name":"set_sky","title":"Set the sky","description":"The project's sky (list_skies): an HDRI environment that lights the model with realistic reflections and ambient light and can show behind it. id \"none\" goes back to the default lighting. rotation (degrees) turns it, e.g. to put the sunset behind the building; intensity is the lighting strength (1 = as photographed, 0–5); background false lights the model without showing the sky; blur (0–1) softens the background. Settings you leave out keep their current values. Saved with the project; one undo step. Works alongside set_sun (direct sunlight and shadows).","inputs":[{"name":"background","type":"boolean","required":false,"description":null},{"name":"blur","type":"number","required":false,"description":null},{"name":"id","type":"string","required":false,"description":"Sky id, or \"none\"; omit to adjust the current sky"},{"name":"intensity","type":"number","required":false,"description":null},{"name":"rotation","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":180},{"name":"apply_palette","title":"Apply a style palette","description":"Recolour every built-in piece by role in one step with a style palette (list_palettes): upholstery, timber, stone, metal, lamp shades and so on each take the palette's finish; screens, bulbs, plants, books, people and cars keep theirs, as do asset-library models. walls and floors also paint every room's walls and floor slab. The project keeps the palette, so pieces placed afterwards come in it. One undo step. Repaint single surfaces afterwards with paint_surface.","inputs":[{"name":"floors","type":"boolean","required":false,"description":"Also paint every room's floor (default false)"},{"name":"palette","type":"string","required":true,"description":"Palette id, e.g. \"warm_modern\", \"scandi\", \"japandi\", \"industrial\", \"coastal\""},{"name":"walls","type":"boolean","required":false,"description":"Also paint every room's walls (default false)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":173},{"name":"save_view","title":"Save the current view","description":"Save the user's current camera as a named view (for presenting, image exports and share links). Set it up first with set_camera.","inputs":[{"name":"name","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":42},{"name":"create_tour","title":"Create walkthrough tour","description":"A walkthrough tour, the way architects draw it: a `path` of points on the plan (mm, x east, y north) that the camera travels through along a smooth curve, at each point's camera `height` above its level's floor and `speed` (m/s) to the next point, pausing where `pause` is set. The camera looks along the path, or turns to a point's `lookAt` near it. Keep paths inside rooms and through door openings (not through walls): a point a metre outside the front door, one just inside, then the middle of each main room; pause 1–2 s where there is something to see. For an opening shot, start with an aerial point (height 15000+, speed 4–8). Alternatively `stops`: saved views or eye/target cameras with travel/hold seconds. `walk`: let visitors walk around from a spot on a floor. Check with list_tours and capture_view.","inputs":[{"name":"fov","type":"number","required":false,"description":"Field of view for path tours, degrees (default 60)"},{"name":"loop","type":"boolean","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"path","type":"array","required":false,"description":"The camera path (preferred)"},{"name":"stops","type":"array","required":false,"description":"Instead of a path: camera stops"},{"name":"walk","type":"object","required":false,"description":"Let visitors walk around from here"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":285},{"name":"update_tour","title":"Update walkthrough tour","description":"Change a tour (id or name): name, loop, fov, walk (null: no walking), path (replaces all points; same format as create_tour) or stops.","inputs":[{"name":"fov","type":"number","required":false,"description":null},{"name":"loop","type":"boolean","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null},{"name":"path","type":"array","required":false,"description":null},{"name":"stops","type":"array","required":false,"description":null},{"name":"tour","type":"string","required":true,"description":"Tour id or name"},{"name":"walk","type":null,"required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":100},{"name":"delete_tour","title":"Delete walkthrough tour","description":"Delete a tour (id or name). Its share link stops working.","inputs":[{"name":"tour","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":30},{"name":"share_tour","title":"Share walkthrough tour","description":"Publish a tour as a player-only link (play/pause/speed, optional walking, project details; nothing else) and return it. With `story: true` it is shared as a scroll story instead: a page that opens on the floor plan and, as the visitor scrolls, raises the walls, comes down to where the tour starts and walks it, each room turning from a drawing to its materials as the camera goes in. A tour can have both links. The user is asked to allow it first, and the project must be signed in to the cloud. The link updates on every cloud save. Set the project details with set_project_details first.","inputs":[{"name":"story","type":"boolean","required":false,"description":null},{"name":"tour","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":157},{"name":"import_file","title":"Import a file","description":"Bring a file from the user's computer into the project. Models: IFC (from Revit, Archicad; each storey becomes a model on its level), SketchUp as COLLADA .dae or a 3D Warehouse .zip (components kept), glTF/GLB, OBJ, FBX, STL; units are guessed unless given. Underlays to trace over: an image, a PDF page (scale: the drawing's scale, e.g. 100 for 1:100; or width in mm) or a DXF (units; its own if it says). Without a known scale the user is asked to calibrate it. Up to 22 MB.","inputs":[{"name":"as","type":"string","required":false,"description":"Default auto: images, PDFs and DXF are underlays"},{"name":"page","type":"integer","required":false,"description":"PDF page (default 1)"},{"name":"path","type":"string","required":true,"description":"The file on the user's computer (~ allowed)"},{"name":"scale","type":"number","required":false,"description":"Underlay drawn at 1:scale (PDFs)"},{"name":"units","type":"string","required":false,"description":"A model's or DXF's drawing units"},{"name":"width","type":"number","required":false,"description":"Underlay's real width, mm"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":242},{"name":"create_sheet","title":"Create a sheet","description":"A drawing sheet with the title block, numbered after the last (A-101, A-102…) unless number is given. Then place_drawing puts plans, elevations, sections, saved views, schedules and notes on it, and export_file format pdf prints them all.","inputs":[{"name":"name","type":"string","required":false,"description":"e.g. \"Ground floor plan\""},{"name":"number","type":"string","required":false,"description":null},{"name":"orientation","type":"string","required":false,"description":null},{"name":"paper","type":"string","required":false,"description":"Default A3"},{"name":"status","type":"string","required":false,"description":"e.g. Preliminary, For planning, For construction"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":118},{"name":"place_drawing","title":"Place a drawing on a sheet","description":"Put a drawing on a sheet (id, number or name) where there's clear room, at the largest usual scale that fits unless scale is given: kind plan (level), elevation or section (view south|north|east|west|section-ew|section-ns), view (a saved view's picture), schedule (view = openings|rooms|walls|slabs|stairs|columns|beams|ramps|lifts|parking|furniture) or note (text). x, y: its centre, mm from the sheet's top left.","inputs":[{"name":"kind","type":"string","required":true,"description":null},{"name":"level","type":"string","required":false,"description":null},{"name":"scale","type":"number","required":false,"description":"100 = 1:100"},{"name":"sheet","type":"string","required":true,"description":null},{"name":"text","type":"string","required":false,"description":"For a note"},{"name":"title","type":"string","required":false,"description":"Its caption (default: what it shows)"},{"name":"view","type":"string","required":false,"description":null},{"name":"x","type":"number","required":false,"description":null},{"name":"y","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":204},{"name":"update_sheet","title":"Update a sheet","description":"Change a sheet: name, number, paper, orientation, status; revise with a note to issue the next revision (P1 → P2, A → B) dated today; removeDrawing (a drawing's id) takes a drawing off it.","inputs":[{"name":"name","type":"string","required":false,"description":null},{"name":"number","type":"string","required":false,"description":null},{"name":"orientation","type":"string","required":false,"description":null},{"name":"paper","type":"string","required":false,"description":null},{"name":"removeDrawing","type":"string","required":false,"description":null},{"name":"revise","type":"string","required":false,"description":"What changed, for the revision table"},{"name":"sheet","type":"string","required":true,"description":null},{"name":"status","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":123},{"name":"remove_sheet","title":"Delete a sheet","description":"Delete a sheet and the drawings placed on it (the model and the notes on drawings stay). Undoable.","inputs":[{"name":"sheet","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":37},{"name":"set_title_block","title":"Set the title block","description":"The title block every sheet shares: project, practice, projectNumber, drawnBy, layout (corner, strip down the right side, or band along the bottom) and fields, the practice's own boxes (label and value, e.g. Checked, Client ref). The client and site come from set_project_details.","inputs":[{"name":"drawnBy","type":"string","required":false,"description":null},{"name":"fields","type":"array","required":false,"description":null},{"name":"layout","type":"string","required":false,"description":null},{"name":"practice","type":"string","required":false,"description":null},{"name":"project","type":"string","required":false,"description":null},{"name":"projectNumber","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":117},{"name":"add_drawing_note","title":"Annotate a drawing","description":"A note, leader, element tag or dimension on a drawing: drawing plan (a level's plan: level) or south|north|east|west|section-ew|section-ns. Positions are plan points in mm with height above the level floor (mm, default 0): at (where text goes), tip (what a leader or tag points at; element: the tagged element's id), points (2 or more, for a dimension string measured along the line through the first two; offset: how far to its side, mm, default 600). size: text height on paper, mm (2.5, 3.5 default, 5, 7). They show on the sheets and exports.","inputs":[{"name":"at","type":"object","required":false,"description":null},{"name":"drawing","type":"string","required":true,"description":null},{"name":"element","type":"string","required":false,"description":null},{"name":"kind","type":"string","required":true,"description":null},{"name":"level","type":"string","required":false,"description":null},{"name":"offset","type":"number","required":false,"description":null},{"name":"points","type":"array","required":false,"description":null},{"name":"size","type":"number","required":false,"description":null},{"name":"text","type":"string","required":false,"description":null},{"name":"tip","type":"object","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":228},{"name":"remove_drawing_note","title":"Remove an annotation","description":"Remove a note, leader, tag or dimension from a drawing (its id from list_sheets). Undoable.","inputs":[{"name":"id","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":40},{"name":"share_link","title":"Share the project","description":"Publish the project as a link anyone can open in a browser (no account): view-only, or a review link with comments: true, where clients pin comments on the model (list_comments reads them). The user is asked first; the project must be in the cloud (signed in), and review links need a plan with them. The link updates on every cloud save. Returns the link.","inputs":[{"name":"comments","type":"boolean","required":false,"description":"Let visitors pin comments (default false)"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":101},{"name":"stop_sharing","title":"Stop sharing","description":"Take a link down, so it stops working: the project's link (default), or a tour's link or scroll story (tour, story). The user is asked first. Comments already made are kept.","inputs":[{"name":"story","type":"boolean","required":false,"description":null},{"name":"tour","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":64},{"name":"reply_comment","title":"Answer a client comment","description":"Answer a comment thread on the review link (its id or number from list_comments), as the signed-in user: the client sees it on the link. The user sees your answer and allows it first. resolve: true also marks it resolved.","inputs":[{"name":"resolve","type":"boolean","required":false,"description":null},{"name":"text","type":"string","required":true,"description":null},{"name":"thread","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":78},{"name":"resolve_comment","title":"Resolve a client comment","description":"Mark a comment thread on the review link resolved (or open again with resolved: false). Clients see it.","inputs":[{"name":"resolved","type":"boolean","required":false,"description":null},{"name":"thread","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":44},{"name":"set_project_details","title":"Set project details","description":"The details shown with shared tours: architect, client, location, description (plain text). Levels and floor area are added automatically.","inputs":[{"name":"architect","type":"string","required":false,"description":null},{"name":"client","type":"string","required":false,"description":null},{"name":"description","type":"string","required":false,"description":null},{"name":"location","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":63},{"name":"create_level","title":"Add level","description":"An empty level on top of the building (or below it). height = floor to floor, mm.","inputs":[{"name":"below","type":"boolean","required":false,"description":null},{"name":"height","type":"number","required":false,"description":null},{"name":"name","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":50},{"name":"copy_level","title":"Copy level above","description":"Copy a level (walls, doors, windows, slabs, furniture, room tags) to a new level on top of the building — the quick way to start the next storey.","inputs":[{"name":"level","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":52},{"name":"remove_elements","title":"Delete elements","description":"Delete elements by id (a wall takes its doors and windows with it). Deleting a level, or more than 10 elements, asks the user in Stori3D first — tell them why.","inputs":[{"name":"ids","type":"array","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":56},{"name":"set_properties","title":"Set custom properties","description":"Set custom property values on an element (null clears one). Values are checked against the project's definitions (types, choices). Setting data on an untagged room tags it and returns its new id.","inputs":[{"name":"id","type":"string","required":true,"description":null},{"name":"values","type":"object","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"define_property","title":"Define custom property","description":"Add or replace a project property definition: name, type (text, number, boolean, choice), optional unit, choices (for choice), kinds (which element kinds get it; omit for all).","inputs":[{"name":"choices","type":"array","required":false,"description":null},{"name":"description","type":"string","required":false,"description":null},{"name":"kinds","type":"array","required":false,"description":null},{"name":"name","type":"string","required":true,"description":null},{"name":"type","type":"string","required":true,"description":null},{"name":"unit","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":90},{"name":"remove_property","title":"Remove custom property","description":"Remove a property definition (values already on elements are kept).","inputs":[{"name":"name","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":27},{"name":"batch","title":"Batch of changes","description":"Several changes as ONE undo step, all or nothing: if any operation fails, none are applied and the error says which. Each operation is { tool, args } using update_element, create_walls, create_room, place_opening, place_furniture, place_column, place_beam, place_ramp, place_lift, place_parking, create_grid, paint_surface, apply_palette, set_sky, save_view, create_level, copy_level, set_properties, define_property or remove_property. Use it for multi-step edits the user would think of as one change.","inputs":[{"name":"label","type":"string","required":false,"description":"Short name for the undo step, e.g. \"Furnish bedroom\""},{"name":"operations","type":"array","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":153},{"name":"undo","title":"Undo","description":"Undo your own last change (only if the latest step in Stori3D's history is an AI change — never the user's).","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T05:17:14.000Z","track":"package","endpoint":null,"declaredUrl":null,"truncated":false,"tls":null,"dnssec":null,"auth":null,"httpsRedirect":null,"transports":[],"provenance":{"outcome":"none","label":"No attestation","reason":null,"reasonLabel":null,"discovery":null,"discoveryLabel":null,"sourceRepo":null,"attestationSkipped":null,"attestationSkippedLabel":null},"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":{"nodes":93,"partial":false,"deprecated":null,"stale":30,"noRepo":null}},"mismatches":[],"changelog":{"trackingSince":"2026-10-07","recent":[{"id":"chg_01a19fe7-66c7-7ec6-8988-c75edd622a3f","kind":"score.total_changed","summary":"Trust score (69 → 70)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a19fe7-66c7-7ec6-8988-c75edd622a3f"},{"id":"chg_01a19597-367b-7e9a-a58a-f258c440743d","kind":"score.total_changed","summary":"Trust score (68 → 69)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a19597-367b-7e9a-a58a-f258c440743d"},{"id":"chg_01a18b4c-e7f9-7bd2-9435-ff8460e26aac","kind":"score.total_changed","summary":"Trust score (67 → 68)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-30","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a18b4c-e7f9-7bd2-9435-ff8460e26aac"},{"id":"chg_01a180fc-7d37-7959-8f67-0514592facff","kind":"score.total_changed","summary":"Trust score (66 → 67)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a180fc-7d37-7959-8f67-0514592facff"},{"id":"chg_01a176ae-17e7-7bed-9d04-0b0af15c8a9a","kind":"score.total_changed","summary":"Trust score (65 → 66)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-26","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a176ae-17e7-7bed-9d04-0b0af15c8a9a"},{"id":"chg_01a16c60-ff1a-74e0-bc93-844d73f33acc","kind":"score.total_changed","summary":"Trust score (64 → 65)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-24","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a16c60-ff1a-74e0-bc93-844d73f33acc"},{"id":"chg_01a16214-60c6-71ee-94b5-92ca92f2ec71","kind":"score.total_changed","summary":"Trust score (63 → 64)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-22","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a16214-60c6-71ee-94b5-92ca92f2ec71"},{"id":"chg_01a1529c-e0c7-706e-bdaf-c8fb4543c569","kind":"score.total_changed","summary":"Trust score (62 → 63)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-19","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a1529c-e0c7-706e-bdaf-c8fb4543c569"},{"id":"chg_01a1484f-8b6b-7d7c-9451-8798d1ca5c7b","kind":"score.total_changed","summary":"Trust score (61 → 62)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-17","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a1484f-8b6b-7d7c-9451-8798d1ca5c7b"},{"id":"chg_01a144b0-d708-7a2d-86d4-bf5709a9a421","kind":"check.measure","summary":"Schema quality (6326 → 10254)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-16","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a144b0-d708-7a2d-86d4-bf5709a9a421"},{"id":"chg_01a144b0-d74c-72ed-af3a-68828f68d62d","kind":"score.total_changed","summary":"Trust score (31 → 61)","materiality":"functional","direction":"improvement","scoreDelta":30,"occurredOn":"2026-10-16","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a144b0-d74c-72ed-af3a-68828f68d62d"},{"id":"chg_01a1449c-3e20-7b2c-a517-6bc02b93a7a8","kind":"check.unverifiable","summary":"Stability (0.03 → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-16","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a1449c-3e20-7b2c-a517-6bc02b93a7a8"},{"id":"chg_01a1449c-3e22-7e9f-9811-b9454653db17","kind":"check.unverifiable","summary":"Tool safety (pass → unverified)","materiality":"security","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-16","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a1449c-3e22-7e9f-9811-b9454653db17"},{"id":"chg_01a1449c-3e23-79a5-a754-878eb9a230d8","kind":"check.unverifiable","summary":"Capabilities (pass → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-16","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a1449c-3e23-79a5-a754-878eb9a230d8"},{"id":"chg_01a1449c-3e24-7157-b703-7aba8615502f","kind":"check.unverifiable","summary":"Tool coverage (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-16","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a1449c-3e24-7157-b703-7aba8615502f"},{"id":"chg_01a1449c-3e24-767a-96f9-2c08eff597a3","kind":"check.unverifiable","summary":"Schema quality (100 → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-16","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a1449c-3e24-767a-96f9-2c08eff597a3"},{"id":"chg_01a1449c-3e24-7aed-b125-b2f5d98d376a","kind":"package.version_changed","summary":"Package version (0.7.0 → 0.9.0)","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-16","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a1449c-3e24-7aed-b125-b2f5d98d376a"},{"id":"chg_01a1449c-3e25-7acb-ac42-6eab57912445","kind":"score.total_changed","summary":"Trust score (61 → 31)","materiality":"functional","direction":"regression","scoreDelta":-30,"occurredOn":"2026-10-16","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a1449c-3e25-7acb-ac42-6eab57912445"},{"id":"chg_01a13fe9-0f54-7d46-81bd-565839b0ad14","kind":"check.verdict","summary":"Schema quality (pass → fail)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-15","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a13fe9-0f54-7d46-81bd-565839b0ad14"},{"id":"chg_01a13fe9-0f56-7002-8c0a-e7676f42c748","kind":"check.reverified","summary":"Stability (unverified → 0.03)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-10-15","url":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp#chg-chg_01a13fe9-0f56-7002-8c0a-e7676f42c748"}],"truncated":true,"feedUrl":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp/changelog.json"},"links":{"html":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp","markdown":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp.md","changelogJson":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp/changelog.json","changelogRss":"https://verifymcp.io/servers/richy7734-stori3d-mcp/stori3d-mcp.xml","external":[{"label":"npm package","href":"https://www.npmjs.com/package/stori3d-mcp"},{"label":"Socket report","href":"https://socket.dev/npm/package/stori3d-mcp"},{"label":"Website","href":"https://stori3d.com/mcp"}]}}