palace-tools
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@palace-toolsmesh a microstrip line at 10 GHz, build and lint its config, then estimate RAM at 4 ranks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
palace-agent-tools
Part of agent.rf — the RF lab: https://benjhardy.github.io/agent-rf/
Tools that let AI coding agents (Claude Code, Codex, Cursor, or a plain script) set up, lint, run, check and post-process AWS Palace finite-element electromagnetic simulations reliably.
Palace is a capable open-source FEM solver, but most mistakes in a Palace model produce a plausible answer and no error: a mesh read in micrometres, a boundary tag that Palace silently ignores, absorbing walls that fake a loss, a solver choice that gives wrong points on some rank counts, S-parameters that are never written. This package turns the lessons from a series of Palace projects (MRI birdcage coil, Wilkinson divider, lumped-filter port tuning, an microstrip AMR study, a GDS-to-Palace benchmark, a mmWave PA) into tools an agent calls with one JSON object and gets one JSON object back:
step | tool | what it does |
geometry, mesh |
| Gmsh OCC parts (boxes, substrates, traces, vias, port rectangles, air box padded in wavelengths), physical-group conventions, wavelength and feature size fields, MSH 2.2 + a |
config |
| Palace JSON from a compact spec with names instead of tag numbers and safe defaults |
lint |
| Palace 0.16 schema validation plus 44 rules from real failures, each with the lesson and its source |
cost |
| peak RAM and wall time (quiet / typical / busy) calibrated on 190 recorded Palace 0.16 runs |
run |
| WSL + Apptainer, Apptainer, Docker or native; refuses to oversubscribe a busy machine or run out of RAM; logs wall time and memory |
results |
| port-S / eig / EPR / Q / energy / AMR / field summaries, Touchstone with the right reference impedances |
check |
| passivity, reciprocity, energy balance, port symmetry, expected eigenmode, log errors, spurious wave-port modes, convergence |
It ships as a Python package with a CLI, an MCP server (stdio) and a Claude Code skill.
Who it is for: RF/microwave and EM engineers who use Palace with an AI agent, and agent builders who want an EM solver step their agent cannot quietly get wrong.
Status: targets Palace 0.16 (the version the rules and cost data come from), with version switches for the behaviour that changed in 0.17 and 0.18. Simulation-only examples; nothing here was measured.
Install
python -m venv .venv
. .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[all]" # numpy + gmsh + scikit-rf + jsonschema; ".[dev]" adds pytestThe core (config, lint, estimate, results, checks) needs only numpy. gmsh is needed for meshing, jsonschema
for schema validation, scikit-rf for Touchstone files. Palace itself is not installed by this package: use
the official container or a native build (see Palace install),
then tell the runner how to call it (PALACE_TOOLS_BACKEND, PALACE_TOOLS_IMAGE, PALACE_TOOLS_CMD,
PALACE_TOOLS_DISTRO; palace-tools doctor shows what it found).
Related MCP server: mcp-server-skeleton
Quick start (human)
python examples/cavity_te101/run_example.py --ranks 2 # 10 s: eigenmodes vs analytic TE101 ...
python examples/lumped_port_line/run_example.py --ranks 2 # 1.5 min: lumped ports on an exact TEM line
python examples/microstrip_thru/run_example.py --ranks 2 # 2.5 min: microstrip Z0, eeff vs Hammerstad-JensenOr step by step with the CLI:
palace-tools mesh-template '{"template": "microstrip_line", "out": "case/line", "w": 1.137, "h": 0.508,
"length": 20, "eps_r": 3.55, "side": 4.5, "top": 4.5, "h_mesh": 1.6, "h_edge": 0.12, "ports": "wave", "f_ghz": 10}'
palace-tools build-config @spec.json # {"spec": {...}, "out": "case/config.json"}
palace-tools lint-config '{"config": "case/config.json", "geometry": "case/line.tags.json"}'
palace-tools estimate '{"config": "case/config.json", "tags": "case/line.tags.json", "ranks": 4}'
palace-tools status '{"ranks": 4}'
palace-tools run '{"case_dir": "case", "ranks": 4}'
palace-tools check '{"case_dir": "case", "symmetric_pairs": [[1, 2]]}'
palace-tools results '{"case_dir": "case", "touchstone": "case/line"}'palace-tools list prints every tool. Arguments can come inline, from @file.json, or from stdin (-). Exit
code 1 means the tool reported a problem (ok: false or overall: fail), 2 means bad input.
Quick start (agents)
MCP (any MCP client). The server is dependency-free JSON-RPC over stdio:
claude mcp add palace-tools -- python -m palace_tools.mcp_serveror the repository's .mcp.json. Tools: palace_spec, palace_build_config, palace_lint_config,
palace_lint_rules, palace_gotchas, palace_mesh_template, palace_mesh_report, palace_estimate_cost,
palace_status, palace_run, palace_results, palace_check, palace_doctor. Each has a JSON input schema;
results come back as JSON text and structuredContent.
Claude Code skill. Copy skills/palace-simulation/ into ~/.claude/skills/ (or a project's
.claude/skills/). It teaches the workflow spec -> geometry -> mesh -> config -> lint -> cost estimate -> run
-> check -> report, with the gotchas, recipes, run rules, check meanings and version notes in references/.
Other agents. AGENTS.md has the same workflow and rules in plain form.
The config spec
{"problem": "driven", "mesh": "line.msh", "units": "mm", "tags": "line.tags.json", "order": 2,
"materials": [{"tags": ["substrate"], "eps_r": 3.55, "tan_d": 0.0027}, {"tags": ["air"]}],
"pec": ["ground", "strip"], "pmc": ["ends"],
"lumped_ports": [{"index": 1, "tags": ["port1"], "direction": "+Z", "R": 50},
{"index": 2, "tags": ["port2"], "direction": "+Z", "R": 50}],
"frequency": {"min_ghz": 0.5, "max_ghz": 10, "step_ghz": 0.25, "adaptive_tol": 1e-3}}Also: absorbing, conductivity, impedance (give R, length, width and it sets Rs = R w / l),
lumped_elements (with cut: half-width | half-length for elements split by a symmetry plane), wave_ports,
wave_port_pec, symmetry, eigen, amr, solver, probes, energy_domains, save_fields, and extra
(raw Palace keys merged last). Defaults: MUMPS; a direct factorisation (MGMaxLevels: 1) for eigenmode and
for driven problems up to 600k unknowns; ComplexCoarseSolve; EstimatorMG + EstimatorTol 1e-4 when AMR is
off; Excitation = port index; no ParaView output unless asked. palace-tools spec prints every key.
Examples (Palace 0.16, 8-thread desktop, 2 MPI ranks unless noted)
example | reference | result | size / cost |
| analytic TE/TM resonances; exact dielectric Q | TE101 8.243934 vs 8.243877 GHz (+0.0007 %); first 5 modes within 0.02 %; Q = 1000.00 vs 1000.00 | 17.8k unknowns (order 2), 0.24 GB, 9 s |
| closed-form line S-matrix | max |S - S_ref| = 8.7e-7 over 0.5-10 GHz | 34.5k unknowns, 0.65 GB, 55 s |
| |S11| = 0.2 (-13.979 dB), flat | -13.97940 to -13.97942 dB; also exposes the 0.16 unequal-R bug: |S21|^2 = 2/3 of the delivered power (= R1/R2), flagged by | 23 s |
| Kirschning-Jansen eeff(f) | eeff within 0.4 % over 1-10 GHz; |S11| < -40 dB | 105k unknowns, 2.5 GB, 78 s on 4 ranks (104 s on 2) |
| Hammerstad-Jensen Z0 = 50.0 ohm; Kirschning-Jansen eeff | Z0 49.5 ohm median (48.6-51.7) over 0.5-10 GHz; eeff within 0.25 %; fitted port inductance 143 pH. Single-line extraction without de-embedding: eeff +5.6 %, Z0 40-60 ohm above 5 GHz | 70k + 109k unknowns, 1.5 + 2.4 GB, 45 + 84 s |
Every run passed the passivity, reciprocity, energy-balance, port-symmetry and log checks, except case b,
where the energy check flags the 0.16 bug, as it should. The examples write their summaries to
results*.json next to each script.
Gotchas (what the lint rules encode)
All 44 rules with their full lessons: skills/palace-simulation/references/gotchas.md (generated from the code). The ones that cost the most time:
gotcha | what happened | where it was learned | rule |
| partition-dependent wrong points (S21 ~ -45 dB at 2 of 21 frequencies on 6 ranks) and "singular matrix" aborts; MUMPS identical on any rank count | GDS-to-Palace benchmark | SOL001 |
p-multigrid on an eigenproblem with lumped C | ~1 min per shift-and-invert solve; direct MUMPS ( | birdcage | SOL002 |
default error estimator when AMR is off | half of the run time; | GDS-to-Palace benchmark | SOL003 |
mixed wave and lumped ports | Palace 0.16 writes no | Wilkinson, port tuning | PRT001 |
lumped ports with different R | 0.16 reports |S21|^2 low by R1/R2 (fixed in 0.17: drop the correction after upgrading) |
| PRT011 |
edge lumped port beside an absorbing wall | ~20 % of the port power lost into the wall; PMC end walls are lossless | port tuning | PRT012 |
curved or tilted lumped patch | Palace aborts (projected-length / 1-degree axis check); make patches flat, Direction along an edge | birdcage | PRT009 |
element cut by a symmetry plane | needs C/2 along its width (full C: -7.6 % frequency error), 2C across its length | birdcage | BND004 |
absorbing walls in the near field | 0.03 dB fake loss at 0.2 lambda (Wilkinson); 5 % flat loss and S11 != S22 at 1 mm (benchmark) | Wilkinson, benchmark | BND001 |
wave port smaller than the mode | 3-6 % loss falling with frequency on a bare line; use the whole end face | benchmark | PRT013 |
adaptive sweep in a closed box | aborted after the first sample ("singular matrix", SuperLU); direct points worked | benchmark | BND002 |
adaptive sweep online phase | 2.6 s per frequency per excitation at 258k unknowns: 97 of 128 min | port tuning | DRV003 |
nonconformal AMR with wave ports | the port mode jumped to a spurious mode (n_eff = sqrt(4.4)); conformal refinement fixed it | microstrip-amr | PRT014 |
wave-port de-embedding with lossy conductors | the de-embedded length carries no conductor loss in 0.16 (-0.001 vs -0.30 dB per inch) | microstrip-amr | PRT015 |
AMR size cap | checked after refining: a 450k cap ended at 623k unknowns, 14 GB | microstrip-amr | AMR001 |
several excitations with field output | only the last excitation's ParaView fields are kept (0.16) | Wilkinson | PRT016 |
| the mesh is read in micrometres | Palace docs | MOD001 |
tag typo | Palace prints "Unknown ... boundary attributes! Solver will just ignore them!" and runs on | Palace source | BND005 |
WSL and | WSL kills detached jobs when the last | benchmark, PA | (runner) |
floating port / unresolved via | |S21| ~ -50 dB with no error; S22 = +0.8 dB from one tiny via under a pad | PA, benchmark | ( |
Version-dependent behaviour (0.16 vs 0.17/0.18) is listed in references/version-notes.md.
Cost estimate
palace-tools estimate fits power laws in the number of unknowns to 190 recorded Palace 0.16 runs (eigenmode
and driven, direct and p-multigrid, orders 1-3, 1k to 1.6M unknowns) from the projects above. Anchors: a 1.12 M
unknown order-2 eigenmode solve with MUMPS on 4 ranks used 16.4 GB and 11-19 min (estimate 15.5 GB, 12 min);
a 1.32 M unknown driven sweep with p-multigrid used 10 GB (estimate 10.7 GB). On the recorded runs the median
memory error is 4 % (eigenmode, direct), 10 % (driven, p-multigrid) and 14 % (driven, direct; 80th percentile
41 %). Wall time is only good to 2-3x, because many recorded runs shared the CPU with another job. The estimate is a
go/no-go aid for "ask the user first", not a schedule.
Limits
Rules and cost data come from Palace 0.16 on one 8-thread, 32 GB desktop (WSL2 with 25 GB). Times do not scale with rank count in the model; clusters will differ.
The lint rules catch known failure patterns; they do not prove a model right. Always compare with a reference and refine the mesh once on the figure of merit.
Geometry-aware rules need the
*.tags.jsonfrompalace_tools.mesh; meshes from other tools get the config-only rules.The mesh helpers cover axis-aligned planar RF structures (boxes, traces, vias, rectangular ports) and three templates; complex 3-D CAD should be built with Gmsh directly, using the same group conventions.
The MCP server runs tools synchronously;
palace_runblocks until Palace exits.Not affiliated with AWS or the Palace developers.
Development
pip install -e ".[dev]"
pytest # 67 tests, ~3 s, no Palace needed
python tools/gen_gotchas.py # regenerate the gotchas reference after editing rules
python tools/harvest_costs.py label=<runs folder> ... # add your own finished runs to the cost modelLicence
Apache License 2.0, the same licence as Palace. The vendored Palace config schema
(palace_tools/data/schema_0.16/) is Copyright Amazon.com, Inc. or its affiliates, Apache-2.0; see
NOTICE.
Available Tools
13 toolspalace_build_configA
Build a Palace JSON config from a compact spec (physical-group names, units, ports, sweep) with safe defaults (MUMPS, direct solve for eigen/small driven, cheap estimator, Excitation = Index). Writes it if 'out' is given, and returns lint + schema results.
| Name | Required | Description | Default |
|---|---|---|---|
| out | No | config.json path to write | |
| spec | Yes | spec dict or path to a JSON file | |
| ram_gb | No | ||
| palace_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose two behavior-affecting traits: the specific safe defaults silently injected (MUMPS, direct solve for eigen/small driven, cheap estimator, Excitation = Index) and the conditional write triggered by 'out'. It omits overwrite semantics and error behavior on an invalid spec, which keeps it out of the top band.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence with no filler; the purpose is front-loaded and the defaults, write condition, and return values follow in priority order. Slightly overloaded by the parenthetical default list, but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter generator with no output schema and no annotations, the description covers the essential decision inputs: what it produces, the defaults it silently applies, when it writes to disk, and that it returns lint plus schema results. Gaps on ram_gb/palace_version semantics and overwrite behavior are the main omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: out and spec are documented, while ram_gb and palace_version are undocumented in both schema and description. The description compensates partially by enumerating what the spec contains (physical-group names, units, ports, sweep), which adds meaning over the schema's generic 'spec dict or path to a JSON file'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Build a Palace JSON config from a compact spec', with the input form (physical-group names, units, ports, sweep) made concrete. It is clearly a generation tool distinct from lint/run siblings, but it never names or explicitly contrasts an alternative, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The conditional 'Writes it if "out" is given' gives real usage signal about when the tool persists output versus only validates. However, there is no explicit when-to-use guidance relative to siblings like palace_lint_config or palace_run; the workflow context (build before run) must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_checkC
Sanity checks: passivity, reciprocity, energy balance (fake wall loss), port symmetry, eigenmode at the expected frequency, log errors, wave-port spurious modes, convergence.
| Name | Required | Description | Default |
|---|---|---|---|
| config | No | ||
| expect | No | ||
| case_dir | No | ||
| output_dir | No | ||
| convergence | No | ||
| symmetric_pairs | No | ||
| reference_touchstone | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not say whether this reads files or executes a solver, whether it mutates anything, what permissions or a completed run it requires, or what happens on failure. Listing check names is not the same as disclosing behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, but it is an undifferentiated comma list of jargon that would benefit from grouping or structure. It is compact without being genuinely well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters (including nested objects), no annotations, and no output schema, the description is far too thin. It neither documents inputs nor clarifies what a check result looks like, leaving the agent unable to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Seven parameters with 0% schema description coverage and no descriptions, and the description names none of them explicitly. There is only a loose implicit mapping (e.g. 'eigenmode at the expected frequency' ↔ expect.eigen_ghz, 'convergence' ↔ convergence, 'port symmetry' ↔ symmetric_pairs), leaving config, case_dir, output_dir, and reference_touchstone entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It gives a specific verb ('Sanity checks') followed by a concrete list of checks (passivity, reciprocity, energy balance, port symmetry, eigenmode, log errors, spurious modes, convergence), so an agent can infer the domain. But it never states what artifact it operates on (a case dir, results, a config) and does not distinguish itself from siblings like palace_lint_config, palace_lint_rules, palace_doctor, or palace_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to run this versus the numerous sibling lint/doctor/status tools, no prerequisites (e.g. must a simulation have completed first?), and no statement of when it is not appropriate. The list of checks implies a post-run validation context but the agent must guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_doctorC
Which optional modules and Palace backends are available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not state whether this is a read-only inspection, whether it probes the environment, what triggers the 'doctor' behavior, or what it returns — only that it concerns available modules and backends.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short clause with no wasted words. It is front-loaded and easy to scan, though it reads as a fragment rather than a complete statement of behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema query tool the description is minimally sufficient, but it does not clarify the 'doctor' diagnostic framing or distinguish the result from sibling status/check tools. An agent has enough to guess, not enough to be confident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There are no arguments whose semantics need explaining, and the description does not need to add parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The fragment conveys the subject matter (available optional modules and Palace backends) but lacks a verb and does not distinguish this from siblings like palace_status or palace_check. The name 'palace_doctor' implies diagnostics, which the description does not confirm or deny, leaving the actual action ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, when not to, or which sibling to prefer. With 12 sibling tools that plausibly overlap (status, check, spec), the absence of routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_estimate_costC
Estimate peak RAM and wall time (quiet/typical/busy) from unknowns or a config + tags file, calibrated on ~200 recorded Palace 0.16 runs.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| tets | No | ||
| order | No | ||
| ranks | No | ||
| config | No | ||
| n_freq | No | ||
| ram_gb | No | ||
| eigen_n | No | ||
| problem | No | ||
| adaptive | No | ||
| unknowns | No | ||
| calibration | No | ||
| solver_mode | No | ||
| n_excitations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It adds useful calibration context ('calibrated on ~200 recorded Palace 0.16 runs') and output mode hints (quiet/typical/busy), but it does not state whether the tool is read-only, has side effects, or requires any permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence with no fluff, and it front-loads the core purpose. It could be slightly more structured for readability, but it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 14 undocumented parameters, no output schema, and no annotations, the description is far too sparse. It does not explain how the many optional inputs interact or what the estimation outputs look like, leaving an agent with substantial gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for 14 parameters, and the description only loosely maps to three of them ('unknowns', 'config', 'tags'). The remaining parameters (e.g., tets, order, ranks, n_freq, eigen_n, problem, adaptive, calibration, solver_mode, n_excitations, ram_gb) are entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Estimate') and resource ('peak RAM and wall time') and notes both input modes (unknowns or config + tags). It is clear what the tool does, though it does not explicitly distinguish itself from siblings like palace_run or palace_results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. It implies estimation before running, but does not say 'use this before palace_run' or provide any conditions/exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_gotchasC
The gotchas list (lint rules plus workflow lessons).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states only what the list contains and says nothing about permissions, side effects, return format, or how the list is generated, leaving the agent with no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler and is front-loaded with the resource name. It is concise, though the parenthetical makes it a slightly fragmentary structure rather than a fully action-oriented statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what the tool returns, but it only vaguely states the content types (lint rules plus workflow lessons). It does not describe the return shape, ordering, or any usage context, so an agent lacks enough information to understand the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema, so there are no parameter semantics to document. Per the baseline for zero-parameter tools, a score of 4 is appropriate because the description does not need to compensate for undocumented inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as a gotchas list and clarifies that it contains lint rules plus workflow lessons, which helps distinguish it from sibling tools like palace_lint_rules. However, it lacks a verb and reads more as a label than an action, leaving the operation (e.g., retrieve/list) implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as palace_lint_rules or palace_check. There is no mention of prerequisites, filters, or conditions under which the tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_lint_configB
Validate a Palace config against the 0.16 schema and run the lint rules (solver choice, ports, boundaries, units, AMR, sweeps). Pass geometry (the *.tags.json) for distance/patch checks.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | No | ||
| config | Yes | ||
| ram_gb | No | ||
| geometry | No | ||
| unknowns | No | ||
| palace_version | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that validation is against the 0.16 schema and that lint rules are run, but it does not say whether the config is mutated, what the failure mode is on invalid config, or how results are surfaced, which matters for a validator with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences with the core action front-loaded and the optional geometry hint placed second. No filler and no repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter tool with no annotations, no output schema, and no parameter descriptions, the description is too thin. Four parameters are unexplained and the agent gets no sense of the return shape or what happens when validation fails.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 6 parameters, so the description must compensate. It adds real meaning for geometry (the *.tags.json file, used for distance/patch checks) and implicitly covers config, but spec, ram_gb, unknowns, and palace_version are left entirely undocumented in both the schema and the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (validate) plus resource (Palace config), names the schema version (0.16), and enumerates the lint domains checked (solver choice, ports, boundaries, units, AMR, sweeps). It does not explicitly distinguish itself from close siblings like palace_lint_rules or palace_check, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives one conditional usage hint - pass geometry when distance/patch checks are wanted - which is genuinely useful. However there is no guidance on when to prefer this over palace_check, palace_doctor, or palace_lint_rules, and no prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_lint_rulesB
List every lint rule with its lesson and source.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. "List" strongly implies a non-mutating read, and it discloses the returned fields, but it says nothing about permissions, caching, or whether the list is exhaustive across workspaces.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the action and the payload are stated immediately and nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-arg read-only listing tool the description is nearly sufficient, but terms like "lesson" and "source" are undefined jargon and there is no output schema to clarify them. Slightly more explanation of what a rule record contains would close the gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to compensate for on the parameter side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List every lint rule") and even previews the returned fields (lesson, source). It is clearly distinguishable in intent from palace_lint_config, though it does not explicitly contrast itself with that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus palace_lint_config or palace_check, and no prerequisites or conditions are stated. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_mesh_reportB
Quality (minSICN, gamma), tets and exact Nedelec unknowns of a .msh file.
| Name | Required | Description | Default |
|---|---|---|---|
| mesh | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose what the tool computes (quality metrics, tet counts, Nedelec unknowns), which is core behavioral content. However, it omits whether it reads a file, requires a valid mesh, is read-only, or how it handles invalid input, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no filler, front-loading the reported metrics. The telegraphic parenthetical style is efficient, though slightly cryptic for an agent unfamiliar with the domain jargon.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description reasonably covers the return content, and blocking full output details is unnecessary. It still omits the input parameter's meaning and any usage context, leaving the definition adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single 'mesh' parameter. Mentioning '.msh file' hints that the parameter is a mesh file reference, but the description does not clarify whether it is a path, an ID, or a required format, so the compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (a .msh file) and enumerates the exact quantities reported: mesh quality via minSICN and gamma, tetrahedra counts, and Nedelec unknowns. It conveys the essence of a mesh-analysis report, though it is stated as a noun phrase rather than a verb+resource and does not distinguish itself from siblings like palace_mesh_template.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, no prerequisites, and no mention of alternatives such as palace_mesh_template. An agent must infer its role purely from the reported metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_mesh_templateA
Build and mesh a template model with Gmsh: rectangular_cavity(a,b,d,h), parallel_plate_line(w,h,length,eps_r,h_mesh), microstrip_line(w,h,length,eps_r,side,top,h_mesh,h_edge,ports='lumped'|'wave',f_ghz). Writes .msh + .tags.json, returns groups and a mesh report with exact unknowns per order.
| Name | Required | Description | Default |
|---|---|---|---|
| out | Yes | ||
| template | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose side effects (writes .msh + .tags.json) and the shape of the return (groups plus a mesh report with exact unknowns per order). It omits permissions, overwrite behavior, and whether existing files are clobbered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense block that front-loads the purpose and then the template signatures. No filler sentences, though the inline parameter lists are cramped and harder to parse than a structured list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description helpfully names the return (groups, mesh report, unknowns per order) and the written artifacts. It stops short of explaining how template-specific arguments should be supplied given additionalProperties=true, which is the key gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the top-level schema documents only template/out, but the description compensates by embedding the per-template argument signatures (a,b,d,h; w,h,length,eps_r,h_mesh; etc.) including the ports enum and f_ghz. This meaningfully compensates for the schema gap, though types and defaults remain unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (build and mesh) and resource (template model with Gmsh), and enumerates the three template kinds. An agent can identify the tool's function immediately, though it does not explicitly contrast itself with palace_mesh_report or palace_build_config.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the template enumeration: you use this when you want a predefined model meshed. However, there is no explicit when-to-use vs. the sibling tools (e.g., palace_mesh_report for existing meshes, palace_build_config for config building), so the agent must infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_resultsA
Summarise a Palace output folder (S-parameters, eigenmodes, EPR/Q tables, AMR, fields, log) and optionally write Touchstone with the right per-port reference impedances.
| Name | Required | Description | Default |
|---|---|---|---|
| z0 | No | ||
| config | No | ||
| case_dir | No | ||
| output_dir | No | ||
| touchstone | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since there are no annotations, the description must carry the behavioral burden. It effectively discloses the scope of data handled (the specific file types summarized) and describes a key operational capability (the optional creation and content of the Touchstone output file).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise, efficiently combining the primary function (summarize) and the secondary, conditional function (write Touchstone) into one well-structured sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the task (parsing multiple proprietary output formats and handling optional complex outputs), the description is not complete enough. The complete lack of parameter semantics makes it impossible for an agent to correctly formulate the inputs, despite the high-level functional summary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description focuses entirely on the input data structure (the folder contents) rather than explaining the semantics of the five specific input parameters (e.g., what 'z0' represents or how 'config' is used). It fails to compensate for the severe schema documentation gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the purpose: to summarize a 'Palace output folder.' It also specifies the types of data included (S-parameters, eigenmodes, etc.), distinguishing this results aggregation tool from the other specialized 'palace_' siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is heavily implied, as it requires an existing 'Palace output folder,' suggesting it must be called after a run. However, it provides clear guidance on one functional aspect: that the Touchstone writing is optional, which guides how the agent should interact with the parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_runA
Run Palace on case_dir/config (blocks until done). Refuses if another Palace job would be oversubscribed or RAM is short, unless force. Logs palace.log, time.log, run_record.json.
| Name | Required | Description | Default |
|---|---|---|---|
| cmd | No | ||
| force | No | ||
| image | No | ||
| ranks | No | ||
| config | No | ||
| distro | No | ||
| backend | No | ||
| dry_run | No | ||
| case_dir | Yes | ||
| timeout_s | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose real behavior: it blocks until done, it self-refuses under resource pressure, force overrides that guard, and it writes palace.log, time.log, and run_record.json. It still omits timeout behavior, failure/rollback semantics, and side effects on the case directory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler: the action and blocking nature come first, then the safety guard, then the artifacts produced. Every clause adds information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description is the only behavioral source, yet it covers only 3 of 10 parameters and gives no return-value detail beyond the names of log files. For a long-running, resource-gated job launcher this leaves significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 10 parameters, so the description must compensate and largely does not. It only gives meaning to case_dir, config, and force, leaving cmd, image, ranks, distro, backend, dry_run, and timeout_s completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run Palace on case_dir/config') plus the scoping constraint that it blocks until completion. This clearly separates it from read-oriented siblings like palace_status, palace_results, and palace_estimate_cost.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The refusal conditions (oversubscribed job, short RAM) and the 'unless force' escape hatch imply when the tool will and won't execute, which is useful routing context. However, it never says when to prefer this over siblings (e.g., palace_estimate_cost or palace_check first), nor when to use the undocumented dry_run flag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_specA
Describe the compact config spec accepted by palace_build_config, with an example.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the core output (a description of the spec plus an example), which is useful, but it does not state return format, whether the operation is read-only, or any other operational trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single, front-loaded sentence that states the purpose and the example output. Every word earns its place, with no redundancy or buried context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple reference tool with no parameters, no annotations, and no output schema, the description is nearly complete: it states what is returned and references the consuming sibling. It could add a note about the return format or read-only nature, but those gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so per the rubric the baseline is 4. There are no parameter semantics to clarify, and the description does not need to compensate for any undocumented inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Describe') and resource ('compact config spec accepted by palace_build_config'), and it explicitly ties the spec to the sibling tool that consumes it. An agent can distinguish this documentation tool from build_config and lint_config without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The reference to palace_build_config implies this tool is used to learn the config format before building or linting, but there is no explicit when-to-use, when-not-to-use, or alternative selection guidance. The intended usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palace_statusB
Running Palace jobs, CPUs and free RAM on the Palace host; progress of a case folder; whether a run with 'ranks' may start now.
| Name | Required | Description | Default |
|---|---|---|---|
| ranks | No | ||
| distro | No | ||
| backend | No | ||
| case_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses useful behavioral output (job/CPU/RAM state, case progress, start eligibility), which is more than nothing, but it omits permission requirements, whether it mutates state, and any rate or cost considerations for a status probe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the most actionable content ('whether a run may start') placed last but still compact. It avoids filler, though the semicolon-separated fragment list is slightly run-on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description does some of the work of explaining return content, and it covers the main status dimensions. It falls short on parameter documentation and on distinguishing itself from closely related sibling diagnostics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters, so the description must compensate and only partially does: 'ranks' and the case folder are given meaning, but 'distro' and 'backend' are never mentioned. Half the parameters remain completely opaque to the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the concrete resources it reports on: running jobs, CPU/RAM availability on the Palace host, case-folder progress, and whether a run with a given 'ranks' value can start. That is specific enough for an agent to know what the tool returns. It does not, however, differentiate itself from siblings like palace_check or palace_doctor, which could plausibly overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no alternative sibling is named. The phrase 'whether a run with ranks may start now' hints at a pre-run gating use case, but the agent must infer that this is the right tool versus palace_check or palace_doctor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v0.1.0- First observed
palace_build_config - First observed
palace_check - First observed
palace_doctor - First observed
palace_estimate_cost - First observed
palace_gotchas - First observed
palace_lint_config - First observed
palace_lint_rules - First observed
palace_mesh_report - First observed
palace_mesh_template - First observed
palace_results - First observed
palace_run - First observed
palace_spec - First observed
palace_status
TDQS
Scored across 13 tools
Tools mostly target distinct actions (build, lint, mesh, run, results), so selection is usually clear. However, palace_lint_rules and palace_gotchas overlap in content because gotchas includes lint rules plus workflow lessons, which could cause confusion about which to call.
All tools use consistent snake_case with a palace_ prefix and a predictable verb_noun pattern (e.g., palace_build_config, palace_lint_config, palace_mesh_report). Naming is highly coherent and easy to infer.
The 13 tools map cleanly onto the multi-step Palace workflow—config creation, linting, meshing, running, result summary, cost estimation, status, and sanity checks. Each tool appears to earn its place without obvious redundancy.
Core lifecycle coverage from config building through meshing, running, and result summarization is strong, with diagnostic and check tools rounding out the set. Minor gaps exist in case/folder management (e.g., listing, deleting, or comparing runs), but these are workaround-able.
Maintenance
Related MCP Connectors
Safety-first EVM and Bitcoin RPC tools for balances, contracts, blocks, and transactions
Persistent memory, hybrid search and a goal graph for AI agents, over stdio or remote HTTP.
QuLab MCP remote server (Streamable HTTP) for computational science and lab tools.
MCP server (stdio): validate JSON against JSON Schema (draft-07 / 2020-12) via the AgentForge API
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to interact with EDA projects via natural language by wrapping EDI's gRPC interface, CLI tools, and ANSYS HFSS as MCP tools supporting SSE and stdio transports.3MIT
- AlicenseNot gradedqualityCmaintenanceEnables registering custom agent tools via a minimal JSON-RPC over stdio implementation, with zero external dependencies, to expose them to AI agents like Claude, Cursor, and Gemini.MIT

specmd-mcpofficial
AlicenseCqualityBmaintenanceEnables authoring, validating, inspecting, blackbox-inventorying, tracing, and capability-querying SPEC.md documents through MCP tools over stdio JSON-RPC. Each tool wraps the same command modules the CLI uses and returns identical JSON envelopes.9Apache 2.0- AlicenseCqualityBmaintenanceEnables AI clients to drive a real SOLIDWORKS 2020 installation through COM to build parametric models, add materials, loads and constraints, run static Simulation studies with mesh and pin-contact checks, and read back feature trees, studies and native result files. Also supports reconnecting stdio sessions with tool discovery that defers the COM connection until the first actual tool call.1331MIT