addrbookFor publishers
← The evidence ledger

Evidence row 3476221

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 279a66ea-6b7e-470a-9bcc-865b9a82be4c
Recorded
Previous row
#2716435
Body SHA-256
bd7e5aba8fc27600f36d0131a377b6ed470a625223b967a019f90a0b14da6054
Leaf
0x97e92fec296458679fd300ffb2ae1abc752358dea8175c2f6434e320d01a90a3

What was observed

{
  "count": 16,
  "tools": [
    {
      "description": "Lists licences recently issued on Opedd and the content they cover. Filters: publisher_id and article_id. Public; no key needed.",
      "inputSchema": {
        "properties": {
          "article_id": {
            "description": "Filter results to a specific article (UUID)",
            "type": "string"
          },
          "limit": {
            "description": "Number of results to return (default: 10, max: 50)",
            "type": "number"
          },
          "publisher_id": {
            "description": "Filter results to a specific publisher (UUID)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "browse_registry"
    },
    {
      "description": "Returns the account's audit records, one per licensed access, each with its licence terms and public-record attestation (Merkle root and inclusion proof once confirmed). Filter: event_type ('content_access', 'bulk_content_access' or 'compliance_report_generated'). At most 30 days per call. Read-only. Requires a buyer API key with the 'audit' scope, a buyer session, or the Opedd connector sign-in.",
      "inputSchema": {
        "properties": {
          "cursor": {
            "description": "Opaque cursor for pagination",
            "type": "string"
          },
          "event_type": {
            "description": "Optional event-class filter",
            "enum": [
              "content_access",
              "bulk_content_access",
              "compliance_report_generated"
            ],
            "type": "string"
          },
          "from": {
            "description": "ISO 8601 timestamp lower bound (inclusive)",
            "type": "string"
          },
          "limit": {
            "description": "Max events per response (default: 50, max: 200)",
            "type": "number"
          },
          "to": {
            "description": "ISO 8601 timestamp upper bound (inclusive)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_audit_events"
    },
    {
      "description": "Fetch the authenticated buyer's account profile + masked API key list via GET /buyer-account. Returns the enterprise_buyers row (contact_email, buyer_org, created_at, etc.) plus a list of all buyer-side API keys with masked prefixes (NEVER plaintext post-issuance — only the 12-char key_prefix is returned, e.g. 'opedd_buyer_'). Use cases: post-signup verification ('what was just issued to me?'), buyer dashboard mental model ('what licenses do I currently hold?'), audit prep ('show me the key list before rotation'). For full mid-lifecycle license details (filter_rules, billing, payouts), buyers consult the buyer portal at opedd.com/buyer. Requires OPEDD_BUYER_JWT (JWT-only by design: this surface manages API keys, and a key must never mint keys).",
      "inputSchema": {
        "properties": {},
        "type": "object"
      },
      "name": "get_buyer_account"
    },
    {
      "description": "Returns the account's compliance dossier for a period: one row per licensed article, with article metadata, licence terms, public-record attestation and compliance flags (CDSM Article 4(3) and text-and-data-mining reservations). At most 90 days per call; longer periods are paginated with _meta.next_cursor. Each call is recorded in the account's audit log. Requires a buyer API key with the 'audit' scope, a buyer session, or the Opedd connector sign-in.",
      "inputSchema": {
        "properties": {
          "cursor": {
            "description": "Opaque cursor for pagination",
            "type": "string"
          },
          "from": {
            "description": "ISO 8601 timestamp lower bound (inclusive)",
            "type": "string"
          },
          "to": {
            "description": "ISO 8601 timestamp upper bound (inclusive). Window cap 90 days.",
            "type": "string"
          }
        },
        "required": [
          "from",
          "to"
        ],
        "type": "object"
      },
      "name": "get_compliance_dossier"
    },
    {
      "description": "Retrieve the full body of a licensed article using a buyer API token (opedd_buyer_live_* canonical; opedd_buyer_test_* for sandbox). Requires OPEDD_BUYER_TOKEN env var (create one at opedd.com/licenses after purchasing). Works for licence orders (and for Human republication licences bought before it was retired on 2026-10-26): AI answers monthly and client display return full text. Your self-serve buyer API key reads articles under every order your account holds — no separate order token is needed. AI answers pay-per-request (including the self-serve licence) does NOT retrieve articles: it answers 403 SEARCH_ONLY_LICENCE — ask a question with search_passages instead. Articles the publisher stopped licensing answer 403 ARTICLE_EXCLUDED. The publisher must have content delivery enabled and must have pushed content for the article. The response includes author, language, word_count, content_hash, image_urls, canonical_url and tags. On pre-2026-05-14 historical articles, optional fields (author/language/image_urls/canonical_url/tags) may be NULL. NULL means the data is unavailable for this article, not that it is empty.",
      "inputSchema": {
        "properties": {
          "article_id": {
            "description": "The Opedd article UUID to retrieve content for",
            "type": "string"
          },
          "buyer_token": {
            "description": "Buyer API token (opedd_buyer_live_* or opedd_buyer_test_*). Falls back to OPEDD_BUYER_TOKEN env var.",
            "type": "string"
          }
        },
        "required": [
          "article_id"
        ],
        "type": "object"
      },
      "name": "get_content"
    },
    {
      "description": "List the articles in a licence order you hold. Content contract: AI training orders include full content_body for the back catalogue up to the order date (content_access 'included'). Every other order is discovery-only (content_body null): AI answers monthly and client display fetch text per article via get_content (content_access 'retrieval_per_article'); pay-per-request fetches billed snippets via get_content (content_access 'metered_per_call'). Returns JSON-format response with paginated articles. Use `since` (ISO 8601) for delta-feed polling — only articles published after the timestamp. Use `cursor` for pagination across pages. Credentials: the order's enterprise access key (OPEDD_ACCESS_KEY, ent_*) OR your buyer API key (OPEDD_BUYER_TOKEN) with order_id — if your account holds exactly one active order, order_id may be omitted; with several, the error lists them. stream_feed_ndjson returns up to 1000 articles per call (200 here).",
      "inputSchema": {
        "properties": {
          "cursor": {
            "description": "Opaque cursor from the prior response's data.pagination.next_cursor",
            "type": "string"
          },
          "limit": {
            "description": "Max articles per response (default: 50, max: 200)",
            "type": "number"
          },
          "order_id": {
            "description": "The licence order to list (UUID, from list_licence_orders). Used with a buyer API key; ignored with an ent_* key.",
            "type": "string"
          },
          "since": {
            "description": "ISO 8601 timestamp — return only articles with published_at > since",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_feed"
    },
    {
      "description": "Lists the account's licence orders, newest first, each with its lines (publication, licence, unit, price, quantity, status). With order_id, returns one order, each line with its Schedule text and the SHA-256 fingerprint recorded in the public registry on Tempo when the line was issued. Read-only. Requires a buyer API key with the 'audit' scope, a buyer session, or the Opedd connector sign-in.",
      "inputSchema": {
        "properties": {
          "cursor": {
            "description": "Opaque cursor from the prior response's pagination.next_cursor",
            "type": "string"
          },
          "limit": {
            "description": "Orders per page (default 20, max 100)",
            "type": "number"
          },
          "order_id": {
            "description": "Read one order (UUID) including Schedule documents",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "list_licence_orders"
    },
    {
      "description": "Looks up an article on Opedd by its web address. Returns the title, publication and how to license it (pay-per-answer search or a licence order); for a publication's homepage, the publication and its licensing page; or that it is not on Opedd yet (then request_publication records the request).",
      "inputSchema": {
        "properties": {
          "url": {
            "description": "The canonical URL of the article or content to look up",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "name": "lookup_content"
    },
    {
      "description": "Place a licence order with Opedd for one or more publishers. One order = one licence and one billing mode; each publisher becomes its own Schedule priced from that publisher's settings (publishers that do not offer it are returned in `unavailable` and never charged). Licences: 'enterprise' (AI answers: 'monthly' full text per article, or 'metered' pay per answer, read through search_passages only; self-serve buyers need no order for this, the licence created when they add a card at sign-up already covers every publisher offering a per-answer price), 'archive' (Full catalogue: everything the publisher published up to the order date, kept permanently, not for AI training: 'one_time', full text in the feed), 'training' (AI training of the back catalogue up to the order date: 'one_time', bulk export via stream_feed_ndjson), 'display' (client display: 'monthly', quantity = number of end clients). A monthly AI answers subscription only covers articles published from the day it starts; set include_archive=true on a 'enterprise' + 'monthly' order to add each publisher's Full catalogue in the same order (complete access). Returns the order, its lines, the access key (works once paid) and hosted_invoice_url — the buyer (your principal) pays there. Requires a buyer session (OPEDD_BUYER_JWT) and terms_accepted=true after the buyer has accepted the Opedd Master Services Agreement (opedd.com/terms).",
      "inputSchema": {
        "properties": {
          "billing_mode": {
            "description": "enterprise: monthly | metered; archive: one_time; training: one_time; display: monthly",
            "enum": [
              "monthly",
              "metered",
              "one_time"
            ],
            "type": "string"
          },
          "include_archive": {
            "description": "Optional, monthly AI answers only (licence 'enterprise' + billing_mode 'monthly'). true adds each publisher's Full catalogue to the same order: everything published before the order date, kept permanently, not for AI training. Publishers that do not sell their Full catalogue are returned in `unavailable`.",
            "type": "boolean"
          },
          "licence": {
            "description": "enterprise = AI answers, archive = Full catalogue (everything published up to the order date, kept permanently, no AI training), training = AI training, display = client display",
            "enum": [
              "enterprise",
              "archive",
              "training",
              "display"
            ],
            "type": "string"
          },
          "publisher_ids": {
            "description": "Publisher UUIDs (1-500; at most 18 for metered)",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "quantity": {
            "description": "display only: number of end clients (1-500)",
            "type": "number"
          },
          "terms_accepted": {
            "description": "REQUIRED. Set true only after the buyer has accepted the Opedd Master Services Agreement at opedd.com/terms. The current version label is recorded with the order; orders without genuine acceptance are rejected.",
            "type": "boolean"
          }
        },
        "required": [
          "licence",
          "billing_mode",
          "publisher_ids",
          "terms_accepted"
        ],
        "type": "object"
      },
      "name": "place_licence_order"
    },
    {
      "description": "Lists the publications on Opedd with their article counts, licences, prices and sample articles. Filters: category (case-insensitive substring), min_articles and verified status. Public; no key needed.",
      "inputSchema": {
        "properties": {
          "category": {
            "description": "Case-insensitive substring filter on publisher category (e.g. 'finance', 'AI').",
            "type": "string"
          },
          "limit": {
            "description": "Page size cap.",
            "type": "number"
          },
          "min_articles": {
            "description": "Filter to publishers with at least this many licensable articles.",
            "type": "number"
          },
          "offset": {
            "description": "Pagination offset.",
            "type": "number"
          },
          "verified": {
            "description": "'true' to show only verified publishers (default), 'false' for unverified.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "publisher_directory"
    },
    {
      "description": "Asks Opedd to tell you when a publication it does not carry yet becomes available to license. For an article that lookup_content reports is not on Opedd. Records the request against the email given; nothing is bought. If the publication is already on Opedd, returns its licensing page instead. Free; no key needed.",
      "inputSchema": {
        "properties": {
          "email": {
            "description": "Where Opedd should write when the publication is available (the user's email, with their consent).",
            "type": "string"
          },
          "name": {
            "description": "Optional: the requester's name.",
            "type": "string"
          },
          "note": {
            "description": "Optional: what the content is needed for (max 1000 characters).",
            "type": "string"
          },
          "organization": {
            "description": "Optional: the requester's company or fund.",
            "type": "string"
          },
          "url": {
            "description": "The web address of the publication or of one of its articles.",
            "type": "string"
          }
        },
        "required": [
          "url",
          "email"
        ],
        "type": "object"
      },
      "name": "request_publication"
    },
    {
      "description": "Fetch a publisher's RSL Standard manifest (machine-readable licensing terms). Public no-auth endpoint — discovery surface for AI agents/crawlers wanting to know what's licensable from a publisher BEFORE going through the buyer-account signup flow. Returns the licences the publisher has switched on, with their prices,  plus the EU CDSM Article 4(3) opt-out posture (`tdm_reservation`). Set `jsonld: true` to request the JSON-LD shape with embedded HMAC-SHA256 signed receipt over the CDSM Article 4(3) reservation state + `tdm:reservationSignedAt` timestamp — regulators can post-hoc verify the reservation was the claimed value at the claimed time. Default `jsonld: false` returns the raw RSL Standard JSON manifest. This is the publisher's own declaration, not a record of a buyer's use (get_compliance_dossier records that).",
      "inputSchema": {
        "properties": {
          "jsonld": {
            "description": "If true, request JSON-LD shape (Accept: application/ld+json) with embedded HMAC-SHA256 signed receipt. Default false returns raw RSL Standard JSON shape.",
            "type": "boolean"
          },
          "publisher_id": {
            "description": "UUID of the publisher whose RSL manifest to fetch. Publisher must be verified.",
            "type": "string"
          }
        },
        "required": [
          "publisher_id"
        ],
        "type": "object"
      },
      "name": "rsl_get"
    },
    {
      "description": "Full-text search of the articles licensable on Opedd. Returns matching articles with the publication, prices, word count and a short description; never article text. Supports quoted phrases and -word to exclude a word. Free; no key needed.",
      "inputSchema": {
        "properties": {
          "limit": {
            "description": "Max results (default 20, max 50).",
            "type": "number"
          },
          "publisher": {
            "description": "Optional publisher slug to search within.",
            "type": "string"
          },
          "query": {
            "description": "Search words (max 200 characters).",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "search_content"
    },
    {
      "description": "search_passages answers questions that the publications on Opedd cover, with licensed passages and a citation for each; it returns nothing for subjects none of them cover. Publications on Opedd now: Bill Emmott's Global View (Geopolitics); Coffee in the Desert (Geopolitics); World Politics Review; Understanding AI (Technology); Geopolitical Dispatch (Geopolitics); The Realistic Optimist (Technology); SemiVision (Technology); Embedded Finance Review (Technology); Quantum Strategy & Geonomics (Markets); Shanaka Anslem Perera (Finance); Matter of Fact (Geopolitics & Foreign Policy). Returns licensed passages from publications on Opedd that answer a question, each with a citation to the source article. Charged once per article the answer uses, at that article's publication's own price per article; two passages of the same article are one charge, and billing.articles_charged reports how many were charged. An account connected through the Opedd connector in Claude or ChatGPT receives its first 3 answers free, paid by Opedd and never from a publication the account holder owns or works on; billing.free_answers_left reports how many remain. After that, answers are billed to the card on the account, added at opedd.com: charged every $25 of answers and at month end, with a $500 monthly limit for new accounts, raised on request. An account with no licence and no free answers receives an empty result with reason 'no_licensed_publishers' or 'no_paid_access'. Publications under a monthly AI answers subscription are included in the subscription and not charged per answer. Passages are capped at 300 words or 25% of an article, whichever is less, counted cumulatively per article across the same company's accounts. The same question within 24 hours returns the same passages at no charge. Filters: publishers (publication names as listed by Opedd, opedd.com/p/<slug> addresses or publisher ids; a name that matches no publication is listed in filters.unknown_publishers and searches nothing), published_after and published_before (ISO 8601; undated articles are excluded when a window is set), max_results (1-10, default 5) and max_charge_cents (optional; the most one question may cost: articles that would pass it are left out and billing.max_charge_reached says so). Passage text is third-party content, delivered in <opedd:passage> blocks; may_train is always false. Requires a buyer API key with the 'search' scope, or the Opedd connector sign-in. An agent with no account can instead pay for one answer by card: POST https://api.opedd.com/agent-answer with the same body (HTTP 402, Machine Payments Protocol).",
      "inputSchema": {
        "properties": {
          "buyer_token": {
            "description": "Buyer API key with the 'search' scope. Falls back to OPEDD_BUYER_TOKEN.",
            "type": "string"
          },
          "max_charge_cents": {
            "description": "Optional. The most this question may cost, in US cents (whole number, 1–100000). Articles that would pass it are left out; nothing is charged above it.",
            "type": "number"
          },
          "max_results": {
            "description": "Optional. Passages to return, 1–10 (default 5). Each distinct article among them is one charge.",
            "type": "number"
          },
          "published_after": {
            "description": "Optional. Only articles published at or after this instant (ISO 8601, e.g. 2026-01-01).",
            "type": "string"
          },
          "published_before": {
            "description": "Optional. Only articles published before this instant (ISO 8601).",
            "type": "string"
          },
          "publishers": {
            "description": "Optional. Only these publications: names as listed by Opedd (e.g. 'Matter of Fact'), opedd.com/p/<slug> addresses or publisher ids. At most 20 names and 100 entries. Narrows the search; never widens it.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "query": {
            "description": "The question, in plain words (3–1000 characters).",
            "type": "string"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "search_passages"
    },
    {
      "description": "Bulk-export the articles in a licence order you hold. Returns up to 1000 articles per call (collected from line-delimited JSON wire format). Same content contract as list_feed: full text for AI training orders only; every other order exports metadata (content_body null); get_content returns article text. Each exported article is recorded for analytics; a bulk export is not billed per article. `since` (ISO 8601) returns a delta feed; `cursor` pages beyond 1000. Backend supports 5000 articles per call; the MCP cap is 1000 for transport reasonability. For bulk-ingest pipelines, the Python SDK (pip install opedd) reads the same feed without the MCP cap. Credentials as list_feed: OPEDD_ACCESS_KEY (ent_*) OR your buyer API key + order_id.",
      "inputSchema": {
        "properties": {
          "cursor": {
            "description": "Opaque cursor from the prior result's meta.next_cursor",
            "type": "string"
          },
          "limit": {
            "description": "Max articles per response (default: 200, max: 1000)",
            "type": "number"
          },
          "order_id": {
            "description": "The licence order to export (UUID). Used with a buyer API key; ignored with an ent_* key.",
            "type": "string"
          },
          "since": {
            "description": "ISO 8601 timestamp — return only articles with published_at > since",
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "stream_feed_ndjson"
    },
    {
      "description": "Checks an Opedd licence key. Returns the licence details (article title, publication, licence type, issue date, amount paid, buyer and public-record proof status), or that the key was not found.",
      "inputSchema": {
        "properties": {
          "license_key": {
            "description": "The license key to verify (format: OP-XXXX-XXXX)",
            "type": "string"
          }
        },
        "required": [
          "license_key"
        ],
        "type": "object"
      },
      "name": "verify_license"
    }
  ]
}

What the leaf hashes

{"body":"bd7e5aba8fc27600f36d0131a377b6ed470a625223b967a019f90a0b14da6054","id":3476221,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793922437857153,"prev":2716435,"subject":"279a66ea-6b7e-470a-9bcc-865b9a82be4c","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (322504 rows).

  1. 0x97e9a1176957f8e8d811814a7dd635de7d5ffa716cd46f19aee100c0bc17b0dc
  2. 0x55d34ccee45c1092f162184397f4d809d27521ae3940ef13727e838653868cfe
  3. 0x38c24b09eb69a253e4692c9c861bcd28873f4060f800dc75e710c56948fc700d
  4. 0x790b6e15d176db0e2bb4e1d81574163ddffa8461e2bd389764bdfb2df1cd5e57
  5. 0xf88b511dc15772c463b3bef634f211752d678aff8a970cf0551597fd5b1e4bd6
  6. 0xfa244fbf944914d6e7e5fcd01fe4c726e885d0ecedb135168d875c694954ed26
  7. 0x3be541ea0238f9f7937830649e8d3e2912f2e76d844cd9323dfa37200865ef48
  8. 0x8a70ab452bc35af166102cb8edb614cfc9027e09d8dd4ce538635f4bdb9e9713
  9. 0x481effcfab96744d92a233fb99ab13b1652989100f590d4b83eef2f6226eafa0
  10. 0xbaaef90886654b88fdf459ccb638921d4f071b7eca736edcaf45670960e1b139
  11. 0x6cf651a37b6f12288547400b387e056f72aa63fdaa3ac2db0a10b5b35c53ac80
  12. 0x1f0ff48f87b7b133e5e5b7c14571fee2585d29ed58b8e8a731c9b3a5ac469cd1
  13. 0xbf751a74028033cca1ac40547fae587eb2c92fbf44be64fc4ef59b43e3203be0
  14. 0x5c6e3c27e9a4903fc5bb83db04b473a90d793c8aaff5c480fad105e530755408
  15. 0x8d4c57bbc31050ce925844401ecdf17b888da2f6d1ae583a863bdf84d2854302
  16. 0x5c64b7138585466e7e8be72af6f3dc72c511db2c0c1dc5b6e34ad4e9456c2308
  17. 0x7e5b4628b4269525ce0744fb873651b9d7be5748de44b7e6b858af09c7e30bd8
  18. 0xfb4e1f4d701ae273fb0cd57757f659e327608e5561a752b2099b436618493c84
  19. 0xf72fe7c4860b9addb17aac4a00b8afc2f8085836173f10f31697c3d192df119b
Day root
0x9f0215efb0252701dc86d5600ce95f276cccc716759bf112525ae863f698d128
Chained
0xc54ddff800630c6cd9656f99e7d6a61adce99bf1cea37121600598b0a9a720d2
Published
On Arc Testnet, block 70942081: 0x88f612ad94ca63af4e4e9faab9f34b665b41f03828afac1571ad013cc62bba94

How to check it · This row as JSON