Skip to main content
Glama
Opedd

Opedd

Official
by Opedd

Lets AI assistants (Claude Desktop, Cursor, Windsurf, or any MCP-compatible host) discover, purchase, and verify content licenses autonomously — mid-conversation, without opening a browser. Every license is registered on-chain (Tempo blockchain) with cryptographic proof.

Unlike generic search APIs, Opedd returns content with a verifiable license key — defensible under the EU AI Act and any copyright jurisdiction.

Quick start

npx opedd-mcp

Then add it to your MCP host (see Claude Desktop / Cursor / Windsurf setup below). Discovery + verification tools work with no configuration; purchasing and content retrieval use optional API keys from opedd.com.

Related MCP server: PixelVault

Hosted endpoint — no install (mcp.opedd.com)

Prefer zero-install? The same 17 tools are served hosted at https://mcp.opedd.com/mcp (Streamable HTTP). Auth is an Authorization: Bearer header with any Opedd key — public discovery tools need no auth at all.

Claude Messages API (production agents):

{
  "mcp_servers": [{
    "type": "url",
    "url": "https://mcp.opedd.com/mcp",
    "name": "opedd",
    "authorization_token": "opedd_buyer_live_..."
  }]
}

OpenAI Responses API:

{
  "tools": [{
    "type": "mcp",
    "server_label": "opedd",
    "server_url": "https://mcp.opedd.com/mcp",
    "authorization": "opedd_buyer_live_..."
  }]
}

claude.ai / Claude Desktop custom connector (all plans): Settings → Connectors → Add custom connector → URL https://mcp.opedd.com/mcp; add a Authorization: Bearer <your key> request header for the credentialed tools.

Cursor (.cursor/mcp.json):

{
  "mcpServers": {
    "opedd": {
      "url": "https://mcp.opedd.com/mcp",
      "headers": { "Authorization": "Bearer ${env:OPEDD_KEY}" }
    }
  }
}

Key routing: opedd_pub_* → publisher tools · opedd_buyer_* → content retrieval · ent_* → bulk feeds · buyer-portal JWT → audit/compliance/EU-AI-Act tools. Your key is forwarded per request and never stored by the gateway.

What it does

Exposes up to 17 tools to any AI assistant (some are conditional on env vars):

Always available — discovery + per-article purchase + onboarding + rights signaling

Tool

Description

lookup_content

Look up an article by URL — returns title, publisher, pricing

purchase_license

Buy a single-article license via Stripe — returns OP-XXXX-XXXX key. Requires terms_accepted: true (genuine buyer assent to opedd.com/terms; recorded with the licence)

verify_license

Verify a license key — returns validity, article, publisher, blockchain proof

browse_registry

Browse the public Opedd registry — lists issued LICENSES (use publisher_directory to browse publishers themselves)

publisher_directory

Browse the public Opedd publisher catalog — paginated publishers with article counts + pricing + sample articles (primary buyer-discovery surface for AI labs)

purchase_enterprise_license

Buy a bulk enterprise license covering multiple publishers (Phase 10) — returns Stripe client_secret. Requires terms_accepted: true; the current Master Services Agreement version label is recorded with the licence (the backend rejects superseded labels)

rsl_get

Fetch a publisher's RSL Standard manifest — public discovery surface; jsonld: true returns CDSM Article 4(3) signed receipt (Phase 12 W1.1)

detect_platform

Detect the content platform behind a URL — returns suggested onboarding workflow for Substack / Beehiiv / Ghost / Medium / Brevo / custom (Phase 12 W3.1)

Requires OPEDD_BUYER_TOKEN (opedd_buyer_live_*)

Tool

Description

get_content

Retrieve a licensed article — includes 7 Phase 11 M2 RAG metadata fields (author, language, word_count, content_hash, image_urls, canonical_url, tags)

Requires OPEDD_ACCESS_KEY (ent_*) — buyer-side feed surfaces

Tool

Description

list_feed

List articles from a buyer's licensed catalog with since delta-feed support (Phase 11 M5). Flat-fee scopes carry full content_body; metered (filtered-scope) keys get a discovery-only feed (content_body: null, content_access: "metered_per_call") — fetch text via get_content (billed per call)

stream_feed_ndjson

Bulk-export up to 1000 articles per call via NDJSON wire format (Phase 11 M3). Same per-scope content contract as list_feed — metered keys export metadata only

Requires OPEDD_BUYER_JWT (Supabase JWT) — buyer account + audit + compliance + EU AI Act surfaces

Tool

Description

get_buyer_account

Fetch buyer profile + masked API key list — buyer-dashboard mental model

get_audit_events

Per-event audit ledger with Tempo on-chain attestation inclusion proofs inline (Phase 9.x + 10 M5)

get_compliance_dossier

Procurement-defense compliance dossier mapping retrievals to license terms (Phase 11 M4)

article_53_attestation

Signed JWT attesting EU AI Act Article 53(1)(d) compliance for a license — the artifact AI labs hand to legal/procurement (Phase 12 W1.4)

Requires OPEDD_PUB_BEARER (opedd_pub_*) — publisher-side

Tool

Description

list_publisher_content

List your own articles with pricing and stats

push_content

Push your articles to Opedd so AI buyers can license them — 1–100 per call (title/url/html_body required, everything else optional). Onboard your back-catalogue or new posts with no code, straight from your AI assistant.

Regulatory framing (CDSM Article 4 vs EU AI Act Article 53 — never conflated)

Per Opedd's platform invariants (W1.6 amendment):

  • rsl_get(publisher_id, jsonld=true) → publisher-side CDSM Article 4(3) opt-out declaration (signed JSON-LD receipt over the reservation state).

  • article_53_attestation(license_id) → buyer-side EU AI Act Article 53 attestation (signed HS256 JWT scoped to one license).

  • get_compliance_dossier(from, to) → comprehensive procurement-defense dossier covering BOTH frameworks (publisher CDSM reservation honored + buyer Article 53 evidence chain).

These serve different audit-defensibility modes and never share wire format. Tool descriptions cite the W1.6 invariant inline.

Install

npm install -g opedd-mcp

Or run directly with npx:

npx opedd-mcp

Configuration

Set environment variables to pre-configure the server:

Variable

Required

Description

OPEDD_BUYER_EMAIL

Recommended

Your email — used as default for all purchases

OPEDD_PAYMENT_METHOD_ID

Recommended

Stripe pm_... ID — used for autonomous per-article purchasing

OPEDD_BUYER_TOKEN

Optional

Buyer API token (opedd_buyer_live_* canonical; opedd_buyer_test_* for sandbox) — enables get_content

OPEDD_ACCESS_KEY

Optional

Enterprise access key (ent_*) — enables list_feed + stream_feed_ndjson

OPEDD_BUYER_JWT

Optional

Supabase session JWT from the buyer portal — enables get_buyer_account + get_audit_events + get_compliance_dossier + article_53_attestation

OPEDD_PUB_BEARER

Optional

Canonical Publisher API Bearer key (opedd_pub_<env>_<32-hex>; issued via POST /publishers-api-keys action=create_api_key) — enables list_publisher_content + push_content. v0.4.0 canonical.

OPEDD_API_KEY

Deprecated

Legacy Publisher API key (op_...) — fallback during the transition window; will stop working when opedd-backend Phase C deploys. Migrate to OPEDD_PUB_BEARER.

OPEDD_API_URL

Optional

Override the API base URL (default: Opedd production)

OPEDD_MCP_TELEMETRY

Optional

Set to 0 to disable anonymous usage telemetry (see below)

Getting a Stripe payment method ID: Save a card in your Stripe account and retrieve the pm_... ID via the Stripe API.

Anonymous usage telemetry

To understand how AI assistants use this server, opedd-mcp sends anonymous telemetry for each tool call: only the tool name, its duration, whether it succeeded, and the server version — plus a random per-process id. It never sends tool parameters, responses, your email, API keys, tokens, content, or your IP. Data goes to Opedd's PostHog (EU region).

To opt out, set either environment variable before starting the server:

OPEDD_MCP_TELEMETRY=0
# or the cross-tool standard:
DO_NOT_TRACK=1

When opted out, no telemetry client is created and nothing is sent.

Claude Desktop setup

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "opedd": {
      "command": "npx",
      "args": ["opedd-mcp"],
      "env": {
        "OPEDD_BUYER_EMAIL": "you@yourcompany.com",
        "OPEDD_PAYMENT_METHOD_ID": "pm_..."
      }
    }
  }
}

Cursor / Windsurf setup

Add to your MCP settings:

{
  "opedd": {
    "command": "npx opedd-mcp",
    "env": {
      "OPEDD_BUYER_EMAIL": "you@yourcompany.com",
      "OPEDD_PAYMENT_METHOD_ID": "pm_..."
    }
  }
}

Example usage

Once configured, you can ask your AI assistant:

"Look up the licensing options for this article: https://theinformation.com/articles/..."

"Purchase a human republication license for that article on my behalf."

"Verify license key OP-XXXX-XXXX and tell me what it covers."

"Browse the latest licenses from The Information publisher."

Phase 12 Wave 1 + 3 surfaces (v0.3.0)

"What does publisher 8268c353-ffa3-4db3-bbb2-90ddbbb43e41 license? Pull the RSL manifest." — uses rsl_get

"Get me a CDSM Article 4(3) signed receipt for that publisher's reservation state — set jsonld: true." — uses rsl_get with content negotiation

"Generate an EU AI Act Article 53 attestation JWT for our license 11111111-... covering the last 90 days. I need the artifact for our procurement audit committee." — uses article_53_attestation (requires OPEDD_BUYER_JWT)

"This publisher just signed up: https://noahpinion.substack.com. Which onboarding workflow should we use?" — uses detect_platform

"Browse the finance category in the Opedd catalog — show me publishers with at least 50 articles." — uses publisher_directory

"What's in my buyer account? Show me my active API keys." — uses get_buyer_account (requires OPEDD_BUYER_JWT)

The assistant will call the appropriate Opedd tools, show you the results, and—if you've pre-configured a payment method—can complete a purchase autonomously.

Payment methods

Purchases use Stripe by default (via pm_... payment method IDs). USDC on Tempo is also supported by the Opedd API — pass payment: { method: 'usdc', tx_hash: '0x...' } directly to agent-purchase if building a custom integration.

Development

git clone https://github.com/Opedd/opedd-mcp
cd opedd-mcp
npm install
npm run dev   # runs with tsx (no build step)
npm run build # compiles to dist/

How Opedd compares to search APIs

Opedd

Generic search APIs

What you get

Licensed content + license key + on-chain proof — all in one API call

Scraped web content, no rights

Content delivery

Full article text via API (JSON) — bulk on flat-fee licenses, per-call (metered) on filtered licenses; real-time feed via webhooks

Scraped snippets or full-page dumps

Content quality

Curated publisher content (niche B2B newsletters, expert analysis)

Whatever's on the open web

Rights

Verifiable license key per article, publisher-authorized

No rights clearance

Proof

On-chain (Tempo blockchain) — independently verifiable

None

EU AI Act

Compliant — full training data provenance chain

No provenance

Pricing

Publisher sets their own price per article

Platform decides

Delivery modes

Per-article API, bulk feed (JSON firehose), buyer webhooks (push)

Query-response only

Protocol

REST + MCP native

REST only

Opedd is the licensed content delivery layer for AI — not just a licensing wrapper. Publishers upload content, you retrieve it via API with a license attached. One integration gives your pipeline both the content and the legal right to use it.

Learn more

License

MIT

Available Tools

8 tools
browse_registryAInspect

Browse the public Opedd license registry. Returns recently issued licenses and licensable content. Filter by publisher_id to explore all content from a specific publisher. Filter by article_id to see all licenses issued for a specific article.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of results to return (default: 10, max: 50)
article_idNoFilter results to a specific article (UUID)
publisher_idNoFilter results to a specific publisher (UUID)

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses read-only nature via 'Browse' and 'Returns', notes the registry is public, and mentions filtering capabilities. However, it does not explain result ordering beyond 'recently issued', pagination details, or any rate limits, leaving some behavioral traits undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and followed by the two key filters. Every word contributes, with no redundancy or unrelated details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only browsing tool with three optional parameters and no output schema, the description sufficiently covers what it returns and how to filter. It could mention the limit parameter or explicitly state read-only behavior, but these are already implied or covered by the schema, making it complete enough for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all three parameters. The description adds value by explaining the purpose of publisher_id ('explore all content from a specific publisher') and article_id ('see all licenses issued for a specific article') in natural language, going beyond the schema's bare definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as browsing the public Opedd license registry and specifies that it returns recently issued licenses and licensable content. It distinguishes itself from sibling tools by focusing on registry browsing and offering specific filters for publisher_id and article_id.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (browse the registry, explore a publisher or article's licenses) but does not explicitly mention alternatives or when not to use this tool compared to siblings like lookup_content or list_feed. It provides useful context but lacks explicit exclusions or alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

detect_platformAInspect

Detect the content platform behind a URL via POST /detect-platform (Phase 12 Wave 3 W3.1). Public no-auth lookup. Given a URL, identifies what platform powers it (Substack / Beehiiv / Ghost / Medium / Brevo / custom) and returns the suggested onboarding workflow. Hostname-detectable platforms (Substack subdomain, Beehiiv suffix, etc.) resolve in milliseconds; custom domains may take ~few seconds while the detector probes well-known platform endpoints in parallel. Returns: {platform, confidence, archive_method, forward_method, required_credentials, instructions}. The archive_method + forward_method fields are the two onboarding-workflow inputs Opedd's setup wizard reads (one for historical content backfill, one for new-content forward stream). instructions is human-readable operator copy explaining the inferred path.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublisher URL to inspect (any well-formed URL works; hostname-match short-circuits the probe path).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses auth requirements ('Public no-auth lookup'), latency expectations (milliseconds vs ~few seconds for custom domains), and the fact that it probes well-known platform endpoints in parallel. This is substantial behavioral context, though it does not cover failure modes or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the primary action and auth status, then provides return format and field semantics. It includes the unnecessary phase label 'Phase 12 Wave 3 W3.1' which adds noise, but otherwise every sentence contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description enumerates all return fields (platform, confidence, archive_method, forward_method, required_credentials, instructions) and explains how the key workflow fields are consumed. It also covers performance and auth, making it complete for a single-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the url parameter with 100% coverage, including the hostname-match short-circuit behavior. The description adds no additional parameter-specific semantics; it only reiterates behavior already in the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Detect the content platform behind a URL' and enumerates output platforms (Substack, Beehiiv, Ghost, Medium, Brevo, custom). It clearly distinguishes from sibling tools by focusing on platform identification and onboarding workflow rather than content retrieval or licensing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states 'Public no-auth lookup' and 'Given a URL, identifies what platform powers it,' which implies the use case. It also explains that the returned archive_method and forward_method are read by Opedd's setup wizard, giving strong context for when to use it. However, it does not explicitly contrast with sibling tools or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lookup_contentAInspect

Look up a piece of content on the Opedd registry by URL. Returns the article title, publisher, available license types, and pricing (human republication price and AI training/inference price). Always call this first to check if content is licensable and what it costs.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe canonical URL of the article or content to look up

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses output fields and implies a read-only lookup, but it does not mention error handling, required permissions, or any edge cases (e.g., unavailable content). However, for a simple lookup tool, the disclosed behavior is adequate but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and resource, then returns/usage instruction. Every sentence earns its place—no fluff, no repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter tool with no output schema, the description covers the input (URL), the output (title, publisher, licenses, pricing), and the appropriate context ('Always call this first'). This is fully sufficient for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (url described as 'canonical URL'), so the baseline is 3. The description reiterates that lookup is 'by URL' but adds no extra semantic information beyond the schema, such as format expectations or non-canonical URL handling.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Look up' with a clear resource ('content on the Opedd registry by URL'), and further clarifies the lookup scope by listing returned data (title, publisher, license types, pricing). This clearly differentiates it from siblings like 'get_content' or 'browse_registry' by emphasizing licensing/cost information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Always call this first to check if content is licensable and what it costs' gives explicit guidance on when to use the tool. It does not explicitly mention alternatives or when not to use it, but the directive is clear and contextually strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publisher_directoryAInspect

Browse the public Opedd publisher catalog via GET /publisher-directory. Returns paginated publishers with article counts, pricing (per-article + annual + monthly-forward-feed), plan, and sample articles (RAG-extended metadata). The primary discovery surface for AI labs to find Opedd-licensable publishers — distinct from browse_registry (which lists issued LICENSES, not publishers). Filter by category (case-insensitive substring), min_articles, or verified status. Public no-auth — useful pre-purchase scoping before buyers commit to enterprise-license POST.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size cap.
offsetNoPagination offset.
categoryNoCase-insensitive substring filter on publisher category (e.g. 'finance', 'AI').
verifiedNo'true' to show only verified publishers (default), 'false' for unverified.
min_articlesNoFilter to publishers with at least this many licensable articles.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It reveals the HTTP method (GET), public no-auth access, pagination behavior, and the fact that sample articles contain RAG-extended metadata. It lacks rate limit or error details, but for a public read-only browse tool the disclosure is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the primary purpose. Four sentences cover the function, return data, differentiation from a sibling, and use case. The bolded phrase highlights the tool's role without wasting words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description compensates by naming the returned fields (article counts, pricing, plan, sample articles). It also covers auth, pagination, filters, and the intended usage context. This is complete for a public GET tool with five parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description recaps filters (category, min_articles, verified status) but does not add information beyond the schema. The schema already provides details like case-insensitivity and default behavior for verified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (browse), the resource (Opedd publisher catalog), and what it returns (publishers with article counts, pricing, plan, sample articles). It explicitly distinguishes itself from the sibling tool browse_registry by noting the latter lists licenses, not publishers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names browse_registry as the alternative and explains the difference, and further contextualizes when to use it: 'useful pre-purchase scoping before buyers commit to enterprise-license POST.' This is explicit when/why guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

purchase_enterprise_licenseAInspect

Purchase a bulk enterprise license covering multiple publishers (Phase 10). Returns a Stripe client_secret for payment completion + the enterprise_license_id. After payment, an ent_* access key is emailed to buyer_email. Scopes: 'custom' (pass-through publisher_ids), 'platform_wide' (auto-resolve all opted-in publishers), 'filtered' (Phase 10 filter_rules). License tiers: 'rag' (= ai_retrieval), 'training' (= ai_training, flat-fee not metered), 'inference' (= ai_retrieval), 'full_ai' (writes both retrieval + training records).

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeNoCoverage scope (default: custom)
buyer_orgYesBuyer organization name (for billing + audit ledger)
buyer_emailYesEmail to deliver the access key after payment
billing_typeNoBilling cadence (default: annual)
filter_rulesNoRequired when scope='filtered'. See Phase 10 docs for shape: excluded_publisher_ids / direct_license_carveouts / categories / max_price_per_event.
license_tierNoLicense tier (default: rag)
publisher_idsYesArray of publisher UUIDs. Required for scope='custom'; ignored for platform_wide/filtered (resolved server-side).
duration_monthsNoLicense duration in months (default: 12)
buyer_webhook_urlNoOptional HMAC-signed webhook for content.published events on covered publishers

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but description covers the flow (Stripe client secret, emailed key), scope/tier behaviors, and mapping equivalents. Could add auth or rate limit notes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single paragraph with bullet-like lists for scopes and tiers; front-loaded purpose, but could use more structured formatting.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 9 params and nested object, description covers return value, key delivery, scope/tier options, and references Phase 10 docs for filter_rules. Lacks output schema but mentions return contents.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 100% schema coverage, baseline is 3. Description adds value by explaining scope/tier enums and clarifying when publisher_ids is required vs ignored.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly specifies it purchases a bulk enterprise license covering multiple publishers, distinct from sibling purchase_license. Mentions return values and key mapping.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly distinguishes from purchase_license via 'bulk enterprise' wording and explains scopes and tiers to guide selection, but lacks explicit when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

purchase_licenseAInspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
article_idNoOpedd article UUID (use this OR article_url)
buyer_nameNoFull name of the buyer (for the license record and certificate)
article_urlNoURL of the article to license (use this OR article_id)
buyer_emailNoEmail address for the license. Falls back to OPEDD_BUYER_EMAIL env var.
intended_useNoIntended use of the licensed content
license_typeYeshuman = republication/editorial rights, ai = training dataset rights, ai_inference = inference/RAG rights
payment_method_idNoStripe payment method ID (pm_...). Falls back to OPEDD_PAYMENT_METHOD_ID env var.
buyer_organizationNoOrganization or company name (for enterprise/editorial licenses)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses return values (license key, certificate URL), side effect (Handshake Email), and license types. It does not mention payment charges or destructive nature, but overall transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences plus a bullet-like list. Concise and front-loaded with the main purpose. The list of license types is dense but efficient. Slight improvement could be structuring the list better.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 params and no output schema, description covers key outputs, env vars, and license types. It could clarify article_id/article_url exclusivity and payment flow, but it's reasonably complete for a purchase tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds value by explaining env var fallbacks, license type meanings, and the license key format. This goes beyond schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool purchases a content license from the Opedd protocol using Stripe. It specifies the resource and action, and distinguishes from siblings like purchase_enterprise_license and verify_license.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (purchasing a standard license) and mentions environment variable fallbacks for convenience. It could explicitly mention when to use purchase_enterprise_license instead, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rsl_getAInspect

Fetch a publisher's RSL Standard manifest via GET /rsl-manifest (Phase 12 Wave 1 W1.1). 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 4 canonical license types (ai_retrieval, ai_training, human_per_article, human_full_archive) the publisher has opted into, 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. Per INVARIANTS.md W1.6: this is the PUBLISHER-side CDSM Article 4(3) declaration surface. It is NOT an EU AI Act Article 53 attestation (which is buyer-side, JWT-auth, via article_53_attestation tool).

ParametersJSON Schema
NameRequiredDescriptionDefault
jsonldNoIf true, request JSON-LD shape (Accept: application/ld+json) with embedded HMAC-SHA256 signed receipt. Default false returns raw RSL Standard JSON shape.
publisher_idYesUUID of the publisher whose RSL manifest to fetch. Publisher must be verified.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the full burden. It discloses that the endpoint is public and no-auth, explains the two response shapes (raw JSON vs JSON-LD with HMAC-SHA256 signed receipt), and notes the publisher-side CDSM context. This is rich behavioral detail beyond basic read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is informative and front-loaded with the core purpose, but includes some internal project references like 'Phase 12 Wave 1 W1.1' and 'Per INVARIANTS.md W1.6' that add noise. Overall, each sentence earns its place despite the verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and annotations, the description provides comprehensive context: what the manifest contains, why an agent would use it, how the jsonld flag changes the response, and how this tool differs from the sibling attestation tool. It is complete for a simple GET endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers both parameters with detailed descriptions (e.g., jsonld includes the signed receipt behavior). The tool description largely repeats this information without adding new parameter-level semantics. With 100% schema coverage, a baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch a publisher's RSL Standard manifest via GET /rsl-manifest', which is a specific verb+resource. It also distinguishes this tool from the sibling 'article_53_attestation' by explicitly noting it is NOT the EU AI Act Article 53 attestation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: it is a 'discovery surface for AI agents/crawlers wanting to know what's licensable from a publisher BEFORE going through the buyer-account signup flow' and explicitly contrasts it with the buyer-side `article_53_attestation` tool. This gives clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_licenseAInspect

Verify the authenticity of an Opedd license key. Returns license details including: article title, publisher, license type, issue date, amount paid, buyer info, and blockchain proof status. Use this to confirm a license is valid before using licensed content.

ParametersJSON Schema
NameRequiredDescriptionDefault
license_keyYesThe license key to verify (format: OP-XXXX-XXXX)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the tool 'verify[ies]' and 'returns license details,' implying a read-only, non-destructive operation, and it mentions 'blockchain proof status' as part of the response. While it doesn't explicitly state there are no side effects or prerequisites, the verification context is sufficiently transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long. The first sentence states the core purpose; the second lists return fields and gives a usage statement. Every sentence adds value, and the structure is front-loaded with the most important information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no output schema, no annotations), the description is complete. It explains what the tool does, what it returns (listing specific fields), and when to use it. This is sufficient for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for the single parameter, including its format ('OP-XXXX-XXXX'). The description does not add additional parameter semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Verify the authenticity of an Opedd license key.' It uses specific verb+resource phrasing and lists various returned details (article title, publisher, license type, etc.), which distinguishes it from sibling tools like purchase_license or get_buyer_account.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage context: 'Use this to confirm a license is valid before using licensed content.' It does not mention alternatives or exclusions, but the intended scenario is clear enough for an agent to select this tool over others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.6.7
    • First observedbrowse_registry
    • First observeddetect_platform
    • First observedlookup_content
    • First observedpublisher_directory
    • First observedpurchase_enterprise_license
    • First observedpurchase_license
    • First observedrsl_get
    • First observedverify_license

TDQS

A4.4/5.0

Scored across 8 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: browsing registry vs. publisher directory, detecting platform, looking up content, purchasing (enterprise vs. single), fetching RSL manifest, and verifying licenses. No overlapping functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., browse_registry, detect_platform, purchase_license). Even 'rsl_get' fits the verb_noun pattern with an abbreviation.

Tool Count5/5

With 8 tools, the server is well-scoped for its purpose of license registry management, covering discovery, purchase, verification, and platform detection without being excessive or minimal.

Completeness4/5

The tool surface covers the main lifecycle: browsing, searching, purchasing (individual and enterprise), verifying, and fetching manifests. Minor gap: no tool to list or manage purchased licenses for a buyer, but core workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    53 regulatory compliance evidence tools across 3 MCP servers for AI agents. MiCA authorization status, DORA evidence packs, stablecoin risk scoring (105+ tokens), macro intelligence (86 FRED series). Every response ECDSA-signed (ES256K), blockchain-anchored, audit-ready. Free tier, OAuth 2.0.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Exposes publisher journalism to LLMs and agent frameworks via search, retrieval, source grounding, and consistent citation, enabling accurate content retrieval with attribution and policy enforcement.
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    23 research tools for AI agents: web search, social media, academic papers, SEC filings, citation verification, reliability scoring. Pay-per-call from $0.01.
    -