Skip to main content
Glama

Solve

solve
Read-onlyIdempotent

Solves one field problem with one solver and seals the solution: the outcome, the result in decimals and exact hex, its invariants, the solution_seal and a receipt. parameters holds the solver's inputs as describe_solver gives them. example, in their place, is the name of a worked example describe_solver lists (example_solve, or a key beginning example_solve_), so a long worked input need not be typed again; the request is filled with that example's parameters, and the filled request is the one solved, sealed and returned as inputs. The receipt covers the request as it was written, number spellings included, while a seal covers its values: a request sent with 310 and the same request sent with 310.0 give different receipts and the same seal, so a receipt that differs between two such answers is not a sign of tampering. A chained solve, from a sealed card run through a coupling (from), takes each handed value in parameters bit for bit: decode it from the run's frame_hex or a _hex value, not a decimal readout, or it is refused as CouplingLedgerBreach. verify_solution verifies a solution later from this request, or its inputs, and its solution_seal. On this open connection one address holds at most 1 physics permit at a time, and long work (a solve, a plan of runs or of solves, a run of more than 10000 steps, or a verification that computes one again) runs 1 at a time. A call that finds no permit or no place is answered "Too many concurrent physics tasks." and nothing waits: the same call sent later is answered once one is free. An answer is waited for 60 seconds, and long work is stopped there.

Input Schema

NameRequiredDescriptionDefault
fromNoOptional: a sealed card run handed in through a coupling, as run_trajectory takes it. Each handed value goes into parameters bit for bit, read from the run's frame_hex or a _hex value, not a decimal (CouplingLedgerBreach).
solverYesThe solver, as list_solvers names it.
exampleNoIn place of parameters: the name of one of the solver's worked examples as describe_solver keys it (example_solve, or a key that begins example_solve_). The request is filled with that example's parameters, and the filled request is the one solved, sealed and returned as inputs.
parametersNoThe inputs of the solver named in 'solver', each a number, a whole number, a word, a flag or an array as describe_solver gives it, and no other key but signed. Every number of a solve request must be a finite, normal 64-bit number or zero, and a number written as non-zero must not read as zero. This rule is the one every card's request follows, and it stands beside each input's range and refuses some values inside it: a subnormal such as 5e-324 is refused wherever zero and larger numbers are accepted. A solution has no frame, so the card's rule that a number fit a 32-bit frame slot does not apply. A required input left out is refused as InputMissing, and an input given with a choice it does not go with as InputNotWithChoice, each in a sentence that names the input, and a solver the engine does not serve as UnknownSolver; nothing is filled in. parameters may also carry signed, an instrument's signature over the other parameters under the key "parameters", by the rule run_trajectory's input schema gives at segments; it is verified before solving, the solver takes the other parameters, and the answer then carries load_source, naming the key. A solve answer without load_source holds no signed parameter.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / from / description
      Previous value: -"Optional: a sealed card run handed in through a coupling, as run_trajectory takes it."New value: +"Optional: a sealed card run handed in through a coupling, as run_trajectory takes it. Each handed value goes into parameters bit for bit, read from the run's frame_hex or a _hex value, not a decimal (CouplingLedgerBreach)."
  2. Changed1 schema field changed
    • changedInput schema / properties / from / properties / run_seal / pattern
      Previous value: -"^[0-9a-f]{64}$"New value: +"^[0-9a-f]{96}$"
  3. Changed1 schema field changed
    • addedInput schema / properties / from
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Optional: a sealed card run handed in through a coupling, as run_trajectory takes it.",
      +  "properties": {
      +    "coupling": {
      +      "type": "string"
      +    },
      +    "request": {
      +      "type": "object"
      +    },
      +    "run_seal": {
      +      "pattern": "^[0-9a-f]{64}$",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "request",
      +    "run_seal",
      +    "coupling"
      +  ],
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / parameters / description
      Previous value: -"The inputs of the solver named in 'solver', each a number, a whole number, a word, a flag or an array as describe_solver gives it, and no other key. Every number of a solve request must be a finite, normal 64-bit number or zero, and a number written as non-zero must not read as zero. This rule is the one every card's request follows, and it stands beside each input's range and refuses some values inside it: a subnormal such as 5e-324 is refused wherever zero and larger numbers are accepted. A solution has no frame, so the card's rule that a number fit a 32-bit frame slot does not apply."New value: +"The inputs of the solver named in 'solver', each a number, a whole number, a word, a flag or an array as describe_solver gives it, and no other key but signed. Every number of a solve request must be a finite, normal 64-bit number or zero, and a number written as non-zero must not read as zero. This rule is the one every card's request follows, and it stands beside each input's range and refuses some values inside it: a subnormal such as 5e-324 is refused wherever zero and larger numbers are accepted. A solution has no frame, so the card's rule that a number fit a 32-bit frame slot does not apply. A required input left out is refused as InputMissing, and an input given with a choice it does not go with as InputNotWithChoice, each in a sentence that names the input, and a solver the engine does not serve as UnknownSolver; nothing is filled in. parameters may also carry signed, an instrument's signature over the other parameters under the key \"parameters\", by the rule run_trajectory's input schema gives at segments; it is verified before solving, the solver takes the other parameters, and the answer then carries load_source, naming the key. A solve answer without load_source holds no signed parameter."
  5. Changed1 schema field changed
    • changedInput schema / description
      Previous value: -"One sealed solution. The same request as POST /solve."New value: +"One sealed solution."
  6. First observed

TDQS

A4/5.0
Behavior5/5

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

Despite annotations already covering readOnly/idempotent/non-destructive, the description adds substantial behavioral context: receipt-vs-seal semantics (310 vs 310.0 yield different receipts but the same seal), named error codes (CouplingLedgerBreach, InputMissing, InputNotWithChoice, UnknownSolver), bit-for-bit coupling rules, a 1-permit concurrency limit, no queueing, and a 60-second cap. None of this is inferable from the annotations.

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?

It is front-loaded with the purpose, but the body is one dense unbroken block and a meaningful share of it duplicates text already present in the schema property descriptions. Every sentence carries information, yet structure and redundancy keep it from being efficient.

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 tool with nested objects and no output schema, the description does the necessary work: it describes the returned parts, the sealing model, error behavior, coupling input rules, and timeout/concurrency limits. Residual gaps like the exact shape of "outcome" and "invariants" are minor.

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 100% and the schema's property descriptions repeat the description's text almost verbatim (e.g. the `from` and `example` paragraphs), so the description adds little parameter meaning the agent cannot already read in the schema. Baseline 3 is appropriate given the schema does the heavy lifting.

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 opening sentence gives a specific verb+resource ("Solves one field problem with one solver and seals the solution") and even enumerates the return parts: outcome, decimals, exact hex, invariants, solution_seal, receipt. It routes indirectly to siblings (describe_solver for inputs, verify_solution for later verification), but it never sets itself against compute_step or run_trajectory explicitly.

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

Usage Guidelines4/5

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

It states the key alternatives clearly: use `example` instead of typing parameters, use `from` for a chained solve off a sealed card run, and use verify_solution to verify later. There is no explicit when-not-to-use statement against the other solver-adjacent siblings, so it stops short of a 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources