{"audit":{"version":"1.5","generated_at":"2026-10-22T21:09:36.161835+00:00","generated_by":"Agenstry","report_url":"https://agenstry.com/agents/join.agentminder.co.uk","methodology_url":"https://agenstry.com/methodology","verifier_jwks_url":"https://agenstry.com/.well-known/jwks.json","subject":{"domain":"join.agentminder.co.uk","name":"GAIP","url":"https://join.agentminder.co.uk/.well-known/agent-card.json"}},"identity":{"provider":{"organization":"GAIP","url":"https://www.gaipagents.com"},"registry_verification":null,"signature":{"signed":false,"signature_valid":null}},"protocol":{"version":"1.0","supports_streaming":false,"supports_push_notifications":false},"operational":{"live_state":"wrong_response","live_responds":false,"last_status_code":200,"last_elapsed_ms":173,"last_error":null},"track_record":{"first_seen":"2026-10-22T19:00:05.173528+00:00","last_checked":"2026-10-22T20:35:01.492641+00:00","last_seen_ok":"2026-10-22T20:35:01.492641+00:00","checks_total":2,"checks_ok":2,"uptime_pct":100.0,"uptime_window_days":30,"uptime_probes":1,"archived":false,"archived_reason":null},"conformance":{"score":47,"grade":"D","summary":"D-grade: significant issues, auth-gated, partially broken, or stale.","criteria":[{"key":"valid_card","label":"Valid AgentCard","points":10,"max_points":10,"status":"pass","detail":"Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification)."},{"key":"live_responds","label":"Live JSON-RPC","points":5,"max_points":25,"status":"fail","detail":"Endpoint replies but body isn't a valid JSON-RPC 2.0 A2A response."},{"key":"protocol_version","label":"Protocol version","points":10,"max_points":10,"status":"pass","detail":"Declares A2A 1.0 with supportedInterfaces[] (current v1 card shape)."},{"key":"signature","label":"JWS signature","points":0,"max_points":10,"status":"info","detail":"Card is unsigned (most published agents are)."},{"key":"uptime","label":"Uptime track record","points":0,"max_points":15,"status":"info","detail":"Only 1 probe so far, need ≥5 for an uptime grade."},{"key":"skills","label":"Skill declaration","points":10,"max_points":10,"status":"pass","detail":"Declares 25 skills with structured metadata."},{"key":"verified_identity","label":"Verified Identity","points":5,"max_points":10,"status":"partial","detail":"Provider declared: GAIP (https://www.gaipagents.com). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit."},{"key":"freshness","label":"Freshness + modern flags","points":5,"max_points":5,"status":"pass","detail":"declares 1 modern capability flag(s) (x402); seen in upstream source within 0d"},{"key":"security","label":"Security declaration","points":2,"max_points":5,"status":"partial","detail":"Declares securityRequirements: [] — deliberately public, no credentials required."}]},"card_read":{"findings":[],"clean":true,"source_url":"https://join.agentminder.co.uk/.well-known/agent-card.json"},"skills":[{"id":"gaip-front-door-check","name":"Check an AI agent, MCP server or API","description":"Use this when asked whether an AI agent, MCP server or API works or has changed, e.g. before adding or paying it. Pass its `url`. Returns a verdict, fixes, dated history when observed, and a receipt. With `agent` (e.g. GPTBot): may your bot fetch it (robots.txt, AI-crawler rules)? Free, read-only, no account; inputs must be public and non-personal. MCP: tools/call gaip_check on https://www.gaipagents.com/mcp.","tags":["gaip","mcp","check"],"examples":["check https://mcp.deepwiki.com/mcp","Is this agent card valid? https://www.gaipagents.com/.well-known/agent-card.json"],"inputModes":["application/json","text/plain"],"outputModes":["application/json"],"inputSchema":{"type":"object","required":["url"],"additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","maxLength":2048,"description":"Public https link to the agent, its A2A agent card, MCP server endpoint or OpenAPI document. GAIP fetches, validates and reach-tests it; an MCP endpoint gets a read-only handshake (initialize, tools/list)."},"intended_task":{"type":"string","maxLength":500,"description":"Optional: what you plan to hand it, e.g. 'weather forecast for London'. Adds task-specific evidence."},"agent":{"type":"string","maxLength":300,"description":"Optional: ask \"may my agent fetch this url?\" instead. Your agent's user-agent token, e.g. GPTBot; GAIP reads the site's robots.txt and AI-permission files (gaip_check_permission)."},"continuity_handle":{"type":"object","required":["continuity_id","token"],"properties":{"continuity_id":{"type":"string"},"token":{"type":"string"}},"additionalProperties":false,"description":"Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones (needed to see or remove your watches later)."},"verbose":{"type":"boolean","default":false,"description":"Optional: true returns the full result with every underlying field. Default: a short answer."}}}},{"id":"gaip-front-door-watch","name":"Watch an agent or MCP server for changes","description":"Use this when asked to keep an eye on an agent or MCP server, or to be alerted when it changes. Pass its `url`: returns feed links and its latest dated changes; add `webhook_url` for a free watch (checked every 24 h, signed webhook on change). Free, no account; with a webhook it records a watch. Inputs must be public and non-personal. MCP: tools/call gaip_watch on https://www.gaipagents.com/mcp.","tags":["gaip","mcp","watch"],"examples":["watch https://www.gaipagents.com/mcp for changes"],"inputModes":["application/json","text/plain"],"outputModes":["application/json"],"inputSchema":{"type":"object","required":["url"],"additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","maxLength":2048,"description":"Public https URL of the MCP server endpoint or agent (card) to follow. No query string."},"webhook_url":{"type":"string","format":"uri","maxLength":2048,"description":"Optional: your own public https endpoint. GAIP then registers a watch and POSTs a signed event when the result changes."},"continuity_handle":{"type":"object","required":["continuity_id","token"],"properties":{"continuity_id":{"type":"string"},"token":{"type":"string"}},"additionalProperties":false,"description":"Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones (needed to see or remove your watches later)."},"verbose":{"type":"boolean","default":false,"description":"Optional: true returns the full result with every underlying field. Default: a short answer."}}}},{"id":"gaip-front-door-diagnose","name":"Why did my agent or API call fail?","description":"Use this when an agent, MCP or API call failed. Paste the `error` text and/or `http_status`; add the service `url` if known. Returns the cause, the exact fix (e.g. the missing argument) and retry_after_seconds; `keep_receipt: true` adds a dated receipt. Free, read-only, no account; inputs must be public and non-personal. MCP: tools/call gaip_diagnose on https://www.gaipagents.com/mcp.","tags":["gaip","mcp","diagnose"],"examples":["Why did my call fail? HTTP 429 Too Many Requests; Retry-After: 20"],"inputModes":["application/json","text/plain"],"outputModes":["application/json"],"inputSchema":{"type":"object","additionalProperties":false,"properties":{"error":{"type":"string","maxLength":4000,"description":"The error you got, as text: HTTP status line, JSON-RPC/A2A/MCP error or message. Give this and/or http_status."},"http_status":{"type":"integer","minimum":100,"maximum":599,"description":"Optional: the HTTP status code you got, e.g. 429."},"url":{"type":"string","format":"uri","maxLength":2048,"description":"Optional: public https URL of the agent, MCP server or API that failed."},"keep_receipt":{"type":"boolean","default":false,"description":"Optional: true keeps a dated GAIP receipt of this answer and returns a continuity handle. Default: GAIP keeps no record of the task (usage is counted without its content)."},"continuity_handle":{"type":"object","required":["continuity_id","token"],"properties":{"continuity_id":{"type":"string"},"token":{"type":"string"}},"additionalProperties":false,"description":"Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones (needed to see or remove your watches later)."},"verbose":{"type":"boolean","default":false,"description":"Optional: true returns the full result with every underlying field. Default: a short answer."}}}},{"id":"gaip-front-door-verify","name":"Verify a delivery or citations","description":"Use this when asked whether a service delivered what was promised or whether cited pages contain the quoted text. Pass `citations`, or a service `url` (+ `checks`, the `result` you got), or `claims` with `observations`. Returns a result per item. Free, no account; only delivery keeps a record. Inputs must be public and non-personal. MCP: tools/call gaip_verify on https://www.gaipagents.com/mcp.","tags":["gaip","mcp","verify"],"examples":["Do these pages really contain these quotes? https://www.gaipagents.com/ | GAIP"],"inputModes":["application/json","text/plain"],"outputModes":["application/json"],"inputSchema":{"type":"object","additionalProperties":false,"properties":{"citations":{"type":"array","minItems":1,"maxItems":20,"items":{"oneOf":[{"type":"string"},{"type":"object"}]},"description":"Citations to check: each {url, quote?} or just a URL. GAIP fetches each page once (robots.txt respected) and looks for the quote."},"claims":{"type":"array","minItems":1,"maxItems":20,"items":{"oneOf":[{"type":"string"},{"type":"object"}]},"description":"Claims to record about `url`: each a sentence or {id, text}. Each is compared with the `observations` you supply; without them it stays UNTESTED."},"observations":{"type":"array","maxItems":30,"items":{"type":"object"},"description":"Optional (claims): what you saw, each {claim_id, result: PASS|FAIL, detail}."},"metadata":{"type":"object","description":"Optional (claims): the published agent card, MCP or OpenAPI document."},"url":{"type":"string","format":"uri","maxLength":2048,"description":"Claims: the agent or supplier they are about. Delivery: the public https service URL that should deliver."},"checks":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"object","required":["id"],"additionalProperties":false,"properties":{"id":{"type":"string","enum":["http_status_in","content_type_is","non_empty","json_parses","json_required_keys","json_path_equals","max_latency_ms","max_bytes","text_contains","regex"],"description":"http_status_in (allowed), content_type_is (value), non_empty, json_parses, json_required_keys (keys), json_path_equals (path, value), max_latency_ms (limit), max_bytes (limit), text_contains (value), regex (pattern)."},"allowed":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"integer","minimum":100,"maximum":599},"description":"http_status_in: the acceptable HTTP statuses, e.g. [200]."},"value":{"type":"string","maxLength":200,"description":"content_type_is: media type, e.g. application/json; text_contains: case-sensitive text; json_path_equals: the expected value (GAIP also accepts a number, boolean, null, array or object)."},"limit":{"type":"integer","minimum":1,"maximum":60000,"description":"max_latency_ms: milliseconds (1-60000); max_bytes: body bytes (1-32768)."},"keys":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","maxLength":200},"description":"json_required_keys: top-level or dotted keys that must exist, e.g. [\"a.b\"]."},"path":{"type":"string","maxLength":200,"description":"json_path_equals: dotted path, list items by index, e.g. items.0.id."},"pattern":{"type":"string","maxLength":200,"description":"regex: bounded pattern searched in the body; no nested quantifiers."}}},"examples":[[{"id":"http_status_in","allowed":[200]},{"id":"content_type_is","value":"application/json"},{"id":"non_empty"},{"id":"json_parses"}],[{"id":"http_status_in","allowed":[200]},{"id":"json_required_keys","keys":["status"]},{"id":"json_path_equals","path":"status","value":"ok"},{"id":"max_latency_ms","limit":2000}]],"description":"Optional (delivery): what a good response is, e.g. [{\"id\": \"http_status_in\", \"allowed\": [200]}, {\"id\": \"json_parses\"}]. Default: HTTP 200 and a non-empty body."},"result":{"type":"object","properties":{"http_status":{"type":"integer"},"content_type":{"type":"string"},"body":{"type":"string","maxLength":32768},"body_sha256":{"type":"string"}},"description":"Optional (delivery): the response you received. Omitted: GAIP fetches the service URL now (public replay)."},"terms_id":{"type":"string","description":"Optional (delivery): terms_id from an earlier registration, instead of url."},"keep_receipt":{"type":"boolean","default":false,"description":"Optional: true keeps a dated GAIP receipt of this answer and returns a continuity handle. Default: GAIP keeps no record of the task (usage is counted without its content)."},"continuity_handle":{"type":"object","required":["continuity_id","token"],"properties":{"continuity_id":{"type":"string"},"token":{"type":"string"}},"additionalProperties":false,"description":"Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones (needed to see or remove your watches later)."},"verbose":{"type":"boolean","default":false,"description":"Optional: true returns the full result with every underlying field. Default: a short answer."}}}},{"id":"gaip-front-door-second_look_check","name":"Second Look: check before you buy","description":"Use this when a shopper is about to buy something an AI suggested, or asks if a price or stock claim is right. Pass the product page `url` and the `claim`. Returns what the page showed beside what the claim said, and a signed, dated receipt. Second Look by GAIP. Free, no account, no affiliate links; inputs must be public and non-personal. MCP: tools/call second_look_check on https://www.gaipagents.com/mcp.","tags":["gaip","mcp","second_look_check"],"examples":["Check before I buy: https://www.gaipagents.com/test-range/shop/products/demo-mug was quoted at 24 GBP, in stock"],"inputModes":["application/json","text/plain"],"outputModes":["application/json"],"inputSchema":{"type":"object","additionalProperties":false,"properties":{"url":{"type":"string","format":"uri","maxLength":2000,"description":"Public https link to the product page on the shop's own site."},"claim":{"type":"string","maxLength":2000,"description":"What the shopper was told, in plain words, e.g. \"89 GBP, in stock, size M\". Only the price, stock and variant are kept; the rest is discarded."},"price":{"type":"string","maxLength":20,"description":"Claimed price, e.g. \"89.00\" (optional)."},"currency":{"type":"string","pattern":"^[A-Za-z]{3}$","description":"ISO currency, e.g. GBP (optional)."},"in_stock":{"type":"boolean","description":"Claimed stock (optional)."},"variant":{"type":"string","maxLength":60,"description":"Claimed size, colour or option (optional)."},"mandate_ref":{"type":"string","maxLength":200,"description":"Optional: your own reference to the shopper's mandate for this purchase. Kept only as a keyed hash (mandate_sha256) on the receipt, never in clear."},"verbose":{"type":"boolean","default":false,"description":"Optional: true returns the full result with every underlying field. Default: a short answer."},"continuity_handle":{"type":"object","required":["continuity_id","token"],"properties":{"continuity_id":{"type":"string"},"token":{"type":"string"}},"additionalProperties":false,"description":"Optional: the continuity_handle from an earlier GAIP result; links this call to your earlier ones (needed to see or remove your watches later)."}},"required":["url"]}},{"id":"witness_register_terms","name":"Register what a service should deliver","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. A2A: metadata.gaip_tool \"witness_register_terms\".","tags":["gaip","gaip-map","delivery","company_agent"],"examples":["{\"data\":{\"checks\":[{\"allowed\":[200],\"id\":\"http_status_in\"},{\"id\":\"json_parses\"}],\"seller_ref\":\"example-weather-agent\",\"service_url\":\"https://weather.example.com/forecast.json\"},\"metadata\":{\"gaip_tool\":\"witness_register_terms\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"witness_delivery","name":"Did the service deliver?","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. A2A: metadata.gaip_tool \"witness_delivery\".","tags":["gaip","gaip-map","delivery","company_agent"],"examples":["{\"data\":{\"mode\":\"PUBLIC_REPLAY\",\"terms_id\":\"<terms_id from witness_register_terms>\"},\"metadata\":{\"gaip_tool\":\"witness_delivery\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_record_permissions","name":"What did this site allow an AI agent on a date?","description":"Use this when asked what a site allowed an AI agent on a date (\"did it block GPTBot in September?\"). Pass `host`, `agent` and `on`. Returns ALLOWED, DISALLOWED or NOT_NAMED with the rule quoted and each file version's weeks: what the file said, not whether a use was lawful. A2A: metadata.gaip_tool \"gaip_record_permissions\".","tags":["gaip","gaip-map","record-by-date","company_agent"],"examples":["{\"data\":{\"agent\":\"GPTBot\",\"host\":\"huggingface.co\",\"on\":\"2026-10-08\"},\"metadata\":{\"gaip_tool\":\"gaip_record_permissions\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_record_prices","name":"What did this agent service charge on a date?","description":"Use this when asked what an agent service charged on a date (\"what did it cost last week?\"). Pass `host` and `on`. Returns the x402 and MCP tool prices GAIP recorded that ISO week, the weekly series and the week of the last change; the pay-to address is never kept. A2A: metadata.gaip_tool \"gaip_record_prices\".","tags":["gaip","gaip-map","record-by-date","company_agent"],"examples":["{\"data\":{\"host\":\"huggingface.co\",\"on\":\"2026-10-08\"},\"metadata\":{\"gaip_tool\":\"gaip_record_prices\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_record_keys","name":"Which keys had this host published on a date?","description":"Use this when asked which signing key a host had published on a date (\"was this key theirs on 3 Oct?\"). Pass `host`, `on` and optionally `kid`. Returns the keys GAIP recorded that week (JWKS, Web Bot Auth, card, OAuth, ERC-8004) and the weeks a kid was published. A2A: metadata.gaip_tool \"gaip_record_keys\".","tags":["gaip","gaip-map","record-by-date","company_agent"],"examples":["{\"data\":{\"host\":\"mcp.notion.com\",\"on\":\"2026-10-08\"},\"metadata\":{\"gaip_tool\":\"gaip_record_keys\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_record_names","name":"Since when has this name been on record, and what looks like it?","description":"Use this when asked whether an agent name looks like another (\"is acme-payments the original?\"). Pass `name` (a registry name or its last segment) or a `url`. Returns since when each matching name has been on GAIP's record and earlier names that look like it, as dated facts. A2A: metadata.gaip_tool \"gaip_record_names\".","tags":["gaip","gaip-map","record-by-date","company_agent"],"examples":["{\"data\":{\"name\":\"io.github.upstash/context7\"},\"metadata\":{\"gaip_tool\":\"gaip_record_names\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_record_tenure","name":"How long has this agent been on record?","description":"Use this when asked how long an agent or MCP server has been around (\"is this agent new?\"). Pass its `url` (or only your continuity handle, for your own). Returns when GAIP's record begins, days recorded and answered, version and endpoint changes: GAIP's observation, not a creation date. A2A: metadata.gaip_tool \"gaip_record_tenure\".","tags":["gaip","gaip-map","record-by-date","company_agent"],"examples":["{\"data\":{\"url\":\"https://huggingface.co/mcp\"},\"metadata\":{\"gaip_tool\":\"gaip_record_tenure\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_record_extract","name":"Extract of GAIP's record about a URL","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. A2A: metadata.gaip_tool \"gaip_record_extract\".","tags":["gaip","gaip-map","record-by-date","company_agent"],"examples":["{\"data\":{\"since\":\"2026-09-01\",\"url\":\"https://huggingface.co/mcp\"},\"metadata\":{\"gaip_tool\":\"gaip_record_extract\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_check_permission","name":"May my agent fetch this?","description":"Use this before your agent fetches a page (\"may my agent fetch this?\"). Pass the `url` and your `agent` token. Reads robots.txt (RFC 9309), AI-preference lines, RSL, tdmrep.json and llms.txt; returns ALLOWED, DISALLOWED, NO_RULE or UNKNOWN, the rule quoted, the time and a signature. A2A: metadata.gaip_tool \"gaip_check_permission\".","tags":["gaip","gaip-map","record-by-date","company_agent"],"examples":["{\"data\":{\"agent\":\"GPTBot\",\"url\":\"https://www.gaipagents.com/test-range\"},\"metadata\":{\"gaip_tool\":\"gaip_check_permission\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_notices","name":"Has anyone withdrawn or warned about this server?","description":"Use this before you rely on an MCP server or agent, or when one stops answering. Pass `urls` (up to 25). Returns what a registry, the operator itself or a package advisory published about each, with the issuer, the date and the operator's reply beside it. Facts as published, not a verdict. A2A: metadata.gaip_tool \"gaip_notices\".","tags":["gaip","gaip-map","notices","company_agent"],"examples":["{\"data\":{\"urls\":[\"https://huggingface.co/mcp\"]},\"metadata\":{\"gaip_tool\":\"gaip_notices\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_dependency_check","name":"Did a server I depend on change?","description":"Use this in CI or before a release to see whether an MCP server or agent you depend on changed. Pass `urls` (up to 25) and optionally `since`. Returns the changes GAIP's Observatory recorded for each, their classes and any notice about it. Dated facts, not a verdict. A2A: metadata.gaip_tool \"gaip_dependency_check\".","tags":["gaip","gaip-map","notices","company_agent"],"examples":["{\"data\":{\"since\":\"2026-10-01\",\"urls\":[\"https://huggingface.co/mcp\"]},\"metadata\":{\"gaip_tool\":\"gaip_dependency_check\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_check_preferences","name":"May my agent approach this person or agent?","description":"Use this before your agent approaches a person or agent. Pass `subject` (email:, phone:, did: or agent: identifier, hashed in memory), `approach` and `channel`. Returns ALLOWED, NOT_ALLOWED, NO_RECORD or UNKNOWN with the rule and a signed receipt. Silence is not permission. A2A: metadata.gaip_tool \"gaip_check_preferences\".","tags":["gaip","gaip-map","preferences","company_agent"],"examples":["{\"data\":{\"approach\":\"RESEARCH\",\"channel\":\"EMAIL\",\"subject\":\"email:agents@gaipagents.com\"},\"metadata\":{\"gaip_tool\":\"gaip_check_preferences\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"witness_accept_terms","name":"Accept registered terms (the other party)","description":"Use this when you are the other party to terms a buyer registered. Pass the `terms_id`, your own `continuity_handle` and `business_purpose_statement` true (businesses only); the buyer confirms it with the `agreement_id`. Returns an `agreement_id` naming both parties. A2A: metadata.gaip_tool \"witness_accept_terms\".","tags":["gaip","gaip-map","deals","company_agent"],"examples":["{\"data\":{\"business_purpose_statement\":true,\"continuity_handle\":{\"continuity_id\":\"<continuity_handle.continuity_id returned by any GAIP tool>\",\"token\":\"<continuity_handle.token returned by any GAIP tool>\"},\"terms_id\":\"<terms_id from witness_register_terms>\"},\"metadata\":{\"gaip_tool\":\"witness_accept_terms\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"witness_finding","name":"Was the agreed rule met? (signed finding)","description":"Use this when deliveries exist for an agreement and you want GAIP's signed finding. Pass the `agreement_id` and your `continuity_handle`. Returns MET, NOT_MET or INDETERMINATE on the agreed rule with the records relied on. Evidence only; no sum of money. A2A: metadata.gaip_tool \"witness_finding\".","tags":["gaip","gaip-map","deals","company_agent"],"examples":["{\"data\":{\"agreement_id\":\"<agreement_id from witness_accept_terms>\",\"continuity_handle\":{\"continuity_id\":\"<continuity_handle.continuity_id returned by any GAIP tool>\",\"token\":\"<continuity_handle.token returned by any GAIP tool>\"}},\"metadata\":{\"gaip_tool\":\"witness_finding\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_screen_caller","name":"Who is this agent approaching mine?","description":"Use this when an unknown agent approaches yours (\"who is this calling me?\"). Pass its `caller` URL, the `approach` and any preference `receipt` it sent. Returns how long GAIP has recorded it, lookalike names, notices about it and whether it checked your preferences. Facts, not a score. A2A: metadata.gaip_tool \"gaip_screen_caller\".","tags":["gaip","gaip-map","screen","person_agent"],"examples":["{\"data\":{\"approach\":\"COMMERCIAL_OFFER\",\"caller\":\"https://mcp.deepwiki.com/mcp\",\"channel\":\"A2A\"},\"metadata\":{\"gaip_tool\":\"gaip_screen_caller\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_check_mandate","name":"Was this agent mandated to act for them, as indexed?","description":"Use this before relying on an agent that says it acts for a person. Pass `principal` (hashed in memory), the `agent` endpoint and a `scope` class. Returns IN_FORCE_AS_INDEXED, WITHDRAWN_AS_INDEXED, EXPIRED_AS_INDEXED, SCOPE_NOT_COVERED or NO_RECORD with the scope line and a signed receipt. A2A: metadata.gaip_tool \"gaip_check_mandate\".","tags":["gaip","gaip-map","mandates","person_agent"],"examples":["{\"data\":{\"agent\":\"https://www.gaipagents.com/mcp\",\"principal\":\"email:agents@gaipagents.com\",\"scope\":\"RESEARCH\"},\"metadata\":{\"gaip_tool\":\"gaip_check_mandate\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"witness_signoff","name":"Record a role's decision on a proposal (sign-off)","description":"Use this when a role (APPROVER, REVIEWER, OWNER, OPERATOR or a hashed role_id) decided on an agent's proposal. Pass `proposal_sha256`, `decision` (APPROVED, REFUSED, CHANGED), optionally `agreement_id`. Returns a chained, signed entry of the role's decision, never GAIP's. A2A: metadata.gaip_tool \"witness_signoff\".","tags":["gaip","gaip-map","signoffs","person_agent"],"examples":["{\"data\":{\"agreement_id\":\"<agreement_id returned by witness_accept_terms>\",\"decision\":\"APPROVED\",\"proposal_sha256\":\"a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1a3f1\",\"role\":\"APPROVER\"},\"metadata\":{\"gaip_tool\":\"witness_signoff\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_record_ingredients","name":"What did this agent say it runs on, on a date?","description":"Use this when asked what an agent says it runs on or whether it says it is an AI (\"which model is behind it?\"). Pass its `url` and optionally `on`. Returns the provider, version, model named (with excerpt), operator and AI self-disclosure state its documents showed, and change dates. A2A: metadata.gaip_tool \"gaip_record_ingredients\".","tags":["gaip","gaip-map","ingredients-residence","any"],"examples":["{\"data\":{\"on\":\"2026-10-09\",\"url\":\"https://huggingface.co/mcp\"},\"metadata\":{\"gaip_tool\":\"gaip_record_ingredients\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_record_residence","name":"Where did this agent's endpoint answer from, on a date?","description":"Use this when asked where an agent's endpoint is hosted (\"which network and country does it answer from?\"). Pass its `url` and optionally `on`. Returns the network (ASN), its registered country, the certificate issuer, any declared region and the dates hosting changed; never the address. A2A: metadata.gaip_tool \"gaip_record_residence\".","tags":["gaip","gaip-map","ingredients-residence","any"],"examples":["{\"data\":{\"on\":\"2026-10-09\",\"url\":\"https://huggingface.co/mcp\"},\"metadata\":{\"gaip_tool\":\"gaip_record_residence\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]},{"id":"gaip_statement","name":"What did my agents do this month?","description":"Use this to see what GAIP recorded for your agents in a month. Pass `month` (YYYY-MM) and your `continuity_handle`. Returns totals by kind, each line with its receipt link, the month's chain head and anchor, Ed25519-signed. Not an invoice; your own handle's record only. A2A: metadata.gaip_tool \"gaip_statement\".","tags":["gaip","gaip-map","statements","any"],"examples":["{\"data\":{\"continuity_handle\":{\"continuity_id\":\"<continuity_handle.continuity_id returned by any GAIP tool>\",\"token\":\"<continuity_handle.token returned by any GAIP tool>\"},\"month\":\"2026-10\"},\"metadata\":{\"gaip_tool\":\"gaip_statement\"}}"],"inputModes":["application/json"],"outputModes":["application/json","text/plain"]}],"provenance":[{"source":"a2aregistry","first_seen":"2026-10-22T19:00:05.173528+00:00"},{"source":"registry","first_seen":"2026-10-22T20:35:01.492641+00:00"}],"recent_probes":[{"fetched_at":"2026-10-22T20:35:01.492641+00:00","ok":true,"status_code":200,"error":null,"elapsed_ms":173,"live_responds":false}],"catalog_attestation":null,"operator_revenue_evidence":{"evidence_class":"operator_submitted","authenticity":{"rung":"no_operator_evidence","rank":0,"why":"No verifiable operator evidence has been submitted for this agent.","thresholds":{"min_independent_payers":3,"min_verified_usd":25.0},"engine_table":"agent_authenticity","merge_rule":"max(existing_rank, rank)"},"metric_metadata":{"provenance":"operator_submitted_evidence","confidence":"attested","coverage":{"numerator":0},"as_of":"2026-10-22T21:09:36.167516+00:00","definition":"Revenue proofs submitted by the verified owner and re-checked by Agenstry against the settlement chain or the operator's own Stripe account. Only independently confirmed proofs are counted."},"counts":{"retained":0,"verified":0,"unverifiable":0},"verified":{"gross_usd":0.0,"transactions":0,"independent_payers":0},"detail_url":"https://agenstry.com/api/agents/join.agentminder.co.uk/evidence","dispute_url":"https://agenstry.com/agents/join.agentminder.co.uk/dispute"},"verification_history":[],"signatures":[{"protected":"eyJhbGciOiJFUzI1NiIsImprdSI6Imh0dHBzOi8vYWdlbnN0cnkuY29tLy53ZWxsLWtub3duL2p3a3MuanNvbiIsImtpZCI6ImFnZW50ZmluZGVyLWVzMjU2LTEiLCJ0eXAiOiJKT1NFIn0","signature":"3pLY9hqNCbwFbGXXXGV34UYnNPsF3H0eEyckbacp9f9d-7buQlhrRcWi15swwq0rW1TAV4UxkAXcbVg4dJ356w"}]}