Skip to main content
Glama
PVsyst CLI MCP

PVsyst CLI MCP

pvsyst_create_house_pv_scene

Serialize an AI-authored house and PV table scene into a PVsyst .pvc2 COLLADA file, validating mesh parts, named roof surfaces, and layout counts from one call.

Instructions

[Projects & Variants] Write a complete AI-authored house/PV scene in one call; prefer house.kind='mesh'. AI supplies all named architectural meshes (vertices in metres, explicit zero-based triangle indices): walls, multiple roof faces, eaves, chimney, window/door geometry, porch and other parts of the same house. The serializer does not reconstruct the house from flat/gable templates, invent dimensions, or require a rectangular footprint. Each name is unique ignoring case; total ceilings are 128 parts, 50000 vertices and 100000 triangles (adapter ceilings, not PVsyst limits). No external assets or code run. For a mesh house use layout.origin_m=[x,y,z] for the PV table's low local corner and layout.roof_mesh for its named planar, upward-facing support surface. That surface's normal must match the source fixed PV plane. Checks cover four corner projections, not full solid topology, holes, panel intersections or architectural certification. Alternatively layout={tables:[{name,...placed-layout fields},...]} defines 1..64 named PV regions on the same source orientation, with independent rows/columns and origins. Their SUM of module_rows*module_columns must equal the source module total. All use the same source PAN. Table names must be unique ignoring case. Coplanar overlapping PV rectangles stop; no automatic packing or physical shading approximation is used. Candidate-only dual-plane authoring accepts exactly two ordinary fixed-plane source subarrays with complete exclusive8.1.0/8.1.6 branches, the same PAN/OND and distinct orientations1/2. Use exactly two named tables with strict orientation_id=1/2, one region per source plane, and each region's count must equal that source subarray. House vertices and every origin_m stay in orientation1's local frame; only each PV node gets its source-relative standard Z rotation. Roof normal/corner checks use that frame. Grouped XY bounding footprints must be disjoint (adapter restriction, not a collision/engineering limit). Writes version2 metadata; native auto-import remains needs_context until per-table identity/geometric verification is bridged. Structured diagnostics locate invalid parts, vertices, triangles or table entries with repair hints. Fix those inputs and preview again; authored geometry is not patched. module_rows/columns, orientation and row/column_spacing_m remain explicit. Legacy house={length_m,width_m,eave_height_m,roof} plus the original margin/clearance layout stays compatible; do not mix its layout with mesh mode. House parts share the source anchor azimuth rotation. The tool only serializes official COLLADA1.5/PVCollada2.0 geometry and PV semantics; native project, variant and PAN bytes are never modified. Except for the explicit dual-plane candidate above, source requirements stay one Grid pvSystem/subarray/ordinary fixed plane; all modes exclude shading scene/module layout, load, storage, P50/P90 or saved horizon, complete grid counts and a northern-hemisphere site record. Module width and height come from a readable loose PAN in metres when available; matching Commercial/root aliases must agree and only XML pv:module uses millimetres. For a built-in database reference without a readable loose PAN, provide module_geometry explicitly; its provenance is caller-provided, awaiting PVsyst's import consistency check. A square module is allowed. geometry_depth_m is explicit geometric metadata, not an inferred vendor specification. All provided metadata must agree with a readable source PAN; no PAN, project or variant is generated or rewritten. Total table modules must equal the source module count (NModSerie x NStringCh), so the scene cannot be drawn smaller than the array. Tilt and azimuth are inherited from the source orientation record and only disclosed in the response, so the caller cannot pick engineering angles. The COLLADA azimuth uses north = 0 clockwise, converted as (180 + FieldAzim) % 360; that mapping is only verified for a northern-hemisphere site, so a non-positive latitude stops. House/table translation uses the same local frame; only vertex, face and transform data are generated. No physical, irradiance, shading or optimizer model is computed. AI-authored parts and legacy roofs use the same serializer. PVC2 support is still beta, so creating a file does not prove that PVsyst imports it as a shading scene or consumes it. dry_run=true writes nothing and creates no directory. Execution writes only UserData/<output_name>.pvc2 with no-overwrite semantics and re-checks both the source variant and PAN bytes. native_consumption_verified and imported stay false.

Input Schema

NameRequiredDescriptionDefault
houseYes
layoutYes
dry_runNo
projectYes
variantYes
output_nameYes
module_geometryNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discloses extensive behavior: execution writes only UserData/<output_name>.pvc2 with no-overwrite semantics, dry_run=true writes nothing, source variant and PAN bytes are re-checked, native project/variant/PAN bytes are never modified, and native_consumption_verified/imported stay false. It also documents ceilings, validation limits, and beta caveats, making the write operation's scope and side effects unusually clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is an extremely long, dense paragraph with many interleaved constraints, repeated ideas, and no bulleted structure. Although the purpose is front-loaded, the volume and lack of organization make it hard to scan and retain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, absence of annotations, and lack of an output schema, the description is quite complete: it covers source prerequisites, mesh versus table modes, dual-plane restrictions, write behavior, and validation limits. It does not fully describe the response shape beyond mentioning structured diagnostics and disclosed tilt/azimuth, leaving a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level schema description coverage is 0%, so the description must compensate. It explains house.kind='mesh' versus legacy house, layout.origin_m and layout.roof_mesh, named tables with orientation_id, module_geometry fallback, and dry_run semantics, adding substantial meaning beyond the schema; project, variant, and output_name remain self-explanatory but are not explicitly described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: "Write a complete AI-authored house/PV scene in one call," and immediately recommends house.kind='mesh'. It distinguishes mesh authoring from legacy template authoring and hints at import status, though it does not explicitly name sibling tools like pvsyst_import_house_pv_scene.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives mode-selection guidance (prefer mesh, use layout.origin_m and layout.roof_mesh for mesh houses, alternatively layout={tables...}, and "do not mix" legacy layout with mesh mode). However, it never says when to use this tool versus the many sibling tools, so an agent must infer tool routing from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools