Server definition
- Hash
- sha256:4327806e793e263d0975b79f726328176b3fc6e4074d795b47b1dcfa9920e0f7
- What it is
- What a remote MCP server returned when asked what it offers: 11 tools
The blob, as servednamed by its sha256
{
"instructions": "Community-maintained knowledge base for Radix DLT, the layer-1 with linear scalability and asset-oriented smart contracts.\nUsual sequence: get_categories to orient, search_wiki or list_pages to locate, then get_page to read. Every listing returns a tagPath and slug; those identify the page every read tool accepts.\nReads are open and never authenticate. Rate limit: 60 requests per minute per IP, shared across all methods.\nWriting without leaving the protocol: get_challenge → sign the ROLA message with your own Ed25519 key → login (returns a Bearer token) → create_page / edit_page with that token as an HTTP `Authorization: Bearer <token>` header on the POSTs carrying the calls.\nDeep reference (ROLA signing spec, REST equivalents, content model): https://radix.wiki/AGENTS.md (also served at https://radix.wiki/agents-md). Any page URL + \".md\" is its markdown twin; the homepage's is https://radix.wiki/index.md.\nThe Radix DAO's own decisions are covered here. For DAO governance in general, DeSci and economics, use the sister wiki's server: https://caper.network/api/mcp.",
"tools": [
{
"description": "Create a new Radix Wiki page. Requires a ROLA bearer token — see https://radix.wiki/AGENTS.md for the challenge-sign-verify flow. Call get_categories first for a valid tagPath. Some paths are balance-gated (blog needs 50,000 $XRD). Earns contribution points.",
"inputSchema": {
"properties": {
"bannerImage": {
"description": "Banner image URL",
"type": "string"
},
"content": {
"description": "Array of typed blocks. Each needs a unique `id` (UUID) and a `type`. A `content` block carries semantic HTML in `text`; an `infobox` block carries nested `blocks`. Start with an infobox, hyperlink every assertion to its source, no inline styles.",
"items": {
"type": "object"
},
"type": "array"
},
"metadata": {
"description": "Key-value metadata for the page, including `excerpt` (one sentence, ≤160 chars). Some tag paths require specific keys — the error names any that are missing.",
"type": "object"
},
"slug": {
"description": "URL slug (derived from the title when omitted)",
"type": "string"
},
"tagPath": {
"description": "Tag path the page lives under (e.g. \"contents/tech/core-concepts\")",
"type": "string"
},
"title": {
"description": "Page title",
"type": "string"
}
},
"required": [
"tagPath",
"title",
"content"
],
"type": "object"
},
"name": "create_page",
"outputSchema": null
},
{
"description": "Edit an existing Radix Wiki page. Requires a ROLA bearer token — see https://radix.wiki/AGENTS.md. Fetch the page with get_page first and send the full revised block array; the version bump, block-level diff, and revision entry are computed server-side. Locked and author-only pages are rejected. Earns contribution points.",
"inputSchema": {
"properties": {
"content": {
"description": "The full revised block array (not a patch). Omit to change only the title or metadata.",
"items": {
"type": "object"
},
"type": "array"
},
"metadata": {
"description": "Replacement metadata object",
"type": "object"
},
"revisionMessage": {
"description": "What changed and why — shown in the page history. Always send one.",
"type": "string"
},
"slug": {
"description": "Slug of the page to edit",
"type": "string"
},
"tagPath": {
"description": "Tag path of the page to edit",
"type": "string"
},
"title": {
"description": "New title",
"type": "string"
}
},
"required": [
"tagPath",
"slug"
],
"type": "object"
},
"name": "edit_page",
"outputSchema": null
},
{
"description": "The wiki tag hierarchy as a tree, each node carrying its path, name, description and the page count of its whole branch. The cheapest way to orient before searching, and the only way to find a valid tagPath before create_page. Costs one call and a few kilobytes; prefer it to listing pages to find out what exists.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_categories",
"outputSchema": null
},
{
"description": "Step 1 of writing to the wiki: a single-use ROLA challenge (5-minute expiry). The response spells out the exact recipe for the message your Ed25519 key must sign. You always sign with your OWN key — nothing here custodies anything. Takes no parameters.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_challenge",
"outputSchema": null
},
{
"description": "Every article as one plain-text document, for bulk ingestion rather than reading. PREFLIGHT FIRST: call it with sizeOnly=true for the exact character count, a token estimate and the per-branch breakdown — the whole corpus is several times a context window. Then pull it with `maxChars` (default 200000, max 1000000), or narrow it with `tagPath` to take one branch at a time. Truncation is page-aligned and honest: `truncated`, `omittedPages` and `nextSkip` say exactly where to resume (pass skip=nextSkip). Search or list first if you have a question; the same corpus is also served, cacheably and with an ETag, at /llms-full.txt.",
"inputSchema": {
"properties": {
"maxChars": {
"description": "Character budget for `document` (default 200000, max 1000000)",
"type": "number"
},
"sizeOnly": {
"description": "Return sizes and breakdowns only, no document. Do this before the first real pull.",
"type": "boolean"
},
"skip": {
"description": "Resume from this page index — pass the `nextSkip` from the previous truncated call (default 0)",
"type": "number"
},
"tagPath": {
"description": "Restrict to one branch and its descendants, e.g. \"contents/tech\". Omit for everything.",
"type": "string"
}
},
"type": "object"
},
"name": "get_full_corpus",
"outputSchema": null
},
{
"description": "Get the RADIX Wiki Ideas Pipeline kanban — community proposals and Radix DAO tasks grouped into status columns (Discussion → Proposed → Approved → In Progress → Testing → Done), each card carrying its working group, category, priority, and assignee. Use this to follow DAO / project progress.",
"inputSchema": {
"properties": {
"category": {
"description": "Filter to one category: Governance, Protocol, Tooling, Ecosystem, or Community",
"type": "string"
},
"workingGroup": {
"description": "Filter by working group name substring, e.g. \"Treasury\", \"Legal\", \"NetOps\"",
"type": "string"
}
},
"type": "object"
},
"name": "get_ideas_board",
"outputSchema": null
},
{
"description": "Read one page in full: its extracted text, current version number, update date and declared metadata. Takes either the whole path as one string (the `url` a listing returns works as-is) or the tagPath/slug pair it splits into — not a title. A wrong pair is answered with the tools that find a right one rather than an empty result. For the whole article set at once use get_full_corpus, and for a page as markdown fetch its URL with `.md` appended.",
"inputSchema": {
"properties": {
"path": {
"description": "The whole path in one string, e.g. \"contents/tech/core-concepts/utxo-model\" — the form every listing returns as `url`. Use this or the tagPath/slug pair.",
"type": "string"
},
"slug": {
"description": "Page slug (e.g. \"utxo-model\"). Ignored when `path` is set.",
"type": "string"
},
"tagPath": {
"description": "Tag path (e.g. \"contents/tech/core-concepts\"). Ignored when `path` is set.",
"type": "string"
}
},
"requireOneOf": [
"path",
"slug"
],
"type": "object"
},
"name": "get_page",
"outputSchema": null
},
{
"description": "Pages edited within the last N days, newest first — what to poll when you are watching the wiki rather than reading it. Same row shape as list_pages. Look back at most 30 days and take at most 50 rows; for anything older, list_pages sorted by updatedAt.",
"inputSchema": {
"properties": {
"days": {
"description": "Look back N days (default 7, max 30)",
"type": "number"
},
"limit": {
"description": "Max results (default 20, max 50)",
"type": "number"
}
},
"type": "object"
},
"name": "get_recent_changes",
"outputSchema": null
},
{
"description": "Browse the wiki by tag path rather than by keyword — every page under a branch, newest first by default. Returns the same rows as search_wiki (title, URL, tagPath, slug, snippet, updatedAt) plus a pagination envelope carrying totalPages, hasMore and nextPage. Omit tagPath to walk the whole wiki; pass one from get_categories to stay inside a branch. Sort by title for an A-Z pass.",
"inputSchema": {
"properties": {
"page": {
"description": "Page number (default 1)",
"type": "number"
},
"pageSize": {
"description": "Results per page (default 20, max 100)",
"type": "number"
},
"sort": {
"description": "Sort order (default \"updatedAt\")",
"enum": [
"title",
"updatedAt"
],
"type": "string"
},
"tagPath": {
"description": "Filter by tag path prefix (e.g. \"developers\")",
"type": "string"
}
},
"type": "object"
},
"name": "list_pages",
"outputSchema": null
},
{
"description": "Step 2: exchange the signed ROLA proof for a 7-day Bearer token — the same verification the human wallet flow runs. Send the returned token as an HTTP `Authorization: Bearer <token>` header on every later create_page / edit_page call; tool arguments never carry it.",
"inputSchema": {
"properties": {
"address": {
"description": "Your account address (virtual account of the signing key; its public key must be an on-ledger owner_keys entry)",
"type": "string"
},
"challenge": {
"description": "The challenge from get_challenge",
"type": "string"
},
"curve": {
"description": "Signing curve (Ed25519 = \"curve25519\")",
"enum": [
"curve25519",
"secp256k1"
],
"type": "string"
},
"publicKey": {
"description": "Ed25519 public key, hex",
"type": "string"
},
"signature": {
"description": "Signature over the ROLA message, hex",
"type": "string"
}
},
"required": [
"challenge",
"address",
"publicKey",
"signature",
"curve"
],
"type": "object"
},
"name": "login",
"outputSchema": null
},
{
"description": "Keyword search across Radix Wiki titles and page text — the first call when you know what you are looking for. Returns a page of results, each with its title, URL, tagPath, slug, a matched snippet and the date it was last updated. The tagPath and slug identify the page every read tool accepts. Narrow with tagPath when a term is common; page through with page/pageSize. When you do not yet know what exists, call get_categories first.",
"inputSchema": {
"properties": {
"page": {
"description": "Page number (default 1)",
"type": "number"
},
"pageSize": {
"description": "Results per page (default 20, max 50)",
"type": "number"
},
"query": {
"description": "Search term (matched against page titles and body text)",
"type": "string"
},
"tagPath": {
"description": "Limit results to a tag path (e.g. \"contents/tech/core-concepts\")",
"type": "string"
}
},
"required": [
"query"
],
"type": "object"
},
"name": "search_wiki",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:4327806e793e263d0975b79f726328176b3fc6e4074d795b47b1dcfa9920e0f7 | sha256sum