Skip to main content
Glama

submit_proof

Submit prepared inputs and a valid nonce to generate a ZK proof. The TEE server runs the Noir circuit and returns the UltraHonk proof.

Instructions

Step 3 of the step-by-step flow: Submit prepared inputs to generate the ZK proof. The TEE server runs the Noir circuit and returns the UltraHonk proof. This step may take 30-90 seconds. The TEE server builds Prover.toml from these inputs.

You MUST pass the nonce returned by request_challenge. POST /api/v1/prove answers every request that arrives without that nonce with a fresh 402 challenge, so a submission that omits it can never produce a proof.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nonceYesThe "nonce" field from the request_challenge response. Single-use and bound to the circuit it was issued for — request a new challenge for every submission and for every circuit.
inputsNoFull ProveInputs object from prepare_inputs. Accepts a JSON string or a structured object.
circuitYesWhich circuit to use
prepared_inputs_idNoPrivate local action witness handle returned by prepare_inputs. Use instead of inputs; consumed once.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.2.45
    • addedInput schema / properties / prepared_inputs_id
      Added value: +{
      +  "description": "Private local action witness handle returned by prepare_inputs. Use instead of inputs; consumed once.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "circuit",
      -  "inputs",
      -  "nonce"
      -]New value: +[
      +  "circuit",
      +  "nonce"
      +]
  2. Changed1 schema field changedv0.2.44
    • changedInput schema / properties / circuit / enum
      Previous value: -[
      -  "coinbase_kyc",
      -  "coinbase_country",
      -  "oidc_domain",
      -  "arc_eligibility"
      -]New value: +[
      +  "coinbase_kyc",
      +  "coinbase_country",
      +  "oidc_domain",
      +  "arc_eligibility",
      +  "giwa_attestation"
      +]
  3. Changed3 schema fields changedv0.2.43
    • changedInput schema / properties / circuit / enum
      Previous value: -[
      -  "coinbase_kyc",
      -  "coinbase_country",
      -  "oidc_domain"
      -]New value: +[
      +  "coinbase_kyc",
      +  "coinbase_country",
      +  "oidc_domain",
      +  "arc_eligibility"
      +]
    • addedInput schema / properties / nonce
      Added value: +{
      +  "description": "The \"nonce\" field from the request_challenge response. Single-use and bound to the circuit it was issued for — request a new challenge for every submission and for every circuit.",
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "circuit",
      -  "inputs"
      -]New value: +[
      +  "circuit",
      +  "inputs",
      +  "nonce"
      +]
  4. First observedv0.2.9

TDQS

A4.1/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 of behavioral disclosure, and it delivers: it states the TEE server runs the Noir circuit, the operation takes 30-90 seconds, Prover.toml is built from inputs, the response is an UltraHonk proof, and omitting the nonce triggers a fresh 402 challenge. This is strong, concrete behavioral transparency for a no-annotation tool.

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 front-loaded with its purpose and structured as a short overview followed by a critical usage warning. It is not bloated, though the first paragraph mentions the TEE server twice ('runs the Noir circuit' and 'builds Prover.toml'), which is a minor redundancy. Otherwise, every sentence contributes useful information.

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

Completeness4/5

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

For a tool with no annotations and no output schema, the description covers workflow position, prerequisites, latency, a failure mode, and the expected result type. The schema covers the parameter-level details such as the choice between `inputs` and `prepared_inputs_id`. It is not exhaustive about the exact response shape, but it gives enough context for correct invocation.

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%, so the baseline is 3; the schema already documents `nonce`, `inputs`, `circuit`, and `prepared_inputs_id` with their constraints. The description adds emphasis that the nonce is mandatory and that the server builds Prover.toml from inputs, but it does not add substantial new parameter-level meaning. A 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Step 3 of the step-by-step flow' and a specific verb+object: 'Submit prepared inputs to generate the ZK proof.' It clearly identifies the resource (prepared inputs) and the outcome (UltraHonk proof). However, it does not explicitly contrast itself with the sibling `generate_proof`, so differentiation is implicit rather than direct.

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 gives clear positional context ('Step 3'), names the required prerequisite inputs (prepared inputs, nonce from request_challenge), and states the hard requirement to include the nonce. The warning about the 402 challenge tells the agent when a submission cannot succeed. It does not enumerate alternatives or when-not-to-use, but the step-based context is sufficient for routing.

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