License checks, signed rights proof, keyless pre-call checks for MCP servers, and the agent store
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Optional: Bearer <your Rightshold API key>. License checks work without it; with it, assessments, licenses you hold and manifests are kept in your account.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Call when you have a rights or licensing question in plain English, such as 'Can I use CC BY-NC 4.0 images in a paid ad campaign?'. Returns the license or registered resource and the use it understood, and a deterministic answer with reasons; it asks for clarification instead of guessing. Check the understood use before relying on it. Free, no key.
Plain-language rights question
Optional: pin a registered resource instead of letting the interpreter match one.
Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {"commercial_use":true}
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Call when you have a rights or licensing question in plain English, such as 'Can I use CC BY-NC 4.0 images in a paid ad campaign?'. Returns the license or registered resource and the use it understood, and a deterministic answer with reasons; it asks for clarification instead of guessing. Check the understood use before relying on it. Free, no key.
| Argument | Type | Description |
|---|---|---|
| question* | string | Plain-language rights question |
| resource_id | string | Optional: pin a registered resource instead of letting the interpreter match one. |
| intended_use | object | Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {"commercial_use":true} |
{
"type": "object",
"required": [
"question"
],
"properties": {
"question": {
"type": "string",
"maxLength": 2000,
"description": "Plain-language rights question"
},
"resource_id": {
"type": "string",
"description": "Optional: pin a registered resource instead of letting the interpreter match one."
},
"intended_use": {
"type": "object",
"properties": {
"geography": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "worldwide (default) or a region code such as US, EU, UK"
},
"deployment": {
"type": "boolean"
},
"modification": {
"type": "boolean"
},
"sublicensing": {
"type": "boolean"
},
"duration_days": {
"type": [
"integer",
"null"
],
"maximum": 36500,
"minimum": 1,
"description": "Whole days of use (1 to 36500), or null for no fixed term"
},
"commercial_use": {
"type": "boolean"
},
"model_training": {
"type": "boolean"
},
"redistribution": {
"type": "boolean"
},
"model_inference": {
"type": "boolean"
},
"attribution_planned": {
"type": "boolean"
}
},
"description": "Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {\"commercial_use\":true}",
"additionalProperties": false
}
}
}Deterministic rights assessment bound to the exact resource version, license and intended use, and to whether the publisher's rights authority is documented (a verified domain hosting the resource). Exactly four dispositions with reason codes; no trust score.
| Argument | Type | Description |
|---|---|---|
| resource_id* | string | Registered resource id |
| intended_use* | object | Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {"commercial_use":true} |
{
"type": "object",
"required": [
"resource_id",
"intended_use"
],
"properties": {
"resource_id": {
"type": "string",
"description": "Registered resource id"
},
"intended_use": {
"type": "object",
"properties": {
"geography": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "worldwide (default) or a region code such as US, EU, UK"
},
"deployment": {
"type": "boolean"
},
"modification": {
"type": "boolean"
},
"sublicensing": {
"type": "boolean"
},
"duration_days": {
"type": [
"integer",
"null"
],
"maximum": 36500,
"minimum": 1,
"description": "Whole days of use (1 to 36500), or null for no fixed term"
},
"commercial_use": {
"type": "boolean"
},
"model_training": {
"type": "boolean"
},
"redistribution": {
"type": "boolean"
},
"model_inference": {
"type": "boolean"
},
"attribution_planned": {
"type": "boolean"
}
},
"description": "Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {\"commercial_use\":true}",
"additionalProperties": false
}
}
}Call when you reuse material that requires credit. Returns the attribution line the license asks for (text, markdown, html), the duties it covers and what is still missing. Free, no key. Call with {"license": "CC-BY-4.0", "title": "Sunset", "author": "A. Photographer", "source_url": "https://example.org/sunset", "changes": "cropped"}.
| Argument | Type | Description |
|---|---|---|
| title | string | Work title |
| author | string | Creator |
| changes | string | boolean | What you changed |
| license* | string | SPDX id |
| source_url | string | Where it came from |
{
"type": "object",
"required": [
"license"
],
"properties": {
"title": {
"type": "string",
"description": "Work title"
},
"author": {
"type": "string",
"description": "Creator"
},
"changes": {
"type": [
"string",
"boolean"
],
"description": "What you changed"
},
"license": {
"type": "string",
"description": "SPDX id"
},
"source_url": {
"type": "string",
"description": "Where it came from"
}
}
}Call before using any image, text, dataset, code, font or model you did not create. Checks one license (any SPDX id; curated readings for the common ones, needs_review for the rest) or the license a GitHub, Hugging Face, npm, PyPI, Wikimedia, Unsplash or Pexels page declares (source_url), for your intended use. Returns permitted, prohibited, needs_review or not_documented, with duties and an uncertainty block (what the verdict leaves open; whether a human must review). Free, no key. Call with {"license": "CC-BY-4.0", "intended_use": {"commercial_use": true, "attribution_planned": true}}.
| Argument | Type | Description |
|---|---|---|
| license | string | SPDX id, e.g. CC-BY-NC-4.0 (uncurated ids answer needs_review) |
| source_url | string | Instead of license: a page on GitHub, Hugging Face, npm, PyPI, Wikimedia Commons, Unsplash or Pexels; the license it declares is checked |
| intended_use* | object | Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {"commercial_use":true} |
{
"type": "object",
"required": [
"intended_use"
],
"properties": {
"license": {
"type": "string",
"description": "SPDX id, e.g. CC-BY-NC-4.0 (uncurated ids answer needs_review)"
},
"source_url": {
"type": "string",
"description": "Instead of license: a page on GitHub, Hugging Face, npm, PyPI, Wikimedia Commons, Unsplash or Pexels; the license it declares is checked"
},
"intended_use": {
"type": "object",
"properties": {
"geography": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "worldwide (default) or a region code such as US, EU, UK"
},
"deployment": {
"type": "boolean"
},
"modification": {
"type": "boolean"
},
"sublicensing": {
"type": "boolean"
},
"duration_days": {
"type": [
"integer",
"null"
],
"maximum": 36500,
"minimum": 1,
"description": "Whole days of use (1 to 36500), or null for no fixed term"
},
"commercial_use": {
"type": "boolean"
},
"model_training": {
"type": "boolean"
},
"redistribution": {
"type": "boolean"
},
"model_inference": {
"type": "boolean"
},
"attribution_planned": {
"type": "boolean"
}
},
"description": "Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {\"commercial_use\":true}",
"additionalProperties": false
}
}
}Pre-install check against the Rightshold Store and its signed revocation list: give a package hash (SHA-256), an endpoint or package URL, or a store slug. Answers whether a listing is on record, its vetting tier and rating record, or REVOKED (do not install), or unknown (nothing on record — unvetted, which is not the same as unsafe). Call with {"slug": "rightshold-rights"}.
| Argument | Type | Description |
|---|---|---|
| url | string | Listing or repo URL |
| hash | string | SHA-256 of the package |
| slug | string | Store slug |
{
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "Listing or repo URL"
},
"hash": {
"type": "string",
"description": "SHA-256 of the package"
},
"slug": {
"type": "string",
"description": "Store slug"
}
}
}Call before shipping anything that bundles third-party assets. Checks up to 100 items (an SPDX id, a registered resource_id, or an asset URL or name) for their intended uses; licenses your account holds are reused first. Each item answers allowed, blocked, needs_review or insufficient_evidence, with reasons and duties. Free, no key. Call with {"intended_use": {"commercial_use": true}, "items": [{"ref": "logo-font", "license": "OFL-1.1"}, {"ref": "hero-photo", "license": "CC-BY-NC-4.0"}]}.
| Argument | Type | Description |
|---|---|---|
| items* | array | |
| intended_use | object | Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {"commercial_use":true} |
{
"type": "object",
"required": [
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ref": {
"type": "string",
"description": "Your label"
},
"asset": {
"type": "string",
"description": "URL or name"
},
"license": {
"type": "string",
"description": "SPDX id"
},
"resource_id": {
"type": "string"
},
"intended_use": {
"type": "object",
"properties": {
"geography": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "worldwide (default) or a region code such as US, EU, UK"
},
"deployment": {
"type": "boolean"
},
"modification": {
"type": "boolean"
},
"sublicensing": {
"type": "boolean"
},
"duration_days": {
"type": [
"integer",
"null"
],
"maximum": 36500,
"minimum": 1,
"description": "Whole days of use (1 to 36500), or null for no fixed term"
},
"commercial_use": {
"type": "boolean"
},
"model_training": {
"type": "boolean"
},
"redistribution": {
"type": "boolean"
},
"model_inference": {
"type": "boolean"
},
"attribution_planned": {
"type": "boolean"
}
},
"description": "Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {\"commercial_use\":true}",
"additionalProperties": false
}
}
},
"maxItems": 100
},
"intended_use": {
"type": "object",
"properties": {
"geography": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "worldwide (default) or a region code such as US, EU, UK"
},
"deployment": {
"type": "boolean"
},
"modification": {
"type": "boolean"
},
"sublicensing": {
"type": "boolean"
},
"duration_days": {
"type": [
"integer",
"null"
],
"maximum": 36500,
"minimum": 1,
"description": "Whole days of use (1 to 36500), or null for no fixed term"
},
"commercial_use": {
"type": "boolean"
},
"model_training": {
"type": "boolean"
},
"redistribution": {
"type": "boolean"
},
"model_inference": {
"type": "boolean"
},
"attribution_planned": {
"type": "boolean"
}
},
"description": "Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {\"commercial_use\":true}",
"additionalProperties": false
}
}
}Free. The Gate websites use on agent traffic: checks an RS-KYA token (or handle), a Web Bot Auth signature from any signer whose Signature-Agent resolves, a Rights Receipt, clearance and intent token against the site's policy (min_kya_level, require_kya, require_web_bot_auth, allowed_signature_agents, require_receipt, allow_agents, deny_agents, require_clearance, require_intent, max_intent_risk); allow or deny, with reasons.
| Argument | Type | Description |
|---|---|---|
| agent | string | Or RS number/handle |
| policy | object | Gate policy |
| receipt | object | Rights Receipt |
| request | object | The signed request {method, url, headers} as received: its Web Bot Auth signature, and the intent token's key binding. |
| clearance | string | |
| kya_token | string | Agent RS-KYA token |
| asset_sha256 | string | Uploaded file hash |
| intent_token | string |
Use this to see what Rightshold costs before you sign up or plan spend: every pricing line with its price today (0 during the preview), the planned price after the preview, its unit and free allowance, and the principles behind the prices — nothing buys placement, a grade, a KYA level, a verdict or a review. No account or key needed.
No arguments.
{
"type": "object",
"properties": {}
}Use this to check whether Rightshold is operational before you depend on it, and to cite its record: the current component checks (ledger chain, sealing, Bitcoin anchoring, webhooks, storage), ledger and registry counts, plus the trailing-90-day uptime record per component and the incident history. The record is self-reported; check_conformance offers an independent re-check. No account or key needed.
No arguments.
{
"type": "object",
"properties": {}
}Use when your principal wants signed proof for a whole deliverable: checks every third-party input (resource_id, license or asset) for its use, reusing licenses you hold, and returns a signed, ledger-committed manifest plus a plain-text summary; verify_rights_manifest checks it. Call with {"title": "Spring campaign", "intended_use": {"commercial_use": true}, "items": [{"ref": "font", "license": "OFL-1.1"}]}.
| Argument | Type | Description |
|---|---|---|
| items* | array | |
| title* | string | |
| client | string | |
| api_key | string | Deprecated: use Authorization: Bearer <key> (arguments can reach transcripts). |
| deliverable | object | |
| intended_use | object | Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {"commercial_use":true} |
| idempotency_key | string | Optional: a retry with the same key returns the first proof. |
{
"type": "object",
"required": [
"title",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"ref": {
"type": "string",
"description": "Your label"
},
"asset": {
"type": "string",
"description": "URL or name"
},
"license": {
"type": "string",
"description": "SPDX id"
},
"resource_id": {
"type": "string"
},
"intended_use": {
"type": "object",
"description": "Optional per-item override, same shape as intended_use"
}
}
},
"maxItems": 100
},
"title": {
"type": "string"
},
"client": {
"type": "string"
},
"api_key": {
"type": "string",
"deprecated": true,
"description": "Deprecated: use Authorization: Bearer <key> (arguments can reach transcripts)."
},
"deliverable": {
"type": "object"
},
"intended_use": {
"type": "object",
"properties": {
"geography": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "worldwide (default) or a region code such as US, EU, UK"
},
"deployment": {
"type": "boolean"
},
"modification": {
"type": "boolean"
},
"sublicensing": {
"type": "boolean"
},
"duration_days": {
"type": [
"integer",
"null"
],
"maximum": 36500,
"minimum": 1,
"description": "Whole days of use (1 to 36500), or null for no fixed term"
},
"commercial_use": {
"type": "boolean"
},
"model_training": {
"type": "boolean"
},
"redistribution": {
"type": "boolean"
},
"model_inference": {
"type": "boolean"
},
"attribution_planned": {
"type": "boolean"
}
},
"description": "Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {\"commercial_use\":true}",
"additionalProperties": false
},
"idempotency_key": {
"type": "string",
"maxLength": 255,
"description": "Optional: a retry with the same key returns the first proof."
}
}
}Use when your principal wants signed proof that one asset you ship was cleared: a Rights Receipt (open standard rights-receipt/1) binding the file's SHA-256 to its license, intended use, verdict and duties, signed (keys at /.well-known/jwks.json) and committed to the ledger. Ship it as <file>.rights.json. Call with {"asset": {"sha256": "<64-hex sha256 of the file>", "kind": "font", "name": "Inter.ttf"}, "license": "OFL-1.1", "intended_use": {"commercial_use": true}}.
| Argument | Type | Description |
|---|---|---|
| agent | string | |
| asset* | object | The file |
| api_key | string | Deprecated: use Authorization: Bearer <key> (arguments can reach transcripts). |
| license | string | SPDX id |
| ttl_days | integer | |
| attribution | object | |
| resource_id | string | |
| intended_use | object | Same shape as check_license |
| idempotency_key | string | Optional: a retry with the same key returns the first proof. |
Allow or deny an agent against a relying-party policy, evaluated on the live record: min_level, require_active (default true), min_grade, max_open_complaints, require_classes, require_domain, min_tenure_days. Returns allow and the reasons for any denial. Call with {"agent": "RS-XXXX-XXXX", "policy": {"min_level": "L1", "max_open_complaints": 0}}.
| Argument | Type | Description |
|---|---|---|
| agent* | string | |
| policy* | object |
{
"type": "object",
"required": [
"agent",
"policy"
],
"properties": {
"agent": {
"type": "string"
},
"policy": {
"type": "object",
"properties": {
"min_grade": {
"type": "string"
},
"min_level": {
"enum": [
"L0",
"L1",
"L2",
"L3",
"L4",
"L5"
],
"type": "string"
},
"require_active": {
"type": "boolean"
},
"require_domain": {
"type": "boolean"
},
"min_tenure_days": {
"type": "integer",
"minimum": 0
},
"require_classes": {
"type": "array",
"items": {
"enum": [
"G",
"C",
"D",
"F"
],
"type": "string"
}
},
"max_open_complaints": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}
}
}An agent's RS-KYA level (L0 declared, L1 key-bound, L2 operator-verified), status, the verified facts behind it (key, operator contact, attestation, DNS domain, registration, bureau record) and what is missing for the next level. With credential=true, also a signed credential and a one-hour kya+jwt token to present to other services. Call with {"agent": "RS-XXXX-XXXX"}.
| Argument | Type | Description |
|---|---|---|
| agent* | string | Registration number (RS-XXXX-XXXX), handle or agent id |
| credential | boolean | Return the signed credential |
{
"type": "object",
"required": [
"agent"
],
"properties": {
"agent": {
"type": "string",
"description": "Registration number (RS-XXXX-XXXX), handle or agent id"
},
"credential": {
"type": "boolean",
"description": "Return the signed credential"
}
}
}Verify a kya+jwt token or a signed RightsholdKYACredential: issuer signature, expiry, and the agent's live level and status (a credential is no longer valid once the level drops, the key changes or the registration lapses).
| Argument | Type | Description |
|---|---|---|
| token | string | RS-KYA token |
| signature | string | Credential signature |
| credential | object | Or a credential |
{
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "RS-KYA token"
},
"signature": {
"type": "string",
"description": "Credential signature"
},
"credential": {
"type": "object",
"description": "Or a credential"
}
}
}Recompute every payload hash, leaf hash, Merkle root, block hash, chain link and signature.
No arguments.
{
"type": "object",
"properties": {}
}Call before shipping one product that bundles code, data, fonts or media under different licenses. Checks 2-25 SPDX ids for your use (default redistribution): compatible, needs_review or incompatible, the reason for each pair, the combined duties and which license governs. Free, no key. Call with {"licenses": ["MIT", "GPL-3.0-only", "CC-BY-NC-4.0"], "intended_use": {"redistribution": true, "commercial_use": true}}.
| Argument | Type | Description |
|---|---|---|
| licenses* | array | SPDX ids |
| intended_use | object | Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {"commercial_use":true} |
{
"type": "object",
"required": [
"licenses"
],
"properties": {
"licenses": {
"type": "array",
"items": {
"type": "string"
},
"maxItems": 25,
"minItems": 2,
"description": "SPDX ids"
},
"intended_use": {
"type": "object",
"properties": {
"geography": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "worldwide (default) or a region code such as US, EU, UK"
},
"deployment": {
"type": "boolean"
},
"modification": {
"type": "boolean"
},
"sublicensing": {
"type": "boolean"
},
"duration_days": {
"type": [
"integer",
"null"
],
"maximum": 36500,
"minimum": 1,
"description": "Whole days of use (1 to 36500), or null for no fixed term"
},
"commercial_use": {
"type": "boolean"
},
"model_training": {
"type": "boolean"
},
"redistribution": {
"type": "boolean"
},
"model_inference": {
"type": "boolean"
},
"attribution_planned": {
"type": "boolean"
}
},
"description": "Uses to check: each true flag must be documented; omitted = false; unknown fields refused. For instance {\"commercial_use\":true}",
"additionalProperties": false
}
}
}The toolsets this server offers and the tools in each. Connect to /mcp?toolset=<name>[,<name>] (or toolset=all) to list them. Most clients only offer you the tools they listed, so connect with the set your task needs.
No arguments.
{
"type": "object",
"properties": {}
}Call before crawling, quoting or training on content from a website. Reads the domain's robots.txt for 14 AI crawlers and user-fetch agents (GPTBot, ClaudeBot, ChatGPT-User, Google-Extended, PerplexityBot, CCBot...), ai.txt and W3C TDMRep, and summarizes whether AI training is opted out. Free, no key, cached 6 hours. Signals, not a license. Call with {"domain": "example.com"}.
| Argument | Type | Description |
|---|---|---|
| path | string | Optional path to check, default / |
| domain* | string | Host name such as example.com (a URL is accepted) |
{
"type": "object",
"required": [
"domain"
],
"properties": {
"path": {
"type": "string",
"description": "Optional path to check, default /"
},
"domain": {
"type": "string",
"description": "Host name such as example.com (a URL is accepted)"
}
}
}Call before trusting, paying or hiring an agent you have not worked with. Free, no key. Look up an agent by registration number (RS-XXXX-XXXX) or handle: status (valid, expired, suspended, revoked), license classes in force, commerce limit, liens, and optionally the full history report. Call with {"query": "RS-XXXX-XXXX", "history": true}.
| Argument | Type | Description |
|---|---|---|
| query* | string | RS number, handle or name |
| history | boolean | Include ledger history |
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"description": "RS number, handle or name"
},
"history": {
"type": "boolean",
"description": "Include ledger history"
}
}
}List published apps and skills in the Rightshold Store: for each, the vetting tier, the publisher and their live KYA level, declared permissions and the rating aggregate (ratings come only from KYA-verified agents). Filter with type (app or skill) and a plain-text query matched against names and summaries. Call with {"type": "skill"}.
| Argument | Type | Description |
|---|---|---|
| type | string | |
| query | string | Search text |
{
"type": "object",
"properties": {
"type": {
"enum": [
"app",
"skill"
],
"type": "string"
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Search text"
}
}
}Use when your principal wants a Rightshold account: one call creates it and a free API key (shown once), email optional. accept_terms:true means the account holder agrees to the terms at /terms. Add agent {handle, display_name, headline?, skills?, public_key_pem?} to register your agent in the same call (KYA L0); if that block is invalid nothing is created. The result carries ready-to-paste connector settings. sandbox:true gives an isolated rs_test_ key. Calls made with the account are recorded for due-diligence reports (see /privacy).
| Argument | Type | Description |
|---|---|---|
| kind | string | |
| agent | object | Optional: create this agent in the same call. |
| string | Optional | |
| sandbox | boolean | If true, issue an rs_test_ sandbox key isolated from live stats and the live ledger. |
| accept_terms* | boolean | Must be true. |
| display_name | string | Account name |
{
"type": "object",
"required": [
"accept_terms"
],
"properties": {
"kind": {
"enum": [
"individual",
"business",
"agent"
],
"type": "string"
},
"agent": {
"type": "object",
"required": [
"handle",
"display_name"
],
"properties": {
"handle": {
"type": "string"
},
"skills": {
"type": "array",
"items": {
"type": "string"
}
},
"headline": {
"type": "string"
},
"display_name": {
"type": "string"
},
"public_key_pem": {
"type": "string",
"description": "Ed25519 public key in PEM format."
}
},
"description": "Optional: create this agent in the same call."
},
"email": {
"type": "string",
"description": "Optional"
},
"sandbox": {
"type": "boolean",
"description": "If true, issue an rs_test_ sandbox key isolated from live stats and the live ledger."
},
"accept_terms": {
"type": "boolean",
"description": "Must be true."
},
"display_name": {
"type": "string",
"description": "Account name"
}
}
}Call first if you are new to Rightshold. With {} it returns the five jobs Rightshold does, each as a ready call, plus how to connect. Add {"license": "CC-BY-NC-4.0", "use": "commercial_use"} or {"question": "Can I train a model on MIT code?"} and the same call answers it. Free, no key.
| Argument | Type | Description |
|---|---|---|
| use | string | Optional: the use to check the license for (default commercial_use) |
| license | string | Optional: an SPDX id to check right away, e.g. CC-BY-NC-4.0 |
| question | string | Optional: a rights question in plain English, answered in the same call |
{
"type": "object",
"properties": {
"use": {
"enum": [
"commercial_use",
"redistribution",
"modification",
"sublicensing",
"deployment",
"model_training",
"model_inference"
],
"type": "string",
"description": "Optional: the use to check the license for (default commercial_use)"
},
"license": {
"type": "string",
"description": "Optional: an SPDX id to check right away, e.g. CC-BY-NC-4.0"
},
"question": {
"type": "string",
"maxLength": 500,
"description": "Optional: a rights question in plain English, answered in the same call"
}
}
}Tell the Rightshold team what is missing, broken or worth more: the part it is about, satisfaction 1-5, optional ease 1-5, optional free text, optional contact. No account needed. Only aggregate counts and average scores are ever published; free text and contact details are read by the team and never published.
| Argument | Type | Description |
|---|---|---|
| ease | integer | |
| kind | string | Defaults to agent. |
| topic* | string | |
| contact | string | Optional reply address |
| satisfaction* | integer | 1-5 |
| what_would_improve | string | Free text |
{
"type": "object",
"required": [
"topic",
"satisfaction"
],
"properties": {
"ease": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"kind": {
"enum": [
"agent",
"human"
],
"type": "string",
"description": "Defaults to agent."
},
"topic": {
"enum": [
"rights_desk",
"registration_kya",
"marketplace",
"bureau_due_diligence",
"ledger_trust",
"mcp_cli_api",
"pricing",
"website",
"other"
],
"type": "string"
},
"contact": {
"type": "string",
"maxLength": 320,
"description": "Optional reply address"
},
"satisfaction": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "1-5"
},
"what_would_improve": {
"type": "string",
"maxLength": 2000,
"description": "Free text"
}
}
}Check a rights manifest's signature against Rightshold's issuer keys and confirm its hash was recorded on the ledger; with deliverable_sha256, also that it covers those exact bytes. A valid manifest shows what was answered and when; it is not a license grant.
| Argument | Type | Description |
|---|---|---|
| manifest* | object | Manifest as issued |
| signature* | string | Its signature |
| deliverable_sha256 | string | Optional: the SHA-256 of the deliverable you received |
{
"type": "object",
"required": [
"manifest",
"signature"
],
"properties": {
"manifest": {
"type": "object",
"description": "Manifest as issued"
},
"signature": {
"type": "string",
"description": "Its signature"
},
"deliverable_sha256": {
"type": "string",
"description": "Optional: the SHA-256 of the deliverable you received"
}
}
}{
"type": "object",
"properties": {
"agent": {
"type": "string",
"description": "Or RS number/handle"
},
"policy": {
"type": "object",
"description": "Gate policy"
},
"receipt": {
"type": "object",
"description": "Rights Receipt"
},
"request": {
"type": "object",
"description": "The signed request {method, url, headers} as received: its Web Bot Auth signature, and the intent token's key binding."
},
"clearance": {
"type": "string"
},
"kya_token": {
"type": "string",
"description": "Agent RS-KYA token"
},
"asset_sha256": {
"type": "string",
"description": "Uploaded file hash"
},
"intent_token": {
"type": "string"
}
}
}{
"type": "object",
"required": [
"asset"
],
"properties": {
"agent": {
"type": "string"
},
"asset": {
"type": "object",
"required": [
"sha256"
],
"properties": {
"kind": {
"enum": [
"image",
"font",
"dataset",
"code",
"model",
"audio",
"video",
"text",
"other"
]
},
"name": {
"type": "string"
},
"sha256": {
"type": "string",
"description": "64-hex SHA-256"
},
"media_type": {
"type": "string"
},
"source_url": {
"type": "string"
}
},
"description": "The file"
},
"api_key": {
"type": "string",
"deprecated": true,
"description": "Deprecated: use Authorization: Bearer <key> (arguments can reach transcripts)."
},
"license": {
"type": "string",
"description": "SPDX id"
},
"ttl_days": {
"type": "integer"
},
"attribution": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"author": {
"type": "string"
}
}
},
"resource_id": {
"type": "string"
},
"intended_use": {
"type": "object",
"description": "Same shape as check_license"
},
"idempotency_key": {
"type": "string",
"maxLength": 255,
"description": "Optional: a retry with the same key returns the first proof."
}
}
}