Skip to main content
Glama

GENESIS ProofRelay MCP Verifier

Build unsigned ProofRelay bundle draft

proofrelay.build_bundle_draft
Read-onlyIdempotent

Build an unsigned V2 draft from explicit tenant/service IDs and hash-only event evidence, not raw payloads. The producer must sign events locally and recompute bundle_hash before verification. No V1 draft inputs, server signing or certification. Hash adapters accept bare or sha256:-prefixed SHA-256.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "draft": "<draft>"
    },
    "name": "proofrelay.build_bundle_draft"
  }
}

Input Schema

NameRequiredDescriptionDefault
draftYes

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changed
    • addedInput schema / $defs
      Added value: +{
      +  "BundleDraftEventInput": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "event_id": {
      +        "maxLength": 128,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9](?:[a-z0-9._:-]*[a-z0-9])?$",
      +        "type": "string"
      +      },
      +      "event_type": {
      +        "maxLength": 128,
      +        "minLength": 1,
      +        "pattern": "^[a-z0-9](?:[a-z0-9._:-]*[a-z0-9])?$",
      +        "type": "string"
      +      },
      +      "evidence": {
      +        "additionalProperties": false,
      +        "maxProperties": 64,
      +        "minProperties": 1,
      +        "patternProperties": {
      +          "^[a-z][a-z0-9_]*$": {
      +            "pattern": "^\\s*(?:sha256:)?[0-9a-fA-F]{64}\\s*$",
      +            "type": "string"
      +          }
      +        },
      +        "propertyNames": {
      +          "maxLength": 64,
      +          "minLength": 1
      +        },
      +        "type": "object"
      +      },
      +      "occurred_at_ms": {
      +        "maximum": 9007199254740991,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "policy_digest": {
      +        "anyOf": [
      +          {
      +            "pattern": "^\\s*(?:sha256:)?[0-9a-fA-F]{64}\\s*$",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      }
      +    },
      +    "required": [
      +      "event_id",
      +      "occurred_at_ms",
      +      "event_type",
      +      "evidence"
      +    ],
      +    "type": "object"
      +  }
      +}
    • removedInput schema / properties / draft / $defs
      Removed value: -{
      -  "BundleDraftEventInput": {
      -    "properties": {
      -      "event_type": {
      -        "type": "string"
      -      },
      -      "payload": {
      -        "additionalProperties": true,
      -        "type": "object"
      -      },
      -      "policy_digest": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "receipt_id": {
      -        "type": "string"
      -      },
      -      "service": {
      -        "type": "string"
      -      },
      -      "ts_ms": {
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "receipt_id",
      -      "ts_ms",
      -      "service",
      -      "event_type"
      -    ],
      -    "type": "object"
      -  },
      -  "PaymentProofEnvelopeInput": {
      -    "properties": {
      -      "amount": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "challenge_or_session_hash": {
      -        "type": "string"
      -      },
      -      "currency": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "expires_at": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "non_secret_refs": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "payment_proof_or_charge_hash": {
      -        "type": "string"
      -      },
      -      "protocol": {
      -        "type": "string"
      -      },
      -      "provider": {
      -        "type": "string"
      -      },
      -      "replay_key": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "request_hash": {
      -        "type": "string"
      -      },
      -      "response_hash": {
      -        "type": "string"
      -      },
      -      "settlement_or_entitlement_hash": {
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "provider",
      -      "protocol",
      -      "request_hash",
      -      "challenge_or_session_hash",
      -      "payment_proof_or_charge_hash",
      -      "settlement_or_entitlement_hash",
      -      "response_hash"
      -    ],
      -    "type": "object"
      -  }
      -}
    • addedInput schema / properties / draft / additionalProperties
      Added value: +false
    • addedInput schema / properties / draft / properties / created_at_ms
      Added value: +{
      +  "maximum": 9007199254740991,
      +  "minimum": 0,
      +  "type": "integer"
      +}
    • removedInput schema / properties / draft / properties / created_ts_ms
      Removed value: -{
      -  "type": "integer"
      -}
    • addedInput schema / properties / draft / properties / events / maxItems
      Added value: +10000
    • removedInput schema / properties / draft / properties / payment_context
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "$ref": "#/$defs/PaymentProofEnvelopeInput"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • addedInput schema / properties / draft / properties / schema_version
      Added value: +{
      +  "const": "v2",
      +  "type": "string"
      +}
    • removedInput schema / properties / draft / properties / service
      Removed value: -{
      -  "type": "string"
      -}
    • addedInput schema / properties / draft / properties / service_id
      Added value: +{
      +  "maxLength": 128,
      +  "minLength": 1,
      +  "pattern": "^[a-z0-9](?:[a-z0-9._:-]*[a-z0-9])?$",
      +  "type": "string"
      +}
    • addedInput schema / properties / draft / properties / tenant_id
      Added value: +{
      +  "maxLength": 128,
      +  "minLength": 1,
      +  "pattern": "^[a-z0-9](?:[a-z0-9._:-]*[a-z0-9])?$",
      +  "type": "string"
      +}
    • changedInput schema / properties / draft / required
      Previous value: -[
      -  "service",
      -  "created_ts_ms",
      -  "events"
      -]New value: +[
      +  "tenant_id",
      +  "service_id",
      +  "created_at_ms",
      +  "events"
      +]
  2. Changed7 schema fields changed
    • removedInput schema / $defs
      Removed value: -{
      -  "BundleDraftEventInput": {
      -    "description": "Public-safe event draft used to build an unsigned ProofRelay bundle.",
      -    "properties": {
      -      "event_type": {
      -        "description": "Public-safe event category.",
      -        "title": "Event Type",
      -        "type": "string"
      -      },
      -      "payload": {
      -        "additionalProperties": true,
      -        "description": "Minimized metadata and hashes only; never include secrets.",
      -        "title": "Payload",
      -        "type": "object"
      -      },
      -      "policy_digest": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "description": "Optional policy digest.",
      -        "title": "Policy Digest"
      -      },
      -      "receipt_id": {
      -        "description": "Stable receipt identifier.",
      -        "title": "Receipt Id",
      -        "type": "string"
      -      },
      -      "service": {
      -        "description": "Service or agent represented by the event.",
      -        "title": "Service",
      -        "type": "string"
      -      },
      -      "ts_ms": {
      -        "description": "Event timestamp in Unix milliseconds.",
      -        "title": "Ts Ms",
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "receipt_id",
      -      "ts_ms",
      -      "service",
      -      "event_type"
      -    ],
      -    "title": "BundleDraftEventInput",
      -    "type": "object"
      -  },
      -  "BundleDraftInput": {
      -    "description": "Input for a non-attesting, unsigned ProofRelay bundle draft.",
      -    "properties": {
      -      "created_ts_ms": {
      -        "description": "Bundle creation timestamp in Unix milliseconds.",
      -        "title": "Created Ts Ms",
      -        "type": "integer"
      -      },
      -      "events": {
      -        "description": "Receipt events in any order.",
      -        "items": {
      -          "$ref": "#/$defs/BundleDraftEventInput"
      -        },
      -        "minItems": 1,
      -        "title": "Events",
      -        "type": "array"
      -      },
      -      "payment_context": {
      -        "anyOf": [
      -          {
      -            "$ref": "#/$defs/PaymentProofEnvelopeInput"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "description": "Optional normalized payment context to attach to the first event."
      -      },
      -      "service": {
      -        "description": "Service represented by the bundle.",
      -        "title": "Service",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "service",
      -      "created_ts_ms",
      -      "events"
      -    ],
      -    "title": "BundleDraftInput",
      -    "type": "object"
      -  },
      -  "PaymentProofEnvelopeInput": {
      -    "description": "Rail-agnostic payment proof hashes for a ProofRelay evidence profile.",
      -    "properties": {
      -      "amount": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "description": "Public-safe amount label, if known.",
      -        "title": "Amount"
      -      },
      -      "challenge_or_session_hash": {
      -        "description": "SHA-256 hash of the challenge, checkout session, or quote.",
      -        "title": "Challenge Or Session Hash",
      -        "type": "string"
      -      },
      -      "currency": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "description": "Currency or unit, if known.",
      -        "title": "Currency"
      -      },
      -      "expires_at": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "description": "Optional ISO-8601 expiry time.",
      -        "title": "Expires At"
      -      },
      -      "non_secret_refs": {
      -        "description": "Non-secret references such as hashed event IDs or endpoint names.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "title": "Non Secret Refs",
      -        "type": "array"
      -      },
      -      "payment_proof_or_charge_hash": {
      -        "description": "SHA-256 hash of the payment proof, charge, or facilitator result.",
      -        "title": "Payment Proof Or Charge Hash",
      -        "type": "string"
      -      },
      -      "protocol": {
      -        "description": "Public-safe protocol name for the paid action lifecycle.",
      -        "examples": [
      -          "stripe_checkout_session_webhook"
      -        ],
      -        "title": "Protocol",
      -        "type": "string"
      -      },
      -      "provider": {
      -        "description": "Payment rail or entitlement provider, for example stripe or x402.",
      -        "examples": [
      -          "stripe_agentic_commerce"
      -        ],
      -        "title": "Provider",
      -        "type": "string"
      -      },
      -      "replay_key": {
      -        "anyOf": [
      -          {
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "default": null,
      -        "description": "Public-safe replay key or hash.",
      -        "title": "Replay Key"
      -      },
      -      "request_hash": {
      -        "description": "SHA-256 hash of the request.",
      -        "title": "Request Hash",
      -        "type": "string"
      -      },
      -      "response_hash": {
      -        "description": "SHA-256 hash of the delivered resource or service response.",
      -        "title": "Response Hash",
      -        "type": "string"
      -      },
      -      "settlement_or_entitlement_hash": {
      -        "description": "SHA-256 hash of the settlement, receipt, or entitlement token.",
      -        "title": "Settlement Or Entitlement Hash",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "provider",
      -      "protocol",
      -      "request_hash",
      -      "challenge_or_session_hash",
      -      "payment_proof_or_charge_hash",
      -      "settlement_or_entitlement_hash",
      -      "response_hash"
      -    ],
      -    "title": "PaymentProofEnvelopeInput",
      -    "type": "object"
      -  }
      -}
    • addedInput schema / properties / draft / $defs
      Added value: +{
      +  "BundleDraftEventInput": {
      +    "properties": {
      +      "event_type": {
      +        "type": "string"
      +      },
      +      "payload": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "policy_digest": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "receipt_id": {
      +        "type": "string"
      +      },
      +      "service": {
      +        "type": "string"
      +      },
      +      "ts_ms": {
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "receipt_id",
      +      "ts_ms",
      +      "service",
      +      "event_type"
      +    ],
      +    "type": "object"
      +  },
      +  "PaymentProofEnvelopeInput": {
      +    "properties": {
      +      "amount": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "challenge_or_session_hash": {
      +        "type": "string"
      +      },
      +      "currency": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "expires_at": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "non_secret_refs": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "payment_proof_or_charge_hash": {
      +        "type": "string"
      +      },
      +      "protocol": {
      +        "type": "string"
      +      },
      +      "provider": {
      +        "type": "string"
      +      },
      +      "replay_key": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "request_hash": {
      +        "type": "string"
      +      },
      +      "response_hash": {
      +        "type": "string"
      +      },
      +      "settlement_or_entitlement_hash": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "provider",
      +      "protocol",
      +      "request_hash",
      +      "challenge_or_session_hash",
      +      "payment_proof_or_charge_hash",
      +      "settlement_or_entitlement_hash",
      +      "response_hash"
      +    ],
      +    "type": "object"
      +  }
      +}
    • removedInput schema / properties / draft / $ref
      Removed value: -"#/$defs/BundleDraftInput"
    • addedInput schema / properties / draft / properties
      Added value: +{
      +  "created_ts_ms": {
      +    "type": "integer"
      +  },
      +  "events": {
      +    "items": {
      +      "$ref": "#/$defs/BundleDraftEventInput"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  },
      +  "payment_context": {
      +    "anyOf": [
      +      {
      +        "$ref": "#/$defs/PaymentProofEnvelopeInput"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ]
      +  },
      +  "service": {
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / draft / required
      Added value: +[
      +  "service",
      +  "created_ts_ms",
      +  "events"
      +]
    • addedInput schema / properties / draft / type
      Added value: +"object"
    • removedInput schema / title
      Removed value: -"build_bundle_draftArguments"
  3. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, idempotent, non-destructive, closed-world), and the description adds real context beyond them: output is unsigned, hash-only evidence only, V1 inputs rejected, no server-side signing or certification. It does not explain what happens with an already-existing identical draft or size limits on the event array.

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?

Four tight sentences, front-loaded with the core action and then constraints. Dense and compressed rather than padded, with no filler, though the final hash-adapter sentence reads as a tacked-on footnote.

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?

With an output schema present and annotations covering the safety profile, the description carries the operational burden well: unsigned draft semantics, local signing requirement, V1 exclusion, hash formats. Minor gaps remain around idempotency behavior and event-count limits, but nothing that would cause a mis-call.

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 0% for a deeply nested single 'draft' parameter, so the description must carry the load. It does clarify key semantics (explicit tenant/service IDs, hash-only evidence values, bare or sha256:-prefixed SHA-256 adapters), but leaves event_id, occurred_at_ms, policy_digest and the schema_version const unexplained.

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?

States a specific verb and resource: 'Build an unsigned V2 draft' from tenant/service IDs and hash-only event evidence. The phrase 'not raw payloads' and 'unsigned' cleanly separates it from verify_bundle and the signing/verification siblings. It stops short of naming an alternative tool 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?

'No V1 draft inputs, server signing or certification' plus 'producer must sign events locally and recompute bundle_hash before verification' gives clear preconditions and the downstream step that follows. It defines when-not-to-use for V1/signing cases, though it never names a sibling as the fallback.

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