{
  "description": "Now part of GAIP's front door (Check and GAIP Watch; Diagnose) on /mcp and the integration-protocol agent. It stays callable here with the same tools; see https://www.gaipagents.com/agents/integration-protocol. Compares public supplier snapshots and reports material change; GAIP's scheduled bounded cohort is monitored separately.",
  "endpoint": "https://www.gaipagents.com/mcp/agents/supplier-watch",
  "name": "io.github.tjcgraham-rgb/gaip-supplier-watch",
  "privacyPolicy": "https://www.gaipagents.com/privacy",
  "product": {
    "foldedInto": "integration-protocol",
    "kind": "PRODUCT",
    "listed": false,
    "productId": "developer-checks",
    "productName": "Check and GAIP Watch \u00b7 Diagnose",
    "role": "FOLDED",
    "roleLabel": "folded in, still callable",
    "status": "PUBLIC_FREE",
    "url": "https://www.gaipagents.com/v1/free/products#developer-checks"
  },
  "protocolVersion": "2025-06-18",
  "publication": {
    "acceptanceNotImplied": true,
    "descriptorLive": true,
    "officialMcpRegistry": "PENDING_INDIVIDUAL_REGISTRY_ACCEPTANCE"
  },
  "registryVersion": "1.5.0",
  "repository": {
    "source": "github",
    "url": "https://github.com/tjcgraham-rgb/-gaip-agent-to-art-prototype"
  },
  "schema_version": "gaip.agent-mcp-descriptor.v1",
  "serverCard": "https://www.gaipagents.com/mcp/agents/supplier-watch/server-card",
  "termsOfService": "https://www.gaipagents.com/terms",
  "title": "GAIP Supplier Watch Agent",
  "tools": [
    {
      "annotations": {
        "destructiveHint": false,
        "openWorldHint": false,
        "readOnlyHint": false
      },
      "description": "Compare two supplied public snapshots and return material changes with a retained receipt. The separate scheduled GAIP cohort watch is published at /v1/free/commercial/watch-status.",
      "inputSchema": {
        "additionalProperties": true,
        "properties": {
          "continuity_handle": {
            "additionalProperties": false,
            "properties": {
              "continuity_id": {
                "type": "string"
              },
              "token": {
                "type": "string"
              }
            },
            "required": [
              "continuity_id",
              "token"
            ],
            "type": "object"
          },
          "counterparty_id": {
            "type": "string"
          },
          "current": {
            "type": "object"
          },
          "data_classification": {
            "enum": [
              "PUBLIC",
              "NON_PERSONAL_PUBLIC"
            ],
            "type": "string"
          },
          "episode_id": {
            "type": "string"
          },
          "independent_operator_id": {
            "type": "string"
          },
          "prior": {
            "type": "object"
          },
          "protocol": {
            "enum": [
              "A2A",
              "MCP",
              "OPENAPI"
            ],
            "type": "string"
          },
          "synthetic": {
            "type": "boolean"
          },
          "task_class": {
            "type": "string"
          }
        },
        "required": [
          "data_classification",
          "counterparty_id",
          "task_class",
          "protocol",
          "prior",
          "current"
        ],
        "type": "object"
      },
      "name": "gaip_compare_supplier_snapshots",
      "title": "Compare supplier snapshots"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false
      },
      "description": "Register a free watch (max 3, every 24h+) on an agent's readiness, a published card, or witness delivery terms; optional signed webhook on change.",
      "inputSchema": {
        "additionalProperties": false,
        "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",
            "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": {
            "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",
      "title": "Watch an agent, card or delivery"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "description": "List your watches with last verdict, last check and next due time.",
      "inputSchema": {
        "additionalProperties": false,
        "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",
      "title": "List my watches"
    },
    {
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false
      },
      "description": "Stop one of your watches and delete its events.",
      "inputSchema": {
        "additionalProperties": false,
        "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": {
            "type": "string"
          }
        },
        "required": [
          "continuity_handle",
          "watch_id"
        ],
        "type": "object"
      },
      "name": "gaip_watch_remove",
      "title": "Remove a watch"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "description": "Read recent change events (with receipts and webhook delivery status) for your watches.",
      "inputSchema": {
        "additionalProperties": false,
        "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": {
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "watch_id": {
            "type": "string"
          }
        },
        "required": [
          "continuity_handle"
        ],
        "type": "object"
      },
      "name": "gaip_watch_events",
      "title": "Read watch change events"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "description": "An agent or API you depend on started failing? Pass the `failure` ({code, detail}) as for gaip_diagnose_integration_failure plus the supplier's public `supplier_url` and optionally `failure_started_at`. Returns GAIP's repair diagnosis plus the supplier changes GAIP observed around that time (card and readiness watch events, observatory change log), each with a receipt and labelled as correlated in time, not causation. Recommends next steps and offers a watch. Does not fetch the supplier.",
      "inputSchema": {
        "additionalProperties": true,
        "properties": {
          "card": {
            "description": "Optional supplier card / server description you integrated against.",
            "type": "object"
          },
          "counterparty_id": {
            "type": "string"
          },
          "data_classification": {
            "default": "PUBLIC",
            "enum": [
              "PUBLIC",
              "NON_PERSONAL_PUBLIC"
            ],
            "type": "string"
          },
          "failure": {
            "description": "{code, detail?, http_status?} as for gaip_diagnose_integration_failure.",
            "type": "object"
          },
          "failure_started_at": {
            "format": "date-time",
            "type": "string"
          },
          "failures": {
            "maxItems": 100,
            "minItems": 1,
            "type": "array"
          },
          "lookback_days": {
            "default": 14,
            "maximum": 30,
            "minimum": 1,
            "type": "integer"
          },
          "protocol": {
            "description": "Omit to infer it from card, transport or the supplier URL path (else UNKNOWN).",
            "enum": [
              "A2A",
              "MCP",
              "OPENAPI",
              "UNKNOWN"
            ],
            "type": "string"
          },
          "supplier_url": {
            "format": "uri",
            "maxLength": 2048,
            "type": "string"
          },
          "task_class": {
            "type": "string"
          },
          "transport": {
            "description": "Optional transport you used (e.g. streamable-http, sse, GRPC).",
            "type": "string"
          }
        },
        "required": [
          "supplier_url"
        ],
        "type": "object"
      },
      "name": "gaip_supplier_reliability",
      "title": "Diagnose a supplier failure with recent changes"
    }
  ],
  "transport": "streamable-http",
  "version": "1.0.0"
}