{
  "$comment": "Veridion Markets MCP server descriptor. The server itself is the authority: POST JSON-RPC to https://www.veridionmarkets.com/api/mcp and call tools/list. This file exists so the endpoint is discoverable without reading marketing copy first. Every field here that restates something the server decides -- version, protocol versions, tool/prompt/resource names, rate limits, methodology_version -- is checked against the server by scripts/check-mcp-descriptor.mjs on every deploy. Edit the source of truth, not this file.",
  "schema_version": "2025-06-18",
  "name": "veridion-disclosure-api",
  "version": "1.14.0",
  "tool_output_schemas": "declared on every tool; structuredContent on every successful call",
  "display_name": "Veridion Markets — US government disclosure data",
  "description": "Receipt-linked US government financial disclosures. Congressional STOCK Act filings and executive-branch OGE filings. Every row resolves to the government's own document via receipt.url, and point-in-time queries return only what was knowable on a given date.",
  "documentation": "https://www.veridionmarkets.com/data-api",
  "openapi": "https://www.veridionmarkets.com/api/v1/openapi.json",
  "status": "https://www.veridionmarkets.com/api/v1/status",
  "transport": {
    "type": "http",
    "url": "https://www.veridionmarkets.com/api/mcp",
    "method": "POST",
    "content_type": "application/json",
    "note": "Stateless single-response JSON-RPC. GET returns 405 by design; there is no server-initiated stream.",
    "protocol_versions": [
      "2025-06-18",
      "2025-03-26",
      "2024-11-05"
    ]
  },
  "authentication": {
    "required": false,
    "anonymous": {
      "max_rows_per_request": 25,
      "requests_per_hour": 60,
      "note": "No key, no signup. The free tier is the diligence surface: evaluate the data before talking to anyone."
    },
    "licensed": {
      "scheme": "Authorization: Bearer <key>",
      "max_rows_per_request": 1000,
      "request_a_key": "https://www.veridionmarkets.com/data-api"
    }
  },
  "tools": [
    {
      "name": "search_disclosures",
      "summary": "Search receipt-linked disclosures. Supports point-in-time reconstruction via as_of and change polling via updated_since."
    },
    {
      "name": "get_disclosure_history",
      "summary": "Every observed version of one disclosure_id, oldest first. The change stream is append-only: an amendment supersedes rather than overwrites, so the before and after of a restated filing are both returned, each with its own receipt URL. restated=true states that content changed after first publication; no motive is inferred."
    },
    {
      "name": "list_members",
      "summary": "List filers with official identity. Congressional filers carry a Bioguide ID; executive-branch filers return null with an explanation rather than an invented identifier. Filter by bioguide, exact member_id, or a substring of the name as filed."
    },
    {
      "name": "get_coverage",
      "summary": "Live coverage counts measured from the serving views, not from a cached figure."
    },
    {
      "name": "get_status",
      "summary": "Source freshness and bulk-snapshot health. Downgrades itself when its own arithmetic says stale."
    }
  ],
  "prompts": [
    {
      "name": "verify_claim",
      "description": "Given a claim about what a US politician or executive-branch official traded or disclosed, find the filing behind it and answer with the government receipt: supported, not supported, unverifiable. Never infers motive."
    }
  ],
  "resources": [
    {
      "uri": "veridion://openapi",
      "description": "The v1 OpenAPI document, identical to /api/v1/openapi.json."
    },
    {
      "uri": "veridion://instructions",
      "description": "The behavioural instructions sent in the initialize handshake."
    }
  ],
  "tool_annotations": {
    "readOnlyHint": true,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": false,
    "note": "Every tool is a read of a point-in-time serving view. Declared so clients can treat calls as safe reads."
  },
  "usage_requirements": [
    "Surface receipt.url alongside any claim built on this data so a human can verify it.",
    "Amounts are the bounded ranges as disclosed. Use the provided midpoint only with the range stated.",
    "Report what was filed, when, and the document it came from. Do not attribute motive to a filer."
  ],
  "scope": {
    "included": [
      "us_house_clerk",
      "us_senate_efd",
      "us_oge"
    ],
    "excluded": [
      "sec_edgar"
    ],
    "note": "SEC coverage is not published in v1. Rows obtained from commercial providers are excluded at the database view, not filtered in application code. Scope boundaries are stated rather than discovered."
  },
  "provenance": {
    "methodology_version": "receipt-or-drop-v1",
    "row_receipt_field": "receipt.url",
    "source_line_field": "provenance.source_line_number",
    "observation_field": "provenance.first_observed_at",
    "note": "Filing content reaches back further than observation history. as_of queries are bounded by coverage.point_in_time_floor, which the API returns on every response; below that floor it returns a typed 400 rather than a guess."
  }
}
