Skip to main content
Glama
benjhardy

palace-tools

by benjhardy

palace-agent-tools

tests

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

mesh-template, palace_tools.mesh.RFModel

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 *.tags.json with group tags, geometry and a mesh report (quality, exact Nedelec unknowns per order)

config

build-config, spec

Palace JSON from a compact spec with names instead of tag numbers and safe defaults

lint

lint-config, lint-rules, gotchas

Palace 0.16 schema validation plus 44 rules from real failures, each with the lesson and its source

cost

estimate

peak RAM and wall time (quiet / typical / busy) calibrated on 190 recorded Palace 0.16 runs

run

status, run, doctor

WSL + Apptainer, Apptainer, Docker or native; refuses to oversubscribe a busy machine or run out of RAM; logs wall time and memory

results

results

port-S / eig / EPR / Q / energy / AMR / field summaries, Touchstone with the right reference impedances

check

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 pytest

The 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-Jensen

Or 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_server

or 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

cavity_te101: 22.86 x 10.16 x 30 mm PEC cavity, tan d = 1e-3

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

lumped_port_line a: 75-ohm parallel-plate line (PMC sides), 50-ohm lumped ports

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

lumped_port_line b: same line terminated in a 75-ohm lumped element

|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 check

23 s

microstrip_thru (wave ports): 50-ohm line, eps_r 3.55, h 0.508 mm, 20 mm, PEC shield at 9h

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)

microstrip_thru (edge lumped ports, 10 + 20 mm lines, two-line de-embedding)

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

Linear.Type: "Default" is SuperLU in the 0.16 container

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 (MGMaxLevels: 1) did the whole 484k run in 6.6 min

birdcage

SOL002

default error estimator when AMR is off

half of the run time; EstimatorMG + EstimatorTol 1e-4 gave bit-identical S 5.8x faster

GDS-to-Palace benchmark

SOL003

mixed wave and lumped ports

Palace 0.16 writes no port-S.csv; resistor as an Impedance sheet, or all ports lumped

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)

lumped_port_line example, benchmark combiner

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

Model.L0 missing

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 nohup

WSL kills detached jobs when the last wsl.exe exits; keep the run in the foreground of a background job

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

(check)

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.json from palace_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_run blocks 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 model

Licence

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 tools
palace_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
outNoconfig.json path to write
specYesspec dict or path to a JSON file
ram_gbNo
palace_versionNo

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
configNo
expectNo
case_dirNo
output_dirNo
convergenceNo
symmetric_pairsNo
reference_touchstoneNo

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
tetsNo
orderNo
ranksNo
configNo
n_freqNo
ram_gbNo
eigen_nNo
problemNo
adaptiveNo
unknownsNo
calibrationNo
solver_modeNo
n_excitationsNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.6/5.0
Behavior1/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
specNo
configYes
ram_gbNo
geometryNo
unknownsNo
palace_versionNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
meshYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
outYes
templateYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
z0No
configNo
case_dirNo
output_dirNo
touchstoneNo

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cmdNo
forceNo
imageNo
ranksNo
configNo
distroNo
backendNo
dry_runNo
case_dirYes
timeout_sNo

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ranksNo
distroNo
backendNo
case_dirNo

TDQS

B3/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 13 tool updatesv0.1.0
    • First observedpalace_build_config
    • First observedpalace_check
    • First observedpalace_doctor
    • First observedpalace_estimate_cost
    • First observedpalace_gotchas
    • First observedpalace_lint_config
    • First observedpalace_lint_rules
    • First observedpalace_mesh_report
    • First observedpalace_mesh_template
    • First observedpalace_results
    • First observedpalace_run
    • First observedpalace_spec
    • First observedpalace_status

TDQS

B3.4/5.0

Scored across 13 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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.
    3
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    Enables 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.
    9
    Apache 2.0
  • A
    license
    C
    quality
    B
    maintenance
    Enables 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.
    133
    1
    MIT