Skip to main content
Glama

Solve Capabilities

solve_capabilities
Read-only

Check which external CFD, MBD, topology, transient-thermal, and optics solvers are currently usable, so you can choose a working solver for submission without trial and error.

Instructions

Report which P2 external solvers (CFD/MBD/topology/transient-thermal/optics) are usable right now — so you can pick a working solver for a *_submit family instead of discovering availability by trial and error. The solver twin of render_capabilities.

Takes no arguments. Resolves each solver side-effect-free: a binary by ANKUSDRIVE__PATH env -> PATH -> per-OS install dirs; a pip-wheel solver by importability. It executes nothing and installs nothing.

families[*].any_available is the gate to trust: it means AnkusDrive can actually DRIVE that family here, not just that a binary resolved. A solver that resolves but that no AnkusDrive tool can build a case for is listed under the family's prepared_case_only (with the reason on the solver entry) and does NOT set any_available — today that is SU2, which only ever runs a case_dir you prepared yourself (*.cfg + *.su2); every built-in CFD case mode is OpenFOAM-only.

Returns {platform, available (sorted ready solver names), unwired, prepared_case_only, solvers: {name: {available, kind ('binary'|'wheel'), family, extra, and either path/module (when available) or install_hint, plus prepared_case_only when nothing can build it a case}}, families: {family: {solvers, available, unwired, prepared_case_only, any_available}}, extras: {extra: [solver names]} for pip install ankusdrive[<extra>], toolsets: {enabled, disabled: {family: {label, tools, enable}}}, cases: {root, count, bytes, bytes_exact, keep, max_gb, grace_s, reaping}}. A family listed under toolsets.disabled has no tools registered in this session — tell the user its enable instruction rather than concluding the capability does not exist.

cases is where every generated solver deck is written (one managed root) and the retention it is held to: at most keep directories and max_gb GB, reaped oldest-first, never touching one younger than grace_s seconds. Point a user at cases.root when they ask where a solve's files went (issue #437).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

The description goes well beyond the readOnlyHint annotation by disclosing the side-effect-free resolution process: it executes nothing, installs nothing, and resolves binaries via env var -> PATH -> per-OS install dirs, and pip wheels by importability. It also explains the subtle distinction between a solver that resolves and one that is actually drivable, using SU2 as a concrete example. This is rich behavioral context that annotations alone do not provide.

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 long but densely informative, with a clear structure: purpose, side-effect-free guarantee, key gate to trust, return shape, and retention policy. It front-loads the most actionable information (pick a working solver) before diving into return fields. It loses one point because the return-shape enumeration is quite lengthy and could be trimmed or summarized without losing critical guidance.

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

Completeness5/5

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

For a zero-parameter capability-reporting tool with no output schema, the description is remarkably complete. It explains the return structure in detail, including the meaning of `any_available`, `prepared_case_only`, `toolsets.disabled`, and `cases` retention semantics. It even includes a user-facing pointer (point users at `cases.root`) and references issue #437. An agent has everything needed to call the tool and interpret its output correctly.

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 the schema is trivially complete. The description explicitly states 'Takes no arguments,' which removes any doubt. The baseline for 0 params is 4, and the description earns it by confirming the no-argument contract and explaining what the tool returns instead.

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 opens with a specific verb ('Report') and resource ('P2 external solvers'), and immediately states the practical purpose: pick a working solver for a *_submit family instead of discovering availability by trial and error. It also explicitly names its sibling counterpart ('The solver twin of render_capabilities'), which distinguishes it from the render-related capability tool in the sibling list.

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

Usage Guidelines5/5

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

The description explicitly tells the agent when to use this tool: before calling any *_submit family tool, to check solver availability. It also gives concrete guidance on how to interpret results, e.g., trust `families[*].any_available` as the gate, and tells the agent what to do when a family is under `toolsets.disabled` (tell the user its `enable` instruction rather than concluding the capability does not exist). This is explicit when-to-use and how-to-interpret guidance.

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

Deploy Server

Other Tools