Skip to main content
Glama

study_submit

Sweep parameters over a design space, evaluate responses, and record every point as a table for trend analysis and design optimization.

Instructions

Sweep parameters over a sampled design space and record the WHOLE search as a table — the DOE primitive between the parametric layer and the solver catalog.

Without it, exploring a design space means hand-rolling recipe(params) -> solve -> mutate -> repeat and keeping only the last point, so nobody can tell afterwards whether the design is good or merely the one you stopped on. A study keeps every point, with the parameters that produced it.

variables declares the space; each entry is either explicit levels or a range:

  • {"name": "diameter_mm", "values": [8, 10, 12]} — these and only these

  • {"name": "diameter_mm", "min": 8, "max": 12, "levels": 3} — evenly spaced

sampling picks how they combine:

  • {"method": "grid"} (default) — full factorial. Exhaustive, and the only thing that can prove a trend, but it is the PRODUCT of the level counts: three variables at five levels is 125 evaluations.

  • {"method": "lhs", "n_samples": 20, "seed": 0} — Latin hypercube. Each variable's range is cut into n_samples strata and every stratum used once, so cost is decoupled from dimensionality: 20 points cover 6 variables as well as 2. Use it past 2-3 variables. Both are deterministic from seed, which is what makes a re-run hit the cache.

responses says how to measure each point, in the same mapping a performance requirement uses: {"name": "dp", "tool": "cfd_pipe_flow", "metric": "pressure_drop_pa", "conditions": {"diameter_mm": "$diameter_mm", "length_mm": 200}}. Inside conditions, "$<variable>" is that point's value and "$handle" is the part it built; an unknown $token is refused up front, because a sweep that silently measured a literal string at every point returns a flat, plausible, wrong table.

tool can be ANY AnkusDrive tool, including verify_performance — and that is the interesting case. A response that is a contract verdict carries a band, a trust block and a pass/fail/indeterminate state, so points stay comparable across fidelity tiers instead of being bare floats of unknown quality.

recipe (+ fixed_inputs) rebuilds geometry per point; omit it and pass handle (or nothing) to sweep analysis parameters against fixed geometry. Screening-tier responses evaluate inline in milliseconds, so thousand-point studies are viable; solver-tier responses fan out concurrently and one collector job joins them.

Caching IS resumability: identical points hash to the same job content key, so re-submitting a study after a crash, or widening its grid, re-runs only what is new — n_cached is what tells you the re-run was free. max_points (default 64) refuses a sweep larger than you probably meant.

objective{"response": "dp", "sense": "min"} — additionally reports best.

Returns EITHER the finished table or {job_id, status, points, pending}; poll job_result for the completed table. A point that failed to build or measure is a row with ok: false, never an exception. Result: {ok, n_points, n_evaluated, n_cached, n_failed, sampling, variables, points: [{index, params, handle?, ok, responses: {name: {ok, value, band_pct?, converged?, state?, job_id?, cache_hit?, detail?}}, warnings}], responses: {name: {n, n_missing, min, max, mean, argmin, argmax}}, best?}.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
handleNo
recipeNo
samplingNo
objectiveNo
responsesYes
variablesYes
max_pointsNo
fixed_inputsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.9/5.0
Behavior5/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 so richly: unknown $tokens are refused up front, identical points hash to the same content key making caching equivalent to resumability, max_points (default 64) refuses oversized sweeps, and failed points are rows with ok:false rather than exceptions. It also discloses async fan-out behavior (inline screening vs concurrent solver-tier with a collector job).

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?

Well front-loaded with purpose first and each parameter group in its own paragraph, but the length is substantial and a few framing sentences ('and that is the interesting case') are more color than specification. Dense and organized overall.

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?

With no output schema and an async/job-based tool, the description compensates by enumerating the return shape (either the finished table or {job_id, status, points, pending}), the per-point response fields, aggregate summaries, and the failure/exception semantics. Nothing an agent needs to call or interpret it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 8 params, so the description must compensate, and it does: variables (levels vs min/max/levels with examples), sampling methods and their tradeoffs, responses mapping with $variable/$handle semantics, objective, max_points default, and recipe/fixed_inputs/handle modes are all explained.

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 precise verb+resource (sweep parameters over a sampled design space, recording the whole search as a table) and positions it against siblings as 'the DOE primitive between the parametric layer and the solver catalog'. The contrast with hand-rolling recipe->solve->mutate->repeat makes its distinct role unambiguous.

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?

Gives explicit when-to-use rules: grid for exhaustiveness/trend-proving, lhs 'past 2-3 variables', omit recipe to sweep analysis params on fixed geometry, and poll job_result when a job_id is returned. Alternatives (verify_performance) and the reasoning for using them are named.

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