OpenVSP MCP (Maintained Fork)
openvsp-mcp — OpenVSP and VSPAERO through MCP
A maintained fork of Three-Little-Birds/openvsp-mcp, extending MCP automation for OpenVSP and VSPAERO with geometry inspection, model modification, and aerodynamic analysis. The original MIT license and history are retained.
0.6.0 adds durable multi-case analysis with bounded parallel execution, shared CPU admission, progress/cancellation, verified explicit resume and CSV/JSON exports. Each case can change conditions and typed parameters on a private model copy. See the batch guide, native batch regression and reproducible throughput/RSS benchmark. Measured results and coverage limits are in 0.6 validation. The 0.5 API audit and existing single-case workflows remain applicable.
Install
Python 3.10+ and a separate OpenVSP installation are required. Real integration
is verified on macOS Apple Silicon with OpenVSP 3.51.3 / VSPAERO 7.2.2.
Other binary versions/platforms have not been integration-tested. This pipeline
requires the VSPAERO 7 thick/thin geometry-set interface. Binaries are not included.
The MCP SDK is constrained to >=1.20,<2 for the FastMCP 1.x interface.
Keep Python environments, caches, and launchers on each computer's local disk. Source copies, models and result files can be synced; do not sync a venv or copy another computer's absolute-path client configuration. Validate each Mac separately.
git clone https://github.com/rhyne1012/openvsp-mcp.git
cd openvsp-mcp
# Use a local directory outside iCloud/Dropbox for the environment.
python3 -m venv "$HOME/Developer/Codex/.venvs/openvsp-mcp"
. "$HOME/Developer/Codex/.venvs/openvsp-mcp/bin/activate"
python -m pip install '.[dev]'
# Example macOS paths; adjust to this computer's installation.
export OPENVSP_BIN=/Applications/OpenVSP.app/Contents/Resources/vspscript
export VSPAERO_BIN=/Applications/OpenVSP.app/Contents/Resources/vspaero
python -m openvsp_mcp --healthOPENVSP_BIN identifies vspscript, or a vsp accepting -script.
VSPAERO_BIN identifies the solver installation; OpenVSP calls it through its
Analysis API. The wrapper does not pass a .vsp3 directly to the solver.
--describe reports package/SDK versions and a SHA-256 fingerprint of packaged
Python/model files. --health additionally launches a small OpenVSP geometry/API
probe and queries VSPAERO's version; it exits 1 when either check fails. Health
reports the binary paths and whether the version pair matches the tested pair.
Health is a readiness check, not a full solve or a convergence certificate.
For upgrades that preserve the previously selected environment until the candidate passes installation and health checks, see the local installer.
Related MCP server: tigl-mcp
MCP tools
Start with openvsp-mcp or python -m openvsp_mcp (stdio by default). Configure
the client with that computer's absolute Python path and binary environment values.
All tools return structured results. All except openvsp.health take a nested
request object; health takes {}.
Tool | Behavior |
| Probe binaries/API; report versions, paths and package fingerprint. |
| Create a four-component aircraft template or custom model without an input file. |
| Read |
| Apply commands, validate the output, then replace the input file. |
| Export SVG and STL from a copy; preserve the source. |
| Check selected geometry sets in the loaded model and report reference/unit warnings; no solver. |
| Prepare and solve one condition; validate artifacts and matching polar; preserve source. |
| Discover analyses, inspect their input types/defaults, or read paginated geometry parameters. |
| Apply typed ID/value edits in one load/update; verify limits and final readback before replacing the source. |
| Read saved coefficient subsets and bounded log tails without launching OpenVSP. |
| Solve 1–25 explicitly specified conditions sequentially; retain partial results on failure. |
| Submit independent cases with per-case parameters, parallel-job and CPU limits. |
| Read paginated progress and detect interrupted batches after restart. |
| Cancel selected cases or the whole batch. |
| Explicitly retry incomplete cases after verifying inputs and successful artifacts. |
| Export saved case results and metadata as CSV/JSON. |
Batch defaults are sequential, four CPU threads per case, and a four-thread
batch budget. Set max_parallel_jobs and each case's analysis.ncpu together.
OPENVSP_CPU_BUDGET limits shared native work in one server; by default it is the
larger of four and the reported logical CPU count. Requests exceeding this budget
are rejected. Multiple server processes do not share this limit. See the
batch guide for lifecycle, resume and resource semantics.
Create a model:
{"request": {"output_dir": "/absolute/path/runs", "template": "simple_aircraft"}}The template contains a fuselage, main wing, horizontal tail and vertical tail.
Use its returned geometry_path for subsequent calls. template: "custom"
requires set_commands that add geometry to the initially empty model.
Inspect it:
{"request": {"geometry_file": "/absolute/path/aircraft.vsp3"}}Preview accepts the same minimal request. Preflight and solve accept these settings for the bundled aircraft:
{
"request": {
"geometry_file": "/absolute/path/aircraft.vsp3",
"case_name": "single_point",
"output_dir": "/absolute/path/runs",
"timeout_seconds": 600,
"analysis": {
"thick_geom_set": 3,
"thin_geom_set": 4,
"mach": 0.1,
"alpha": 3.0,
"beta": 0.0,
"sref": 12.0,
"bref": 10.0,
"cref": 1.2444444444,
"xcg": 3.0,
"vinf": 34.03,
"rho": 1.225,
"reynolds": 2900000.0,
"length_unit": "m"
}
}
}Set 3 is the fuselage and set 4 is the three lifting surfaces in this template
only. Supply model-specific references and sets for other aircraft. -1 disables
one surface type. Nonexistent/empty selected sets, identical set indices, or actual
geometry overlap between thick and thin sets are rejected before solving.
Preflight does not check surface intersections, mesh quality or physical validity.
Defaults remain all geometry as thin surfaces, no thick surfaces, unit reference
area/span/chord, Mach 0.1 and alpha 3 degrees. Angles are degrees. length_unit
(m, ft, or unspecified) documents your convention; it does not convert
any inputs. Geometry, references, speed and density must use consistent units.
Mach, speed, density and Reynolds are independent; no atmospheric consistency is
derived. Unit references and unspecified units produce warnings, not automatic
corrections.
For a sweep, replace analysis with a conditions list. Each entry is a complete
analysis settings object with the same defaults; settings do not carry over from
one entry to the next. Top-level analysis and run_vspaero are not accepted by
this tool. For example, duplicate the explicit analysis object above and change
alpha to 0 and 3. timeout_seconds budgets the entire batch. Each condition has
its own run directory and verified polar. The batch uses a stable source snapshot.
To edit, call openvsp.modify with set_commands, for example:
{
"request": {
"geometry_file": "/absolute/path/aircraft.vsp3",
"set_commands": [
{"command": "SetGeomName(FindGeom(\"Main_Wing\",0),\"Renamed_Wing\")"}
]
}
}Commands are trusted AngelScript with server-process privileges; use trusted local
clients. Preview/preflight/solve may apply commands to their private copy.
modify and set_parameters replace the original after validation.
Read-only preservation refers to the wrapper's
normal operations; arbitrary trusted script commands can perform their own I/O.
Results and failures
Model creation, editing, preview, preflight and solve create a unique directory under
output_dir, or openvsp_runs beside the source. Creation requires output_dir.
Runs preserve scripts, models, logs and manifest.json; operations on an existing
model also preserve its input snapshot and hash. Solver runs retain .vspgeom,
.vspaero, .adb, .history, .polar, solver.log and history.csv.
Preview adds preview.svg and preview.stl. Sweep batches have sweep.json, with
completed conditions retained if a later one fails. Runs are not automatically deleted.
Responses include absolute artifact paths, coefficients, applied settings, operation, warnings, preflight, numerical quality and package/SDK fingerprint. A solve requires zero script exit status, a unique completion marker, nonempty geometry, fresh nonempty solver artifacts, and one finite polar row matching Mach, alpha, beta and Reynolds. API errors and failures expose run/log paths. POSIX timeouts kill the process group, including the solver; Windows child cleanup has not been integration-verified.
numerical_quality reports observed last-step coefficient changes and the range
of the final five recorded iterations when the history format is recognized.
It explicitly reports convergence_status: "not_assessed" and
mesh_study: "not_performed". Completed execution, small iteration changes, and
sweep success do not establish aerodynamic accuracy or mesh convergence.
Archived scripts read their own snapshot. Rerunning a script can overwrite that run's artifacts; copy the run first when preserving evidence.
Verification
python -m pytest
ruff check .
# Real OpenVSP/VSPAERO required; exercise the legacy and batch tools over MCP stdio:
python examples/simple_aircraft/run_smoke.py
python examples/simple_aircraft/batch_smoke.pyThe real smoke queries native capabilities and analysis defaults, reads and edits
parameters, verifies fixed-wake/GMRES settings, reads saved results, creates and previews an aircraft, verifies source preservation,
checks actual geometry sets, rejects absent/empty/overlapping sets before solving,
renames a wing, rejects an invalid parameter edit, runs one condition and an
alpha 0/3 degree sweep. Full responses are saved in smoke_outputs/smoke_result.json;
set OPENVSP_SMOKE_OUTPUT to choose a different output directory.
The alpha 3 case gives approximately CL 0.233343 and CD 0.00959482. These numbers
verify the workflow, not accuracy, convergence or design suitability.
Hosted CI uses no native binaries. Native smoke testing remains opt-in and must be repeated for each computer and binary version.
New typed operations
{"request": {"kind": "analysis", "analysis_name": "VSPAEROSweep"}}Use kind: "parameters" with geometry_file; optionally select geom_id or
parm_ids, and paginate with offset/limit (default 100, maximum 200).
kind: "capabilities" lists installed analyses. Listing an analysis does not
imply that this wrapper supports running it. Analysis input descriptions are
omitted because of an audited upstream AngelScript binding defect; see the audit.
Call openvsp.set_parameters with geometry_file and
edits: [{"parm_id": "ID_FROM_QUERY", "value": 1.5}]. This operation modifies
the source after validation, like openvsp.modify.
Call openvsp.read_results with a returned manifest_file path and optional
coefficient_names: ["CLtot", "CDtot"], log: "solver", log_tail_lines: 40.
(The execution response calls this path manifest_path.)
For a single solve, set analysis.fixed_wake: true to select official
FixedWakeFlag; the effective file must contain WakeIters=0.
wake_iterations now accepts 3–255 and ncpu 1–255. Values accepted previously
outside these native limits are rejected rather than silently clamped.
forward_gmres_tolerance_factor defaults to 1 and accepts positive values up to
1e12. Wrapper defaults remain explicit; loaded-model/native defaults are reported
separately by query. See the audit for intentionally narrower wrapper limits.
effective_settings reports verified solver-file fields. The request and
analysis_inputs remain the requested values; preflight alone does not verify a
solver file. timings reports preparation/native/validation/total seconds.
Other interfaces
Python exports include CreateModelRequest, SweepRequest, OpenVSPRequest,
VSPAeroSettings, create_model, preview_model, preflight_model, run_sweep,
health_check, execute_openvsp, QueryRequest, ParameterEditRequest,
ResultRequest, query_model, set_parameters and read_results.
HTTP MCP binds to loopback by default:
python -m openvsp_mcp --transport streamable-http --host 127.0.0.1 --port 8000 --path /mcp
python -m uvicorn openvsp_mcp.fastapi_app:create_app --factory --host 127.0.0.1 --port 8002REST exposes GET /health (200 ready, 503 unhealthy) and POST /vsp/inspect,
/vsp/create, /vsp/modify, /vsp/preview, /vsp/preflight, /vsp/run, and
/vsp/sweep, /vsp/query, /vsp/parameters, and /vsp/results.
Batch routes are POST /vsp/batch/submit, /vsp/batch/status, /vsp/batch/cancel,
/vsp/batch/resume and /vsp/batch/export.
POST bodies contain the request object without the MCP wrapper.
No authentication is provided; these interfaces are intended for trusted local use.
Maintenance
Keep upstream pointing to the original project and origin to this fork. Use a
small branch per reproducible issue and retain a verified environment before
switching a daily MCP client. See maintenance notes and LICENSE.
Available Tools
16 toolsopenvsp.batch_cancelA
Cancel selected case IDs, or the whole batch when empty.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 behavioral burden. It usefully discloses the whole-batch-when-empty conditional, but it does not state whether cancellation is irreversible, what happens to running jobs, or any permission requirements.
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 an active verb and no filler. Every word contributes meaning, and the important edge case is included without extra noise.
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?
The tool is low-complexity and an output schema exists, so return-value documentation is not needed. However, with no annotations, the lack of cancellation semantics (reversibility, effects, prerequisites) leaves the definition only minimally complete for safe 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%, so the description must compensate. It does map 'selected case IDs' to case_ids and the empty case to whole-batch cancellation, but it never mentions the required batch_directory parameter or the maxItems constraint.
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 uses a specific verb ('Cancel') with a clear scope: selected case IDs or the entire batch when the ID list is empty. This distinguishes it sharply from sibling tools like batch_submit, batch_status, and batch_resume.
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 rather than explicit: the description makes it clear this is the cancellation operation, but it does not say when to prefer it over alternatives or when cancellation is inappropriate (e.g., already-completed batches).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.batch_exportA
Export a saved batch snapshot to CSV/JSON without solving.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states 'without solving,' which is a meaningful behavioral trait (no computation), but it does not mention whether the operation is non-destructive, requires prior batch submission, or has any side effects. The description is minimal but not misleading.
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 sentence, ten words, front-loaded with the action and key constraint. No fluff; every word contributes to the purpose.
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?
Despite being a simple tool with one parameter and an output schema, the description omits critical details: what 'batch_directory' should contain, how the format (CSV vs JSON) is selected, and prerequisites (e.g., must a batch snapshot already exist?). The agent cannot reliably invoke the tool correctly without further clarification.
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% and the description does not explain what 'batch_directory' refers to, its expected format, or how it relates to the saved snapshot. For a single required parameter, the description adds no semantic value beyond the schema, which is insufficient.
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 uses a specific verb ('Export') with a clear resource ('saved batch snapshot') and output format ('CSV/JSON'), plus a distinguishing condition ('without solving'). This clearly differentiates it from siblings like batch_submit, batch_status, and batch_cancel.
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?
It implies usage for exporting a saved batch, but does not explicitly state when to use it over alternatives like read_results or query. The phrase 'without solving' hints at a read-only operation but gives no conditions or exclusions, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.batch_resumeA
Explicitly retry non-successful cases after verifying the model, package, native binaries, specification and successful artifacts. Never replays successful cases.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the key non-obvious behavior: only non-successful cases are retried, successful cases are verified/reused, and no successful cases are replayed. It does not discuss side effects or idempotency, but the core retry semantics are explicit.
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 short sentences with the action front-loaded and no filler. The verification checklist is compact, and the explicit no-replay constraint earns its place.
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 that an output schema exists and there is only one required request object, the description plus schema is mostly sufficient. It clearly states what gets retried and the verification preconditions; the main missing piece is guidance on when to use batch_resume instead of sibling batch tools.
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 prose never mentions batch_directory or case_ids, and schema description coverage is 0% according to the context signals, so the description must compensate. Although the nested schema note about empty case_ids is useful, the tool description itself adds no parameter-level detail for invoking the tool correctly.
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 opens with a specific action and resource: 'Explicitly retry non-successful cases.' It further distinguishes itself by stating 'Never replays successful cases,' which separates it from a general batch run/status tool and from siblings like batch_submit or batch_cancel.
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?
It gives a clear precondition: retry only after verifying the model, package, native binaries, specification, and successful artifacts. It also sets an exclusion (never replay successes), but it does not name alternative sibling tools or describe situations that would favor batch_submit/preflight instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.batch_statusB
Read paginated batch progress, including after a restart.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only indicates a read operation and that progress persists across restarts. It does not disclose pagination behavior, required inputs, or any other caveats, leaving the agent with minimal behavioral insight.
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 that front-loads the verb and resource, with no wasted words. It is appropriately sized and easy to parse.
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 no annotations and a minimal schema, the description is too terse. It does not explain what a batch directory is, how it relates to sibling tools, or what 'progress' includes. An agent cannot confidently invoke this tool correctly from the description alone.
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. The word 'paginated' hints at limit/offset, but it does not explain their roles or that batch_directory is required. No parameter-level meaning is added beyond what the schema titles imply.
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 uses a specific verb 'Read' and a clear resource 'batch progress', with qualifiers 'paginated' and 'including after a restart' that add scope. This distinguishes it from sibling batch operations like submit, cancel, or export, and from read_results which likely returns final results rather than progress.
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 on when to use this tool versus alternatives like read_results or batch_resume. It simply states what it does, with no mention of typical contexts, prerequisites, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.batch_submitA
Submit independent steady cases with CPU and parallel-job limits. Returns a durable batch directory immediately; use batch_status, batch_cancel, batch_resume and batch_export. Source preserved; no automatic retry. Each case may edit parameters on a private copy.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full disclosure responsibility. It reveals asynchronous behavior ('returns a durable batch directory immediately'), source preservation, no retry, and per-case private copies—non-obvious traits beyond what the schema shows. It does not mention failure_policy behavior, but the most important behavioral caveats are present.
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 sentences with no waste. The first sentence front-loads the action and constraints; the second routes to sibling tools; the third adds behavioral caveats. Every sentence earns its place.
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 complex submission tool, the description covers the essential operational facts: immediate durable directory, downstream workflow, source preservation, no retry, and isolation semantics. An output schema exists, so return values need not be described. The failure_policy default is in the schemaholistic; the description is nearly 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. It maps well to some parameters: 'independent steady cases' → cases, 'CPU and parallel-job limits' → cpu_budget/max_parallel_jobs, and 'edit parameters on a private copy' → parameter_edits. However, geometry_file, output_dir, and failure_policy are not mentioned, leaving notable gaps that the schema (without top-level descriptions) does not fill.
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 ('Submit'), a clear resource ('independent steady cases'), and key constraints ('CPU and parallel-job limits'). The phrase 'durable batch directory' and mention of batch_status/batch_cancel distinguish it from sibling batch_* tools; the batch focus clearly separates it from run_vspaero.
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?
Tells the agent exactly what to do after submission: use batch_status, batch_cancel, batch_resume, and batch_export. It also states 'no automatic retry', which implies the agent must handle retries. It does not explicitly contrast with run_vspaero for single cases, but the batch framing makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.create_modelC
Create a template or custom model.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| timings | No | |
| log_path | Yes | |
| versions | No | |
| warnings | No | |
| artifacts | No | |
| operation | No | |
| preflight | No | |
| result_path | No | |
| script_path | Yes | |
| coefficients | No | |
| geometry_path | Yes | |
| manifest_path | Yes | |
| run_directory | Yes | |
| analysis_inputs | No | |
| parameter_values | No | |
| numerical_quality | No | |
| effective_settings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. 'Create' implies mutation, but it does not describe side effects, required permissions, output behavior, or reversibility. The agent gets no warning about potential impacts.
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 extremely short, which is good for conciseness, but it is under-specified and lacks structure. It does not front-load key information or earn its place with substantive content. It is more an omission than effective brevity.
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?
The tool has an output schema and a nested request object with multiple properties, but the description provides no context. An agent cannot infer required parameters, how to structure the request, or what the output will be. It is inadequate for safe and 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%, so the description must compensate by explaining parameters, but it mentions none. The schema includes fields like template, case_name, output_dir, and set_commands, yet the description provides no meaning for them, leaving the agent without guidance.
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 clear verb 'Create' and resource 'model', but it is vague about what 'template or custom' means. It does not specify the model context (e.g., OpenVSP geometry) or distinguish itself from sibling tools like modify or inspect. The phrase 'template or custom' hints at options but lacks clarity on their meaning.
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 versus alternatives. It does not mention that it creates a new model while modify edits an existing one, or any prerequisites like needing an existing project. The description gives no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.healthB
Fresh executable/API readiness and versions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 behavior disclosure. It implies a read-only status/version check but never explicitly states side effects, freshness guarantees, or what 'readiness' means. This is minimal disclosure, though not misleading.
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 very short and front-loaded, with no filler. The phrase 'Fresh executable/API readiness and versions' is compact, though the word 'Fresh' is slightly vague and the fragment lacks a verb.
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 zero parameters and an output schema present, the description does not need to enumerate return values. However, it is still somewhat cryptic and does not clarify whether this is a prerequisite check, a lightweight call, or how the version/readiness information should be interpreted.
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 100% schema description coverage, so there is no parameter meaning left to explain. The baseline of 4 applies because no parameters exist.
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 communicates that this tool reports executable/API readiness and version information, which is clearly distinct from the action-oriented sibling tools like batch_submit or create_model. It lacks an explicit verb like 'check' or 'get', but the meaning is still inferable from 'readiness and versions'.
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 no explicit guidance on when to call this tool versus alternatives, nor does it mention whether it should be called before other operations. The intended use is only implied by the name and the word 'readiness'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.inspectA
Read XML geometry metadata without OpenVSP.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| geom_ids | Yes | |
| info_log | Yes | |
| wing_names | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It clearly states the tool reads metadata and does not require OpenVSP, which implies a non-mutating, lightweight operation. However, it does not disclose what the output contains, whether it validates the file, or what happens with malformed or missing files. For a read-only inspection tool, the description is adequate but thin.
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, front-loaded sentence with no filler. Every word earns its place: 'Read' states the action, 'XML geometry metadata' states the resource, and 'without OpenVSP' states the key differentiator. It is appropriately sized for a simple one-parameter tool.
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?
The tool has one required parameter, an output schema, and no annotations. The description is enough to understand the basic operation, but it does not explain what the returned metadata looks like, whether the output schema fully describes the return value, or how this inspection relates to the other openvsp tools. For a simple read tool, this is acceptable 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. The description mentions 'XML geometry metadata' and the schema names the parameter 'geometry_file' with a description 'Path to the .vsp3 file', so the parameter's purpose is inferable. The tool description adds the context that the file is XML and that OpenVSP is not needed, but it does not explain the expected format, extension, or how the path is resolved. Baseline 3 is appropriate because the schema already documents the parameter, and the description adds only marginal context.
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 ('Read') and resource ('XML geometry metadata') and adds a meaningful qualifier ('without OpenVSP'), which distinguishes it from tools that require or launch OpenVSP. It does not explicitly name a sibling alternative, but the qualifier plus the tool name 'inspect' make the purpose reasonably clear.
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 implies usage: use this tool to read geometry metadata without needing OpenVSP. It does not explicitly state when to prefer it over siblings like openvsp.preview, openvsp.query, or openvsp.read_results, nor does it mention any exclusions or prerequisites. The 'without OpenVSP' phrase gives some context but not enough to fully route an agent among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.modifyC
Validate edits, then replace the source model.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| timings | No | |
| log_path | Yes | |
| versions | No | |
| warnings | No | |
| artifacts | No | |
| operation | No | |
| preflight | No | |
| result_path | No | |
| script_path | Yes | |
| coefficients | No | |
| geometry_path | Yes | |
| manifest_path | Yes | |
| run_directory | Yes | |
| analysis_inputs | No | |
| parameter_values | No | |
| numerical_quality | No | |
| effective_settings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions 'Validate edits, then replace the source model,' which implies a destructive overwrite of the source model, but it does not state whether the original file is backed up, whether validation failures prevent replacement, or what happens to existing data. The word 'replace' hints at destructive behavior but lacks detail.
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 extremely short and front-loaded: 'Validate edits, then replace the source model.' It is concise and to the point, but it omits necessary context. It earns a 4 for conciseness but not a 5 because it is too terse to be fully useful.
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 tool's complexity (nested OpenVSPRequest with many fields, parameter edits, set commands, analysis settings) and the absence of annotations and output schema details, the description is incomplete. It does not explain the validation process, the meaning of 'replace the source model,' or how this tool relates to the broader workflow. An agent would struggle to use it correctly without additional information.
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 description does not explain the single 'request' parameter or its nested fields. The schema itself is rich, but the description adds no meaning about how to construct the request, what 'edits' means in terms of parameter_edits or set_commands, or how validation works. The description fails to compensate for the lack of schema descriptions.
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 'Validate edits, then replace the source model' states a clear action (validate then replace) and resource (source model), but it does not specify what kind of edits or what model, and it does not distinguish itself from siblings like openvsp.set_parameters or openvsp.create_model. It is more specific than a tautology but leaves ambiguity about the exact operation.
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 no guidance on when to use this tool versus alternatives. It does not mention that this tool is for modifying an existing model, nor does it contrast with openvsp.set_parameters or openvsp.create_model. An agent would have to infer usage from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.preflightC
Check loaded geometry sets without solving.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| timings | No | |
| log_path | Yes | |
| versions | No | |
| warnings | No | |
| artifacts | No | |
| operation | No | |
| preflight | No | |
| result_path | No | |
| script_path | Yes | |
| coefficients | No | |
| geometry_path | Yes | |
| manifest_path | Yes | |
| run_directory | Yes | |
| analysis_inputs | No | |
| parameter_values | No | |
| numerical_quality | No | |
| effective_settings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It only states that solving is not performed; it does not say whether the tool mutates the geometry file, executes set_commands or parameter_edits, or what happens when a check fails.
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, front-loaded sentence with no filler or redundancy. It is easy to parse, though the brevity comes at the cost of useful detail that other dimensions penalize.
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 complex shared request schema and the absence of annotations, this description is incomplete: it omits the required geometry_file, the role of set_commands/parameter_edits, the meaning of 'geometry sets', and the operational context of a preflight check. An output schema exists, so return-value details are less critical, but invocation context is still under-specified.
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 description contributes no parameter-level meaning. The single required 'request' parameter is an opaque wrapper around a large nested schema, and the description neither explains its fields nor connects 'geometry sets' to the geometry_file input.
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 operation ('check') and the resource ('loaded geometry sets'), and 'without solving' distinguishes it from solver tools like run_vspaero. However, it doesn't explain what a preflight check actually validates or differentiate it clearly from other non-solving siblings like inspect, preview, or query.
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?
'Without solving' implies the tool is meant for validation before or instead of running VSPAERO, but no explicit when-to-use guidance, prerequisites, or alternative tools are named. The intended usage context is only inferred from the phrasing and the sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.previewC
Export SVG/STL from a private model copy.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| timings | No | |
| log_path | Yes | |
| versions | No | |
| warnings | No | |
| artifacts | No | |
| operation | No | |
| preflight | No | |
| result_path | No | |
| script_path | Yes | |
| coefficients | No | |
| geometry_path | Yes | |
| manifest_path | Yes | |
| run_directory | Yes | |
| analysis_inputs | No | |
| parameter_values | No | |
| numerical_quality | No | |
| effective_settings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. The phrase 'private model copy' hints that the original is not modified, but it does not explain side effects, permissions, output delivery, or error behavior. This is minimal information for a tool with such a rich request 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?
The description is extremely concise (one sentence), which is efficient, but it is under-specified. It is not appropriately sized for the tool's complexity; it omits essential context. Front-loading is fine, but the content is insufficient.
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 tool's complexity (many parameters, nested objects, an output schema) and no annotations, the description is far from complete. It does not explain what the output looks like, how results are returned, or any operational details an agent would need to invoke it correctly.
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 description adds no meaning about parameters. The single 'request' object is not explained; key fields like geometry_file, output_dir, or set_commands are not mentioned. Schema description coverage is 0%, so the description must compensate but fails to do so.
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 states the action (Export) and the resource (SVG/STL from a private model copy). It implies a non-destructive operation and differentiates from tools like run_vspaero or create_model. However, it doesn't explicitly contrast with siblings like batch_export, so a small deduction for missing explicit 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?
No guidance is provided on when to use this tool versus alternatives. The description does not mention prerequisites, when not to use, or how it relates to other export or preview tools. An agent receives no help in choosing this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.queryA
Query native capabilities, analysis input types/defaults, or geometry parameters. Read-only. Parameters are paginated. Analysis defaults may depend on the supplied model.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden; it explicitly declares read-only behavior, pagination, and a model-dependent default caveat. It does not discuss errors or rate limits, but those are secondary for a read-only query and the output schema covers return shape.
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 front-load the main purpose and then add safety/pagination/context notes. There is no filler or repetition of schema content.
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?
The output schema covers return values, but the description remains thin for a multi-field request: it doesn't specify which kind should accompany other fields, what 'native capabilities' means in practice, or how to choose between query and sibling inspection tools. It is adequate for a simple query but leaves real 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%, so the description must compensate. It adds meaning by mapping the kind values (capabilities, analysis, parameters) to the query categories and by noting pagination, but it doesn't explain fields like geom_id, parm_ids, geometry_file, or timeout_seconds beyond what their names imply.
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 action (Query) and distinct resources — native capabilities, analysis input types/defaults, and geometry parameters — so an agent knows the tool's scope. It doesn't explicitly differentiate from sibling tools like openvsp.inspect, but the substance is unambiguous.
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 read-only marker and the three query categories imply when to use this tool, and the note about analysis defaults depending on the supplied model gives context. However, it never names alternatives or states when not to use it (e.g., vs openvsp.inspect or read_results).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.read_resultsA
Read saved coefficients, settings and bounded log tails without running OpenVSP.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output 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 discloses that the tool does not run OpenVSP, indicating a safe, read-only nature. However, it does not mention other behavioral aspects such as error handling, file access requirements, or the structure of returned data. The disclosure is minimal but not misleading.
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, front-loaded sentence with no filler. It efficiently conveys the primary purpose and the key constraint (no OpenVSP run), making it easy to scan and understand.
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?
The tool has a nested parameter schema and no annotation coverage, yet the description offers almost no context about what 'manifest_file' refers to, what output to expect (despite an output schema existing), or any prerequisites. For an agent to call this correctly, it would need to infer heavily from the schema, making the description inadequate for the tool's complexity.
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 schema description coverage is 0%, and the description does not explain the parameters at all. It mentions 'coefficients' and 'log tails', which loosely map to coefficient_names and log_tail_lines, but there is no explicit link. The nested 'request' object and its required manifest_file are left entirely unexplained, so the description fails to add meaning beyond the raw schema.
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 states the action (read), the resources (saved coefficients, settings, log tails), and the key condition (without running OpenVSP). It effectively distinguishes from sibling tools that run or submit jobs, such as run_vspaero or batch_submit, by emphasizing it is a read-only operation.
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 implies usage for reading saved results without running OpenVSP, but it does not explicitly name alternatives or provide criteria for when to use this tool versus others like query or batch_status. The guidance is implied rather than explicit, leaving some room for inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.run_vspaeroB
Solve one steady subsonic condition; verify actual solver inputs and results. Source preserved. fixed_wake selects the official fixed-wake flag.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| timings | No | |
| log_path | Yes | |
| versions | No | |
| warnings | No | |
| artifacts | No | |
| operation | No | |
| preflight | No | |
| result_path | No | |
| script_path | Yes | |
| coefficients | No | |
| geometry_path | Yes | |
| manifest_path | Yes | |
| run_directory | Yes | |
| analysis_inputs | No | |
| parameter_values | No | |
| numerical_quality | No | |
| effective_settings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does disclose that the source geometry is preserved and that actual solver inputs/results are verified, which is useful. However, it does not mention that this launches an external solver, may be compute/time intensive, or what side effects occur beyond source preservation.
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 appropriately short, front-loaded, and free of padding. The final sentence fragments ('Source preserved.' and 'fixed_wake selects...') are terse but acceptable; slight ambiguity in 'verify actual solver inputs and results' prevents a perfect score.
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 a complex nested request schema and no annotations, this description is under-specified. It omits guidance on how set_commands/parameter_edits interact, when run_vspaero should be set false, compute/time expectations, and how this tool relates to read_results or preflight. The presence of an output schema reduces the need to describe return values, but the remaining operational gaps are material.
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 effectively 0%, so the description must compensate, but it only explains one parameter: fixed_wake. The rest of the large nested request surface is left to parameter names and defaults. The 'steady subsonic condition' phrase weakly hints at Mach < 1, but most parameters get no added semantic context.
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 action ('Solve'), a precise scope ('one steady subsonic condition'), and a distinguishing trait from sibling tools such as sweep or batch_submit. Even the tool name is less clear than this description, which specifies exactly what run_vspaero is for.
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 implies single-condition use but does not explicitly say when to choose this over openvsp.sweep, openvsp.batch_submit, or openvsp.preflight. It gives no exclusions, alternatives, or conditions that would route an agent to a more appropriate sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.set_parametersA
Apply parameter ID/value edits in one load/update, verify limits and readback, then replace the source. Obtain IDs with openvsp.query.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| timings | No | |
| log_path | Yes | |
| versions | No | |
| warnings | No | |
| artifacts | No | |
| operation | No | |
| preflight | No | |
| result_path | No | |
| script_path | Yes | |
| coefficients | No | |
| geometry_path | Yes | |
| manifest_path | Yes | |
| run_directory | Yes | |
| analysis_inputs | No | |
| parameter_values | No | |
| numerical_quality | No | |
| effective_settings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses a mutating side effect ('replace the source'), validation behavior ('verify limits'), and confirmation behavior ('readback'). It does not mention failure handling or output_dir effects, but the core safety-relevant behavior is described.
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 sentences, front-loaded with the action, followed by the key behavioral detail and the prerequisite. Every sentence contributes core information, with no filler.
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?
The description covers the operation, validation, readback, side effect, and prerequisite, and an output schema exists so return-value documentation is not required. The main gap is lack of guidance on output_dir and timeout semantics, but schema titles and constraints mitigate this for a moderately complex tool.
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%, so the description must add parameter meaning beyond titles. It helps with parm_id ('Obtain IDs with openvsp.query') and value/source ('parameter ID/value edits', 'replace the source'), but does not explain the request wrapper, output_dir, timeout_seconds, or the edits array constraints. This leaves several parameters to be inferred entirely from schema titles.
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 ('Apply') and resource ('parameter ID/value edits'), and includes the intended atomized workflow ('in one load/update... then replace the source'). It also distinguishes itself from the query sibling by pointing to openvsp.query for ID retrieval, so an agent can tell which tool does which.
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 clearly establishes the context for use (apply parameter edits) and gives one explicit prerequisite ('Obtain IDs with openvsp.query'). It does not spell out when not to use it or name alternative editing/sweep tools, but the intended invocation path is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openvsp.sweepC
Existing 1–25 condition sequential sweep.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals that the sweep is sequential and limited to 1–25 conditions, but it does not mention side effects, blocking behavior, execution privileges, error semantics, or how results are returned. For a tool that likely runs server-side computations, this is a significant gap.
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 text is very short, but this is under-specification rather than effective conciseness. It reads like a caption or title rather than a functional description secret, and it offers no structured details about inputs, execution, or expected 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?
Given the complex nested request schema and lack of annotations, the description is insufficient for an agent to construct a valid call or anticipate execution behavior. The output schema may cover return values, but the core semantics of running the sweep are left largely unexplained.
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 description does not explain the request object or its key fields such as geometry_file, conditions, set_commands, or timeout_seconds. It only restates the 1–25 condition range already encoded in the schema via minItems and maxItems, plus the sequential execution ordering.
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 communicates that this is a 1–25 condition sequential sweep, which adds some scope. However, it is a noun phrase rather than a clear verb+resource statement—it never explicitly says the tool executes or runs a sweep, and it does not distinguish itself from sibling tools like run_vspaero or batch_submit.
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 versus alternatives such as run_vspaero or batch_submit. No prerequisites, exclusions, or selection criteria are provided, leaving the agent to infer usage from the name and minimal description.
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.
16 tool updates
v0.6.0- First observed
openvsp.batch_cancel - First observed
openvsp.batch_export - First observed
openvsp.batch_resume - First observed
openvsp.batch_status - First observed
openvsp.batch_submit - First observed
openvsp.create_model - First observed
openvsp.health - First observed
openvsp.inspect - First observed
openvsp.modify - First observed
openvsp.preflight - First observed
openvsp.preview - First observed
openvsp.query - First observed
openvsp.read_results - First observed
openvsp.run_vspaero - First observed
openvsp.set_parameters - First observed
openvsp.sweep
TDQS
Scored across 16 tools
Most tools occupy clearly distinct lifecycle roles: health, batch management, model creation/editing, preflight, analysis, and result reading. The only mild ambiguities are modify vs. set_parameters and run_vspaero vs. sweep vs. batch_submit, but the descriptions do enough to separate them.
Names use consistent snake_case, but grammatical styles are mixed: batch_* is noun-first, most other tools are bare verbs or verb_noun, and health is a standalone noun. The conventions are still readable and group-related tools are predictable, but the pattern is not uniform.
Sixteen tools is slightly above the typical 3-15 range, but each tool serves a meaningful purpose and the set is organized into clear clusters. The count feels justified for a full OpenVSP workflow rather than bloated.
The tool surface covers the core model lifecycle, parameter editing, preflight checks, single and sweep analysis, batch job submission/control/export, and result reading. Batch operations are especially complete with submit, status, cancel, resume, and export, leaving no obvious dead ends.
Maintenance
Related MCP Connectors
NHTSA MCP — wraps the NHTSA vPIC (Vehicle Product Information Catalog) API (free, no auth)
FlightAware MCP — wraps FlightAware AeroAPI v4 (aeroapi.flightaware.com)
NREL MCP — wraps the US National Renewable Energy Laboratory developer API
Flights MCP — wraps OpenSky Network API (free, no auth required)
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables automated geometry editing and aerodynamic analysis using OpenVSP and VSPAero through natural language. Provides tools to modify aircraft geometry parameters and run computational fluid dynamics simulations programmatically.436MIT
- AlicenseNot gradedqualityBmaintenanceProvides MCP tools for CPACS-oriented TiGL workflows, enabling lifecycle management, inspection, export, and parameter manipulation of aircraft geometry models without native geometry runtimes.3MIT
- FlicenseAqualityDmaintenanceProvides aerodynamic analysis tools through MCP, enabling geometry generation, meshing, CFD solving, and visualization for 2D airfoils.7-
- AlicenseNot gradedqualityBmaintenanceAn MCP server that provides pre-flight validation and post-processing tools for OpenMC Monte Carlo transport simulations, catching common authoring mistakes before jobs hit the HPC queue.MIT