Skip to main content
Glama

Register what a service should deliver

witness_register_terms

Use this when about to depend on a public HTTPS service and you want neutral evidence of what it delivers. Pass service_url; checks default to HTTP 200 and a non-empty body (also JSON keys, latency, size, regex). Returns a terms_id; then call witness_delivery. Free, no account; records a GAIP receipt only. Inputs must be public and non-personal.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
checksNo1-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"}.
seller_refNoOptional: name of the supplier. Defaults to the host of service_url.
service_urlYesPublic https URL of the service.
research_consentNoOptional, default false. true lets this record be counted, never named, in GAIP's monthly aggregate research figures (for example for insurers).
data_classificationNoPUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.PUBLIC

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / research_consent
      Added value: +{
      +  "default": false,
      +  "description": "Optional, default false. true lets this record be counted, never named, in GAIP's monthly aggregate research figures (for example for insurers).",
      +  "type": "boolean"
      +}
  2. Changed1 schema 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\"}."
  3. Changed1 schema 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\"}."
  4. Changed5 schema 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 / data_classification / description
      Added value: +"PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data."
    • addedInput schema / properties / seller_ref / description
      Added value: +"Optional: name of the supplier. Defaults to the host of service_url."
    • addedInput schema / properties / service_url / description
      Added value: +"Public https URL of the service."
    • changedInput schema / required
      Previous value: -[
      -  "seller_ref",
      -  "service_url",
      -  "checks"
      -]New value: +[
      +  "service_url"
      +]
  5. Changed4 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "checks": [
      +      {
      +        "allowed": [
      +          200
      +        ],
      +        "id": "http_status_in"
      +      },
      +      {
      +        "id": "json_parses"
      +      }
      +    ],
      +    "seller_ref": "example-weather-agent",
      +    "service_url": "https://weather.example.com/forecast.json"
      +  }
      +]
    • 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",
      -  "seller_ref",
      -  "service_url",
      -  "checks"
      -]New value: +[
      +  "seller_ref",
      +  "service_url",
      +  "checks"
      +]
  6. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations mark this as a non-read, non-idempotent write with no destruction; the description corroborates and enriches this by disclosing it records only a GAIP receipt, is free, requires public/non-personal inputs, and returns a terms_id (implying a fresh record per call). It doesn't spell out consequences of repeating the call, so it's strong but not exhaustive.

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?

Five short, front-loaded sentences: trigger, required input, defaults, return value/next step, then constraints. Nothing is wasted and the call-relevant facts come first.

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?

With no output schema, the description usefully supplies the return value (terms_id), the workflow it belongs to, and input constraints. For a 5-param, 1-required tool this is sufficient for correct invocation.

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 coverage is 100% so the baseline is 3, but the description adds genuine value by explaining the default check behavior (HTTP 200 + non-empty body) and enumerating check categories (JSON keys, latency, size, regex) beyond the schema's field list.

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+resource ('register what a service should deliver') and frames it as creating neutral evidence of a public service's contract. It also names the downstream sibling (witness_delivery), so an agent can distinguish this registration step from the delivery-verification step without opening a schema.

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 trigger ('when about to depend on a public HTTPS service') and the follow-up action ('then call witness_delivery'), plus prerequisites (public, non-personal inputs; free, no account). It lacks an explicit when-not or named alternative, so it falls just short of 5.

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.