Skip to main content
Glama

submit_signed_deposit

GASLESS DEPOSIT (phase 6): send back the quote and your EIP-3009 signature (ReceiveWithAuthorization) from deposit_data({ orderId, singleSignature: true }) and Bernuvia sends fundFor to the escrow contract paying the gas. Before sending it verifies on the server that the quote is the one in force and was signed by Bernuvia, that your signature is from your linked wallet and that this wallet is the buyer, that the amount is exact, that validBefore is exactly the quote's expiry and that the order still has no deposit. Your wallet cannot have code. Sponsored gas limits per wallet and per day ([OUT_OF_GAS], [TOO_MANY_FAILURES]). If somebody else sends that same authorization of yours first, it answers funded_by_other. Prefixes: [FUNDING_OFF], [THIRD_PARTY_FUNDING_UNAVAILABLE], [INVALID_QUOTE], [INVALID_AUTHORIZATION], [DIFFERENT_WALLET], [AMOUNT_MISMATCH], [INVALID_WINDOW], [QUOTE_EXPIRED], [AUTHORIZATION_USED], [BUYER_IS_CONTRACT], [RELAYER_BUSY], [NOT_BROADCAST], [REVERTED].

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
quoteYesThe `quote` object returned by deposit_data({ orderId, singleSignature: true }), AS IS (with issuedAt and signature). Bernuvia verifies it field by field and by its signature.
orderIdYesThe orderId (uuid) of the order, the same one from deposit_data.
signatureYesYour EIP-712 signature (signTypedData) of singleSignature.typedData, made with your linked wallet: 0x + 130 hex. Wallets with code (contracts, EIP-7702) are not accepted on this route.
validAfterYessingleSignature.typedData.message.validAfter, unchanged (epoch seconds).
validBeforeYessingleSignature.typedData.message.validBefore, unchanged: it is exactly the expiry of the quote.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
statusYes"funded" (mined successfully), "sent" (broadcast, receipt still pending), "funded_by_other" (it was already on the chain) or "funded_by_other_unfinalized" (seen but not finalized yet).
txHashNoHash of the transaction sent by Bernuvia. Absent if nothing was broadcast.
orderIdYesThe uuid of the order in Bernuvia.
nextStepYesWhat to do now, in one sentence.
purchaseIdNoThe on-chain identifier (bytes32) of the purchase. Only when the send was made by Bernuvia.
gasSponsoredNoOnly when Bernuvia sent it: true, the gas was paid by Bernuvia (you do not spend POL).
sentByBernuviaYestrue if the transaction was broadcast by Bernuvia; false if another send had already placed the deposit.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed24 schema fields changed
    • removedInput schema / allOf
      Removed value: -[
      -  {
      -    "anyOf": [
      -      {
      -        "required": [
      -          "orderId"
      -        ]
      -      },
      -      {
      -        "required": [
      -          "ordenId"
      -        ]
      -      }
      -    ]
      -  },
      -  {
      -    "anyOf": [
      -      {
      -        "required": [
      -          "quote"
      -        ]
      -      },
      -      {
      -        "required": [
      -          "cotizacion"
      -        ]
      -      }
      -    ]
      -  },
      -  {
      -    "anyOf": [
      -      {
      -        "required": [
      -          "signature"
      -        ]
      -      },
      -      {
      -        "required": [
      -          "firma"
      -        ]
      -      }
      -    ]
      -  }
      -]
    • removedInput schema / properties / cotizacion
      Removed value: -{
      -  "deprecated": true,
      -  "description": "DEPRECATED alias of `quote`: it still works, but use `quote` (it will be removed in a future round, no date yet). The `cotizacion` object returned by deposit_data({ ordenId, una_sola_firma: true }), AS IS (with issuedAt and signature). Bernuvia verifies it field by field and by its signature.",
      -  "type": "object"
      -}
    • removedInput schema / properties / firma
      Removed value: -{
      -  "deprecated": true,
      -  "description": "DEPRECATED alias of `signature`: it still works, but use `signature` (it will be removed in a future round, no date yet). Your EIP-712 signature (signTypedData) of autorizacion.typedData, made with your linked wallet: 0x + 130 hex. Wallets with code (contracts, EIP-7702) are not accepted on this route.",
      -  "type": "string"
      -}
    • removedInput schema / properties / ordenId
      Removed value: -{
      -  "deprecated": true,
      -  "description": "DEPRECATED alias of `orderId`: it still works, but use `orderId` (it will be removed in a future round, no date yet). The ordenId (uuid) of the order, the same one from deposit_data.",
      -  "type": "string"
      -}
    • changedInput schema / properties / orderId / description
      Previous value: -"The ordenId (uuid) of the order, the same one from deposit_data."New value: +"The orderId (uuid) of the order, the same one from deposit_data."
    • changedInput schema / properties / quote / description
      Previous value: -"The `cotizacion` object returned by deposit_data({ ordenId, una_sola_firma: true }), AS IS (with issuedAt and signature). Bernuvia verifies it field by field and by its signature."New value: +"The `quote` object returned by deposit_data({ orderId, singleSignature: true }), AS IS (with issuedAt and signature). Bernuvia verifies it field by field and by its signature."
    • changedInput schema / properties / signature / description
      Previous value: -"Your EIP-712 signature (signTypedData) of autorizacion.typedData, made with your linked wallet: 0x + 130 hex. Wallets with code (contracts, EIP-7702) are not accepted on this route."New value: +"Your EIP-712 signature (signTypedData) of singleSignature.typedData, made with your linked wallet: 0x + 130 hex. Wallets with code (contracts, EIP-7702) are not accepted on this route."
    • changedInput schema / properties / validAfter / description
      Previous value: -"autorizacion.typedData.message.validAfter, unchanged (epoch seconds)."New value: +"singleSignature.typedData.message.validAfter, unchanged (epoch seconds)."
    • changedInput schema / properties / validBefore / description
      Previous value: -"autorizacion.typedData.message.validBefore, unchanged: it is exactly the expiry of the quote."New value: +"singleSignature.typedData.message.validBefore, unchanged: it is exactly the expiry of the quote."
    • changedInput schema / required
      Previous value: -[
      -  "validAfter",
      -  "validBefore"
      -]New value: +[
      +  "orderId",
      +  "quote",
      +  "validAfter",
      +  "validBefore",
      +  "signature"
      +]
    • removedInput schema / x-bernuvia-aliases
      Removed value: -{
      -  "orderId": "ordenId",
      -  "quote": "cotizacion",
      -  "signature": "firma"
      -}
    • removedOutput schema / properties / compraId
      Removed value: -{
      -  "description": "The on-chain identifier (bytes32) of the purchase. Only when the send was made by Bernuvia.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / enviadoPorBernuvia
      Removed value: -{
      -  "description": "true if the transaction was broadcast by Bernuvia; false if another send had already placed the deposit.",
      -  "type": "boolean"
      -}
    • removedOutput schema / properties / estado
      Removed value: -{
      -  "description": "\"fondeada\" (mined successfully), \"enviada\" (broadcast, receipt still pending), \"fondeada_por_otro\" (it was already on the chain) or \"fondeada_por_otro_sin_finalizar\" (seen but not finalized yet).",
      -  "enum": [
      -    "fondeada",
      -    "enviada",
      -    "fondeada_por_otro",
      -    "fondeada_por_otro_sin_finalizar"
      -  ],
      -  "type": "string"
      -}
    • removedOutput schema / properties / gasPatrocinado
      Removed value: -{
      -  "description": "Only when Bernuvia sent it: true, the gas was paid by Bernuvia (you do not spend POL).",
      -  "type": "boolean"
      -}
    • addedOutput schema / properties / gasSponsored
      Added value: +{
      +  "description": "Only when Bernuvia sent it: true, the gas was paid by Bernuvia (you do not spend POL).",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / nextStep
      Added value: +{
      +  "description": "What to do now, in one sentence.",
      +  "type": "string"
      +}
    • removedOutput schema / properties / ordenId
      Removed value: -{
      -  "description": "The uuid of the order in Bernuvia.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / orderId
      Added value: +{
      +  "description": "The uuid of the order in Bernuvia.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / purchaseId
      Added value: +{
      +  "description": "The on-chain identifier (bytes32) of the purchase. Only when the send was made by Bernuvia.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / sentByBernuvia
      Added value: +{
      +  "description": "true if the transaction was broadcast by Bernuvia; false if another send had already placed the deposit.",
      +  "type": "boolean"
      +}
    • removedOutput schema / properties / siguientePaso
      Removed value: -{
      -  "description": "What to do now, in one sentence.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / status
      Added value: +{
      +  "description": "\"funded\" (mined successfully), \"sent\" (broadcast, receipt still pending), \"funded_by_other\" (it was already on the chain) or \"funded_by_other_unfinalized\" (seen but not finalized yet).",
      +  "enum": [
      +    "funded",
      +    "sent",
      +    "funded_by_other",
      +    "funded_by_other_unfinalized"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "ordenId",
      -  "estado",
      -  "enviadoPorBernuvia",
      -  "siguientePaso"
      -]New value: +[
      +  "orderId",
      +  "status",
      +  "sentByBernuvia",
      +  "nextStep"
      +]
  2. Changed15 schema fields changed
    • changedInput schema / properties / cotizacion / description
      Previous value: -"ALIAS RETIRADO de `quote`: sigue funcionando, pero usa `quote` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `quote`. El objeto `cotizacion` que devolvió deposit_data({ ordenId, una_sola_firma: true }), TAL CUAL (con issuedAt y signature). Bernuvia lo verifica campo a campo y por su firma."New value: +"DEPRECATED alias of `quote`: it still works, but use `quote` (it will be removed in a future round, no date yet). The `cotizacion` object returned by deposit_data({ ordenId, una_sola_firma: true }), AS IS (with issuedAt and signature). Bernuvia verifies it field by field and by its signature."
    • changedInput schema / properties / firma / description
      Previous value: -"ALIAS RETIRADO de `signature`: sigue funcionando, pero usa `signature` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `signature`. Tu firma EIP-712 (signTypedData) de autorizacion.typedData, hecha con tu wallet vinculada: 0x + 130 hex. Las wallets con código (contratos, EIP-7702) no se admiten en esta vía."New value: +"DEPRECATED alias of `signature`: it still works, but use `signature` (it will be removed in a future round, no date yet). Your EIP-712 signature (signTypedData) of autorizacion.typedData, made with your linked wallet: 0x + 130 hex. Wallets with code (contracts, EIP-7702) are not accepted on this route."
    • changedInput schema / properties / ordenId / description
      Previous value: -"ALIAS RETIRADO de `orderId`: sigue funcionando, pero usa `orderId` (se quitará en una tanda futura, aún sin fecha). / DEPRECATED alias of `orderId`. El ordenId (uuid) de la orden, el mismo de deposit_data."New value: +"DEPRECATED alias of `orderId`: it still works, but use `orderId` (it will be removed in a future round, no date yet). The ordenId (uuid) of the order, the same one from deposit_data."
    • changedInput schema / properties / orderId / description
      Previous value: -"El ordenId (uuid) de la orden, el mismo de deposit_data."New value: +"The ordenId (uuid) of the order, the same one from deposit_data."
    • changedInput schema / properties / quote / description
      Previous value: -"El objeto `cotizacion` que devolvió deposit_data({ ordenId, una_sola_firma: true }), TAL CUAL (con issuedAt y signature). Bernuvia lo verifica campo a campo y por su firma."New value: +"The `cotizacion` object returned by deposit_data({ ordenId, una_sola_firma: true }), AS IS (with issuedAt and signature). Bernuvia verifies it field by field and by its signature."
    • changedInput schema / properties / signature / description
      Previous value: -"Tu firma EIP-712 (signTypedData) de autorizacion.typedData, hecha con tu wallet vinculada: 0x + 130 hex. Las wallets con código (contratos, EIP-7702) no se admiten en esta vía."New value: +"Your EIP-712 signature (signTypedData) of autorizacion.typedData, made with your linked wallet: 0x + 130 hex. Wallets with code (contracts, EIP-7702) are not accepted on this route."
    • changedInput schema / properties / validAfter / description
      Previous value: -"autorizacion.typedData.message.validAfter, sin cambiarlo (segundos epoch)."New value: +"autorizacion.typedData.message.validAfter, unchanged (epoch seconds)."
    • changedInput schema / properties / validBefore / description
      Previous value: -"autorizacion.typedData.message.validBefore, sin cambiarlo: es exactamente el vencimiento de la cotización."New value: +"autorizacion.typedData.message.validBefore, unchanged: it is exactly the expiry of the quote."
    • changedOutput schema / properties / compraId / description
      Previous value: -"El identificador on-chain (bytes32) de la compra. Solo cuando el envío lo hizo Bernuvia."New value: +"The on-chain identifier (bytes32) of the purchase. Only when the send was made by Bernuvia."
    • changedOutput schema / properties / enviadoPorBernuvia / description
      Previous value: -"true si la transacción la difundió Bernuvia; false si el depósito ya lo había puesto otro envío."New value: +"true if the transaction was broadcast by Bernuvia; false if another send had already placed the deposit."
    • changedOutput schema / properties / estado / description
      Previous value: -"\"fondeada\" (minada con éxito), \"enviada\" (difundida, aún sin recibo), \"fondeada_por_otro\" (ya estaba en la cadena) o \"fondeada_por_otro_sin_finalizar\" (vista pero aún no finalizada)."New value: +"\"fondeada\" (mined successfully), \"enviada\" (broadcast, receipt still pending), \"fondeada_por_otro\" (it was already on the chain) or \"fondeada_por_otro_sin_finalizar\" (seen but not finalized yet)."
    • changedOutput schema / properties / gasPatrocinado / description
      Previous value: -"Solo cuando envió Bernuvia: true, el gas lo pagó ella (tú no gastas POL)."New value: +"Only when Bernuvia sent it: true, the gas was paid by Bernuvia (you do not spend POL)."
    • changedOutput schema / properties / ordenId / description
      Previous value: -"El uuid de la orden en Bernuvia."New value: +"The uuid of the order in Bernuvia."
    • changedOutput schema / properties / siguientePaso / description
      Previous value: -"Qué hacer ahora, en una frase."New value: +"What to do now, in one sentence."
    • changedOutput schema / properties / txHash / description
      Previous value: -"Hash de la transacción enviada por Bernuvia. Ausente si no se difundió nada."New value: +"Hash of the transaction sent by Bernuvia. Absent if nothing was broadcast."
  3. First observed

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations present, the description carries the full load and does so thoroughly: it enumerates the server-side verifications (quote in force and signed by Bernuvia, signature from the linked buyer wallet, exact amount, validBefore == quote expiry, order still undeposited), forbids contract/EIP-7702 wallets, discloses per-wallet/per-day gas limits with [OUT_OF_GAS]/[TOO_MANY_FAILURES], and covers the funded_by_other race condition and a full prefix taxonomy of failure modes.

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 action is front-loaded in the first clause, and the material is organized logically (action, then verification rules, then constraints, then error prefixes). The trailing bracket-prefix list is a dense wall of text, but each entry earns its place as a diagnosable failure code.

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 complex 5-required-param, nested-object, no-annotation mutation tool, the description covers preconditions, verification behavior, failure modes, and environmental limits; the existence of an output schema means return values need not be restated. Nothing an agent needs to call this correctly appears to be missing.

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 five parameters, and the description largely restates these constraints ('the amount is exact', 'validBefore is exactly the quote's expiry') rather than adding new semantics. Baseline 3 is appropriate since the schema does the heavy lifting here.

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 opening states a specific verb and resource ('GASLESS DEPOSIT (phase 6): send back the quote and your EIP-3009 signature... Bernuvia sends fundFor to the escrow contract paying the gas'), which is precise enough to distinguish it from the sibling deposit_data, which is explicitly named as the prior step. An agent can tell exactly what this does and what it produces.

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 makes the prerequisite clear by naming deposit_data({ orderId, singleSignature: true }) as the source of inputs and marking itself as 'phase 6' of that flow, so the when-to-use context is well established. It does not, however, state when NOT to use it or route to any alternative funding path (e.g., a non-gasless sibling), so it stops short of explicit alternatives.

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