GAIP Witness Agent

io.github.tjcgraham-rgbPublished by GitHub account tjcgraham-rgbv1.5.0Updated Oct 24, 2026

Witness: agreed terms, delivery checks, signed receipts, dispute bundles and evidence packs.

Overview

AI-generated overview

GAIP Witness records dated, signed evidence about what agents, MCP servers and online services publish and deliver, and lets an assistant check it.

What you can do
  • Register agreed terms for a public HTTPS service and check whether it delivered, with PASS/FAIL/UNKNOWN per check and a receipt
  • Verify, export and inspect GAIP receipts, hash chains and Merkle proofs, and assemble dispute or incident bundles
  • Watch agents and services for changes or downtime, list watches, review change events and remove watches
  • Check citations and quotes against fetched pages, and compare supplier claims with observed or reported evidence
  • Inspect counterparty evidence coverage, build evidence packs, and record role sign-offs and outcome-value dossiers
When to use it
Useful when an assistant must show that a third-party service, agent or MCP server delivered what was agreed, changed, or said what a citation claims, and when a dated, signed record is needed for a dispute, audit or insurer.
Requirements
Remote streamable HTTP endpoint at www.gaipagents.com/mcp; no sign-in, API key or environment variables. Inputs must be public, non-personal URLs and identifiers; a continuity handle returned with answers is passed back to bind history.
Before you install
Inputs are sent to a third party and must be public and non-personal, so do not submit private URLs or personal data. Watches can call a webhook you supply, and removing a watch deletes its stored events. Results are evidence only, not certification, trust scores, legal or financial advice.

Installation

In SourceWeft

  1. Open GAIP Witness Agent in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.tjcgraham-rgb%2Fgaip-witness/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "gaip-witness-agent": {
      "type": "http",
      "url": "https://www.gaipagents.com/mcp/agents/witness"
    }
  }
}

README

GAIP

[GAIP logo]

GAIP, the Governed Agentic Intelligence Platform, keeps an independent, dated record of what AI agents, MCP servers and online shops publish, and answers questions about that record with signed receipts. Free, read-only, no key; facts at a stated time, never an assessment.

First call: gaip_check with a url on https://www.gaipagents.com/mcp. This one runs as-is; then use the URL of the agent, MCP server or API you care about:

bash
curl -s https://www.gaipagents.com/mcp \  -H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"gaip_check","arguments":{"url":"https://mcp.deepwiki.com/mcp"}}}'

Without MCP: GET https://www.gaipagents.com/v1/free/conformance/check?url=<url>.

The map: every question GAIP answers, grouped by who asks, with its tool and HTTP route: https://www.gaipagents.com/v1/free/map. Every completed answer carries a continuity handle; send it back and the answer is bound to your own history with GAIP.

One line to connect

WhereOne line
Any MCP clienthttps://www.gaipagents.com/mcp (streamable HTTP, no sign-in)
Claude Codeclaude mcp add --transport http gaip https://www.gaipagents.com/mcp, or the plugin (MCP server and skill): /plugin install gaip --marketplace tjcgraham-rgb/gaip-agents
Claude Desktop / claude.aiCustomize > Connectors > Add custom connector, URL https://www.gaipagents.com/mcp, no sign-in
Agent Skills (Claude Code, Cursor, Codex and others)npx skills add tjcgraham-rgb/gaip-agents (installs skills/gaip/SKILL.md)
Cursor, VS Codethe buttons below, or { "mcpServers": { "gaip": { "url": "https://www.gaipagents.com/mcp" } } }
Gemini CLIgemini extensions install https://github.com/tjcgraham-rgb/gaip-agents
OpenAI Agents SDKHostedMCPTool(tool_config={"type": "mcp", "server_label": "gaip", "server_url": "https://www.gaipagents.com/mcp", "require_approval": "never"})
Vercel AI SDKawait createMCPClient({ transport: { type: 'http', url: 'https://www.gaipagents.com/mcp' } }) (from @ai-sdk/mcp)
LangChainpip install langchain-gaip, then from langchain_gaip import get_tools
CrewAIAgent(..., mcps=["https://www.gaipagents.com/mcp"])
A2A (1.0 and 0.3.0)agent card https://www.gaipagents.com/.well-known/agent-card.json; plain text works
x402nothing to set up: GAIP is free and never answers with HTTP 402 (https://www.gaipagents.com/.well-known/x402)
Windsurf~/.codeium/windsurf/mcp_config.json: { "mcpServers": { "gaip": { "serverUrl": "https://www.gaipagents.com/mcp" } } }
Cline{ "mcpServers": { "gaip": { "type": "streamableHttp", "url": "https://www.gaipagents.com/mcp" } } } (see llms-install.md)
Everything else, with copy-paste codehttps://www.gaipagents.com/docs/quickstart

[Add to Cursor] [Install in VS Code]

In CI: two GitHub Actions

GAIP Watch fails your build when an MCP server or agent your agent depends on changed its tools, schemas, sign-in or prices, with dated receipts (watch/):

yaml
- uses: tjcgraham-rgb/gaip-agents/watch@main  with:    urls: https://mcp.example.com/mcp

GAIP Agents check runs gaip_check on your own agent card, MCP server or OpenAPI document on every push:

yaml
- uses: tjcgraham-rgb/gaip-agents@v1  with:    agent-url: https://your-agent.example/.well-known/agent-card.json    fail-on-error: "true"

Outputs: verdict (READY, FIXES_NEEDED, UNREACHABLE or NOT_CHECKED), receipt-id, error-count, warning-count. Providers can show their own dated record with the badge https://www.gaipagents.com/v1/free/watch/badge.svg?url=<your endpoint>.

In this repository

PathWhat it is
registry/The Official MCP Registry records: gaip-broker.json (GAIP itself) and one record per specialist agent
listing-kit.jsonThe sentence, the first call, the map's rows, endpoints and example calls for directories (also served at /v1/free/discovery/listing-kit)
skills/gaip/SKILL.mdGAIP as an Agent Skill (agentskills.io format; also served at /.well-known/agent-skills/gaip/SKILL.md)
.claude-plugin/Claude Code plugin and marketplace manifests: the skill plus the remote MCP server
.cursor-plugin/plugin.json, mcp.jsonCursor plugin manifest and its MCP server
gemini-extension.json, GEMINI.mdGemini CLI extension: installs GAIP's MCP server and tells the model when to use each tool
packages/gaip-check/Python client: check_agent("https://other-agent.example")
action.yml, packages/gaip-check-action/The check Action (uses: tjcgraham-rgb/gaip-agents@v1)
watch/The GAIP Watch Action
packages/aipref-signals/Dependency-free parser and test vectors for AI-preference signals (IETF AI Preferences Content-Usage, RSL licence links, W3C TDMRep, Content Signals)
assets/GAIP logo (SVG, and a 400×400 PNG) and the specialist icons (SVG)
llms-install.mdInstall steps for AI assistants that set up MCP servers themselves (Cline)

The registry records, listing kit, packages, Watch Action, skill and Gemini extension are copies of what GAIP's service generates; a check in the service's repository warns when a copy here falls out of step. The service itself runs at www.gaipagents.com.

What an answer means

Every answer states what was observed and when. It is not a certification, endorsement, ranking or universal score, and not legal, financial or insurance advice. Receipts are signed with GAIP's Ed25519 key, published at https://www.gaipagents.com/.well-known/gaip-receipt-keys.json.

Licence

MIT (see LICENSE) for everything in this repository.

Source: README.md at commit 0bfeca4

Tools

23

witness_register_terms

Register what a service should deliver

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.

Parameterschecksseller_refservice_urlrequiredresearch_consentdata_classification

witness_delivery

Did the service deliver?

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.

Parametersbodymoderequiredterms_idrequiredsyntheticepisode_idbody_sha256http_statuscontent_typeresearch_consentcontinuity_handledata_classificationindependent_operator_id

gaip_receipt_export

Export a GAIP receipt

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.

Parametersformatrequiredreceipt_idrequired

verify_gaip_receipt

Verify a GAIP receipt

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.

Parameterssyntheticepisode_idreceipt_idrequiredcontinuity_handledata_classificationindependent_operator_id

witness_dispute_bundle

Export a delivery evidence bundle

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.

Parametersterms_idreceipt_idreceipt_formatcontinuity_handle

gaip_watch_register

Watch an agent or MCP server for changes

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.

Parametersslakindrequiredterms_idtarget_urlwebhook_urlinterval_hourscontinuity_handlerequireddata_classification

gaip_watch_list

List my watches

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.

Parameterscontinuity_handlerequired

gaip_watch_remove

Remove a watch

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.

Parameterswatch_idrequiredcontinuity_handlerequired

gaip_watch_events

Read watch change events

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.

Parameterslimitwatch_idcontinuity_handlerequired

gaip_citation_witness

Verify citations and quotes

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.

Parameterscitationsrequireddata_classification

gaip_check_sar_receipt

Check an x402 SAR receipt

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.

Parameterspublic_keysar_receiptrequired

gaip_record_extract

Extract of GAIP's record about a URL

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.

Parametersurlrequiredlimitsinceuntil

witness_accept_terms

Accept registered terms (the other party)

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. Free, no account; records a GAIP receipt only. Inputs must be public and non-personal.

Parametersterms_idrequiredagreement_idfinding_modeacceptance_ruleseller_key_proofconsumer_contractcontinuity_handleagreement_cancelleddata_classificationmandate_check_receiptbusiness_purpose_statement

witness_finding

Was the agreed rule met? (signed finding)

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. Free, no account; records a GAIP receipt only. Inputs must be public and non-personal.

Parametersagreement_idrequiredcontinuity_handledata_classification

witness_signoff

Record a role's decision on a proposal (sign-off)

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. Free, no account; records a GAIP receipt only. Inputs must be public and non-personal.

Parametersrolerole_iddecisionrequiredagent_urlagreement_idreason_sha256proposal_sha256requiredcontinuity_handledata_classification

assurance_prepare

Prepare a buyer-side delivery check

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.

Parameterschecksrequiredepisode_idtask_classservice_urlrequiredcounterparty_iddata_classificationexplicit_read_only_consentrequired

assurance_complete

Complete a buyer-side delivery check

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.

Parametersbodymoderequiredterms_idrequiredbody_sha256http_statuscontent_typedata_classification

assurance_verify

Verify a Buyer Assurance receipt

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.

Parametersreceipt_idrequired

gaip_verify_supplier_claims

Verify an agent's or supplier's claims

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.

Parametersclaimsrequiredmetadatarequiredprotocolsyntheticepisode_idtask_classobservationscounterparty_idcontinuity_handledata_classificationindependent_operator_id

inspect_counterparty_evidence

What evidence exists about this agent?

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.

Parameterssyntheticepisode_idtask_classmax_age_daysobservationscounterparty_idcontinuity_handledata_classificationindependent_operator_id

gaip_evidence_pack

Build an evidence pack

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.

Parametersscopesubjectrequiredrequester

gaip_incident_bundle

Build an incident evidence bundle

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.

Parameterstitlereceipt_idsobservationsai_system_refdata_classification

gaip_measure_outcome_value

Did the task deliver, and at what cost?

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.

Parameterstaskrequiredcostsrequiredcurrencydeliveryrequiredfx_to_gbpsyntheticepisode_idrequiredtask_classevidence_refsdelivery_checkdownstream_usecounterparty_id+4 more

Version history

6
  1. v1.5.0LatestOct 10, 2026
  2. v1.4.0Oct 2, 2026
  3. v1.2.0Sep 30, 2026
  4. v1.1.1Sep 29, 2026
  5. v1.1.0Sep 28, 2026
  6. v1.0.0Sep 27, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts