Server definition
- Hash
- sha256:d327c55963794ab18c07088417398e6eb4c5e13c5cc91c3a9e4887c1e735e0e5
- What it is
- What a remote MCP server returned when asked what it offers: 20 tools
The blob, as servednamed by its sha256
{
"instructions": "GAIP Witness Agent: Registers caller-declared delivery checks, observes supplied public results and returns a verifiable retained receipt. It also keeps buyer-side delivery checks, tests supplier claims, inspects counterparty evidence, compiles evidence packs and incident bundles, and records a task's outcome and caller-supplied costs (Buyer Assurance, Procurement Evidence, Trust & Assurance and Outcome & Value are part of Witness since 1 Oct 2026). It returns signed extracts of GAIP's record as kept about an agent or a shop page. Tools here: witness_register_terms, witness_delivery, gaip_receipt_export, verify_gaip_receipt, witness_dispute_bundle, gaip_watch_register, gaip_watch_list, gaip_watch_remove, gaip_watch_events, gaip_citation_witness, gaip_check_sar_receipt, gaip_record_extract, assurance_prepare, assurance_complete, assurance_verify, gaip_verify_supplier_claims, inspect_counterparty_evidence, gaip_evidence_pack, gaip_incident_bundle, gaip_measure_outcome_value; start with witness_register_terms (tools/list carries a ready-to-run example for each). Public/non-personal, zero-price, read-only; data_classification defaults to PUBLIC; results are durably receipted. For all GAIP tools and a no-input gaip_quickstart, use https://www.gaipagents.com/mcp.",
"tools": [
{
"description": "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.",
"inputSchema": {
"examples": [
{
"mode": "PUBLIC_REPLAY",
"terms_id": "<terms_id from assurance_prepare>"
}
],
"properties": {
"body": {
"description": "BUYER_SUBMITTED: the response body you received (max 32 KiB).",
"type": "string"
},
"body_sha256": {
"description": "BUYER_SUBMITTED: SHA-256 of the body, instead of the body.",
"type": "string"
},
"content_type": {
"description": "BUYER_SUBMITTED: the Content-Type you received.",
"type": "string"
},
"data_classification": {
"default": "PUBLIC",
"description": "PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.",
"enum": [
"PUBLIC",
"NON_PERSONAL_PUBLIC"
],
"type": "string"
},
"http_status": {
"description": "BUYER_SUBMITTED: the HTTP status you received.",
"type": "integer"
},
"mode": {
"description": "PUBLIC_REPLAY: GAIP fetches the public URL itself. BUYER_SUBMITTED: check a response you pass in.",
"enum": [
"BUYER_SUBMITTED",
"PUBLIC_REPLAY"
]
},
"terms_id": {
"description": "The terms_id returned when the terms were registered.",
"type": "string"
}
},
"required": [
"terms_id",
"mode"
],
"type": "object"
},
"name": "assurance_complete",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"examples": [
{
"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"
}
],
"properties": {
"checks": {
"description": "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\"}.",
"maxItems": 8,
"minItems": 1,
"type": "array"
},
"counterparty_id": {
"description": "Name or URL of the agent or service.",
"type": "string"
},
"data_classification": {
"default": "PUBLIC",
"description": "PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.",
"enum": [
"PUBLIC",
"NON_PERSONAL_PUBLIC"
],
"type": "string"
},
"episode_id": {
"description": "Optional: your own id to group related calls.",
"type": "string"
},
"explicit_read_only_consent": {
"const": true,
"description": "Must be true: you consent to a public, read-only check."
},
"service_url": {
"description": "Public https URL of the service.",
"type": "string"
},
"task_class": {
"description": "Optional: short name of the task, e.g. weather_forecast.",
"type": "string"
}
},
"required": [
"service_url",
"checks",
"explicit_read_only_consent"
],
"type": "object"
},
"name": "assurance_prepare",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"examples": [
{
"receipt_id": "<receipt_id from assurance_prepare or assurance_complete>"
}
],
"properties": {
"receipt_id": {
"description": "A receipt_id returned by an earlier GAIP call.",
"type": "string"
}
},
"required": [
"receipt_id"
],
"type": "object"
},
"name": "assurance_verify",
"outputSchema": null
},
{
"description": "Use this when handed an x402 SAR-shaped receipt (draft proposal shape; may change). Pass `sar_receipt`, optionally the issuer's `public_key`. Returns missing fields, whether receipt_id matches the core and whether the signature checks out against that key. Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"public_key": "Y8BpzlWPH3EPRQziEPRBeLS1lJBF4xEo9WaxTNbzNp0",
"sar_receipt": {
"confidence": 1,
"reason_code": "SPEC_MATCH",
"receipt_id": "sha256:17146cdeb5aba1c269130348cdc7d3d96ae55f6e048b81d3baa59d4e3f3b188b",
"receipt_version": "0.1",
"sig": "ogilW-bjlCbYkwwUAIrg_zm_Wuoc6EiRgeErs0RL7llP7FWyX43-LgozZFyCjCXgsViK-A4_aroOo16Q4uvTCg",
"sig_alg": "Ed25519",
"task_id_hash": "sha256:c8b36982316351a28e040a6520df2092c2c87a4ea611c123d04993074b2b6f1d",
"ts": "2026-10-01T09:00:00Z",
"verdict": "PASS",
"verifier_kid": "ef654fc8b615b51c"
}
}
],
"properties": {
"public_key": {
"description": "Optional: the issuer's Ed25519 public key, raw 32 bytes base64url or a JWK {kty: OKP, crv: Ed25519, x}. Omit to use GAIP's published keys.",
"oneOf": [
{
"maxLength": 512,
"type": "string"
},
{
"type": "object"
}
]
},
"sar_receipt": {
"description": "The SAR receipt object (or a whole gaip_receipt_export x402 result).",
"type": "object"
}
},
"required": [
"sar_receipt"
],
"type": "object"
},
"name": "gaip_check_sar_receipt",
"outputSchema": null
},
{
"description": "Use this when asked to verify citations or quotes (\"do these sources really say this?\"). Pass `citations` (1-20 {url, quote}). GAIP fetches each page once (robots.txt respected); returns QUOTE_FOUND / QUOTE_NOT_FOUND_IN_FETCHED_VERSION / SOURCE_UNREACHABLE..., an excerpt and a receipt. Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": true,
"examples": [
{
"citations": [
{
"claimed_title": "GAIP",
"quote": "GAIP",
"url": "https://www.gaipagents.com/"
}
]
}
],
"properties": {
"citations": {
"description": "1-20 citations, each {url, quote?, claimed_title?, claimed_date?}.",
"items": {
"additionalProperties": false,
"properties": {
"claimed_date": {
"maxLength": 64,
"type": "string"
},
"claimed_title": {
"maxLength": 500,
"type": "string"
},
"quote": {
"maxLength": 2000,
"type": "string"
},
"url": {
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"maxItems": 20,
"minItems": 1,
"type": "array"
},
"data_classification": {
"default": "PUBLIC",
"description": "PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.",
"enum": [
"PUBLIC",
"NON_PERSONAL_PUBLIC"
],
"type": "string"
}
},
"required": [
"citations"
],
"type": "object"
},
"name": "gaip_citation_witness",
"outputSchema": null
},
{
"description": "Use this when an insurer, auditor or buyer asks what evidence exists about an agent or supplier. Pass its `subject` (public id or https URL). Returns conformance, watch, witness, repair and incident records with Merkle proofs, plus gaps. A compilation, not certification or advice. Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"requester": {
"purpose": "INSURER"
},
"scope": {
"max_items": 50,
"since": "2026-09-01"
},
"subject": {
"counterparty_id": "example-weather-agent"
}
}
],
"properties": {
"requester": {
"additionalProperties": false,
"description": "Optional: {purpose, continuity_handle} to include your own receipts.",
"properties": {
"continuity_handle": {
"properties": {
"continuity_id": {
"type": "string"
},
"token": {
"type": "string"
}
},
"required": [
"continuity_id",
"token"
],
"type": "object"
},
"purpose": {
"enum": [
"INSURER",
"AUDITOR",
"OPERATOR",
"BUYER",
"UNSPECIFIED"
],
"type": "string"
}
},
"type": "object"
},
"scope": {
"additionalProperties": false,
"description": "Optional: {receipt_ids, since, until, categories, max_items}.",
"properties": {
"categories": {
"items": {
"enum": [
"conformance",
"watch",
"witness",
"repair",
"incident",
"supplier_checks"
],
"type": "string"
},
"type": "array"
},
"max_items": {
"maximum": 200,
"minimum": 1,
"type": "integer"
},
"receipt_ids": {
"items": {
"type": "string"
},
"maxItems": 50,
"type": "array"
},
"since": {
"type": "string"
},
"until": {
"type": "string"
}
},
"type": "object"
},
"subject": {
"description": "The agent or supplier: its public id or https URL. Never a person.",
"oneOf": [
{
"maxLength": 256,
"type": "string"
},
{
"additionalProperties": false,
"properties": {
"counterparty_id": {
"type": "string"
},
"ref": {
"type": "string"
},
"seller_ref": {
"type": "string"
},
"url": {
"format": "uri",
"type": "string"
}
},
"type": "object"
}
]
}
},
"required": [
"subject"
],
"type": "object"
},
"name": "gaip_evidence_pack",
"outputSchema": null
},
{
"description": "Use this when something went wrong with an agent and you need the facts in order. Pass the `receipt_ids` you hold and attributed `observations`. Returns a verified, source-attributed timeline with an EU AI Act Art. 73 reference aid. No fault, cause or liability finding. Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"ai_system_ref": "example-weather-agent",
"observations": [
{
"observed_at_utc": "2026-09-27T10:00:00Z",
"source": "our uptime monitor",
"source_type": "AUTOMATED_MONITOR",
"statement": "HTTP 503 from the forecast endpoint for 12 minutes"
}
],
"receipt_ids": [
"<receipt_id returned by any GAIP tool>"
],
"title": "Forecast endpoint returned errors"
}
],
"properties": {
"ai_system_ref": {
"description": "Optional: public id or URL of the AI system involved; given alone, GAIP starts the timeline from its own public records of that system.",
"maxLength": 256,
"type": "string"
},
"data_classification": {
"default": "PUBLIC",
"description": "PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.",
"enum": [
"PUBLIC",
"NON_PERSONAL_PUBLIC"
],
"type": "string"
},
"observations": {
"description": "Attributed observations, each {source, statement, observed_at_utc}.",
"items": {
"additionalProperties": false,
"properties": {
"observed_at_utc": {
"type": "string"
},
"receipt_id": {
"type": "string"
},
"source": {
"maxLength": 120,
"type": "string"
},
"source_type": {
"enum": [
"AUTOMATED_MONITOR",
"PUBLIC_RECORD",
"REQUESTER",
"THIRD_PARTY"
],
"type": "string"
},
"statement": {
"maxLength": 2000,
"type": "string"
}
},
"required": [
"source",
"statement"
],
"type": "object"
},
"maxItems": 50,
"type": "array"
},
"receipt_ids": {
"description": "GAIP receipt ids you hold about the incident.",
"items": {
"type": "string"
},
"maxItems": 50,
"type": "array"
},
"title": {
"description": "Optional: short incident title.",
"maxLength": 120,
"type": "string"
}
},
"type": "object"
},
"name": "gaip_incident_bundle",
"outputSchema": null
},
{
"description": "Use this when asked whether an outcome-priced task delivered and what it cost. Pass `episode_id`, `task` (acceptance_criteria), `delivery`, `costs`; `delivery_check` {url, checks} has GAIP test delivery now. Returns a dossier, running totals and a receipt. No ROI claim. Free, no account; records a GAIP receipt only. Inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": true,
"examples": [
{
"baseline_cost_gbp": "12.00",
"costs": {
"agent_gbp": "0.40",
"compute_gbp": "0.12",
"human_review_gbp": "3.50",
"repair_gbp": "0"
},
"counterparty_id": "example-weather-agent",
"delivery": {
"receipt_id": "example-receipt-1",
"status": "ACCEPTED"
},
"downstream_use": {
"evidence_ref": "example-ticket-4411",
"status": "USED"
},
"episode_id": "example-episode-1",
"observed_at_utc": "2026-09-27T21:00:00Z",
"task": {
"acceptance_criteria": "Forecast JSON for London returned within 5 seconds"
},
"task_class": "weather_forecast",
"unit_label": "forecast",
"units": 7
}
],
"properties": {
"baseline_cost_gbp": {
"description": "Optional: what the task cost before, in GBP.",
"oneOf": [
{
"type": "number"
},
{
"type": "string"
}
]
},
"continuity_handle": {
"additionalProperties": false,
"description": "Optional: the continuity_handle from an earlier GAIP result; adds running totals over your own earlier tasks.",
"properties": {
"continuity_id": {
"type": "string"
},
"token": {
"type": "string"
}
},
"required": [
"continuity_id",
"token"
],
"type": "object"
},
"costs": {
"description": "Caller-stated costs in GBP: agent_gbp, compute_gbp, human_review_gbp, repair_gbp.",
"type": "object"
},
"counterparty_id": {
"description": "Name or URL of the agent or service.",
"type": "string"
},
"currency": {
"default": "GBP",
"description": "Optional: ISO 4217 code of the cost amounts (default GBP).",
"type": "string"
},
"data_classification": {
"default": "PUBLIC",
"description": "PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.",
"enum": [
"PUBLIC",
"NON_PERSONAL_PUBLIC"
],
"type": "string"
},
"delivery": {
"description": "What was delivered: {status, receipt_id?}.",
"required": [
"status"
],
"type": "object"
},
"delivery_check": {
"description": "Optional: {url, checks} - GAIP tests the delivery at this public https URL now with Witness checks; its verdict sets delivery.status.",
"properties": {
"checks": {
"items": {
"type": "object"
},
"maxItems": 8,
"minItems": 1,
"type": "array"
},
"url": {
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"downstream_use": {
"description": "Optional: {status: USED|NOT_USED, evidence_ref}.",
"type": "object"
},
"episode_id": {
"description": "Optional: your own id to group related calls.",
"type": "string"
},
"evidence_refs": {
"description": "Optional: references to your own evidence (ids or URLs).",
"items": {
"type": "string"
},
"maxItems": 20,
"type": "array"
},
"fx_to_gbp": {
"description": "Optional: {rate, as_of, source} - your GBP rate; GBP equivalents are then reported, labelled with it. GAIP never uses built-in rates.",
"properties": {
"as_of": {
"type": "string"
},
"rate": {
"type": "number"
},
"source": {
"type": "string"
}
},
"required": [
"rate",
"as_of",
"source"
],
"type": "object"
},
"independent_operator_id": {
"description": "Optional: your operator id (recorded as a claim, not verified).",
"type": "string"
},
"synthetic": {
"description": "Optional: true marks a test call.",
"type": "boolean"
},
"task": {
"description": "The task: {acceptance_criteria}.",
"required": [
"acceptance_criteria"
],
"type": "object"
},
"task_class": {
"description": "Optional: short name of the task, e.g. weather_forecast.",
"type": "string"
}
},
"required": [
"episode_id",
"task",
"delivery",
"costs"
],
"type": "object"
},
"name": "gaip_measure_outcome_value",
"outputSchema": null
},
{
"description": "Use this when you need a GAIP receipt in another format. Pass `receipt_id` and `format`: x402 (attestation style), erc8004 (validation-response shape) or vc (W3C-VC-like JSON-LD). Ed25519-signed when the runtime key is available; hash chain and Merkle proof; no on-chain write. Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"format": "x402",
"receipt_id": "<receipt_id returned by any GAIP tool>"
}
],
"properties": {
"format": {
"description": "x402, erc8004 or vc.",
"enum": [
"x402",
"erc8004",
"vc"
],
"type": "string"
},
"receipt_id": {
"description": "A receipt_id returned by an earlier GAIP call.",
"maxLength": 128,
"minLength": 1,
"type": "string"
}
},
"required": [
"receipt_id",
"format"
],
"type": "object"
},
"name": "gaip_receipt_export",
"outputSchema": null
},
{
"description": "Use this when you need proof of what an agent or shop page declared on a date. Pass its `url` (optional `since`, `until`). Returns an extract of GAIP's record as kept: entries with chain positions, hashes, daily anchors and a signature. Free preview. Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"since": "2026-09-01",
"url": "https://mcp.deepwiki.com/mcp"
}
],
"properties": {
"limit": {
"description": "Optional: most entries to return, newest kept (default 50).",
"maximum": 200,
"minimum": 1,
"type": "integer"
},
"since": {
"description": "Optional: start of the range (YYYY-MM-DD or RFC 3339).",
"maxLength": 40,
"type": "string"
},
"until": {
"description": "Optional: end of the range (YYYY-MM-DD, inclusive, or RFC 3339).",
"maxLength": 40,
"type": "string"
},
"url": {
"description": "The A2A agent card, MCP endpoint or shop product page URL, exactly as recorded.",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "gaip_record_extract",
"outputSchema": null
},
{
"description": "Use this to check what an agent, API or supplier claims. Pass `claims` (each with an `id`; add `check_url` and GAIP tests it now), your `observations` and `metadata`. Returns per claim what GAIP saw, what you reported and whether they agree. Free, no account; records a GAIP receipt only. Inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": true,
"examples": [
{
"claims": [
{
"id": "c1",
"text": "Returns JSON forecasts over MCP"
},
{
"id": "c2",
"text": "Responds within 2 seconds"
}
],
"counterparty_id": "example-weather-agent",
"metadata": {
"protocolVersion": "2025-06-18",
"url": "https://weather.example.com/mcp"
},
"observations": [
{
"claim_id": "c1",
"detail": "tools/call returned valid JSON",
"result": "PASS"
},
{
"claim_id": "c2",
"detail": "p95 latency 4.8 s over 20 calls",
"result": "FAIL"
}
]
}
],
"properties": {
"claims": {
"description": "Claims to check, each {id, text}.",
"items": {
"type": "object"
},
"maxItems": 20,
"minItems": 1,
"type": "array"
},
"continuity_handle": {
"additionalProperties": false,
"description": "Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones.",
"properties": {
"continuity_id": {
"type": "string"
},
"token": {
"type": "string"
}
},
"required": [
"continuity_id",
"token"
],
"type": "object"
},
"counterparty_id": {
"description": "Name or URL of the agent/service. Optional.",
"type": "string"
},
"data_classification": {
"default": "PUBLIC",
"description": "PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.",
"enum": [
"PUBLIC",
"NON_PERSONAL_PUBLIC"
],
"type": "string"
},
"episode_id": {
"description": "Optional: your own id to group related calls.",
"type": "string"
},
"independent_operator_id": {
"description": "Optional: your operator id (recorded as a claim, not verified).",
"type": "string"
},
"metadata": {
"description": "The published agent card, MCP server description or OpenAPI document (as JSON).",
"type": "object"
},
"observations": {
"description": "Optional: what you saw, each {claim_id, result: PASS|FAIL, detail}.",
"items": {
"type": "object"
},
"maxItems": 30,
"type": "array"
},
"protocol": {
"description": "Counterparty protocol. Inferred from metadata when omitted, otherwise MCP.",
"enum": [
"A2A",
"MCP",
"OPENAPI"
],
"type": "string"
},
"synthetic": {
"description": "Optional: true marks a test call.",
"type": "boolean"
},
"task_class": {
"default": "supplier_claim_check",
"description": "Optional: short name of the task, e.g. weather_forecast.",
"type": "string"
}
},
"required": [
"claims",
"metadata"
],
"type": "object"
},
"name": "gaip_verify_supplier_claims",
"outputSchema": null
},
{
"description": "Use this when asked what changed on a watched agent or service. Pass your `continuity_handle` and optionally a `watch_id`. Returns recent change events: verdict before and after, a change summary, the receipt and webhook delivery status. Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"continuity_handle": {
"continuity_id": "<continuity_handle.continuity_id returned by any GAIP tool>",
"token": "<continuity_handle.token returned by any GAIP tool>"
},
"limit": 10,
"watch_id": "<watch_id from gaip_watch_register>"
}
],
"properties": {
"continuity_handle": {
"description": "The continuity_handle from an earlier GAIP result; proves you own these watches.",
"properties": {
"continuity_id": {
"type": "string"
},
"token": {
"type": "string"
}
},
"required": [
"continuity_id",
"token"
],
"type": "object"
},
"limit": {
"description": "Optional: maximum events to return.",
"maximum": 50,
"minimum": 1,
"type": "integer"
},
"watch_id": {
"description": "The watch_id returned by gaip_watch_register.",
"type": "string"
}
},
"required": [
"continuity_handle"
],
"type": "object"
},
"name": "gaip_watch_events",
"outputSchema": null
},
{
"description": "Use this when asked which agents or services you are watching. Pass your `continuity_handle`. Returns each watch's kind, target, last verdict, last and next check and webhook endpoint (never the secret). Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"continuity_handle": {
"continuity_id": "<continuity_handle.continuity_id returned by any GAIP tool>",
"token": "<continuity_handle.token returned by any GAIP tool>"
}
}
],
"properties": {
"continuity_handle": {
"description": "The continuity_handle from an earlier GAIP result; proves you own these watches.",
"properties": {
"continuity_id": {
"type": "string"
},
"token": {
"type": "string"
}
},
"required": [
"continuity_id",
"token"
],
"type": "object"
}
},
"required": [
"continuity_handle"
],
"type": "object"
},
"name": "gaip_watch_list",
"outputSchema": null
},
{
"description": "Use this when asked to keep an eye on an agent or MCP server (\"tell me if it changes or goes down\"). Pass the `continuity_handle` from any GAIP result, `kind` and `target_url`. GAIP re-checks every 24 hours (3 free watches), receipts each change and can call your webhook. Free, no account; records a GAIP receipt only. Inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"continuity_handle": {
"continuity_id": "<continuity_handle.continuity_id returned by any GAIP tool>",
"token": "<continuity_handle.token returned by any GAIP tool>"
},
"interval_hours": 24,
"kind": "DELIVERY_TERMS",
"terms_id": "<terms_id from witness_register_terms>"
}
],
"properties": {
"continuity_handle": {
"description": "The continuity_handle from an earlier GAIP result; proves you own these watches.",
"properties": {
"continuity_id": {
"type": "string"
},
"token": {
"type": "string"
}
},
"required": [
"continuity_id",
"token"
],
"type": "object"
},
"data_classification": {
"default": "PUBLIC",
"description": "PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.",
"enum": [
"PUBLIC",
"NON_PERSONAL_PUBLIC"
],
"type": "string"
},
"interval_hours": {
"default": 24,
"description": "Hours between checks: 24 minimum on the free tier; 1 for DELIVERY_SLA.",
"maximum": 168,
"minimum": 1,
"type": "integer"
},
"kind": {
"description": "AGENT_READINESS (agent URL), SUPPLIER_CARD (published card), DELIVERY_TERMS (terms_id) or DELIVERY_SLA (terms_id plus sla terms).",
"enum": [
"AGENT_READINESS",
"DELIVERY_TERMS",
"SUPPLIER_CARD",
"DELIVERY_SLA"
],
"type": "string"
},
"sla": {
"description": "DELIVERY_SLA only: service-level terms checked on every observation, any of min_uptime_pct, max_latency_ms, required_fields (JSON key paths), freshness_field + max_age_seconds; optional uptime_window_hours, min_observations. Results go only to you.",
"type": "object"
},
"target_url": {
"description": "Public https URL (AGENT_READINESS, SUPPLIER_CARD). No query string.",
"format": "uri",
"maxLength": 2048,
"type": "string"
},
"terms_id": {
"description": "DELIVERY_TERMS or DELIVERY_SLA: terms_id from witness_register_terms.",
"type": "string"
},
"webhook_url": {
"description": "Optional: your own public https endpoint for signed change events.",
"format": "uri",
"maxLength": 2048,
"type": "string"
}
},
"required": [
"continuity_handle",
"kind"
],
"type": "object"
},
"name": "gaip_watch_register",
"outputSchema": null
},
{
"description": "Use this when asked to stop watching an agent or service. Pass your `continuity_handle` and the `watch_id`. Its stored events are deleted; retained receipts stay verifiable. Free, no account; records a GAIP receipt only. Inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": false,
"examples": [
{
"continuity_handle": {
"continuity_id": "<continuity_handle.continuity_id returned by any GAIP tool>",
"token": "<continuity_handle.token returned by any GAIP tool>"
},
"watch_id": "<watch_id from gaip_watch_register>"
}
],
"properties": {
"continuity_handle": {
"description": "The continuity_handle from an earlier GAIP result; proves you own these watches.",
"properties": {
"continuity_id": {
"type": "string"
},
"token": {
"type": "string"
}
},
"required": [
"continuity_id",
"token"
],
"type": "object"
},
"watch_id": {
"description": "The watch_id returned by gaip_watch_register.",
"type": "string"
}
},
"required": [
"continuity_handle",
"watch_id"
],
"type": "object"
},
"name": "gaip_watch_remove",
"outputSchema": null
},
{
"description": "Use this when asked what evidence exists about an agent before delegating to it. Pass its `counterparty_id` and any `observations`. Returns task-specific evidence coverage, conflicts, gaps and GAIP's own earlier checks of it, with a receipt. Never a trust score or recommendation. Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": true,
"examples": [
{
"counterparty_id": "example-weather-agent",
"observations": [
{
"claim": "Publishes a public weather_forecast skill",
"evidence_digest": "3f0a9c1e5b7d2468ace013579bdf2468ace013579bdf2468ace013579bdf2468",
"lifecycle_state": "observed",
"observed_at": "2026-09-27T12:00:00Z",
"source": "https://forecast.example.com/.well-known/agent-card.json"
},
{
"claim": "Returned a London forecast in 1.2 s",
"lifecycle_state": "OBSERVED",
"observed_at": "2026-09-27T12:05:00Z",
"source": "caller_task_log"
}
],
"task_class": "weather_forecast"
}
],
"properties": {
"continuity_handle": {
"additionalProperties": false,
"description": "Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones.",
"properties": {
"continuity_id": {
"type": "string"
},
"token": {
"type": "string"
}
},
"required": [
"continuity_id",
"token"
],
"type": "object"
},
"counterparty_id": {
"description": "Name or URL of the agent or service.",
"type": "string"
},
"data_classification": {
"default": "PUBLIC",
"description": "PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.",
"enum": [
"PUBLIC",
"NON_PERSONAL_PUBLIC"
],
"type": "string"
},
"episode_id": {
"description": "Optional: your own id to group related calls.",
"type": "string"
},
"independent_operator_id": {
"description": "Optional: your operator id (recorded as a claim, not verified).",
"type": "string"
},
"max_age_days": {
"description": "Optional freshness window (default 30): GAIP history records older than this are STALE and do not count toward evidence_sufficiency.",
"maximum": 365,
"minimum": 1,
"type": "integer"
},
"observations": {
"description": "Optional: observations about it, each {source, observed_at, evidence_digest, lifecycle_state, claim}.",
"items": {
"type": "object"
},
"type": "array"
},
"synthetic": {
"description": "Optional: true marks a test call.",
"type": "boolean"
},
"task_class": {
"default": "COUNTERPARTY_EVIDENCE",
"description": "Task you want evidence for. Optional.",
"type": "string"
}
},
"type": "object"
},
"name": "inspect_counterparty_evidence",
"outputSchema": null
},
{
"description": "Use this when you hold a GAIP receipt_id and want to confirm it (\"is this receipt genuine?\"). Returns the retained record, hash chain and Merkle inclusion proof. Integrity only: it does not make the underlying claim true. Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": true,
"examples": [
{
"receipt_id": "<receipt_id returned by any GAIP tool>"
}
],
"properties": {
"continuity_handle": {
"additionalProperties": false,
"description": "Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones.",
"properties": {
"continuity_id": {
"type": "string"
},
"token": {
"type": "string"
}
},
"required": [
"continuity_id",
"token"
],
"type": "object"
},
"data_classification": {
"description": "PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.",
"enum": [
"PUBLIC",
"NON_PERSONAL_PUBLIC"
],
"type": "string"
},
"episode_id": {
"description": "Optional: your own id to group related calls.",
"type": "string"
},
"independent_operator_id": {
"description": "Optional: your operator id (recorded as a claim, not verified).",
"type": "string"
},
"receipt_id": {
"description": "A receipt_id returned by an earlier GAIP call.",
"maxLength": 128,
"minLength": 1,
"type": "string"
},
"synthetic": {
"description": "Optional: true marks a test call.",
"type": "boolean"
}
},
"required": [
"receipt_id"
],
"type": "object"
},
"name": "verify_gaip_receipt",
"outputSchema": null
},
{
"description": "Use this when asked whether a service delivered what was agreed (\"did the supplier deliver?\"). Pass the `terms_id` from witness_register_terms and mode PUBLIC_REPLAY (GAIP fetches it) or BUYER_SUBMITTED. Returns PASS / FAIL / UNKNOWN per check, what changed since last time, and a receipt. Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"additionalProperties": true,
"examples": [
{
"mode": "PUBLIC_REPLAY",
"terms_id": "<terms_id from witness_register_terms>"
}
],
"properties": {
"body": {
"description": "BUYER_SUBMITTED: the response body you received (max 32 KiB).",
"maxLength": 32768,
"type": "string"
},
"body_sha256": {
"description": "BUYER_SUBMITTED: SHA-256 of the body, instead of the body.",
"type": "string"
},
"content_type": {
"description": "BUYER_SUBMITTED: the Content-Type you received.",
"type": "string"
},
"continuity_handle": {
"additionalProperties": false,
"description": "Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones.",
"properties": {
"continuity_id": {
"type": "string"
},
"token": {
"type": "string"
}
},
"required": [
"continuity_id",
"token"
],
"type": "object"
},
"data_classification": {
"default": "PUBLIC",
"description": "PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.",
"enum": [
"PUBLIC",
"NON_PERSONAL_PUBLIC"
],
"type": "string"
},
"episode_id": {
"description": "Optional: your own id to group related calls.",
"type": "string"
},
"http_status": {
"description": "BUYER_SUBMITTED: the HTTP status you received.",
"type": "integer"
},
"independent_operator_id": {
"description": "Optional: your operator id (recorded as a claim, not verified).",
"type": "string"
},
"mode": {
"description": "PUBLIC_REPLAY: GAIP fetches the public URL itself. BUYER_SUBMITTED: check a response you pass in.",
"enum": [
"BUYER_SUBMITTED",
"PUBLIC_REPLAY"
],
"type": "string"
},
"research_consent": {
"default": false,
"description": "Optional, default false. true lets this delivery check be counted, never named, in GAIP's monthly aggregate research figures.",
"type": "boolean"
},
"synthetic": {
"description": "Optional: true marks a test call.",
"type": "boolean"
},
"terms_id": {
"description": "The terms_id returned when the terms were registered.",
"type": "string"
}
},
"required": [
"terms_id",
"mode"
],
"type": "object"
},
"name": "witness_delivery",
"outputSchema": null
},
{
"description": "Use this when a witnessed delivery failed and you must hand the facts to the other party or a resolver. Pass `terms_id` or a delivery `receipt_id`. Returns one hash-stamped bundle: terms, every check, receipts, timeline, summary. No judgement of who is right. Free, read-only, no account; inputs must be public and non-personal.",
"inputSchema": {
"examples": [
{
"receipt_id": "<receipt_id from witness_delivery>"
}
],
"properties": {
"continuity_handle": {
"description": "Optional: the continuity_handle that registered a DELIVERY_SLA watch on these terms; adds your SLA breaches.",
"type": "object"
},
"receipt_format": {
"default": "gaip",
"description": "gaip (default) or x402_sar: also give each delivery in the x402 SAR draft shape.",
"enum": [
"gaip",
"x402_sar"
],
"type": "string"
},
"receipt_id": {
"description": "A delivery receipt_id from witness_delivery.",
"type": "string"
},
"terms_id": {
"description": "Or the terms_id (wt_...) of the agreement.",
"type": "string"
}
},
"type": "object"
},
"name": "witness_dispute_bundle",
"outputSchema": null
},
{
"description": "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.",
"inputSchema": {
"examples": [
{
"checks": [
{
"allowed": [
200
],
"id": "http_status_in"
},
{
"id": "json_parses"
}
],
"seller_ref": "example-weather-agent",
"service_url": "https://weather.example.com/forecast.json"
}
],
"properties": {
"checks": {
"description": "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\"}.",
"maxItems": 8,
"minItems": 1,
"type": "array"
},
"data_classification": {
"default": "PUBLIC",
"description": "PUBLIC (default) or NON_PERSONAL_PUBLIC. Never send personal data.",
"enum": [
"PUBLIC",
"NON_PERSONAL_PUBLIC"
],
"type": "string"
},
"research_consent": {
"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"
},
"seller_ref": {
"description": "Optional: name of the supplier. Defaults to the host of service_url.",
"type": "string"
},
"service_url": {
"description": "Public https URL of the service.",
"type": "string"
}
},
"required": [
"service_url"
],
"type": "object"
},
"name": "witness_register_terms",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:d327c55963794ab18c07088417398e6eb4c5e13c5cc91c3a9e4887c1e735e0e5 | sha256sum