PVsyst CLI MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PVSYST_CLI | Yes | Absolute path to PVsystCLI.exe, e.g. C:\Program Files\PVsyst8.0.6\PVsystCLI.exe | |
| PVSYST_WORKSPACE | Yes | Absolute path to the PVsyst workspace, e.g. C:\path\to\PVsyst8.0_Data |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pvsyst_capabilitiesA | [Setup & License] List commands and option names actually available in the installed CLI. |
| pvsyst_license_infoA | [Setup & License] Read CLI license state and quota without returning keys or Host ID. |
| pvsyst_license_activateA | [Setup & License] Activate a CLI license using a supplied key. Requires confirm=true; MCP clients may retain tool arguments, so handle license keys accordingly. |
| pvsyst_license_deactivateB | [Setup & License] Deactivate this computer's CLI license. Requires confirm=true. |
| pvsyst_license_syncB | [Setup & License] Synchronize CLI license information with its server. Requires confirm=true. |
| pvsyst_export_logsA | [Setup & License] Export CLI diagnostic logs to a ZIP under workspace/Results. The archive may contain private data; only its path is returned. |
| pvsyst_list_projectsA | [Projects & Variants] List PRJ filenames in the configured workspace. |
| pvsyst_list_variantsC | [Projects & Variants] List variant IDs belonging to an existing project. |
| pvsyst_inspect_projectB | [Projects & Variants] List PRJ/VC hashes and embedded SIT/MET references; flag missing workspace files and differences between project and variant sources. project_name reads only the UTF-8 root header (null if absent/duplicate there), not effective native decoding of a BOM-less non-ASCII file. utf8_bom reports the PRJ marker. |
| pvsyst_archive_projectA | [Projects & Variants] Archive up to 128 PRJ/VC members after matching every hash; confirm=true. |
| pvsyst_archive_variantB | [Projects & Variants] Archive a VC only if another variant remains, with SHA guard; confirm=true. |
| pvsyst_restore_project_archiveC | [Projects & Variants] Restore a complete archived project or one archived variant; confirm=true. |
| pvsyst_create_projectA | [Projects & Variants] Create a NEW PRJ/VC set from complete UTF-8 text without an existing project. variants maps VC identifiers to their full text; 1..127 variants. Preserves supplied BOM/newlines and references, rejects existing same-prefix members and duplicate normalized IDs; handled write errors remove only created files. Checks envelopes and subarray sections, not full schema or physical validity. Site/meteo/components remain external; inspect, validate and simulate the new project. No invented blank design/defaults. Returns the member hash map. |
| pvsyst_clone_projectB | [Projects & Variants] Create a NEW project by copying an existing PRJ and all its VC variants. Embedded site/meteo snapshots and external component references are preserved. |
| pvsyst_update_project_parametersA | [Projects & Variants] Edit an existing project's display title only, preserving its PRJ/VC filenames. project_name requires a strict string of 1..80 printable UTF-8 bytes without controls/surrounding whitespace. Requires one existing owning header Comment, complete recognized PRJ object syntax and the full hash map from inspect_project. No blank name field/default is invented. dry_run returns the full candidate file map and diff without backups/writes; repeated names are no-ops. Non-ASCII names require UTF-8 BOM: existing BOM is preserved, adding one needs explicit add_utf8_bom=true. This changes UTF-8 decoding for the whole PRJ, not merely the title; bom_added is explicit even in a BOM-only transaction. Only changed PRJ bytes are replaced; unchanged VC bytes/timestamps/file IDs stay intact. Full-project snapshots and final file-set guards are reused. Restore using restore_project_sources with the returned backups/files map. Does not rename IDs, change sources, nested names, physical settings or VC names. This is the GUI project-name field, not its filename-based window caption. Close a loaded GUI project before editing its file; inspect again after GUI saves. The 1..80-byte limit is the verified adapter contract, not a native GUI limit. BOM-less UTF-8 inspection reads raw text, not effective GUI/CLI decoding. This is optimistic conflict checking, not cross-process locking/crash atomicity. |
| pvsyst_update_project_sourcesB | [Projects & Variants] Persist a workspace SIT/MET pair across PRJ and all VC snapshots with full-project SHA preconditions and byte-identical backups. Existing MET origin metadata in each variant remains historical; verify via CLI output. |
| pvsyst_restore_project_sourcesB | [Projects & Variants] Restore every PRJ/VC file from one source/name project transaction, after matching current hashes, a complete transaction manifest and backup hashes. Requires confirm=true and backs up current bytes; legacy sets need manual recovery. |
| pvsyst_get_variant_componentsB | [Projects & Variants] Read component references in a variant and its current SHA-256 for guarded edits. |
| pvsyst_clone_variantA | [Projects & Variants] Copy a variant as a NEW VC in project. source_project defaults to project; supply another workspace PRJ to import its variant under the target prefix. Embedded site/meteo and external references are preserved, not synchronized with the destination PRJ; inspect_project reports source differences. Optional PAN/OND edits target one SubArrayId; BTR/GEN target pvSystem only. subarray_id requires a strict JSON integer, not a boolean, string or float. |
| pvsyst_update_variant_componentsA | [Projects & Variants] Replace existing PAN/OND/BTR/GEN references only, with backup and SHA guard. Use pvsyst_get_variant_components to obtain the current expected_sha256. subarray_id requires a strict JSON integer, not a boolean, string or float. |
| pvsyst_validate_variant_structureB | [Projects & Variants] Check orientation IDs/references and counted TOrientGroup lists (including planes without an assigned subarray), grid circuit references and serialized inverter/string counts. Dome/unknown list quantities are reported as unchecked. grid_circuit lists grouped branches and counts; multiple inverter groups can belong to one subarray. Explicit MPPT-node counts do not establish independent-MPPT simulation mode. Verified Version=8.1.0/8.1.6 subarrays with $0400 compare explicit inputs against NInvMPPT directly; diagnostics leave this comparison unset for other modes/implicit layouts. Bounded shared parents return ordered subarray_ids and power_sharing_id; member shared_inverter_lines mark overlapping references, and totals count each parent once. Requires explicit owned MPPT/string children, matching Version=8.1.0/8.1.6 independent members with matching declared versions and inverter references, and common group 0 or all -1. Other shared/unknown allocation reports incomplete checks. valid is false for issues, null for incomplete checks, true when scoped checks pass. This is not voltage/current or physical validation. |
| pvsyst_clone_subarrayA | [Projects & Variants] Duplicate a grid subarray and all its exclusively owned inverter groups. source_subarray_id requires a strict JSON integer, not a boolean, string or float. By default keep the shared fixed-plane orientation and serialized MPPT layout. Complete exclusive MPPT branches are preserved, not switched to independent mode. Empty shading Flags=$00/$00020000/$00080000 still require geometry/table exclusion. clone_orientation=true appends an independent fixed plane and updates its NoOrientation reference/list count: requires complete grid counts, all strings in one orientation, a flat Flags=$00 non-averaged source, and sequential ordered TOrientGroup IDs. Supports ordinary branches without explicit MPPT, or verified Version=8.1.0/8.1.6 independent $0400 layouts with disabled sharing -1, exclusive direct MPPT children and complete declared input counts. It preserves mode, input/leaf multiplicities and copied loss/model fields; no MPPT pairing, shared parent construction or electrical fitting. Returns orientation_id and orientation_cloned. Independent plane copying rejects circuit-level orientation references instead of retaining stale allocation. Multiple groups require fully checked counts. Shared power, external target-ID references and shading geometry/tables are not supported. Requires the current variant hash; saves a rollback snapshot. share_inverter=true instead copies the one owned MPPT subtree under the same inverter, creating a bounded shared parent with aggregate name and owner 0. Requires Version=8.1.0/8.1.6, independent $0400, explicit disabled sharing -1, complete counts, one inverter/input (multiplicity 1), and all strings in the existing plane. New member keeps disabled sharing and its copied parameters; topology grouping is separate from enabling power sharing and hardware sizing. Do not combine with clone_orientation. Returns shared_parent_created. |
| pvsyst_remove_subarrayA | [Projects & Variants] Remove a grid subarray and all its exclusively owned inverter groups. subarray_id requires a strict JSON integer, not a boolean, string or float. By default another subarray must retain the orientation. remove_orientation=true also removes its now-unused fixed plane in a sequential TOrientGroup list, leaving another orientation. Non-final removal renumbers higher plane IDs and all owning NoOrientation references; requires all planes flat Flags=$00 and non-averaged, single-orientation subarrays with completely owned branches, ordinary NInvMPPT=1 without explicit MPPT or verified Version=8.1.0/8.1.6 independent $0400/direct-MPPT allocations with disabled sharing -1 and consistent counts. Every orientation reference must be an owned plane/root field; external or circuit-level references stop before writes. Returns removed_orientation_id (null by default) and orientation_id_map for changed surviving IDs. This opt-in and multiple groups require complete consistent grid counts. Shared power and shading geometry/tables are not supported. Requires the current hash and creates a rollback snapshot. shared_member=true instead deletes one member/owned MPPT subtree from a complete disabled two-member parent with explicit owner 0, one inverter/input per member and a common unshaded fixed plane. Preserves other member fields, restores its exclusive parent owner/name and reports remaining_member_id. All power sharing must be disabled; do not combine with remove_orientation. This is a bounded construction inverse, not general merge/split, active-group reallocation or hardware refitting. An active bounded group uses an explicit prior power_sharing_enabled=false parameter transaction; direct active deletion still stops. Restore deletion then the toggle snapshot to recover the active parent. These are separate guarded transactions, not an atomic implicit-disable operation. |
| pvsyst_get_variant_parametersC | [Projects & Variants] Inspect orientations, including native SummerTilt/WinterTilt (degrees), WinterMonths (raw month bitmask) and UsesTiltAver. Seasonal FieldTilt=0 is not the effective seasonal angle; these fields are read-only here, not a mode editor. Inspect owning subarray LIDLoss/PMismMPP percent, raw PQualityModU/I/P and Flags, variant_name from the header only (null if absent/duplicate there; late-root name ambiguity is not validated), utf8_bom (raw UTF-8 names do not prove BOM-less native decoding), main_array UFactor (W/m2/K)/Flags/Flags2, main_array.soiling, native grid_limit, auxiliaries, horizon, inverter_temperature and power_factor state, power_controls (verified PF/grid combinations), p50_p90 (existing native result-template parameters), and standalone generator settings/thresholds. Unsupported system forms report an issue; system_parameters exposes unique owning SystemType/Flags/TempShift/TempFixed/ TanPhi/PLimGrid/LimGrSeparLoss as raw text; missing or duplicate fields are omitted. Native temperature fields use degC; TanPhi is not a computed PF, and PLimGrid units depend on the native mode (kW or kVA). Nested owning object fields are excluded; this does not widen write support. Read-only transformers, system_unavailability, peak_shaving and shading_scene expose stored native layers, outage periods, strategy and scene declarations. Active shading_scene.pv_bindings additionally exposes one/two native8.1.6 PVCollada PV-table declarations: raw automatic labels/creation counters, stored orientation IDs, module counts and native DOrigine metres (NOT house/PVCollada coordinates). Cross-checks ordinary fixed-plane references, three angle fields and per-plane saved module totals. stored_consistent means these declarations agree, not source geometry/identity, circuit topology or native consumption verified. Unsupported/malformed records retain the scene's active declaration and report an issue, never an empty/verified scene. Generic meshes are not decoded. These are not computed electrical quantities or dispatch. Ageing reports its stored template fields; IAM includes native FresnelSmooth/UserProfile point tables without evaluating them. A broader readable P50 root state does not widen writing. |
| pvsyst_review_project_inputsA | [Projects & Variants] Compare producer-declared source inputs with saved project/variant fields, read-only. preparation_manifest_name is a completed Results/prepare.json from pvsyst_prepare_design_project, optionally carrying cited-source provenance. It is a selected declaration baseline, not authenticated engineering evidence or a job resume. Reads existing project/parameter/reference APIs; one Grid subarray and assigned fixed non-seasonal orientation only. Compare PAN/OND and project/variant SIT/MET filenames, tilt/azimuth at existing editor three-decimal serialization, accepted-plan string/ inverter counts, and explicitly requested loss scalar fields. ModuleQualityLoss is compared to owning PQualityModU/I exactly as the existing editor writes it. Only stored values are compared, not actual runtime effectiveness. Raw default/manual flags are disclosed but not interpreted here, so requested losses retain needs_review. Electrical envelope temperatures/coefficients/current limits and project saved design temperatures are shown separately, not equated by name/unit; year is an execution option, target capacity is a goal rather than an exact field. Source review remains. status=reviewed means no difference in compared saved fields, not design certification; needs_review includes differences, unassessed requested-loss modes or source concerns; blocked means incomplete/ambiguous/out-of-scope baseline or target. All calls report readonly=true/native_consumption_verified=false/runtime_state_observed=false. Never writes records/files, activates GUI, repairs/invalidates geometry, queries a licence, runs annual simulation or reads arbitrary baseline-supplied filesystem paths. Existing production input snapshots reject mixed-state reads. Unsaved user work and native effective solar/weather/physics are not inspected or approved. |
| pvsyst_update_variant_parametersA | [Projects & Variants] Edit existing validated parameters or display name with SHA guard and rollback backup. variant_name changes only one owning header Comment, not the VC identifier, filename, project or nested names. Requires printable single-line text of 1..80 UTF-8 bytes, no surrounding whitespace; bool/numeric values stop at SDK. Missing/duplicate/late root names stop rather than inventing a field. Returns name_change before/after. Existing preview/no-op/restore apply; display-only names need no shading remapping and may accompany ordinary scalar updates. Mode/sharing toggles stay separate. This is not file/variant-ID renaming. Non-ASCII names require an existing UTF-8 BOM or explicit add_utf8_bom=true; that option requires variant_name and changes decoding of the entire VC. bom_added is returned for name transactions, including a marker-only change with unchanged name/text diff. Existing BOM/newline style and formal recovery are retained; no implicit marker insertion or ANSI transcoding. Strict JSON booleans only, not strings/numbers. Raw inspected names do not prove correct native decoding of a BOM-less file. Ordinary non-name edits preserve encoding. dry_run returns a candidate hash/diff without writing. Subarray/orientation/ main-array dictionaries require strict numbers, not booleans or numeric strings. main_array_updates supports existing owning UFactor (constant Uc, W/m2/K) in adapter range [15,100]. Requires one Grid main array with Flags=$00100400, Flags2=$082A, all subarrays declared 8.1.0/8.1.6, no active geometry/layout. This changes the whole main array, not the selected subarray. Flags, wind terms, absorptance and efficiency fields are preserved; no fitting, inferred defaults or transient/wind model edits. Low-value behavior is unverified. Target subarray_id/orientation_id require strict JSON integers, not booleans, strings or floats; numeric dictionary values retain their separate rules. subarray_updates also supports existing root LIDLoss in percent [0,100], text 8.1.0/8.1.6 Grid subarrays without active geometry/layout. It does not infer module technology, change flags, recompute defaults or fit losses. Existing root PMismMPP in percent [0,100] is supported for declared 8.1.0/8.1.6 Grid subarrays without active geometry/layout and with one hexadecimal owning Flags. Setting PMismMPP also clears only default-mismatch bit 0x00040000 so the saved value is consumed; other flags/losses stay intact. Returns mismatch default_before/default_after. Restore the snapshot to recover default mode; this does not fit losses or recalculate the native default. ModuleQualityLoss is a semantic subarray_updates key in adapter percent range [-5,20], negative means gain. Requires verified declared 8.1.0/8.1.6 Grid, no active geometry/layout, unique existing owning PQualityModU/I and hexadecimal Flags. It synchronizes both U/I saved values and clears only quality default bit 0x00100000; PQualityModP, other flags/losses/fields remain unchanged. Raw U/I/P are read-only inspection fields, not independent quality setters. Returns module_quality default_before/default_after; restore recovers default mode. No native-default calculation, tolerance inference or model fitting; this bounded paired mapping is verified on an unshaded generic mono grid case. generator_updates supports text 8.1.0/8.1.6 SystemType=Battery: enabled (only system Flags bit 0x20), filename (existing GEN), operating_power_kw (>0), and thresholds mapping string subarray IDs to VBkUpEncl_syst/VBkUpDecl_syst values in [0,1]. These are native normalized voltage thresholds, not SOC. Missing generator fields can be added. Enabling requires a valid GEN, positive power and both thresholds in every subarray. Disabling preserves its saved configuration. Nominal power/fuel consumption remain component fields. NModSerie edits integer series-module count directly, preserving parallel strings, input grouping and mode. Native model derives module count/operating voltage; hardware voltage/current sizing, shading remapping and loss fitting are not performed. Series edits, angle edits and structural/count/mode edits stop before writes for active scenes/tables or any module-layout block; cached module/string mapping is not remapped. Angle edits additionally require a flat non-averaged FixedPlane, explicit Flags=$00 if present, and absent/unique False UsesTiltAver/UsesAzimAver/UsesSlopeAver. Legacy angle scalars may omit Flags; topology edits still require explicit Flags=$00. subarray_updates NInverter (integer 1..10000) scales ordinary grid inverter groups; NStringCh (positive 32-bit integer) proportionally scales parallel StringNode counts. They may be combined. NInverter alone preserves strings per inverter; NStringCh alone preserves inverter count. All group/leaf allocations must remain integral; declarations and NElements are synchronized together. Requires consistent unshaded fixed-plane counts, NInvMPPT=1 without the independent $0400 subarray flag, no shared power and no explicit MPPT branches. NInvMPPT (integer 1..10000) separately scales existing explicit MPPT groups for verified Version=8.1.0/8.1.6 independent $0400 subarrays with PowerSharingInverterId=-1 and complete exclusive allocation. It preserves inverter/leaf counts and mode, synchronizes total input/string declarations, and requires integral groups and explicit edited NElements. NInverter alone also scales verified Version=8.1.0/8.1.6 independent exclusive inverter groups, synchronizing NInverter, total NInvMPPT and strings while preserving MPPT/leaf multiplicities and mode. Changed inverter NElements must be explicit; all resulting group/input/string counts must be integral. Do not combine this independent-mode operation with NInvMPPT/NStringCh; shared parents stay closed. NStringCh alone also scales explicit parallel leaves in verified Version=8.1.0/8.1.6 unshared independent mode while preserving MPPT/inverter multiplicities; integral explicit leaf counts are required. NStringCh alone also supports a member of one bounded Version=8.1.0/8.1.6 shared parent (matching member versions, common fixed plane, complete allocation, group 0/-1); only its owned leaves/root strings change, not peer members, inputs, sharing or nominal tags. Group 0 must have no outside references. Returns capacity.shared_parent_line; native automatic budgets may change. Do not combine NInvMPPT with NInverter/NStringCh/NoOrientation. No hardware limits or loss/nominal-power refitting is performed. Other system bits and field type are preserved. NoOrientation (positive integer) reassigns the selected subarray to an existing ordinary fixed plane: sequential counted TOrientGroup IDs, flat Flags=$00 non-averaged source/target, fully checked exclusive ordinary branches without explicit MPPT, or verified Version=8.1.0/8.1.6 independent $0400/direct-MPPT branches with disabled sharing -1 and complete declared input counts, and all strings in one orientation are required. Circuit-level orientation references remain unsupported. Every defined plane must retain an assigned subarray. Leaves planes/list counts and circuit quantities unchanged; no automatic pruning or shading remap. Returns orientation_assignment before/after. power_sharing_enabled separately toggles all members of the existing bounded shared parent containing subarray_id. Requires complete counts, Version=8.1.0/8.1.6 independent $0400 members with matching declared versions, the same inverter and fixed plane, all member strings in that plane, and exclusive use of group 0. Synchronizes member PowerSharingInverterId=0/-1 and only Flags bit $0100; preserves topology, quantities, mode, nominal tags and loss parameters. No topology creation, arbitrary group IDs or manual allocation. Do not combine with other parameter updates. Returns power_sharing before/after. independent_mppt_enabled separately switches verified Version=8.1.0/8.1.6 exclusive explicit MPPT layouts with PowerSharingInverterId=-1, complete unshaded fixed-plane counts and all strings in one orientation. It changes only $0400 and NInvMPPT (explicit input total when enabled, 1 when disabled). Requires all owned inverter children explicit MPPT; preserves circuit and other flags/counts, components/nominal/loss tags. Model power interpretation changes; hardware allocations are not redesigned. Returns mppt_mode. soiling_updates configures the native whole-array Soiling block in a separate transaction (variant_name may accompany it). mode=none removes that block; constant requires yearly_loss_pct; monthly requires twelve monthly_loss_pct. Percent values are 0..100 in 0.1 percentage-point increments, matching GUI save precision. Verified scope: 8.1.6 PV-only Grid, one unshaded fixed plane/subarray, main Flags=$00100400/$01900400, Flags2=$082A. Flags and unrelated fields stay unchanged; no irradiance/yield calculation, legacy or file-based soiling edits. grid_limit_updates is a separate transaction (variant_name may accompany it). mode=constant requires positive limit_kw in 0.1 kW increments: native active power at the injection point, with separate grid-curtailment loss. mode=none clears the active-limit bit and removes its scalars, preserving the inactive location bit. Verified 8.1.6 PV-only single-subarray/fixed-plane/unshaded scope; PF, loads/storage, file-based limits and other system modes stop before writes. This is not bit27 export permission, kVA, storage peak shaving or external output clipping. Original native calculations and existing rollback apply. auxiliary_updates is separate (variant_name may accompany it). constant requires explicit operating_kw and night_kw >=0 in 0.01 kW increments for the whole system; native operating power applies above the verified zero inverter-output threshold, not a clock schedule. none clears native bit18 and removes auxiliary powers. Verified 8.1.6 PV-only fixed/unshaded scope; PF, grid limits, loads/storage, proportional/threshold fields stop before writes. Native negative E_Grid is retained, not clipped; no external auxiliary load or energy calculation. seasonal_updates is separate and configures native SeasonalTilt from a verified FixedPlane or SeasonalTilt: explicit summer_tilt/winter_tilt in 0..90 degrees, 0.1-degree steps, and 1..11 distinct winter_months integers in 1..12. Optional orientation_name changes the owning plane label; azimuth is preserved. Require one 8.1.6 PV-only Grid subarray/plane, complete circuit allocation, no geometry/layout, free horizon and plain system Flags. Averaged planes, trackers, loads/storage and coupled system modes stop before writes. Zero fixed BaseSlope is removed as native GUI does. This is not a fixed-mode switch; restore the snapshot to recover the source. No angle or season model is implemented outside PVsyst. horizon_updates is separate: none removes the native far-horizon block; profile requires profile_name and 4..100 increasing [azimuth, elevation] points in native degrees, 0.1-degree steps, x=-180..180, y=0..90. All-zero profiles use none. Fixed-plane plain PV-only Grid scope; no trackers, seasonal modes, loads/storage, PF/aux/grid-limit coupling or near-shading/layout edits. Native FracAlbedo=1 stays inherited. New or changed points use the GUI profile template without stale derived factors; name-only updates preserve them. PVsyst computes interpolation, diffuse and losses. inverter_temperature_updates is separate and requires an ordinary single free-horizon PV-only Grid plane, with no load/storage/PF/aux/grid-limit coupling or geometry. mode ambient removes both native temperature fields; offset/fixed require both offset_c and fixed_c explicitly, including the inactive saved value, with no default. Both values are degC in adapter range [-100,100], 0.1-degree steps: this is an adapter support envelope, not a native GUI or manufacturer limit. Only system temperature mode bits and TempShift/TempFixed change; module Uc and OND curves stay unchanged. PVsyst alone calculates inverter temperature and derating. power_factor_updates is separate (variant_name may accompany it), for native 8.1.6 PV-only single fixed-plane/free-horizon Grid systems without geometry, loads/storage, temperature, auxiliary or grid-limit coupling. mode none removes PF fields; constant requires tan_phi, monthly requires twelve monthly_tan_phi in January-to-December order. Require explicit pnom_limit native/active/apparent; only none requires native; constant/monthly accept all three. Values are signed dimensionless native tangent values in adapter range [-1,1], 0.001 steps, not cosine values or manufacturer limits. GUI leading uses negative, lagging positive; native PVsyst alone computes power and derating. Legacy active/apparent select inverter PNom interpretation, not injection limits, and do not change OND hardware data. p50_p90_updates edits an existing GUI-produced P50 result template, separately from physical changes (variant_name may accompany it). Supply all fourteen native keys: SpecYear/TMY kind, two ordered integer percentiles 51..99, report booleans, PlotKind=1, explicit year deviation and six variability percentages, and a custom ASCII label. YearDevFromAver is percent in [-100,100], variability fields percent in [0,100], all using 0.001 steps; these are adapter domains, not scientific bounds. CustomVarLabel requires 1..80 printable trimmed ASCII bytes. Require native 8.1.6 plain PV-only single fixed/free-horizon Grid, root Flags=$01800001 and one existing flat P50_P90=TP50_P90 block; no creation/deletion, unknown ClimateChange, cumulative plot or coupled physical changes. Native root flags and cached results stay unchanged. Unchecked GUI boxes retain manual values; checked boxes restore native defaults, not include/exclude terms. Native PVsyst alone computes probabilities and reports. power_controls_updates is a separate combined PF/grid transaction (variant_name may accompany it); old power_factor_updates/grid_limit_updates stay separate. Supply power_factor using its existing shape and grid_limit with explicit mode, quantity active/apparent and point injection/inverter. Constant also requires positive limit in 0.1 native units (kW active, kVA apparent), separate_loss bool; none supplies neither. No conversion from tangent or independent power model. Only observed native flag families are accepted: monthly/Legacy with an enabled limit require injection/separate loss. Monthly plus Legacy with an enabled limit supports active quantity only. An enabled inverter-point limit requires constant/native PNom/separate loss; combined loss requires constant/native PNom/injection. Enabled NoPF requires active injection/separate loss. Monthly PNom without a grid limit uses explicit active quantity/inverter point. No temperature, P50, storage/load or geometry coupling. Inactive type/location bits are explicit, not silently reset. The shared 8.1.6 PV-only single fixed/free-horizon/count gates remain in force. string_mismatch_updates is separate (variant_name may accompany it), for native 8.1.6 PV-only single fixed-plane/free-horizon Grid subarrays: mode default clears the manual value and sets the native default bit, constant writes one manual loss_percent (adapter envelope 0.01..100, 0.01 steps; zero is mode default). auxiliary_updates profile has two verified families -- constant power with its threshold, or proportional W/kW with its threshold -- and requires all five values explicitly with night_kw = 0; the old constant/none shapes are unchanged. ageing_updates is separate (variant_name may accompany it) and applies only to an existing activated ageing template: it writes simulation_year and annual_module_degradation_percent, optional keep_mc_values and a paired modules_rms_year_isc_percent/modules_rms_year_voc_percent (adapter 0..100 percent, 0.01 steps). Stored factors and warranty lists are preserved; no degradation or stochastic sampling is computed. The retention flag is a native input; sample-array persistence is not verified. ageing_enabled is a separate strict boolean transaction for an existing fully validated template, toggling only main-array Flags2 bit20; it never creates a block or activates an unsupported template. Disabled templates remain readable but must be enabled before model editing. Zero rate is a value, not the disabled state. iam_updates is separate too and covers only the component IAM bit or the ASHRAE model with an optional b0; PAN files and curve data are never written. system_unavailability_updates={"mode":"none"} separately removes one existing native Periods SystemUnavail child and its owning system tag. It is limited to the verified 8.1.6 PV-only single fixed/free-horizon template, with no P50, loads or storage. It does not generate periods or edit grid availability. Restore the returned transaction backup to recover the original native schedule; clearing a flag alone is not sufficient. No-op edits create no backup. |
| pvsyst_restore_variantA | [Projects & Variants] Restore a variant snapshot after verifying its current hash; backs up the pre-restore state and requires confirm=true. |
| pvsyst_create_tracking_variantA | [Projects & Variants] Preview or create a NEW variant editing the source native tracking record only. Supported 8.1.6 FieldTypes are UnlimTracking, TrackHorizNSAxis, TrackTiltedAxis, TrackVertAxis, TrackSunShield, TrackHorizAxis, TrackTwoAxis, TrackFrameNS and TrackFrameEW. No conversion: each source must already have its exact recorded field shape, one counted orientation1, one PV-only Grid subarray and complete consistent circuit counts. Root/system/main/subarray flags and geometry/layout/load/storage/P50/horizon gates remain in force. Only controls that belong to that FieldType are accepted. Supply one or more controls; unspecified values stay inherited. Existing five-control Unlim calls remain valid. All present min/max pairs use source values for the side not changed, and both source and candidate must keep their order. AxisAzim/MinPhi/MaxPhi retain adapter domains -20..20/-60..-45/45..60. Other numeric controls have finite 0.1 adapter precision, not measured GUI bounds. Lengths are meters, angles degrees and WindStowSpeed is meters/second. Booleans are strict. electrical_effect is writable only in an existing UnlimTracking record owning that field. Unlim geometry, BTNoTrackers, averaging and every other unrequested field stay inherited; no tracking, backtracking, irradiance or shading model is computed. Default preview creates nothing; execution exclusively creates one NEW VC, preserves the source, and reuses lock/path/snapshot/candidate readback. Optional variant_name and add_utf8_bom follow existing display-name rules. Public getter exposes the stored controls for read/edit closure. Native consumption is never inferred from saving: native_consumption_verified stays false until a separate native run is reviewed. |
| pvsyst_create_ac_cabling_variantA | [Projects & Variants] Preview or create a NEW VC with native uniform per-inverter AC cables. Only recorded8.1.6 PV-only single fixed plane/subarray, complete counts and native main/circuit/system flag families; no MV/HV/load/storage/P50/horizon/active geometry. Source and actual candidate validate all coupled main, subarray and inverter cable owners. Custom resistance, mixed/partial/inconsistent source cables are blocked. length_m is positive, <=100000 and exactly0.1m representable, not rounded; adapter bounds are not measured GUI or engineering limits. Active sources inherit omitted metal/section; inactive sources use the recorded Copper/ISO60228_10 template values. PVsyst computes electrical quantities from native CableType. StringNode DC cables, hardware and every unrequested record remain unchanged; no resistance/loss formula. Getter ac_cabling exposes stored state, represented groups and physical inverter count for read/re-edit. Preview writes nothing; execution exclusively creates one new VC with existing snapshot/path/name/BOM guards. Saving is not native consumption. |
| pvsyst_create_native_dc_cabling_variantA | [Projects & Variants] Set native DC resistance(mOhm) or STC loss(%) through the ALREADY OPEN GUI. Chinese PVsyst8.1.6rev49278/DPI96 and recorded window metrics only; one ordinary fixed-plane/subarray PV-only Grid, complete counts, no AC/MV/HV/load/storage/ geometry/horizon/P50. Both native DC mode flag families are explicit source gates; all other editors retain their existing domains. value is finite, nonnegative, exact0.01 precision, <=20 characters; percent<=100. These are adapter constraints, not manufacturer limits. PVsyst computes the coupled subarray and StringNode values. dry_run only reads source/GUI state and does NOT activate/select/type/click. Actual input requires dry_run=false AND confirm=true; leave the desktop alone. The operator must have the matching project open and DataPath equal to the MCP workspace. No application start/exit, INI edit, clipboard, external DC formula or private VC patch. Native SaveAs chooses the new VC id; variant_name is its display title. Saved candidate owners/precision and all non-DC physical records are verified, sources preserved; BOM/display comments may normalize. Failure can leave a new file/current modal for inspection, and its path is disclosed. Saving is NOT simulation consumption proof. |
| pvsyst_create_mv_night_disconnect_variantA | [Projects & Variants] Preview or exclusively create a NEW VC changing a recorded MV night switch. Source and candidate both require native8.1.6 PV-only single fixed plane/subarray, valid circuit counts and the recorded single-MV20kV profile. Native field ownership, MVNbTransfos=1 and NightDisconnect/main-array bit29 consistency are checked first. Only that bool and dependent bit change (plus optional name/BOM). Reference power, iron/copper losses, AC/DC cables and all unrelated inputs remain inherited; no transformer formula or loss conversion. HV/multiple transformers, custom loss tables, loads/storage/P50/horizon/active geometry and unknown flag families are blocked. Configuration never claims native consumption; verify separate native outputs. Preview writes nothing; execution retains source/snapshot/no-overwrite protections. |
| pvsyst_create_shed_geometry_variantA | [Projects & Variants] Preview or exclusively create a NEW native Sheds/SunShields variant. Use an existing recorded type with one orientation/subarray and complete grid counts, native8.1.6 root/system/main/subarray flags, no load/storage/P50/horizon or active geometry/layout. Shared tracking-template scope gates apply; no type conversion. Declare one or more type-owned geometry fields. Angles use0.1 degrees (tilt0..90, azimuth-180..180); lengths/factor use0.001. Pitch/collector/cell width must be positive, inactive bands nonnegative and their sum below collector width, factor0..1; counts strict positive32-bit and booleans strict. These are adapter domains, not measured GUI or manufacturer limits. Source and candidate share exact validation, with no rounding of unsupported precision or invention of unknown native fields. Preserve all unrequested data, hardware, topology and source bytes; getter exposes stored fields for create/read/create closure. Native alone computes shading and electrical grouping. Saving never sets native_consumption_verified to true. Preview creates nothing. Optional name/BOM rules and snapshot/no-overwrite guards are inherited; failures disclose partial artifacts without automatic cleanup. |
| pvsyst_create_dome_allocation_variantA | [Projects & Variants] Preview or create a NEW variant that rebalances an existing two-face Dome allocation. Supported subset is the already-allocated native 8.1.6 Dome template: one subarray sharing both faces, NStringCh=40 with NoOrientation=1 and NoOrientation2=2, plus the pinned module/inverter/series/inverter/MPPT declarations and the two paired pvDomeOrient records (main FieldType=Dome at tilt 10 / azimuth 90, back face FieldType=DomeBackfaces at tilt 10 / azimuth -90, NoPairOrient 2/1, IsMainOrient True/False, three averaging switches False, BTNoTrackers=-1,-1, both Version=8.1.6 and Flags=$00). Record Comments are kept verbatim and are never used to detect the face type; unknown, duplicated, missing or wrongly paired records stop. Only NStrOrient1 is written, plus an optional root Comment; no inverter, string, module, subarray or orientation record is created or copied, NoOrientation2 is not changed, and a source without an existing allocation is refused rather than completed. The remaining face-two strings are not written as NStrOrient2 because the native template does not store that field, so NStringCh=40 stays the only string total. first_orientation_strings is adapter-bounded to 1..39; that bound is not a measured native GUI or engineering limit, and the source record is validated against the same domain. Circuit node NElements values are inherited unchanged and their semantics are not inferred; no mismatch, string-current or allocation model is computed here. dry_run=true writes nothing; execution creates one NEW VC only and never edits the source PRJ/VC, weather, topology or hardware, reusing existing store locking, path checks, read-back verification and no-overwrite semantics. variant_name/add_utf8_bom follow the existing display-name and BOM rules. native_consumption_verified stays false: verify native hourly results and reports before treating the allocation as consumed. |
| pvsyst_create_house_pv_sceneA | [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. |
| pvsyst_read_house_pv_sceneA | [Projects & Variants] Read a generated UserData/*.pvc2 back into complete house/PV create arguments. Parses actual XML mesh vertices/triangles and module dimensions, then rebuilds the supported dialect and compares canonical XML so unknown content is never dropped. Named tables, single placed tables and legacy parametric inputs emitted with the versioned standard asset metadata round-trip. Use returned create_arguments, change the intended parts/layout, supply a NEW output_name and preview/create with the existing pvsyst_create_house_pv_scene tool; the original file is never overwritten. required_inputs always includes output_name. Old R44 AI scenes without provenance return needs_context with project/variant/roof association missing, never guessed. Source declarations are file metadata, not proof the native project still matches; creation checks the current project/PAN again. No project or native scene is edited, imported/native_consumption_verified stay false, and no geometry is auto-repaired. Reads only bounded UTF-8 XML; DTD/entity declarations and unsupported extensions stop. This is not a general COLLADA converter or a native VC scene exporter. |
| pvsyst_open_native_projectA | [Projects & Variants] Open a workspace PRJ through the recorded Chinese8.1.6rev49278/DPI96 native GUI. Requires native INI DataPath already equal to this MCP workspace. Reads/validates the requested project and native process inventory, including instances without a visible form. Preview never starts/activates/selects/types; a cold launch requires dry_run=false AND confirm=true. Only a newly launched process receives native Grid/ Load/filter/confirm actions; the final project basename and unchanged PRJ are checked. A preexisting matching ready project is returned already_open with owned=false and existing_session_read_only=true: no activation, variant selection, reload or close. Any other/ambiguous/busy existing session stops untouched, preserving unobservable unsaved work. This is not a native dirty-state detector or consent to edit an existing window. No INI, clipboard or VC patch; no application is closed/force-terminated. A failed cold launch discloses its owned PID/current stage for inspection. Successful opened state is not house import, geometry validity or simulation certification. |
| pvsyst_import_house_pv_sceneA | [Projects & Variants] Import a generated house/PV scene using the already open native PVsyst GUI. This bounded Windows path targets Chinese PVsyst 8.1.6 rev49278 with native logical DPI96 and the recorded physical window metrics, with the matching workspace and recipe project already open on its project page. Supports one or two PV regions; creation/standard export retains its 64-region limit. Unknown GUI metrics, dialogs, source/PAN mismatches and unsupported scene dialects stop rather than patching private VC data or guessing control positions. dry_run reads state only: no activation, key/mouse input or clipboard access. Execute with dry_run=false AND confirm=true, then leave the native desktop alone: selects the clean source variant, imports PVC2 and assigns its regions to the declared source orientation(s). The bounded two-orientation path explicitly places each table and verifies native SHD/saved VC geometry and a real GUI reload. It then runs PVsyst's scene-validity check and shading table, and saves a NEW native variant with the explicit display title variant_name (1..80 printable UTF-8 bytes). Native warnings beyond the expected beta notice stop; invalid geometry is returned as the software's own text. Any failure leaves the current window for inspection; an already-created variant path is disclosed even if postchecks fail. No automatic retry, source overwrite, application start/exit or INI modification is performed. Native validity text replaces the clipboard only after this confirmed operation; only the newly copied native text is read, never the earlier clipboard. imported/native_geometry_verified become true only after native persistence checks; native_consumption_verified stays false until a separate native simulation. shading_mode=module_layout additionally uses native placement and automatic string allocation, then selects detailed electrical shading. This opt-in requires two fixed source groups, one landscape zero-spacing table and one independent string (1..100 modules, one inverter/MPPT) per source array1/2. The saved module cells and native table/array links are checked; the selected mode is checked after GUI reload. Use pvsyst_run_simulation on the returned variant for energy/shading consumption. method="native" (opt-in) builds a NEW native input variant from the same supported recipe without any GUI, INI, clipboard, licence or engine action. It supports only two fixed orientations, two landscape zero-spacing tables, source arrays 1/2 with one independent string/inverter/MPPT each and the same PAN/OND; unsupported recipes stop before writing. dry_run builds and verifies the native records in memory only. Execution requires dry_run=false AND confirm=true and writes one new variant; the status is native_variant_created; stored_geometry_verified/stored_module_layout_verified reflect the STORED record only, while native_geometry_verified/native_module_layout_verified, native_consumption_verified and imported stay false because PVsyst has not loaded or consumed it; run an explicit simulation to verify consumption. dry_run writes nothing and keeps both stored flags false but still reports the passed precheck. The source variant/PAN are never modified. |
| pvsyst_prepare_design_projectA | [Projects & Variants] Prepare one new design project without GUI or annual simulation, using existing flow gates. Same strict SingleDesignRequest/source/weather/fixed_unshaded_grid boundaries as pvsyst_simulate_design: exact PAN/OND and template, explicit counts or sourced design envelope, declared angles/losses and bound existing/csv/open_meteo weather. Missing design evidence stops with concrete issues; no manufacturer/site value is guessed. dry_run writes nothing. Future weather/seed inputs return ready_for_weather, never a falsely completed native preflight. Execution reuses guarded clone/source/component/ capacity/parameter edits and structural readback, then stops BEFORE SFI/CSV/PDF/run. A zero remaining simulation quota does not itself block non-simulation preparation; required weather commands/version/licence are still queried, not bypassed. status=prepared or needs_review with prepared=true means configured files exist; simulated/native_consumption_verified stay false and metrics stays null. Review flags are preserved, including provider/weather review, never upgraded to energy acceptance. Results/prepare.json retains declared request/envelope/selected sources, inherited configuration and existing guarded recovery transactions. Existing files are not overwritten, original template/component/weather assets remain protected. prepared_project gives exact project/variant/year/SIT/MET for a subsequent house task or explicit native run; report_pages is validated but no report is generated here. The old simulation entry still runs its annual path by default. No new sizing/PV model. |
| pvsyst_list_componentsB | [Components] List PAN, OND, BTR or GEN loose files in workspace or installed DataRO. The encrypted built-in component database is not enumerable. |
| pvsyst_get_componentC | [Components] Read paged UTF-8 text, scalar allowlist, SHA and OND/BTR curve paths/ active points, plus commercial field types/units and remarks. Curves report mode or CLI tag recognition, supported edits and their preconditions; static inspection does not verify simulation behavior. include_curve_csv adds a path-to-CSV-text map for OND main/BTR capacity curves with explicit-unit headers, plus curve_csv_errors for omissions. CSV export does not expand edit support. PAN scalar_aliases lists supported ISC/Isc and MuISC/muISC spellings. PAN/OND electrical exposes owning-object reference-point values/units and missing/ambiguous/invalid declarations; serialized temperature coefficients and per-MPPT limits remain unverified. IDCMax=0 is not a positive declared ceiling. Legacy PAN is metadata only. |
| pvsyst_validate_componentC | [Components] Check format and known fields; only a simulation verifies PVsyst model behavior. |
| pvsyst_copy_componentB | [Components] Copy a PAN/OND/BTR/GEN into the workspace without overwrite. Legacy PAN bytes are preserved. Source library is workspace or read-only builtin. |
| pvsyst_create_componentA | [Components] Create a NEW PAN/OND/BTR/GEN from complete UTF-8 PVObject_ text in the workspace without a template. Checks structure, required fields and known hazardous numeric values; only a referencing simulation verifies physics. Legacy binary PAN must be imported with pvsyst_copy_component instead. |
| pvsyst_clone_componentB | [Components] Create a new text component from a complete existing template. New Manufacturer and Model are required; only verified scalar fields are editable. Run a simulation with a variant referencing the new component to verify it. |
| pvsyst_update_componentA | [Components] Edit allowlisted text fields in one workspace component with automatic backup. dry_run returns a diff and candidate SHA without writes. Pass the inspected expected_sha256 to reject stale edits. PAN ISC/Isc and MuISC/muISC are aliases for root physical fields; edits retain the file's spelling and reject duplicate aliases. curve_updates accepts OND Version=8.1.6 single-voltage Converter/ProfilPIO Mode=1 points in watts, or BTR Version=8.1.6 AGM/Gel CapaCourant/Capa_DischRate Mode=1 points as [discharge hours, capacity relative to C10]. BTR requires positive points, increasing X, nondecreasing Y, coverage of 100h and C100/C10 in [1.15,1.45]. Supply the complete table of 4..256 points; X >= 1e-9 and X gaps >= 1e-8. Count changes require point_count_editable from inspection and synchronize NPtsMax/NPtsEff/Point_N rows. Curves require expected_sha256; pass updates={} for curve-only edits. Automatic curves require explicit use_file_curve=true alongside points to clear the root automatic-profile bit. For BTR, this opt-in renames the supplied Capa_DischRate block to CLI's CapaCourant; all other tags and Flags are preserved. Use the current path from inspection. Three-voltage OND, other BTR curves and legacy PAN are read-only. commercial_updates edits/adds the Version=8.1.6 commercial form fields returned by inspection, including dimensions in metres and weight in kg. PAN Width/Height also update LargApp/LongApp when present; absent legacy root dimensions are not added to GUI-format files. Identity changes synchronize a tab-separated root Comment. remarks replaces up to five lines ([] clears); PAN's fifth line may encode functional options. These operations require expected_sha256 and share the preview/backup. Seller prices, flags and model fitting are separate from this form. curve_csv alternatively accepts one path-to-CSV-text entry; never combine it with curve_updates. Header: input_watts,output_watts for OND or discharge_hours,relative_capacity for BTR. Use comma-separated decimal numbers with decimal dots, 4..256 point rows and at most 64 KiB of UTF-8 text. The same curve guards, preview and backup apply. No file is read from a caller-supplied path; supply the CSV contents. Physical behavior requires simulation; derived scalars are not refitted. A no-op returns changed=false without creating a backup. |
| pvsyst_backup_componentC | [Components] Save a byte-identical backup under workspace/ComposPV/.mcp-backups. |
| pvsyst_restore_componentB | [Components] Restore a matching backup to a workspace component; confirm=true required. Back up current bytes, verify new snapshot metadata, and restore original bytes. Model diagnostics are returned separately; legacy snapshots have unverified integrity. |
| pvsyst_archive_componentA | [Components] Reversibly remove an unreferenced workspace component to .mcp-archive. Requires confirm=true; rejects references from workspace PRJ/VC files. |
| pvsyst_restore_archived_componentB | [Components] Restore an archived component as a NEW file, preserving the archived snapshot; requires confirm=true and never overwrites existing files. Verify new snapshot metadata; return model diagnostics separately from recovery. |
| pvsyst_compare_componentsC | [Components] Compare two same-type components: bounded text diff or binary PAN hashes. |
| pvsyst_project_componentsC | [Components] Inspect PRJ/VC references to PAN, OND, BTR and GEN. Unresolved loose files may still exist inside the encrypted built-in database. |
| pvsyst_build_sourced_componentA | [Components] Preview or create a NEW user-defined PAN/OND from a complete exact template and cited values. Reuses the source-text/numeric/unit binding and component editors. PAN accepts PNom (W), ISC/Imp (A), Voc/Vmp (V); OND accepts PNomConv/PMaxOUT (kW), VMppMin/VMPPMax/VAbsMax (V), EfficMax/EfficEuro (%). Width/Height/Depth (m or explicitly converted mm) and Weight (kg) require the verified 8.1.6 commercial form. Unspecified fields, hardware counts and efficiency/IAM/model curves stay inherited, not refitted or scaled. Temperature coefficient units are not guessed. A dry run returns citation provenance, inherited parameters and a diff without writes. Creation requires acknowledge_inherited_model=true, writes a new component and a candidate source record in Results, and never overwrites existing paths. Successful preview/creation remain needs_review, not physical certification. A failed creation removes the source record it wrote and never overwrites existing files, so the same name can be retried. Use a referencing native run to verify behavior; datasheet authenticity, page layout and source/model applicability are not certified here. |
| pvsyst_inspect_weather_csvA | [Sites & Weather] Check a PVsyst standard hourly CSV in Meteo before preparing a full-year run. Read-only: reports metadata/units, gaps, duplicates, bad numbers and observed monthly irradiation/temperature with input SHA-256. GHI/Tamb required; optional DHI/DNI and weather columns supported. Raw timestamps must cover one whole year at 00:00..23:00 (including leap day); no silent filling or time conversion. Nonzero shifts, explicit time references and POA need separate review. valid covers this CSV profile only, not MEF/SIT matching or native MET correctness. |
| pvsyst_prepare_weatherA | [Sites & Weather] Prepare NEW native SIT/MET and a provenance manifest from one full hourly CSV. GHI, DHI, Tamb only; explicit uppercase ISO country code and time_basis local_standard_interval_start are required (fixed winter timezone, no DST). Coordinates, altitude, timezone, site and source come from verified CSV metadata. dry_run=true writes nothing. Execution preserves raw bytes, normalizes only columns/units, creates monthly CSV/MEF, runs create-site and convert-meteo. Conversion warnings are retained as needs_review; prepared is not native MET certification. Pass artifacts.manifest filename as weather_manifest_name to simulate_template for explicit SIT/MET loading and hourly weather comparison. No UTC/DST shifts, missing-data filling, ignored columns or binary parsing. Existing outputs are never overwritten; failure artifacts/manifest are retained. |
| pvsyst_resolve_locationA | [Sites & Weather] Resolve a place name into provider geocoding candidates without selecting one. Read-only geocoding lookup: returns every candidate with its integer location_id, coordinates, ISO country code and IANA zone, and sets selection_required unless exactly one candidate matched. query must be 2..100 characters of a place name; country_code, when given, must be an uppercase ISO alpha-2 code. No candidate is chosen automatically, nothing is inferred from a single hit and no weather is downloaded or written. |
| pvsyst_acquire_weatherA | [Sites & Weather] Plan or execute one Open-Meteo ERA5 year as a PVsyst standard hourly weather CSV. Give either location_id from pvsyst_resolve_location, or explicit latitude/longitude together with site_name, country_code and timezone_name; mixing both is blocked. year is an integer in 1969..2068 (native weather dates carry two-digit years; ERA5 itself starts in 1940) and the requested year must already be fully published by the provider. temperature_method=endpoint_mean is the only verified method: the unweighted mean of the two UTC instants bounding each local standard hour, disclosed as a linear approximation. dry_run=true (default) downloads nothing and writes nothing; an execution run writes the raw provider response, the standard CSV and a provenance manifest, refuses to overwrite existing files and never fills, zeroes or interpolates a null hour. Half-hour IANA offsets and standard offsets that change inside the requested year are blocked instead of being rebinned. Native MET conversion and pyranometer quality are outside this scope. |
| pvsyst_review_weatherA | [Sites & Weather] Review one prepared weather CSV against one native result, read-only. csv_name names the prepared standard CSV in workspace/Meteo and native_csv_name the exported hourly result in workspace/Results; year is the strict integer year under review. The CSV is re-inspected with the hash-free value checker, so a historical manifest report is never trusted; the optional acquisition_manifest_name and weather_manifest_name add the stored acquisition provenance and the declared time basis. Provider coverage and native hourly values are compared as measured quantities, and native .MET/.SIT declared fields are read from their file headers only. This review does not certify the effective sun-position time shift inside the native run, does not claim that the endpoint_mean ambient temperature is a measured hourly mean, and does not certify climate extremes. Nothing is written, hashed or simulated. status is blocked or needs_review: review items are listed in the result instead of being dropped, and blocked means the evidence could not be read at all. |
| pvsyst_build_monthly_weatherC | [Sites & Weather] Create the 14-row monthly weather CSV for create-site in workspace/Meteo. |
| pvsyst_create_siteB | [Sites & Weather] Use CLI create-site to create a NEW SIT in workspace/Sites (8.1+). Stage or generate monthly weather CSV in workspace/Meteo. If altitude, timezone or country are omitted, the CLI may query an external service. |
| pvsyst_convert_meteoC | [Sites & Weather] Convert a staged CSV + MEF in Meteo and SIT in Sites to a NEW MET. |
| pvsyst_prepare_load_profileA | [Loads & Storage] Inspect or prepare a NEW native hourly load CSV from workspace/UserData. Require exactly the declared date/load columns plus explicit W or kW units, all 8760/8784 increasing interval-start hours of the requested year and an explicit fixed whole-hour standard UTC offset (no DST). iso dates mean YYYY-MM-DD HH:MM; pvsyst_dot/slash mean DD.MM.YYYY/DD/MM/YYYY HH:MM. dry_run=true writes nothing. Execution preserves the source, writes an ASCII Date;P Load / ;kW CSV to UserHourlyParams and an import record to Results. Missing/duplicate/non-hourly/negative/nonfinite rows stop; no gap filling, resampling, yearly renormalization, net-meter interpretation or time shift. Existing names are preserved. Write failure retains disclosed partial outputs. ready/prepared concern this CSV only, not native consumption: bind the CSV to a variant and verify hourly output. Native calendar lookup ignores year; the importer explicitly checks the requested year's leap day and time basis. input-param-file is an advanced parameters DAT, not a load CSV channel. |
| pvsyst_create_load_variantA | [Loads & Storage] Preview or create a NEW variant with an explicit embedded hourly load snapshot. Bind one prepared v1 load manifest in Results to current raw UserData CSV and normalized UserHourlyParams CSV; check full year/time basis/units and paired powers, never open a historical absolute path from the record. Replace the owning pvLoad with Energy/MJ signed-base62 DDMM hours, including leap day; return encoding precision. No annual renormalization, filling or DST shift. The source VC, PRJ, CSVs and other system/strategy/site/topology fields remain unchanged. A later CSV edit requires a new binding; reading-progress logs do not prove native consumption. This sets loads, not battery dispatch or hybrid ports. dry_run=true writes nothing; execution creates a new VC only, never overwrites. Verify E_User in a native run of matching year/timezone before treating configuration as consumed. Legacy binary/ambiguous VCs stop; non-ASCII load paths add a disclosed UTF-8 BOM to the NEW VC. |
| pvsyst_create_peak_shaving_variantA | [Loads & Storage] Preview or create a NEW variant that switches the native PeakShaving discharge strategy. Supported subset is the already-active native 8.1.6 PeakShaving profile: root Flags=$00080000 with no pvLoad, pvSystem Flags=$17000040/Grid plus the pinned battery hardware and temperature profile, and one directly owned pvGridStorage record holding Strategy=PeakShaving and ChargingStrategy=PVToGridMin. Stored SOC, AC power limits and efficiencies use the shared storage semantic validator, so valid scalar edits remain editable here instead of requiring the original sample's numeric constants. Pinned hardware/system limits remain unchanged; no sizing or dispatch model is offered. mode is the explicit discriminator: after_sunset writes DischStrategy=AfterSunset and drops HourBegDisch/HourEndDisch; hour_window writes DischStrategy=MinMaxHour and exactly two bare-integer hour endpoints that differ. Hour values are adapter-bounded to 0..23 and are not measured native GUI limits; the source record is checked against the same domain, so a saved NaN, fractional or unknown value stops instead of being overwritten. Only those three fields change: strategy, charging strategy, SOC, power limits, efficiencies, grid limit, root/system flags, battery hardware, geometry, loads and the orientation records stay at their verified values, and every other owning field set is compared exactly so unknown, nested or duplicated fields stop. A source with a load, P50/P90, saved horizon, explicit 3D scene or module layout is blocked. dry_run=true writes nothing; execution creates one NEW VC only and never edits the source PRJ/VC or its inputs, reusing existing store locking, path checks, read-back verification and no-overwrite semantics. variant_name/add_utf8_bom follow the existing display-name and BOM rules. native_consumption_verified stays false: hours are native hour slots only, endpoint inclusivity is not inferred, AfterSunset does not mean discharging solely in hours without irradiance, and creating this variant does not prove that this run consumes it. This tool never changes the grid power limitation or power factor; the pinned PLimGrid/PGridLim 200 belongs to this native profile only, and the profile's grid power limitation is apparent power in the native report, not an active-power edit. |
| pvsyst_create_native_load_variantA | [Loads & Storage] Preview or create a NEW variant with one native flat load block (constant, monthly or daily). Supported subset is a native 8.1.6 PV-only single-subarray Grid variant with exactly one ordinary fixed plane, free horizon, no shading scene or module layout, no P50/P90, and a pvSystem declaring only Flags=$06000000 and SystemType=Grid; main array Flags=$01900400/Flags2=$082A and subarray Flags=$019E1002 stay unchanged. mode is the explicit discriminator: constant{constant_kw} writes ConstantLoad with Energy Units=kW; monthly{monthly_energy_kwh} writes the declared twelve kWh values as ValMonth plus the observed three trailing 0.000 slots; daily{daily_power_kw} writes 24 hourly powers and a trailing slot equal to their sum, which reproduces the observed native layout only and is not a load or dispatch model. Numbers must be strict finite nonnegative 0.001-step values; constant_kw must be positive and profiles need at least one positive entry. The 1e6 cap is an adapter bound, not a native or engineering limit. Booleans, strings, empty or wrongly sized arrays, NaN/Inf and unknown fields are rejected, never silently dropped. Only root pvVCalcul bit19, the directly owned pvLoad block and an optional root Comment are written; root Flags must already be 0 or 0x80000 and agree with the presence of an existing pvLoad. An existing constant/monthly/daily block is replaced in place before the unique SimulPlots=Start anchor; the owning pvLoad Comment is normalized to a fixed MCP label inside this declared subset. HourlyFile, Probability, HouseHold, nested, duplicated-owner or unknown-field blocks stop. dry_run=true writes nothing. Execution creates one NEW VC and never edits the source PRJ/VC, inputs, weather, topology or other loads; existing store locking, path checks, read-back verification and no-overwrite semantics apply. add_utf8_bom follows the existing explicit marker habit: false keeps the source marker and a non-ASCII variant_name then needs an existing BOM, true writes a UTF-8 BOM to the NEW VC and is also accepted without a name; bom_added reports it. native_consumption_verified stays false: verify native E_User and the PDF for the matching year/timezone before treating a saved block as consumed. |
| pvsyst_create_grid_storage_variantA | [Loads & Storage] Preview or create a NEW VC from an existing native AC-coupled Grid storage template. Supported variant declarations are 8.1.0/8.1.6 with one complete flat pvGridStorage, Grid pvSystem, declared active storage/battery bits, an existing BTR reference and positive pack counts. SOC fields are fractions 0..1; require min < max, initial and reserve inside those bounds. PMaxCharge limits the charger's AC input in kW, PMaxDisch the battery inverter's AC output; neither is a hybrid DC-port rating. Explicit max/Euro efficiencies are percent, with Euro <= max. Scalar-only edits also retain the source PeakShaving/PVToGridMin pair with MinMaxHour or AfterSunset unchanged; source and candidate both validate SOC/efficiency/window semantics. Explicit strategy still uses SelfConsumption or WeakGrid with PVAvailable/Immediate. Public getter exposes grid_storage for read/re-edit; absent storage is null. WeakGrid requires a fresh availability declaration: full-year UserData Date;Grid Available / ;ratio CSV, ISO interval-start hours, exact 0/1 values, fixed standard offset and at least one outage. Bind native pvUnavail/HourlyVal GrdUnav Factor/Aver day snapshots, match the load snapshot year and require the root self-consumption flag. reserve_soc is SOCDischSelf: WeakGrid preserves it with grid available and permits discharge toward SOCDischDecl during outages. It is unused as backup in SelfConsumption; never a standalone generator voltage threshold. Preview writes nothing. Execution creates a NEW VC, retains source PRJ/VC, battery filename/counts, PV/load/site/temperature/SOW/topology. Optional allow_grid_export toggles only native system bit27: false prevents grid injection, true allows it subject to existing limits, omitted preserves it. This is not a charge-from-grid switch and not a hybrid DC-port setting. This does not construct hybrid ports, add battery hardware, schedule grid charging, infer efficiencies or certify physical sizing. Verify native SOC and energy flows before treating saved fields as consumed. |
| pvsyst_create_grid_storage_systemA | [Loads & Storage] Preview or create a NEW native AC-coupled storage VC from an existing PV-only Grid design. Require explicit workspace loose BTR, series/parallel counts, twelve monthly battery temperatures, cycle/static initial SOW, complete SOC fractions, charger AC-input/battery inverter AC-output kW limits and percent efficiencies. No hardware or climate defaults are inferred. Bind a prepared v1 hourly load record and both current source/normalized CSVs into an explicit MJ snapshot. Enable root self-consumption bit19 and existing native Grid/battery system bits; retain other flags and PV/component/site/weather/geometry fields. Optional allow_grid_export toggles only system no-injection bit27; omission preserves the source setting. This controls export, not grid charging or DC coupling. Creates only one new VC, never edits the source or replaces files. SelfConsumption and WeakGrid use PVAvailable/Immediate. WeakGrid requires a complete explicit availability CSV declaration matching the prepared load year and standard UTC offset, with at least one outage. Bind native pvUnavail/HourlyVal ratio snapshots; SOCDischSelf preserves reserve with grid available and allows discharge toward SOCDischDecl during outages. It is unused as a backup reserve in SelfConsumption. Backend is pvsyst_native_ac_coupled, not hybrid DC battery-port modelling, a new BMS model or a grid-charge tariff controller. Creation does not simulate or certify sizing; verify native E_User, SOC and energy in the matching year/timezone before treating configuration as consumed. Non-ASCII new load/component paths add a disclosed BOM to the NEW VC only. |
| pvsyst_build_sfiB | [Simulation] Create a NEW hourly export definition in workspace/Models. variables=grid_storage includes common PV outputs plus native load, SOC, battery/grid flows, EUnused and all three converter losses CL_Chrg, CL_InvB, CL_Over. Include CL_Over when reviewing native grid-storage energy balance; this exports PVsyst values, not a separate storage calculation. variables=soiling adds native GlobSlg/SlgLoss irradiance outputs to common PV outputs; native runs may omit these columns when soiling is disabled. variables=grid_limit adds PGridLim, EGrdLim, EUnused and EOutInv. PGridLim is the native limit, EGrdLim the grid-curtailment loss, not EUnused. EOutInv is not the bounded injection column. Disabled runs may omit limit columns. variables=shading adds GlobShd/ShdElec; native linear-mode runs may omit ShdElec, and a defined detailed layout can legitimately have zero electrical loss. |
| pvsyst_run_house_taskB | [Simulation] Deliver one AI-authored residential project through existing native entries. Source must be the existing bounded fixed PV-only northern-site template, with identical bound workspace SIT/MET in PRJ/VC. Hardware/counts/angles/losses, source engineering defaults and weather remain inherited and disclosed, never sized or guessed. AI supplies a complete mesh house and one/two placed PV regions in spec; all module counts/source-PAN metadata and native8.1.6CN/DPI96 boundaries remain. Two source orientations require one explicitly named region per orientation1/2, the same PAN/OND, anchor azimuth zero and distinct source planes. Native table properties assign each plane and place its declared coordinates; SHD exports, saved VC and actual GUI reload verify every mesh/region before the annual run. Optional spec.shading_mode=module_layout invokes the native detailed electrical layout path for two landscape zero-spacing, single-string groups and exports ShdElec. Omitting it preserves the original request/checkpoint representation. Optional spec.scene_import_method="native" routes the SAME supported two-fixed-table recipe through the existing headless native importer (no GUI/INI/clipboard) and records the new variant as STORED-only: stored_geometry_verified (and stored_module_layout_verified for module_layout) may be true, while imported/native_geometry_verified/native_reload_verified and native_consumption_verified stay false until the normal CLI simulation consumes that VC. Omitting it keeps the original GUI import route and request/checkpoint shape; unsupported recipes stop with a concrete issue before writing and there is no silent GUI fallback. Preview writes nothing/does not activate or launch GUI; cold execution requires dry_run=false and confirm=true, configured DataPath and NO preexisting native GUI. It exclusively creates a working PRJ/VC0, PVC2 and SFI, opens one owned GUI, imports/ associates/checks/shading-tables/SavesAs one NEW native variant, then normally closes only its actual Popen. Unknown dialogs/unsaved-work questions are not dismissed. A NEW CLI process reloads the saved variant, recomputes native shading and generates the explicit full-year CSV/PDF. Completeness/context/finite columns/GlobShd and source preservation are checked using existing result validators; no replacement PV model. File creation, native save and simulation-consumption remain distinct checkpoints. Results/_house_task.json records the exact request and guarded files; existing artifacts are never overwritten/deleted. Resume requires the IDENTICAL spec and explicit resume=true; no checkpoint PID grants ownership. Partial unverified native saves need inspection, not blind reimport. A failed run keeps its outputs: explicit retry_simulation=true chooses NEW attempt names, without rebuilding the saved scene. A completed retry-free resume revalidates artifacts and runs no new GUI/simulation. Status/phase/issues matter, not just MCP is_error; any unexpected stop retains evidence. Process coordination is one server/workspace RLock, not a global desktop/task service. |
| pvsyst_simulate_templateA | [Simulation] Preflight or execute one template-to-full-year grid simulation without GUI. Supply an existing valid PRJ/VC, loose text PAN/OND, workspace SIT/MET, tilt, year and a NEW project filename. Missing inputs return field-specific issues. Native MET root date declarations are checked before creating the working project; generic-1990, absent or unreadable dates remain disclosed, not inferred from filenames. Scope: completely checked single subarray/fixed plane, no active shading/layout, PRCorrTemp=False; retain template counts unless capacity is explicitly supplied. capacity plans integer series/strings/inverters against declared design voltages, currents, temperatures, IEC/UL module voltage rating and maximum DC:AC ratio. Require independent unshared 8.1.0/8.1.6, one repeatable inverter/MPPT/string branch, full hardware MPPT population and crystalline PAN at STC; mode/topology stays intact. Design envelope/source are required, not guessed from raw temperature coefficients. No native temperature-model reproduction, hardware selection or design certification. Optional weather_manifest_name binds prepare_weather provenance to the requested year/SIT/MET, explicitly loads native weather, and compares hourly GHI/DHI/Tamb; changed files stop before writes. Conversion/rounding concerns remain needs_review. dry_run=true (default) writes nothing and consumes no simulation execution. dry_run=false copies/configures the project, runs Jan 1 through Dec 31 hourly, validates native context/complete year, and returns energy, standard PR, IL_Pmax, warnings, CSV/PDF/SFI and a persisted JSON manifest with reverse recovery steps. Existing project/output files are never overwritten. Failure retains the original template and working files/backups/manifest; no automatic retry or destructive cleanup. status is blocked/ready/completed/needs_review/failed; inspect it, not just MCP is_error. Extreme IL_Pmax versus STC reference energy triggers a disclosed review heuristic, not a claim of native physical validation or an automatic model repair. Year is 1969..2068 due to two-digit native CSV dates. Restart host for this tool. azimuth overrides the template plane azimuth in -180..180 degrees (zero south, west positive); losses accepts only LIDLoss, PMismMPP and ModuleQualityLoss on the subarray plus UFactor on the whole main array. Template fields left unspecified keep their saved values, and the returned configuration_summary discloses the requested angles and losses; no loss is fitted, inferred or defaulted. Optional report_pages is a nonempty list of native page names (for example ["summary", "losses"]); omit it for the default complete report. Invalid pages stop in preflight, and the request/manifest records the selection. Explicit tracking + tracking_variant selects an existing verified native8.1.6 UnlimTracking template flow instead: omit tilt/azimuth/capacity/losses; exact source PAN/OND database references and equipment counts stay inherited. This branch requires explicit positive nominal_dc_power_kw and printable tracking_power_source; these are declarations cross-checked against native PR, not guessed from names/cached sizing. Loose workspace/builtin model shadows stop; database internals are not inspected or snapshotted. Only CLI8.1.6rev49278, and completed consumption retains needs_review. Reuses create_tracking_variant to create a NEW VC in the isolated clone, then the same yearly native load/report/ context/integrity checks plus finite actual columns and GlobShd. No type conversion, arbitrary geometry or other tracker families. native_consumption_verified becomes true only after validated completion, not engineering certification. Its recovery is review/manual archive of the entire new clone/VC/outputs; no stale per-file undo, automatic retry/resume, deletion or repeat on an existing project/output. |
| pvsyst_run_simulationB | [Simulation] Run an existing project/variant. Regular CSV/PDF go to Results. For a single run, csv_name accepts a bare filename (e.g. run01) or a .csv filename (run01.csv); both create Results/run01.csv. Existing outputs are never overwritten. For batch_params_name, leave csv_name/pdf_name empty: the CLI generates UserBatch/UserHourly outputs automatically. Optional inputs live in Models (SFI,RVT), Meteo (MET), UserData (DAT), UserBatch (batch CSV/RVT), or Sites (SIT). Unsupported options fail early. Each run can consume a license execution. |
| pvsyst_simulate_designA | [Simulation] Preflight or execute one bounded design flow from declared inputs without the GUI. spec.new_project names the NEW working project and is required. scope is fixed to fixed_unshaded_grid: one subarray, one ordinary fixed plane, a Grid system, PRCorrTemp=False and no active geometry, layout or shading scene. The flow locates exact loose PAN/OND components and an eligible workspace template. If no template or variant is pinned and no candidate is eligible, it can derive a NEW template from the installed 8.1 residential seed, preserving its source fields and declaring the target MPPT counts. It builds the linear design envelope from declared inputs, plans integer capacity, configures the working project and, with dry_run=false, runs the full year. The verified 8.1 workspace root must be named PVsyst8.1_Data. Read-only preflight reports missing standard folders and blocks file conflicts or escaping paths; execution fills missing empty folders without renaming the root or replacing files. weather.mode=existing uses the named workspace SIT/MET pair, weather.mode=csv names a staged standard hourly CSV, and weather.mode=open_meteo acquires one public ERA5 year. Dry-run with open_meteo or a not-yet-created standard template returns ready_for_weather with execution_preflight_complete=false: this is an input/template plan, not a runnable native design. electrical_design requires declared coefficients with units and sources, and source-declared current limits. Voltage/current field names imply V/A when units are omitted; explicitly contradictory units are blocked. Missing required data returns concrete issues; an empty object never becomes ready. losses overrides LIDLoss, PMismMPP and ModuleQualityLoss on the subarray and UFactor on the main array. Every field of spec that is not supplied keeps the template value; no loss, coefficient, temperature or azimuth is fitted, inferred or defaulted, and no design is certified here. status is blocked/ready/ready_for_weather/completed/ needs_review/failed; inspect it, not just MCP is_error. Year is 1969..2068. The returned issues, warnings, transactions and recovery steps state exactly what was and was not changed. Optional spec.report_pages selects native PDF page names; omitted means the complete default report, and invalid lists stop before discovery/weather. |
| pvsyst_prepare_sourced_designA | [Simulation] Bind caller-declared excerpts to source text and build the design-envelope request. pan_name and ond_name are exact loose component filenames (workspace first, then the installed library): a manufacturer-only search is never substituted and no model is inferred. The identity label is composed from the owning objects as "PAN manufacturer PAN model / OND manufacturer OND model" and cannot be overridden by the caller. A root-only text component and an 8.1.6 GUI component are both accepted: the root object is required, a PVObject_Commercial block is optional and its identity wins, while a disagreement between the two, a repeated declared field or a legacy binary or non-UTF-8 file returns blocked with the concrete field. sources maps short ids to declared source text whose kind is manufacturer, site or assumption; declarations claims one value per field, each tied to a source id, an excerpt and the exact value/unit tokens it must agree with, and the declared source text itself is never returned. design carries explicit engineering goals only, so no envelope, coefficient or limit can be injected without a citation. status is ready, needs_review or blocked; the assembled electrical_design draft, the reused envelope result and the citation provenance come back, and the declared excerpts are a source-consistency check between the claimed value and the quoted loose component identity, not a manufacturer certification. |
| pvsyst_run_sourced_house_taskA | [Simulation] Bind cited inputs, prepare a source project without an annual run, then deliver one house. design reuses SingleDesignRequest, but module/inverter require exact loose file_name and capacity/electrical_design must be absent: the existing cited-source helper builds the electrical draft. sources/declarations/goals reuse pvsyst_prepare_sourced_design semantics; an explicit design.target_dc_kw is also an engineering goal, never a guessed rating. Missing/mismatched citations return needs_context and the concrete draft without writes. design.new_project is the NEW source; spec.new_project is a DISTINCT final house project. Complete house/layout/module geometry reuse the existing native house input contract. Dry-run on a fresh source is ready_for_preparation or ready_for_weather, not full house preflight; it writes nothing and launches no GUI. Execution requires dry_run=false AND confirm=true. Source review additionally requires accept_source_review=true, and remains needs_review in the final result; confirmation never certifies source authenticity. Prepared source and house manifests own recovery: resume rechecks request/provenance, canonical inputs and prepared files, then resumes the existing child checkpoint without another preparation/annual baseline. Partial source preparation remains inspectable via its existing recovery transactions, not automatically repeated or silently overwritten. Final annual execution is only the existing native house task. GUI/version/DPI/topology bounds are unchanged. Existing user windows are not taken over, INI is not edited here. Weather assets/source review are checked; the house path does not add hourly comparison against the source weather CSV. It reports weather_native_comparison_performed=false. Raw source text is not persisted or echoed; accepted citation provenance is preserved. No new PV/sizing/dispatch model or general job framework. |
| pvsyst_read_resultsA | [Results] Summarize hourly or subhour SFI rows in Results or UserHourly. Complete energy requires finite samples and regular cadence; observed energy excludes missing samples. With compare_to, return target (csv_name) minus baseline (compare_to), using 1..64 distinct columns, identical explicit units and identical increasing timestamps. compare_folder defaults to folder. No resampling/conversion. Statistics use finite pairs only; missing pairs and coverage are explicit. Power differences in W/kW integrate to kWh only at a regular cadence. Comparison verifies both file hashes before/after reading; it runs no simulation. |
| pvsyst_read_rowsC | [Results] Read a bounded page from Results or batch UserHourly CSVs. |
| pvsyst_read_batch_resultsC | [Results] Read SIM_* scenario values from a UserBatch/*Results.CSV summary. |
| pvsyst_prepare_block_projectB | [Engineering] Prepare one NEW project from explicit counts of fully defined native block types. Each block names a unique source_subarray_id and count INCLUDING the original. Cover every source subarray exactly once, at most 100 blocks in total. Copy whole exclusive inverter/MPPT/string branches with their source equipment, counts and ordinary fixed-plane orientation. Do not infer internal wiring, resize hardware, choose models or change angles. Only the selected source VC and PRJ are published. Preview builds in memory without writes; execution never overwrites or backs up an existing project. No native run, GUI, INI, weather acquisition or certification. Unsupported shading, sharing and common load/storage/transformer/limit/auxiliary systems stop; inherited weather/losses/electrical suitability require review. Prepared mapping and serialized counts do not prove native consumption. |
| pvsyst_review_engineering_briefA | [Engineering] Review caller-structured cited engineering facts before a native project exists. Aggregate same-scope conflicts, whole-string and block quantities, declared DC/AC arithmetic, nameplate Pmax versus Vmp*Imp and missing exact PAN/OND/hourly weather. Use explicit count/W/kW/kWh/V/A/deg/m units and PDF physical page citations; no automatic unit conversion, chapter selection, equipment or topology inference. Readonly with no files, PDF, native executable, license, network, GUI or INI access. Source quotes remain caller declarations. Returns blocked or needs_review only; even consistent facts do not certify equipment, physics or engineering readiness. |
| pvsyst_project_handoffB | [Engineering] Read saved equipment, counts, orientation/circuit relationships and input dependencies. Includes explicit caller declarations, inherited values, missing inputs and engineering review items. Fixed/tracking and existing AC storage use the native saved records. Readonly: no GUI, license query, simulation, repairs or writes. ready/needs_review describe the handoff only; native_consumption_verified remains false. |
| pvsyst_run_engineering_taskA | [Engineering] Preview or execute an isolated revision of a fixed/UnlimTracking or existing AC-storage project. State the engineering objective, nameplate kWp/source and explicit supported changes. Existing equipment/counts/weather stay inherited; no model fitting or sizing inference. Existing AC storage accepts storage scalar updates and a prepared load_manifest_name; WeakGrid additionally requires the complete availability declaration. The stored load must match its prepared snapshot and site standard UTC offset. Native annual results verify actual load/SOC/AC limits; storage never uses the PV-only E_Grid PR formula. Preview writes nothing. Execution creates a NEW project/VC, reloads via native CLI, runs one complete hourly year, produces native CSV/PDF and records the actual run inputs for comparison and delivery. Existing names stop; failure retains evidence without automatic retry/rollback. Inspect stage and native_consumption_verified as well as status: needs_review can mean a completed run still requiring engineering review. |
| pvsyst_compare_engineering_scenariosA | [Engineering] Organize two or three native result scenarios around an explicit engineering question. First scenario is baseline with no declared changes. Each candidate declares its intended changed saved-input groups/paths. Completed engineering run manifests bind historical inputs to CSVs; unbound historical results retain needs_review. Compare only actual native columns with aligned timestamps/units; missing columns stay missing. Returns Chinese explanations and key-hour differences without claiming optimality or a single cause for simultaneous changes. Preview is readonly; execution writes new JSON/CSV/Markdown comparison files under Results without rerunning PVsyst. |
| pvsyst_export_engineering_deliveryA | [Engineering] Package a completed engineering run as a NEW local Results ZIP. Reads one workspace run manifest and checks its input/output binding. Includes the selected native PRJ/VC, original CSV/PDF, Chinese summary and input handoff. Optional house runs additionally include their genuine task manifest, authored PVC2 and SFI. comparison_name includes its bound scenarios and Chinese comparison report. Commercial component/weather files remain external dependencies. Export does not certify the design or upgrade a review status. Preview writes nothing; existing ZIPs stop. |
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 82 tools
The set has many overlapping tools for creating/editing variants and for running simulations or preparation flows, such as simulate_template, simulate_design, run_simulation, run_house_task, run_engineering_task, and several create_*_variant tools. Descriptions add boundaries, but an agent must parse dense scope gates to choose correctly, and multiple tools appear to cover closely related project/variant/simulation intents.
Most names use a pvsyst_ prefix and snake_case with a verb_noun pattern, e.g. pvsyst_create_project, pvsyst_update_variant_components, pvsyst_validate_component. A few names are noun phrases or less action-oriented, such as pvsyst_capabilities, pvsyst_license_info, and pvsyst_project_components, but the overall convention remains predictable.
With 82 tools, this is far beyond a well-scoped MCP surface and falls into the extreme mismatch category. Even for a broad PVsyst automation domain, many highly specialized variant-creation and preparation tools make the set hard to navigate.
The surface covers project, variant, component, weather, load/storage, simulation, results, licensing, and engineering review lifecycles with create/read/update/archive/restore operations. Coverage is broad, though many tools explicitly stop at bounded subsets, so the lifecycle is comprehensive but not fully complete for every native PVsyst feature.