Radix Wiki
Community-maintained knowledge base for Radix DLT — search, read, and contribute wiki pages.
Should I use this
Quality & Safety
Findings (3)
- HIGH
- MEDIUMin create_page
- MEDIUMin edit_page
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"radix-wiki": {
"url": "https://radix.wiki/api/mcp"
}
}
}Remote endpoints
https://radix.wiki/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (11)
🟢search_wiki(query, tagPath, page, pageSize)
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.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search term (matched against page titles and body text)"
},
"tagPath": {
"type": "string",
"description": "Limit results to a tag path (e.g. \"contents/tech/core-concepts\")"
},
"page": {
"type": "number",
"description": "Page number (default 1)"
},
"pageSize": {
"type": "number",
"description": "Results per page (default 20, max 50)"
}
},
"required": [
"query"
]
}🟢get_page(path, tagPath, slug)
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.
Input Schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"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."
},
"tagPath": {
"type": "string",
"description": "Tag path (e.g. \"contents/tech/core-concepts\"). Ignored when `path` is set."
},
"slug": {
"type": "string",
"description": "Page slug (e.g. \"utxo-model\"). Ignored when `path` is set."
}
},
"requireOneOf": [
"path",
"slug"
]
}🟢list_pages(tagPath, sort, page, pageSize)
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.
Input Schema
{
"type": "object",
"properties": {
"tagPath": {
"type": "string",
"description": "Filter by tag path prefix (e.g. \"developers\")"
},
"sort": {
"type": "string",
"enum": [
"title",
"updatedAt"
],
"description": "Sort order (default \"updatedAt\")"
},
"page": {
"type": "number",
"description": "Page number (default 1)"
},
"pageSize": {
"type": "number",
"description": "Results per page (default 20, max 100)"
}
}
}🟢get_categories
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.
Input Schema
{
"type": "object",
"properties": {}
}🟢get_recent_changes(days, limit)
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.
Input Schema
{
"type": "object",
"properties": {
"days": {
"type": "number",
"description": "Look back N days (default 7, max 30)"
},
"limit": {
"type": "number",
"description": "Max results (default 20, max 50)"
}
}
}🟢get_full_corpus(sizeOnly, tagPath, maxChars, skip)
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.
Input Schema
{
"type": "object",
"properties": {
"sizeOnly": {
"type": "boolean",
"description": "Return sizes and breakdowns only, no document. Do this before the first real pull."
},
"tagPath": {
"type": "string",
"description": "Restrict to one branch and its descendants, e.g. \"contents/tech\". Omit for everything."
},
"maxChars": {
"type": "number",
"description": "Character budget for `document` (default 200000, max 1000000)"
},
"skip": {
"type": "number",
"description": "Resume from this page index — pass the `nextSkip` from the previous truncated call (default 0)"
}
}
}🟢get_ideas_board(category, workingGroup)
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.
Input Schema
{
"type": "object",
"properties": {
"category": {
"type": "string",
"description": "Filter to one category: Governance, Protocol, Tooling, Ecosystem, or Community"
},
"workingGroup": {
"type": "string",
"description": "Filter by working group name substring, e.g. \"Treasury\", \"Legal\", \"NetOps\""
}
}
}🟢get_challenge
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.
Input Schema
{
"type": "object",
"properties": {}
}🟡login(challenge, address, publicKey, signature, curve)
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.
Input Schema
{
"type": "object",
"properties": {
"challenge": {
"type": "string",
"description": "The challenge from get_challenge"
},
"address": {
"type": "string",
"description": "Your account address (virtual account of the signing key; its public key must be an on-ledger owner_keys entry)"
},
"publicKey": {
"type": "string",
"description": "Ed25519 public key, hex"
},
"signature": {
"type": "string",
"description": "Signature over the ROLA message, hex"
},
"curve": {
"type": "string",
"enum": [
"curve25519",
"secp256k1"
],
"description": "Signing curve (Ed25519 = \"curve25519\")"
}
},
"required": [
"challenge",
"address",
"publicKey",
"signature",
"curve"
]
}🟡create_page(tagPath, title, content, metadata, slug, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"tagPath": {
"type": "string",
"description": "Tag path the page lives under (e.g. \"contents/tech/core-concepts\")"
},
"title": {
"type": "string",
"description": "Page title"
},
"content": {
"type": "array",
"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"
}
},
"metadata": {
"type": "object",
"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."
},
"slug": {
"type": "string",
"description": "URL slug (derived from the title when omitted)"
},
"bannerImage": {
"type": "string",
"description": "Banner image URL"
}
},
"required": [
"tagPath",
"title",
"content"
]
}🔴edit_page(tagPath, slug, content, title, revisionMessage, ...)
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.
Input Schema
{
"type": "object",
"properties": {
"tagPath": {
"type": "string",
"description": "Tag path of the page to edit"
},
"slug": {
"type": "string",
"description": "Slug of the page to edit"
},
"content": {
"type": "array",
"description": "The full revised block array (not a patch). Omit to change only the title or metadata.",
"items": {
"type": "object"
}
},
"title": {
"type": "string",
"description": "New title"
},
"revisionMessage": {
"type": "string",
"description": "What changed and why — shown in the page history. Always send one."
},
"metadata": {
"type": "object",
"description": "Replacement metadata object"
}
},
"required": [
"tagPath",
"slug"
]
}Community
Evidence