Radix Wiki

Community-maintained knowledge base for Radix DLT — search, read, and contribute wiki pages.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
83%
Naming quality
98%
Poisoning risk
60%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainin create_page
  • MEDIUMTool description contains URL to non-standard domainin edit_page

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,344Tokens (tool definitions)
~1.2 KBTypical response size
Moderate attention impact (1.83% of 128k context)

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-http

What it can do

Tool inventory

Tools (11)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded11 tools
verifiedversion not recorded11 tools
verifiedversion not recorded11 tools