Skip to main content
Glama

Purchase proof and trace

verify_purchase
Read-onlyIdempotent

Show a purchase proof and trace it: purchase → catch → storage temperature. Use this when the customer asks to see what they bought, where it was caught or how it was stored. Pass the customerKey from this conversation, or a purchase ID (PB-…). Read-only; returns only stamped (on-chain) proofs, with the arguments for verify_catch and verify_temp.

Input Schema

NameRequiredDescriptionDefault
purchaseIdNoPurchase ID (PB-YYYYMMDD-xxxxxxxx). Takes precedence over customerKey.
customerKeyNoYour customerKey (gyotak_cus_...). Omit when connected through a personal token URL.

Output Schema

NameRequiredDescriptionDefault
errorNoSame text as content when the input or the lookup failed
messageNoSame text as content when there is nothing to show
pending_stampNoProofs of this customer still waiting to be stamped
older_not_shownNoOlder proofs not shown
purchase_proofsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "error": {
      +      "description": "Same text as content when the input or the lookup failed",
      +      "type": "string"
      +    },
      +    "message": {
      +      "description": "Same text as content when there is nothing to show",
      +      "type": "string"
      +    },
      +    "older_not_shown": {
      +      "description": "Older proofs not shown",
      +      "type": "integer"
      +    },
      +    "pending_stamp": {
      +      "description": "Proofs of this customer still waiting to be stamped",
      +      "type": "integer"
      +    },
      +    "purchase_proofs": {
      +      "items": {
      +        "description": "Purchase proof traced to catch and storage",
      +        "properties": {
      +          "contract_address": {
      +            "type": "string"
      +          },
      +          "corrected": {
      +            "type": "boolean"
      +          },
      +          "items": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "lots": {
      +            "items": {
      +              "properties": {
      +                "area": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "catch_batches": {
      +                  "items": {
      +                    "properties": {
      +                      "batch_id": {
      +                        "type": "string"
      +                      },
      +                      "verify_catch": {
      +                        "properties": {
      +                          "batchId": {
      +                            "type": "string"
      +                          },
      +                          "contractAddress": {
      +                            "type": "string"
      +                          },
      +                          "network": {
      +                            "type": "string"
      +                          }
      +                        },
      +                        "type": [
      +                          "object",
      +                          "null"
      +                        ]
      +                      },
      +                      "verify_url": {
      +                        "type": "string"
      +                      }
      +                    },
      +                    "required": [
      +                      "batch_id",
      +                      "verify_url"
      +                    ],
      +                    "type": "object"
      +                  },
      +                  "type": "array"
      +                },
      +                "catch_date": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "catch_report_id": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "fish": {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "fish_of_the_day": {
      +                  "items": {
      +                    "type": "string"
      +                  },
      +                  "type": "array"
      +                },
      +                "missing_reason": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "storage_average_c": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "network": {
      +            "type": "string"
      +          },
      +          "notes": {
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "order_date": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "purchase_id": {
      +            "type": "string"
      +          },
      +          "storage": {
      +            "properties": {
      +              "average_c": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "missing_reason": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "note": {
      +                "type": "string"
      +              },
      +              "stays": {
      +                "items": {
      +                  "properties": {
      +                    "freezer_id": {
      +                      "type": "integer"
      +                    },
      +                    "from": {
      +                      "type": "string"
      +                    },
      +                    "to": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              },
      +              "verify_temp": {
      +                "items": {
      +                  "properties": {
      +                    "freezerId": {
      +                      "type": "integer"
      +                    },
      +                    "hourStartUtc": {
      +                      "type": "string"
      +                    },
      +                    "network": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                "type": "array"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "test_customer_order": {
      +            "type": "boolean"
      +          },
      +          "verify_url": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "purchase_id",
      +          "network",
      +          "verify_url",
      +          "items",
      +          "lots",
      +          "storage"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
  2. Added

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent and non-destructive behavior, so the description's real contribution is that only stamped (on-chain) proofs are returned — an important data-completeness caveat an agent would otherwise not know. It also discloses the chaining output (arguments for verify_catch/verify_temp), which the output schema alone may not make obvious in intent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, with the trace chain and the when-to-use condition front-loaded ahead of the parameter hint. Every clause carries operational 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?

Coverage is strong: an output schema exists so return values need no explanation, parameters are addressed, and the chaining contract is stated. The one unaddressed case is what happens when a customerKey maps to multiple purchases (which proof is shown) and what occurs when no stamped proof exists — both relevant for a zero-required-parameter tool.

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 coverage is 100% and both parameters are fully documented, so the baseline is 3. The description restates the mutual alternative (customerKey from this conversation, or a PB-… purchase ID) but does not add the precedence rule or format detail that the schema already supplies.

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?

States a specific verb and resource ('Show a purchase proof and trace it') and spells out the trace chain (purchase → catch → storage temperature). It is clearly separable from siblings like verify_catch, verify_temp and claim_purchase_proof because it describes itself as returning the arguments for those deeper tools rather than doing the same job.

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?

Gives concrete trigger conditions tied to customer questions ('what they bought, where it was caught or how it was stored'), which is more than most definitions offer. It also implies the escalation path by naming verify_catch and verify_temp, though it never explicitly says when to prefer them over this tool.

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