GAIP Buyer Assurance Agent
Server Details
Now part of GAIP Witness: records a buyer's request and checks what was delivered.
- Status
- Healthy
- Uptime
- 99.7% over 22 days
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-06-18
- URL
- Repository
- tjcgraham-rgb/gaip-agents
- GitHub Stars
- 0
- Server Listing
- gaip-broker
TDQS
Scored across 3 tools
The three tools form a logical sequence, but assurance_complete and assurance_verify can both accept a terms_id and return validation-related output, creating some risk of confusion for an agent. The descriptions clarify that complete returns PASS/FAIL check results while verify returns only an integrity proof, but the overlap is still present.
All tool names follow the same pattern: the prefix 'assurance_' followed by a single verb in snake_case. There is no mixing of conventions.
Three tools exactly match the minimal end-to-end buyer assurance workflow: initiate/preflight, execute check, and verify receipt. Each tool earns its place without redundancy or excessive surface.
The tool set covers the full lifecycle from prepare to complete to verify. However, there is no way to list or recover terms_id/receipt_id if lost, and no cancellation path, which are minor gaps an agent can work around by retaining IDs.
Available Tools
3 toolsassurance_completeComplete a buyer-side delivery checkAInspect
Use this when finishing a Buyer Assurance check. Pass the terms_id from assurance_prepare and mode PUBLIC_REPLAY (GAIP replays the service) or BUYER_SUBMITTED. Returns PASS / FAIL / UNKNOWN per check and a delivery receipt. Free, no account; records a GAIP receipt only. Inputs must be public and non-personal.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | BUYER_SUBMITTED: the response body you received (max 32 KiB). | |
| mode | Yes | PUBLIC_REPLAY: GAIP fetches the public URL itself. BUYER_SUBMITTED: check a response you pass in. | |
| terms_id | Yes | The terms_id returned when the terms were registered. | |
| body_sha256 | No | BUYER_SUBMITTED: SHA-256 of the body, instead of the body. | |
| http_status | No | BUYER_SUBMITTED: the HTTP status you received. | |
| content_type | No | BUYER_SUBMITTED: the Content-Type you received. | |
| data_classification | No | PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data. | PUBLIC |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=false and destructiveHint=false already declaring a non-destructive mutation, the description adds real value: recording a GAIP receipt, the fact that it is free with no account, and the hard constraint that inputs must be public and non-personal. It does not address idempotency or replay-determinism, which the annotations leave as non-idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the trigger condition and followed by prereqs, mode choice, return values, and constraints. Every sentence carries information, though the return/constraint sentences could be marginally tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description covers the return shape (per-check PASS/FAIL/UNKNOWN plus a delivery receipt) and the auth/cost/data-handling profile. For a 7-parameter tool with two enums, the main remaining gap is guidance on which BUYER_SUBMITTED parameters to supply together.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3; the description still adds cross-tool provenance for terms_id (it must come from assurance_prepare) and clarifies the PUBLIC_REPLAY vs BUYER_SUBMITTED choice beyond the enum labels. It stops short of explaining the BUYER_SUBMITTED field bundle (body, http_status, content_type, body_sha256).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action (finishing/completing a Buyer Assurance check) and names the specific output (PASS/FAIL/UNKNOWN per check plus a delivery receipt). It implicitly positions itself against assurance_prepare by consuming the terms_id that prepare produces, though it never names assurance_verify or other siblings directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this when finishing a Buyer Assurance check" gives clear context, and the prerequisite (terms_id from assurance_prepare) plus the two mode choices are explained inline. It lacks explicit when-not-to-use guidance against siblings like assurance_verify, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assurance_preparePrepare a buyer-side delivery checkAInspect
Use this when you, the buyer, chose a public service and want its delivery checked end to end. Pass service_url, checks and explicit_read_only_consent=true. GAIP preflights it and records your checks; returns a terms_id for assurance_complete. Free, no account; records a GAIP receipt only. Inputs must be public and non-personal.
| Name | Required | Description | Default |
|---|---|---|---|
| checks | Yes | 1-8 checks, each {"id": "http_status_in", "allowed": [200]}, {"id": "content_type_is", "value": "application/json"}, {"id": "non_empty"}, {"id": "json_parses"}, {"id": "json_required_keys", "keys": ["a.b"]}, {"id": "json_path_equals", "path": "a.b", "value": 1}, {"id": "max_latency_ms", "limit": 2000}, {"id": "max_bytes", "limit": 20000}, {"id": "text_contains", "value": "ok"} or {"id": "regex", "pattern": "ok|up"}. | |
| episode_id | No | Optional: your own id to group related calls. | |
| task_class | No | Optional: short name of the task, e.g. weather_forecast. | |
| service_url | Yes | Public https URL of the service. | |
| counterparty_id | No | Name or URL of the agent or service. | |
| data_classification | No | PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data. | PUBLIC |
| explicit_read_only_consent | Yes | Must be true: you consent to a public, read-only check. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: cost ('free, no account'), side effects ('records a GAIP receipt only', 'records your checks'), data constraints ('inputs must be public and non-personal'), and the consent requirement. The 'read-only check' phrasing sits against readOnlyHint=false, but it is consistent because the read-only scope refers to the check against the service while the tool itself records a receipt.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: usage trigger first, then the required call shape, then cost/privacy caveats. No wasted clauses, though the consent parameter is repeated from the schema, which is slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no output schema, the description covers purpose, prerequisites, consent, side effects, and the handoff to assurance_complete. Return semantics are only sketched (terms_id), but no output schema exists so this is the appropriate place for that and it is partially covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the required parameters, the checks vocabulary, and the consent const are already fully documented in structured fields. The description only restates the three required inputs and the public/non-personal constraint, adding no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (preflight/check a public service's delivery end to end) from the buyer's perspective, and names the output that routes to the sibling tool ('returns a terms_id for assurance_complete'). It is clear what the tool does, though it does not explicitly contrast itself with assurance_verify.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear triggering condition ('when you, the buyer, chose a public service and want its delivery checked end to end') and implies the follow-up step via terms_id. It never states when NOT to use it, e.g. when the service is private or personal-data-bearing beyond the closing constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assurance_verifyVerify a Buyer Assurance receiptARead-onlyIdempotentInspect
Use this when you hold a Buyer Assurance terms or delivery receipt_id and want to confirm it. Returns the retained record and its integrity proof (integrity only). Free, read-only, no account; inputs must be public and non-personal.
| Name | Required | Description | Default |
|---|---|---|---|
| receipt_id | Yes | A receipt_id returned by an earlier GAIP call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), so the bar is lower. The description adds real value beyond them: what is returned ('the retained record and its integrity proof'), the explicit scope limit '(integrity only)', and the constraints 'free, read-only, no account' plus the public/non-personal input requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the usage condition and return value are front-loaded. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although no output schema exists, the description characterizes the return (retained record plus integrity proof) and the integrity-only scope, and it discloses the privacy/account constraints. For a single-parameter read tool this is nearly complete; the only gap is no explicit tie-break against the similar verify_gaip_receipt sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, schema coverage is 100%, and the schema already states it is 'a receipt_id returned by an earlier GAIP call'. The description echoes the same origin but adds no format, provenance, or validity details beyond what the schema provides, so this is the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (confirm) and resource (Buyer Assurance terms or delivery receipt) and names the exact input it operates on. It is clear what the tool does, though it does not distinguish itself from the sibling verify_gaip_receipt, which appears to overlap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear triggering condition: 'Use this when you hold a Buyer Assurance terms or delivery receipt_id and want to confirm it.' It also states the preconditions (receipt_id from an earlier call, inputs public and non-personal) but names no alternative or when-not-to-use case, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
assurance_prepare1 field changed- changed
Input schema / properties / checks / descriptionPrevious value: -"1-8 checks, each {\"id\": \"http_status_in\", \"allowed\": [200]}, {\"id\": \"content_type_is\", \"value\": \"application/json\"}, {\"id\": \"non_empty\"} or {\"id\": \"json_parses\"}."New value: +"1-8 checks, each {\"id\": \"http_status_in\", \"allowed\": [200]}, {\"id\": \"content_type_is\", \"value\": \"application/json\"}, {\"id\": \"non_empty\"}, {\"id\": \"json_parses\"}, {\"id\": \"json_required_keys\", \"keys\": [\"a.b\"]}, {\"id\": \"json_path_equals\", \"path\": \"a.b\", \"value\": 1}, {\"id\": \"max_latency_ms\", \"limit\": 2000}, {\"id\": \"max_bytes\", \"limit\": 20000}, {\"id\": \"text_contains\", \"value\": \"ok\"} or {\"id\": \"regex\", \"pattern\": \"ok|up\"}."
1 tool update
- Changed
assurance_prepare1 field changed- changed
Input schema / properties / checks / descriptionPrevious value: -"Checks: http_status_in {allowed}, content_type_is {value}, non_empty, json_parses."New value: +"1-8 checks, each {\"id\": \"http_status_in\", \"allowed\": [200]}, {\"id\": \"content_type_is\", \"value\": \"application/json\"}, {\"id\": \"non_empty\"} or {\"id\": \"json_parses\"}."
3 tool updates
- Changed
assurance_complete7 fields changed- added
Input schema / properties / body / descriptionAdded value: +"BUYER_SUBMITTED: the response body you received (max 32 KiB)." - added
Input schema / properties / body_sha256 / descriptionAdded value: +"BUYER_SUBMITTED: SHA-256 of the body, instead of the body." - added
Input schema / properties / content_type / descriptionAdded value: +"BUYER_SUBMITTED: the Content-Type you received." - added
Input schema / properties / data_classification / descriptionAdded value: +"PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data." - added
Input schema / properties / http_status / descriptionAdded value: +"BUYER_SUBMITTED: the HTTP status you received." - added
Input schema / properties / mode / descriptionAdded value: +"PUBLIC_REPLAY: GAIP fetches the public URL itself. BUYER_SUBMITTED: check a response you pass in." - added
Input schema / properties / terms_id / descriptionAdded value: +"The terms_id returned when the terms were registered."
- Changed
assurance_prepare7 fields changed- added
Input schema / properties / checks / descriptionAdded value: +"Checks: http_status_in {allowed}, content_type_is {value}, non_empty, json_parses." - added
Input schema / properties / counterparty_id / descriptionAdded value: +"Name or URL of the agent or service." - added
Input schema / properties / data_classification / descriptionAdded value: +"PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data." - added
Input schema / properties / episode_id / descriptionAdded value: +"Optional: your own id to group related calls." - added
Input schema / properties / explicit_read_only_consent / descriptionAdded value: +"Must be true: you consent to a public, read-only check." - added
Input schema / properties / service_url / descriptionAdded value: +"Public https URL of the service." - added
Input schema / properties / task_class / descriptionAdded value: +"Optional: short name of the task, e.g. weather_forecast."
- Changed
assurance_verify1 field changed- added
Input schema / properties / receipt_id / descriptionAdded value: +"A receipt_id returned by an earlier GAIP call."
3 tool updates
- Changed
assurance_complete4 fields changed- added
Input schema / examplesAdded value: +[ + { + "mode": "PUBLIC_REPLAY", + "terms_id": "<terms_id from assurance_prepare>" + } +] - added
Input schema / properties / data_classification / defaultAdded value: +"PUBLIC" - added
Input schema / properties / data_classification / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "data_classification", - "terms_id", - "mode" -]New value: +[ + "terms_id", + "mode" +]
- Changed
assurance_prepare4 fields changed- added
Input schema / examplesAdded value: +[ + { + "checks": [ + { + "allowed": [ + 200 + ], + "id": "http_status_in" + }, + { + "id": "json_parses" + } + ], + "counterparty_id": "example-weather-agent", + "explicit_read_only_consent": true, + "service_url": "https://weather.example.com/forecast.json", + "task_class": "weather_forecast" + } +] - added
Input schema / properties / data_classification / defaultAdded value: +"PUBLIC" - added
Input schema / properties / data_classification / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "data_classification", - "counterparty_id", - "service_url", - "task_class", - "checks", - "explicit_read_only_consent" -]New value: +[ + "service_url", + "checks", + "explicit_read_only_consent" +]
- Changed
assurance_verify1 field changed- added
Input schema / examplesAdded value: +[ + { + "receipt_id": "<receipt_id from assurance_prepare or assurance_complete>" + } +]
3 tool updates
- First observed
assurance_complete - First observed
assurance_prepare - First observed
assurance_verify
Related MCP Connectors
Now part of GAIP Witness: verifies GAIP receipts; evidence packs and incident bundles.
Now part of GAIP Witness: tests supplier claims and compares them with published metadata.
GAIP keeps an independent, dated record of what AI agents, MCP servers and online shops publish.
Witness: agreed terms, delivery checks, signed receipts, dispute bundles and evidence packs.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables auditing x402 payment logs against delivery logs to issue signed proof-of-delivery receipts and verify payer spend health.-
- AlicenseNot gradedqualityCmaintenanceEnables AI buyer agents to propose schema-validated research-brief orders against budget policy, and to read their own holds and hash-chained proofs. Access is enforced per token, so agents can initiate purchases but cannot approve, deliver, or settle them.MIT
- AlicenseNot gradedqualityDmaintenanceImplements the iwant.fyi demand-side protocol, enabling AI agents to express structured purchase intent, receive matched supply from multiple sources, and report outcomes.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to autonomously discover services, negotiate binding quotes, make idempotent purchases, and receive cryptographically verifiable deliverables.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.