Skip to main content
Glama

Server Details

Now part of GAIP Witness: records a buyer's request and checks what was delivered.

Ownership verified
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

A4.1/5.0

Scored across 3 tools

Disambiguation4/5

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.

Naming Consistency5/5

All tool names follow the same pattern: the prefix 'assurance_' followed by a single verb in snake_case. There is no mixing of conventions.

Tool Count5/5

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.

Completeness4/5

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 tools
assurance_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoBUYER_SUBMITTED: the response body you received (max 32 KiB).
modeYesPUBLIC_REPLAY: GAIP fetches the public URL itself. BUYER_SUBMITTED: check a response you pass in.
terms_idYesThe terms_id returned when the terms were registered.
body_sha256NoBUYER_SUBMITTED: SHA-256 of the body, instead of the body.
http_statusNoBUYER_SUBMITTED: the HTTP status you received.
content_typeNoBUYER_SUBMITTED: the Content-Type you received.
data_classificationNoPUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.PUBLIC

TDQS

A4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
checksYes1-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_idNoOptional: your own id to group related calls.
task_classNoOptional: short name of the task, e.g. weather_forecast.
service_urlYesPublic https URL of the service.
counterparty_idNoName or URL of the agent or service.
data_classificationNoPUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.PUBLIC
explicit_read_only_consentYesMust be true: you consent to a public, read-only check.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 receiptA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
receipt_idYesA receipt_id returned by an earlier GAIP call.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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. 1 tool update
    • Changedassurance_prepare1 field changed
      • changedInput schema / properties / checks / description
        Previous 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\"}."
  2. 1 tool update
    • Changedassurance_prepare1 field changed
      • changedInput schema / properties / checks / description
        Previous 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. 3 tool updates
    • Changedassurance_complete7 fields changed
      • addedInput schema / properties / body / description
        Added value: +"BUYER_SUBMITTED: the response body you received (max 32 KiB)."
      • addedInput schema / properties / body_sha256 / description
        Added value: +"BUYER_SUBMITTED: SHA-256 of the body, instead of the body."
      • addedInput schema / properties / content_type / description
        Added value: +"BUYER_SUBMITTED: the Content-Type you received."
      • addedInput schema / properties / data_classification / description
        Added value: +"PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data."
      • addedInput schema / properties / http_status / description
        Added value: +"BUYER_SUBMITTED: the HTTP status you received."
      • addedInput schema / properties / mode / description
        Added value: +"PUBLIC_REPLAY: GAIP fetches the public URL itself. BUYER_SUBMITTED: check a response you pass in."
      • addedInput schema / properties / terms_id / description
        Added value: +"The terms_id returned when the terms were registered."
    • Changedassurance_prepare7 fields changed
      • addedInput schema / properties / checks / description
        Added value: +"Checks: http_status_in {allowed}, content_type_is {value}, non_empty, json_parses."
      • addedInput schema / properties / counterparty_id / description
        Added value: +"Name or URL of the agent or service."
      • addedInput schema / properties / data_classification / description
        Added value: +"PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data."
      • addedInput schema / properties / episode_id / description
        Added value: +"Optional: your own id to group related calls."
      • addedInput schema / properties / explicit_read_only_consent / description
        Added value: +"Must be true: you consent to a public, read-only check."
      • addedInput schema / properties / service_url / description
        Added value: +"Public https URL of the service."
      • addedInput schema / properties / task_class / description
        Added value: +"Optional: short name of the task, e.g. weather_forecast."
    • Changedassurance_verify1 field changed
      • addedInput schema / properties / receipt_id / description
        Added value: +"A receipt_id returned by an earlier GAIP call."
  4. 3 tool updates
    • Changedassurance_complete4 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "mode": "PUBLIC_REPLAY",
        +    "terms_id": "<terms_id from assurance_prepare>"
        +  }
        +]
      • addedInput schema / properties / data_classification / default
        Added value: +"PUBLIC"
      • addedInput schema / properties / data_classification / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "data_classification",
        -  "terms_id",
        -  "mode"
        -]New value: +[
        +  "terms_id",
        +  "mode"
        +]
    • Changedassurance_prepare4 fields changed
      • addedInput schema / examples
        Added 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"
        +  }
        +]
      • addedInput schema / properties / data_classification / default
        Added value: +"PUBLIC"
      • addedInput schema / properties / data_classification / type
        Added value: +"string"
      • changedInput schema / required
        Previous value: -[
        -  "data_classification",
        -  "counterparty_id",
        -  "service_url",
        -  "task_class",
        -  "checks",
        -  "explicit_read_only_consent"
        -]New value: +[
        +  "service_url",
        +  "checks",
        +  "explicit_read_only_consent"
        +]
    • Changedassurance_verify1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "receipt_id": "<receipt_id from assurance_prepare or assurance_complete>"
        +  }
        +]
  5. 3 tool updates
    • First observedassurance_complete
    • First observedassurance_prepare
    • First observedassurance_verify

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.