dero — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited dero (Agent Skill) and scored it 45/100 (orange). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 11 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 11 flagged
A base64 string of 128+ characters appears in a documentation file. Encoded prompt injection hides the hostile instruction in base64 — invisible to keyword filters — and relies on the agent's ability to decode it at runtime. There is no normal authoring reason to embed a multi-hundred-byte base64 blob in skill docs.
*.sig, SIGNATURES) outside the documentation.Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
DERO is a privacy-first Layer 1 blockchain with native homomorphic encryption, private smart contracts (DVM-BASIC), and on-chain decentralized web apps (TELA). This file is the per-tool operating reference for an agent already connected to dero-mcp-server.
For installation and host configuration, see README.md. For the cypherpunk positioning, see POSITIONING.md.
User asks any of:
Before answering the first user question that needs DERO knowledge, read the MCP's own self-description resources in this order:
dero://mcp/server-info — server metadata, tool list, resource list, prompt namesdero://mcp/example-flows — agent flow recipes (composites first, primitives second)dero://mcp/composites — full catalog of the 11 composite tools and when to use eachdero://mcp/safety-boundary — read-only posture, excluded methods, write-path guidanceThese four resources document the canonical agent workflows. Skim them once per session.
Tools follow a consistent verb-noun pattern. Memorize the prefixes:
| Prefix | Meaning |
|---|---|
dero_daemon_* | Daemon liveness / round-trip primitives |
dero_get_* | Single read against a specific daemon method |
dero_docs_* | Bundled docs index (search, fetch, list — no network needed) |
dero_name_to_address | Name Service resolution |
dero_decode_proof_string | Bech32 proof/address decode |
dero_forge_demo_proof | Generate demo proof strings for testing |
explain_*, trace_*, diagnose_*, audit_*, estimate_*, recommend_* | Composite tools — chain multiple primitives + docs and return a narrative |
Tools always return JSON; composites add a narrative field with the synthesized explanation.
The MCP exposes both primitive tools (one daemon RPC method per tool) and composite tools (chains of primitives + bundled docs lookups returning a narrative). Always prefer the composite when its intent matches the user request.
| Composite | Replaces | When to call |
|---|---|---|
diagnose_chain_health | ping → get_info → get_height → get_tx_pool | "is the chain healthy?", "are we synced?", general daemon-status |
explain_smart_contract | get_sc + manual parsing + docs_search | User wants to UNDERSTAND a contract (functions, kind, related DVM docs) |
recommend_docs_path | 4× parallel docs_search + manual ranking | Natural-language intent ("deploy a TELA app", "estimate gas") |
estimate_deploy_cost | get_gas_estimate + manual surface extraction | User wants to deploy a contract and needs cost |
trace_transaction_with_context | get_transaction + (if SC install) get_sc | "what is this tx", "is this confirmed", "what contract did this deploy" |
audit_chain_artifact_claim | (varies) | Verify a chain-related claim end-to-end |
dero_forge_demo_proof | (varies) | Generate demo proof strings for testing |
tela_inspect | get_sc + manual TELA schema parsing | User references a TELA SCID / .tela app: "what is this TELA contract", "what files does this app have" (auto-detects INDEX vs DOC) |
tela_get_doc_content | get_sc + comment-block extraction | User wants the actual file content (HTML/CSS/JS) a TELA-DOC stores |
dero_durl_to_scid | (chain discovery — no external indexer) | User asks "what's the SCID for vault.tela" / a .tela dURL → resolves to SCID(s). For a NAME like "quickbrownfox" use dero_name_to_address instead |
dero_tela_list_apps | (chain discovery — no external indexer) | User wants to browse/search what TELA apps exist on-chain |
Fall back to primitives only when the composite is unavailable or returns _meta.error.
Daemon RPC wrappers (read-only):
| Tool | Purpose |
|---|---|
dero_daemon_ping | Liveness check |
dero_daemon_echo | Echo strings — useful for round-trip testing |
dero_get_info | Daemon info: network, version, topoheight, stableheight |
dero_get_height | Current height only (faster than get_info) |
dero_get_block_count | Block count |
dero_get_last_block_header | Latest block header |
dero_get_block | Block by hash OR height (exactly one) |
dero_get_block_header_by_topo_height | Block header by topo height |
dero_get_block_header_by_hash | Block header by hash |
dero_get_tx_pool | Current mempool snapshot |
dero_get_random_address | A random recent address (optional scid for asset) |
dero_get_transaction | Tx by txs_hashes[], optional decode_as_json |
dero_get_encrypted_balance | Encrypted balance for address at topoheight (-1 = latest) |
dero_get_sc | Smart contract state by scid (default returns code + variables) |
dero_get_gas_estimate | Gas estimate for transfers or SC deploy |
dero_name_to_address | Resolve a registered name to a DERO address |
dero_get_block_template | Block template for mining |
dero_decode_proof_string | Decode a bech32 DERO proof/address string |
Docs lookups (bundled-index, no network):
| Tool | Purpose |
|---|---|
dero_docs_search | Full-text search across all DERO docs (derod, tela, hologram, deropay) |
dero_docs_get_page | Fetch a doc page by slug (and optional product) |
dero_docs_list | Enumerate doc pages, optionally filtered by product |
Canonical DERO port table. Use this before suggesting any URL.
| Environment | Daemon RPC | Wallet RPC | XSWD |
|---|---|---|---|
| Mainnet (Stargate) | 10102 | 10103 | 44326 |
| Testnet | 40402 | 40403 | 44326 |
Simulator (derod --simulator) | 20000 | 30000 | 44326 |
Defaults:
DERO_DAEMON_URL is local-first when unset: the server uses a local node at 127.0.0.1:10102 if reachable, else a public RPC fallback. Recommend running your own node for production work; set DERO_DAEMON_URL to pin a specific endpoint.--rpc-server flag on the wallet.This MCP never mutates chain state. Excluded methods include transfer, scinvoke, DERO.SendRawTransaction, DERO.SubmitBlock. If the user needs to move funds or invoke a contract:
dero://mcp/safety-boundary for the full posturecurl / XSWD / Engram) for writesTool errors come back as { ok: false, tool, _meta: { error: { code, hint, retryable, raw } } }. React to the code, not the message:
| Code | Meaning | Reaction |
|---|---|---|
INVALID_INPUT | Tool input shape is wrong | Read the hint; do not retry blindly |
INVALID_BECH32 | Proof/address string failed bech32 decode | Re-check the input string |
DOC_NOT_FOUND | Slug doesn't exist | Use dero_docs_search to find valid slugs, then retry |
NO_DOCS_MATCH | recommend_docs_path couldn't match the intent | Rephrase intent (drop verbs), retry |
TX_NOT_FOUND | Daemon has no record | Verify hash + network; retryable if freshly broadcast |
RPC_METHOD_NOT_FOUND | Daemon outdated or not Stargate | Surface to user — they need to upgrade |
RPC_INVALID_PARAMS | Tool args don't match RPC method | Check arg names and types |
RPC_UNREACHABLE | Daemon offline or unreachable | Retryable; tell user to run npm run doctor |
RPC_HTTP_ERROR | HTTP-level error from daemon | Check DERO_DAEMON_URL |
DOCS_UNAVAILABLE | Bundled docs index missing | Reinstall dero-mcp-server |
TOOL_EXECUTION_ERROR | Catch-all | Retry once, then inspect daemon logs |
Every response that uses DERO docs MUST cite the source URL with .md suffix:
Source: DERO docs (https://derod.org/dvm/dvm-basic.md)When the MCP returns related_docs, quote 1–3 of them verbatim. Do not cite the homepage; cite the specific page.
Worked examples for common multi-step requests. Use these as a starting point; adapt to the specific user prompt.
User prompt: "Audit the claim that DERO's total supply has been correctly minted at the current chain tip."
audit_chain_artifact_claim with the claim text — it returns a narrative + cited daemon state + related docs.dero_get_info (to get tip metadata), dero_get_last_block_header (to verify tip), dero_docs_search for "supply integrity" / "inflation claim", then synthesize manually.User prompt: "There's a contract at SCID `<id>` — what does it do, what does its state look like, and what would it cost to interact with?"
explain_smart_contract with the SCID — returns kind classification, function surface, narrative, related DVM docs.dero_get_sc with code: false, variables: true if the explainer didn't surface state — use this for the stored-state dump.estimate_deploy_cost if the user is asking about deploying a copy (not interacting with the existing one).User prompt: "My transfer tx `<hash>` doesn't show in the explorer. What happened?"
trace_transaction_with_context with the hash. If TX_NOT_FOUND:diagnose_chain_health — confirm daemon reachable and synced.dero_get_tx_pool — check the mempool for an unconfirmed entry.--debug.network + topoheight so the user can verify they're checking the right chain.User prompt: "How do I deploy a DVM-BASIC contract?"
recommend_docs_path with the natural-language intent — returns ranked doc page recommendations with snippets.dero_docs_get_page on the top recommendation for full content..md URL).User prompt: "Walk me through DERO's privacy: homomorphic encryption, ring signatures, Bulletproofs — and how they compose."
recommend_docs_path with the privacy intent — returns the privacy-pages cluster.dero_docs_get_page in turn.User prompt: "How much would it cost to deploy this DVM-BASIC contract? `<paste source>`"
estimate_deploy_cost with the source string — returns gas estimate + breakdown + parsed function surface.derod --simulator, port 20000) before mainnet. `basic ).The MCP also exposes 5 prompts for common investigations. Use these as user-facing entry points when the user asks broadly:
| Prompt | Use case |
|---|---|
network_health_check | "Is the DERO daemon healthy?" |
inspect_smart_contract | "What does contract X do?" |
trace_transaction | "What is transaction Y?" |
find_dero_docs_for_intent | "Where in the docs do I read about Z?" |
estimate_deploy_for_contract | "How much will deploying this DVM source cost?" |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.