Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,552Letters: 14Defects: 1,323counted 4 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:4327806e793e263d0975b79f726328176b3fc6e4074d795b47b1dcfa9920e0f7 | sha256sum