Caper Wiki

Read Caper's wiki and DAO on-chain data; launch a DAO, trade, and propose on Radix testnet.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
85%
이름 품질
100%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~3,618토큰 (도구 정의)
~1.3 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 2.83%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "caper-wiki": {
      "url": "https://caper.network/api/mcp"
    }
  }
}

원격 엔드포인트

https://caper.network/api/mcpstreamable-http
https://caper.network/wiki/caper/{cashtag}/mcpstreamable-http
https://caper.network/capers/{cashtag}/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (13)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢search_wiki(query, page, pageSize)

Keyword search across the Caper knowledge base – the first call when you know what you are looking for but not where it lives. Matches page titles and body prose. A distinctive keyword is still the best query, but a whole question now works too: if the literal text is not found anywhere, it falls back to English full-text matching, which stems words and drops stopwords. NOT semantic – it reduces your question to its keywords, so it will not find a page that says "fee" when you asked about "cost". Ranked in four tiers: titles starting with the term, then titles containing it, then literal body hits, then full-text hits by relevance. Returns summaries only, each with a `path`, a `chars` size, and a 200-char snippet WINDOWED ON THE MATCH – the snippet shows you the passage that matched, so you can judge a result without opening it. Feed those `path` values to get_pages in one batched call – do NOT loop get_page over the results. If you want structure rather than a keyword, call get_categories (taxonomy) or list_pages (a whole branch). Defaults: page 1, pageSize 20 (max 50). Keep paging while `hasMore` is true.

입력 스키마

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search term. One distinctive word or short phrase beats a sentence."
    },
    "page": {
      "type": "number",
      "description": "1-based page number (default 1)"
    },
    "pageSize": {
      "type": "number",
      "description": "Results per page (default 20, max 50)"
    }
  },
  "required": [
    "query"
  ]
}
🟢get_page(path, tagPath, slug)

Full text of ONE page in the Caper knowledge base. Address it by `path` ("dao-governance/concepts/voting/quadratic-voting" – exactly the `path` field the listing tools return), or by `tagPath` + `slug`. Use this only for a single known page: for 2 to 20 pages call get_pages instead, which is one round trip rather than N. Pass the path, not a page title. A miss returns near-match slugs so a wrong guess is recoverable in one retry.

입력 스키마

{
  "type": "object",
  "properties": {
    "path": {
      "type": "string",
      "description": "Full page path, e.g. \"governance/voting\". Preferred over tagPath+slug."
    },
    "tagPath": {
      "type": "string",
      "description": "Tag path only, e.g. \"governance\" (\"\" for a top-level page). Ignored when `path` is set."
    },
    "slug": {
      "type": "string",
      "description": "Page slug, e.g. \"voting\". Ignored when `path` is set."
    }
  },
  "requireOneOf": [
    "path",
    "slug"
  ]
}
🟢get_pages(paths, maxChars)

Batch read: full text of 1 to 20 pages in the Caper knowledge base in a single call. This is how you read search or listing results – calling get_page in a loop is the main way to waste round trips against this server. Pass `paths` exactly as the listing tools return them. Paths that do not exist come back in `missing` instead of failing the call, and anything past the 20-path cap comes back in `remaining` for a follow-up. Output is capped by `maxChars` (default 250000): pages past the cap are listed in `omitted` with their sizes, never silently dropped. Check the `chars` field in a listing first if your context budget is tight – a single operational page here can exceed 500 KB.

입력 스키마

{
  "type": "object",
  "properties": {
    "paths": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Page paths, e.g. [\"economics/token-valuation\", \"desci/desci-funding\"]. 1-20 per call."
    },
    "maxChars": {
      "type": "number",
      "description": "Total character budget across returned pages (default 250000, max 1000000)"
    }
  },
  "required": [
    "paths"
  ]
}
🟢list_pages(tagPath, sort, page, pageSize)

Enumerate pages in the Caper knowledge base, newest first, optionally under one tag path. Use it to walk a branch you have already located (via get_categories, or the `tagPath` on a search hit); use search_wiki when you are hunting a keyword. `tagPath` matches the branch and everything beneath it – "daos" also returns "daos/dexs/...". Omit it to list the whole scope. Defaults: sort "updatedAt", page 1, pageSize 20 (max 100). Returns summaries only – pass the `path` values to get_pages for full text. `hasMore`/`nextPage` are the only truncation; nothing else is cut.

입력 스키마

{
  "type": "object",
  "properties": {
    "tagPath": {
      "type": "string",
      "description": "Branch to list, e.g. \"daos\" or \"dao-governance/concepts\". Prefix match, includes descendants."
    },
    "sort": {
      "type": "string",
      "enum": [
        "title",
        "updatedAt"
      ],
      "description": "Sort order (default \"updatedAt\", newest first)"
    },
    "page": {
      "type": "number",
      "description": "1-based page number (default 1)"
    },
    "pageSize": {
      "type": "number",
      "description": "Results per page (default 20, max 100)"
    }
  }
}
🟢get_recent_changes(days, limit)

Pages in the Caper knowledge base edited within the last N days, newest first – for "what changed?", not for finding a topic (search_wiki) or reading a branch (list_pages). Defaults: days 7 (max 30), limit 20 (max 50). `truncated: true` means the limit cut the list, not that the window is exhausted – raise `limit`, or page through list_pages sorted by updatedAt. Returns summaries only; feed the `path` values to get_pages.

입력 스키마

{
  "type": "object",
  "properties": {
    "days": {
      "type": "number",
      "description": "Look back this many days (default 7, max 30)"
    },
    "limit": {
      "type": "number",
      "description": "Max pages returned (default 20, max 50)"
    }
  }
}
🟢get_categories

Curated taxonomy of the Caper knowledge base with page counts – call this FIRST when you are orienting rather than searching. Each node returns `path` (a tagPath you can hand straight to list_pages), `pageCount` (pages sitting directly at that path) and `pageCountDeep` (including every descendant), so you can tell an empty heading from a populated branch before spending a call. Takes no parameters.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟢get_full_corpus(sizeOnly, tagPath, maxChars, skip)

The whole Caper knowledge base as one text document, for bulk ingestion. PREFLIGHT FIRST: call it with sizeOnly=true to get the exact character count, a token estimate, the per-branch breakdown and the largest pages – the corpus is big enough to swamp a context window and one operational page exceeds 500 KB on its own. 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). If you only need a handful of pages, get_pages is cheaper.

입력 스키마

{
  "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. \"desci\". 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)"
    }
  }
}
🟢list_daos(query, limit)

Index of the DAOs on Caper: cashtag, name, description, member count, wiki URL, and that DAO's own MCP endpoint. Use it to resolve a name to a cashtag, then POST JSON-RPC to the returned `mcpEndpoint` to reach its get_ledger (treasury balances, proposal/trade/execution timeline, executed grants, inter-DAO funding) – this knowledge-base server deliberately has no ledger tool. `query` is a case-insensitive substring over cashtag, name and description. Defaults: limit 50 (max 200); `hasMore` says whether the cap cut the list.

입력 스키마

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Filter by cashtag, name or description (case-insensitive substring). Omit for all."
    },
    "limit": {
      "type": "number",
      "description": "Max DAOs returned (default 50, max 200)"
    }
  }
}
🟢get_challenge

Step 1 of writing to Caper: a single-use ROLA challenge (5-minute expiry). The response includes the exact recipe for the message your Ed25519 key must sign. Writes are Stokenet-testnet only for now, and you always sign with your OWN key – nothing here custodies anything. Takes no parameters.

입력 스키마

{
  "type": "object",
  "properties": {}
}
🟡login(challenge, address, publicKey, signature, curve)

Step 2: exchange the signed ROLA proof for a 12h Bearer token – the same verification the human wallet flow runs. Send the returned token as an HTTP `Authorization: Bearer <token>` header on every later tool call; MCP arguments never carry it.

입력 스키마

{
  "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)"
    },
    "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"
  ]
}
🟡get_manifest(kind, account, cashtag, name, description, ...)

Step 3: a ready-to-sign transaction manifest. Kinds: create-caper, buy, sell, create-proposal, vote, trigger. Per-kind parameters: create-caper needs name + cashtag + description (infoUrl/iconUrl/originToken optional); buy needs cashtag + xrd; sell needs cashtag + tokens; create-proposal needs cashtag + title + description + actionJson (one action object, or an ARRAY of up to 4 for a ranked ballot, as a JSON string — e.g. '{"kind":"PAYOUT","title":"Grant","currency":"<resource>","amount":100,"recipient":"<account>"}'). Governance is two-phase: 'vote' casts a ranked ballot (sequence = on-chain option indexes incl. the trailing Do-nothing, best first; proposerPaysFee answers who funds the execution fee) during the voting window; a supermajority pass arms 'trigger', which locks the trailing TWAP as the baseline and opens the market window: the winner executes unless the TWAP over that window is below the baseline. You sign and submit the manifest yourself with your own key, then register the txHash with submit_tx. Requires the Bearer token from the `login` tool, sent as an HTTP `Authorization: Bearer <token>` header on the POST carrying this call.

입력 스키마

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "create-caper",
        "buy",
        "sell",
        "create-proposal",
        "vote",
        "trigger"
      ],
      "description": "What the transaction does"
    },
    "account": {
      "type": "string",
      "description": "Your account address (pays fees, receives tokens)"
    },
    "cashtag": {
      "type": "string",
      "description": "Target caper's cashtag"
    },
    "name": {
      "type": "string",
      "description": "create-caper: the caper's name"
    },
    "description": {
      "type": "string",
      "description": "create-caper / create-proposal: description text"
    },
    "infoUrl": {
      "type": "string",
      "description": "create-caper: optional https project URL"
    },
    "iconUrl": {
      "type": "string",
      "description": "create-caper: optional icon URL (defaults to a generated one)"
    },
    "originToken": {
      "type": "string",
      "description": "create-caper: optional origin-token resource address (vampire launch)"
    },
    "xrd": {
      "type": "number",
      "description": "buy: $XRD to spend"
    },
    "tokens": {
      "type": "number",
      "description": "sell: caper tokens to sell"
    },
    "title": {
      "type": "string",
      "description": "create-proposal: proposal title"
    },
    "actionJson": {
      "type": "string",
      "description": "create-proposal: JSON for the action(s) — either ONE object, or an ARRAY of up to 4 that the voters rank against each other (a \"Do nothing\" option is always appended, so 4 actions make a 5-option ballot). Each is { kind: \"PAYOUT\" | \"INVEST\" | \"DIVEST\" | \"UPGRADE\" | \"METADATA\" | \"DEBATE\", … }. METADATA rewrites the token's mutable metadata (metadataDescription / metadataIconUrl / metadataInfoUrl — at least one). DEBATE is a non-executable position in a debate: title and description only, and winning it ends the proposal at the tally."
    }
  },
  "required": [
    "kind",
    "account"
  ]
}
🟡submit_tx(kind, txHash, cashtag, proposalId)

Step 4: register a committed transaction by txHash. Kinds: create-caper, buy, sell, proposal, vote, trigger. The server verifies before mirroring anything: receipts are re-read on-ledger (forged or foreign txHashes are refused, replays are idempotent). Context per kind: create-caper takes cashtag; proposal takes proposalId. Requires the Bearer token from the `login` tool, sent as an HTTP `Authorization: Bearer <token>` header on the POST carrying this call.

입력 스키마

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "create-caper",
        "buy",
        "sell",
        "proposal",
        "vote",
        "trigger"
      ],
      "description": "What the transaction did"
    },
    "txHash": {
      "type": "string",
      "description": "The committed transaction intent hash (txid_…)"
    },
    "cashtag": {
      "type": "string",
      "description": "create-caper: the cashtag, so the response can confirm the row"
    },
    "proposalId": {
      "type": "number",
      "description": "proposal: the id from the create-proposal manifest response"
    }
  },
  "required": [
    "kind",
    "txHash"
  ]
}
🔴save_wiki_page(daoId, tagPath, slug, title, html)

Create or edit a page on a DAO's company-layer wiki. Holders only – any amount of the DAO's token, its vote token or its founder badge. Pass the body as one HTML string; it becomes a standard content block (headings, paragraphs, lists, tables). Requires the Bearer token from the `login` tool, sent as an HTTP `Authorization: Bearer <token>` header on the POST carrying this call.

입력 스키마

{
  "type": "object",
  "properties": {
    "daoId": {
      "type": "string",
      "description": "Cashtag of the DAO whose wiki to edit"
    },
    "tagPath": {
      "type": "string",
      "description": "Optional tag path, e.g. \"updates\" (\"\" = top level)"
    },
    "slug": {
      "type": "string",
      "description": "Page slug"
    },
    "title": {
      "type": "string",
      "description": "Page title"
    },
    "html": {
      "type": "string",
      "description": "Page body as HTML, e.g. <h2>…</h2><p>…</p>"
    }
  },
  "required": [
    "daoId",
    "slug",
    "title",
    "html"
  ]
}

권장 프롬프트

search_research
Search for information about [topic] using Caper Wiki
예상 도구: search_wiki
find_specific
Find [specific item] using Caper Wiki
예상 도구: search_wiki
retrieve_data
Get details about [item] from Caper Wiki
예상 도구: get_page
fetch_info
Fetch [information type] using Caper Wiki
예상 도구: get_page
list_items
List all [items] available in Caper Wiki
예상 도구: list_pages

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 13개
관측 실패버전이 기록되지 않음—
관측 실패버전이 기록되지 않음—
검증됨버전이 기록되지 않음도구 13개