Skip to main content
Glama

submit_proof

Submits prepared inputs and a valid challenge nonce to generate a zero-knowledge proof; returns an UltraHonk proof from the TEE-run Noir circuit.

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

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. Changed1 schema field changedv0.2.49
    • changedInput schema / properties / circuit / enum
      Previous value: -[
      -  "coinbase_kyc",
      -  "coinbase_country",
      -  "oidc_domain",
      -  "giwa_attestation"
      -]New value: +[
      +  "coinbase_kyc",
      +  "coinbase_country",
      +  "oidc_domain",
      +  "giwa_attestation",
      +  "human_passport"
      +]
  2. Changed1 schema field changedv0.2.46
    • changedInput schema / properties / circuit / enum
      Previous value: -[
      -  "coinbase_kyc",
      -  "coinbase_country",
      -  "oidc_domain",
      -  "arc_eligibility",
      -  "giwa_attestation"
      -]New value: +[
      +  "coinbase_kyc",
      +  "coinbase_country",
      +  "oidc_domain",
      +  "giwa_attestation"
      +]
  3. 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"
      +]
  4. 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"
      +]
  5. 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"
      +]
  6. First observedv0.2.9

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does well: it discloses that the TEE server runs the Noir circuit, returns an UltraHonk proof, builds Prover.toml, and that the call may take 30-90 seconds. It also explains the nonce failure mode with a fresh 402 challenge. It does not cover auth requirements, idempotency, or failure/retry behavior beyond the nonce case.

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 the step and purpose, and the nonce warning is placed prominently. It is appropriately sized for the complexity, though the 402 explanation is somewhat verbose and repeats the nonce requirement already stated. Every sentence is useful, but the second paragraph could be tighter.

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 proof-submission tool with no output schema and no annotations, the description is substantially complete: it covers the flow position, required nonce, server-side proof generation, returned proof type, and latency. The remaining gap is response shape and error handling beyond the 402 case, but the agent has enough to invoke it correctly.

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 schema already documents all four parameters, including nonce, inputs, circuit enum, and prepared_inputs_id. The description adds context that the nonce must come from request_challenge and that inputs are submitted to the TEE server, but it does not add much beyond the schema. Baseline 3 is appropriate when 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 description gives a specific verb-action and resource: submit prepared inputs to generate a ZK proof. It clearly places the tool as step 3 in the flow and names related tools like request_challenge and prepare_inputs, though it does not explicitly distinguish itself from the sibling generate_proof. The core purpose is clear to an agent without opening the schema.

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 exactly when this tool is used: step 3 of the flow, after preparing inputs, and it requires the nonce from request_challenge. The 402 consequence for omitting the nonce is an explicit usage condition. It stops short of naming when to use generate_proof instead, so it is clear but not fully alternative-aware.

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