[{"slug":"ZV-2026-1450","server_name":"mcp.opedd.com","severity":"breaking","title":"mcp.opedd.com: Tool purchase_enterprise_license was removed.","summary":"[breaking] Tool purchase_enterprise_license was removed. [safe] Tool list_licence_orders was added. [safe] Tool place_licence_order was added. [safe] Tool search_passages was added. [risky] Description of get_content changed (28% word delta). [risky] Description of list_feed changed (29% word delta). [risky] Description of purchase_license changed (34% word delta). [breaking] Enum value ai removed from license_type on purchase_license. [breaking] Enum value ai_inference removed from license_type on purchase_license. [safe] Description of stream_feed_ndjson changed (13% word delta).","changes":[{"kind":"tool_removed","tool":"purchase_enterprise_license","detail":"Tool `purchase_enterprise_license` was removed.","severity":"breaking"},{"kind":"tool_added","tool":"list_licence_orders","detail":"Tool `list_licence_orders` was added.","severity":"safe"},{"kind":"tool_added","tool":"place_licence_order","detail":"Tool `place_licence_order` was added.","severity":"safe"},{"kind":"tool_added","tool":"search_passages","detail":"Tool `search_passages` was added.","severity":"safe"},{"kind":"description_changed","tool":"get_content","after":"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 per-article Human republication licences (token scoped to that article) and licence orders: AI answers monthly and client display return full text; AI answers pay-per-request always returns a snippet (up to 300 words or 25% of the article, whatever delivery_mode is asked). Articles the publisher stopped licensing answer 403 ARTICLE_EXCLUDED. The publisher must have content delivery enabled and must have pushed content for the article. Phase 11 M2 RAG-extended shape: response includes 7 RAG-essential metadata fields — author, language, word_count, content_hash, image_urls, canonical_url, tags. On pre-2026-05-14 historical articles, optional fields (author/language/image_urls/canonical_url/tags) may be NULL. NULL means 'data unavailable for this article', NOT 'explicitly empty' — treat as data-missing when filtering; do not interpret as anti-match.","before":"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 per-article licenses (token scoped to that article) and archive licenses (token covers all publisher content). The publisher must have content delivery enabled and must have pushed content for the article. Phase 11 M2 RAG-extended shape: response includes 7 RAG-essential metadata fields — author, language, word_count, content_hash, image_urls, canonical_url, tags. On pre-2026-05-14 historical articles, optional fields (author/language/image_urls/canonical_url/tags) may be NULL. NULL means 'data unavailable for this article', NOT 'explicitly empty' — treat as data-missing when filtering; do not interpret as anti-match.","detail":"Description of `get_content` changed (28% word delta).","severity":"risky","descriptionDelta":0.2786885245901639},{"kind":"description_changed","tool":"list_feed","after":"List articles from a buyer's licensed catalog via GET /enterprise-license (Phase 10 + 11). 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. Requires OPEDD_ACCESS_KEY (ent_* enterprise access key). For larger bulk corpus pulls, use stream_feed_ndjson (up to 1000 articles per call vs 200 here).","before":"List articles from a buyer's licensed catalog via GET /enterprise-license (Phase 10 + 11). Content contract: flat-fee scopes (custom/platform_wide) include full content_body; METERED (filtered-scope) keys get a discovery-only feed — content_body is null and content_access is 'metered_per_call'; fetch article text via get_content (each retrieval is billed). 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. Requires OPEDD_ACCESS_KEY (ent_* enterprise access key). For larger bulk corpus pulls, use stream_feed_ndjson (up to 1000 articles per call vs 200 here).","detail":"Description of `list_feed` changed (29% word delta).","severity":"risky","descriptionDelta":0.2941176470588235},{"kind":"description_changed","tool":"purchase_license","after":"Purchase a content license from the Opedd protocol using a Stripe payment method. Returns a license key (format: OP-XXXX-XXXX) and a certificate URL. The buyer receives a Handshake Email with their license key. Set OPEDD_BUYER_EMAIL and OPEDD_PAYMENT_METHOD_ID env vars to avoid passing them on every call. Single-article purchases are Human republication licences only (license_type 'human'). AI licences (AI answers, AI training, client display) are bought as licence orders: see place_licence_order.","before":"Purchase a content license from the Opedd protocol using a Stripe payment method. Returns a license key (format: OP-XXXX-XXXX) and a certificate URL. The buyer receives a Handshake Email with their license key. Set OPEDD_BUYER_EMAIL and OPEDD_PAYMENT_METHOD_ID env vars to avoid passing them on every call. License types: 'human' = republication rights, 'ai' = training dataset rights, 'ai_inference' = inference/RAG rights.","detail":"Description of `purchase_license` changed (34% word delta).","severity":"risky","descriptionDelta":0.34375},{"kind":"enum_value_removed","path":"inputSchema.properties.license_type","tool":"purchase_license","before":"ai","detail":"Enum value `ai` removed from `license_type` on `purchase_license`.","severity":"breaking"},{"kind":"enum_value_removed","path":"inputSchema.properties.license_type","tool":"purchase_license","before":"ai_inference","detail":"Enum value `ai_inference` removed from `license_type` on `purchase_license`.","severity":"breaking"},{"kind":"description_changed","tool":"stream_feed_ndjson","after":"Bulk-export a buyer's licensed catalog via GET /enterprise-license?format=ndjson (Phase 11 M3). 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) — use get_content for article text. Each article emits one usage_records row (analytics-only sentinel 'bulk-export:<request_id>:<article_id>' — not metered-billable per the revenue-model bifurcation invariant). Use `since` (ISO 8601) for delta-feed. Use `cursor` to paginate beyond 1000. Backend supports 5000 articles per call; the MCP cap is 1000 for transport reasonability. Real bulk-ingest pipelines should use the Python SDK (pip install opedd) directly — not via MCP. Requires OPEDD_ACCESS_KEY (ent_*).","before":"Bulk-export a buyer's licensed catalog via GET /enterprise-license?format=ndjson (Phase 11 M3). Returns up to 1000 articles per call (collected from line-delimited JSON wire format). Same per-scope content contract as list_feed: METERED (filtered-scope) keys export metadata only (content_body null, content_access 'metered_per_call') — use get_content for article text. Each article emits one usage_records row (analytics-only sentinel 'bulk-export:<request_id>:<article_id>' — not metered-billable per the revenue-model bifurcation invariant). Use `since` (ISO 8601) for delta-feed. Use `cursor` to paginate beyond 1000. Backend supports 5000 articles per call; the MCP cap is 1000 for transport reasonability. Real bulk-ingest pipelines should use the Python SDK (pip install opedd) directly — not via MCP. Requires OPEDD_ACCESS_KEY (ent_*).","detail":"Description of `stream_feed_ndjson` changed (13% word delta).","severity":"safe","descriptionDelta":0.12745098039215685}],"published_at":"2026-09-25T12:13:14.401Z"}]