MCP Server
Query the DERO blockchain — and the canonical DERO documentation — from AI assistants. No middlemen, no API keys, no surveillance.
The DERO MCP server implements the Model Context Protocol (opens in a new tab), the open standard for connecting AI models to external tools. Run it as a local stdio process for Claude Desktop / Cursor / OpenCode, or as a streamable-HTTP server behind your own domain (e.g. mcp.derod.org) for ChatGPT Custom Connectors, Cursor hosted mode, and any agent that needs a remote URL instead of a subprocess.
AI discovery files: llms.txt (opens in a new tab) and /api/openapi.json (opens in a new tab) are curated subsets for agents — not a full RPC catalog. Use the Daemon RPC API and Wallet RPC API for complete method reference. Examples assume a local daemon at http://127.0.0.1:10102.
At a Glance
| Surface | Count | Notes |
|---|---|---|
| Tools | 32 | 18 daemon RPC wrappers + 3 docs-index tools + 11 composites |
| ↳ Daemon primitives | 18 | One per common daemon read method, plus local bech32 proof/address decode |
| ↳ Docs primitives | 3 | Search, fetch-by-slug, enumerate across derod / tela / hologram / deropay |
| ↳ Composite tools | 11 | Multi-step intent-shaped flows that fan out into primitives + docs and return a narrative with curated citations — including a full TELA suite (inspect, read file content, discover apps by dURL) |
| Resources | 4 | server-info, safety-boundary, example-flows, composites |
| Prompts | 5 | Composite-first guided flows |
| Structured error codes | 11 | Every error carries a hint and a retryable flag for agent self-correction |
| Transports | 2 | Local stdio (default) + streamable-HTTP (self-hosted) — both drive the same buildServer() factory, so the tool surface, response shapes, and error contract are identical |
| Bundled in the npm package | 3 docs | README.md, SKILL.md (per-tool agent runbook), POSITIONING.md (audience boundary + comparison vs. ACP / Stripe / Crossmint / Skyfire) |
Latest version, install commands, and per-release notes: see npm (opens in a new tab) and the GitHub releases (opens in a new tab).
Tool identifiers, schemas, and behavior are semantically stable — once a tool ships, its name, args, and response shape are preserved across minor and patch releases. Breaking changes only land in majors and are flagged in the release notes.
Why This Matters
AI assistants are powerful research and dev tools, but most blockchain integrations route through centralized APIs that log your queries. This server runs on your machine, talks to your daemon (or a public one you choose), and communicates with your AI over local stdio. No accounts, no analytics, no tracking — just code you can audit. The bundled DERO documentation index (147 pages across derod, tela, hologram, and deropay) is shipped inside the package, so the AI can quote primary sources offline without a single network round-trip beyond the daemon you pointed it at.
Install
npm install -g dero-mcp-serverRequires Node.js 20+. Source code: github.com/DHEBP/dero-mcp-server (opens in a new tab) · npm: dero-mcp-server (opens in a new tab)
Run Your Own Node
When DERO_DAEMON_URL is unset the server is local-first: it uses a local daemon at 127.0.0.1:10102 if one answers, and only falls back to a third-party public RPC when none is found. For real privacy, run your own daemon:
./derod --rpc-bind=127.0.0.1:10102Then point the MCP server at it via DERO_DAEMON_URL (see below).
Configure Your MCP Client
Claude Desktop
Edit claude_desktop_config.json:
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/claude/claude_desktop_config.json |
{
"mcpServers": {
"dero": {
"command": "dero-mcp-server",
"env": {
"DERO_DAEMON_URL": "http://127.0.0.1:10102"
}
}
}
}Omit env to use the default public RPC.
Cursor
Settings → MCP → Add Server
- Command:
dero-mcp-server - Environment:
DERO_DAEMON_URL=http://127.0.0.1:10102(optional)
OpenCode
opencode mcp add dero -- dero-mcp-serverOr with a local node:
opencode mcp add dero -e DERO_DAEMON_URL=http://127.0.0.1:10102 -- dero-mcp-serverContinue · Cline · Zed · others
Any MCP-compatible client works. The server uses stdio transport:
command: dero-mcp-server
env: DERO_DAEMON_URL=http://127.0.0.1:10102 (optional)Consult your client's MCP documentation for the exact config format.
Inspect interactively
To explore the full surface without committing to a client config, use the official MCP Inspector:
npx @modelcontextprotocol/inspector dero-mcp-serverIt opens a local web UI that lists every tool with its schema and annotations, lets you invoke any tool with form-filled args, and shows the structured response including _meta.error blocks.
HTTP Mode (Self-Hosted)
For clients that can't launch a local subprocess — ChatGPT Custom Connectors, Cursor hosted mode, n8n / Zapier integrations — run the server in streamable-HTTP mode and put it behind your own domain:
DERO_MCP_AUTH_TOKEN=$(openssl rand -base64 48) \
dero-mcp-server --http
# [dero-mcp-server] HTTP listening on 127.0.0.1:8787 (POST /mcp · GET /health)| Variable | Default | Description |
|---|---|---|
DERO_MCP_HTTP | unset | Set to 1 (or pass --http) to start in HTTP mode |
DERO_MCP_HTTP_PORT | 8787 | Listen port |
DERO_MCP_HTTP_HOST | 127.0.0.1 | Bind address. Use 0.0.0.0 to bind publicly (do not without auth + TLS upstream) |
DERO_MCP_AUTH_TOKEN | unset | If set, every /mcp request must carry Authorization: Bearer <token>. Constant-time compared. |
For a turnkey deploy with Caddy + auto-TLS + Docker Compose, see the deploy/ (opens in a new tab) reference in the repo. Anyone can fork and run their own mcp.derod.org-style instance.
The stdio transport and the HTTP transport share the same buildServer() factory, so the tool surface, response shapes, and error codes are identical across both.
What You Can Ask
Once connected, talk to your AI naturally — it will pick the right composite or primitive based on your intent:
- "Is the DERO daemon healthy and synced?" →
diagnose_chain_health - "What does the contract at SCID
[…]do?" →explain_smart_contract - "Look up transaction
[txid]and tell me what it is." →trace_transaction_with_context - "Which DERO docs page should I read to deploy a TELA app?" →
recommend_docs_path - "Estimate the gas cost to deploy this DVM contract." →
estimate_deploy_cost - "Verify the claim that DERO's total supply has been correctly minted at the current tip." →
audit_chain_artifact_claim - "Forge a payload proof showing any amount — to see why 'Verified ✓' on an explorer proves nothing." →
dero_forge_demo_proof - "What's the SCID for
vault.tela?" →dero_durl_to_scid - "What TELA apps exist on DERO? Show me a few." →
dero_tela_list_apps - "Inspect the TELA app at SCID
[…]— what is it and what files does it have?" →tela_inspect - "Show me the actual HTML of that app's
index.html." →tela_get_doc_content - "What's the current block height?" →
dero_get_info/dero_get_height - "Show me the source code for contract
[SCID]." →dero_get_sc - "Resolve the name
deroto a wallet address." →dero_name_to_address - "Decode this bech32 proof string and tell me what it represents." →
dero_decode_proof_string
Composite Tools
Each composite replaces a multi-step primitive chain with a single call, returns a plain-language narrative summary, and stitches the most relevant bundled docs pages as related_docs citations.
| Composite | Replaces | When to call |
|---|---|---|
diagnose_chain_health | Ping + GetInfo + GetHeight + GetTxPool | Any "is the chain healthy / are we synced" question |
explain_smart_contract | GetSC + manual DVM-BASIC parsing + docs lookup | "What does this contract do" — returns function surface + token/registry/minimal/generic classification + 1-4 curated DVM docs |
recommend_docs_path | 4× parallel dero_docs_search + manual ranking | Natural-language intent → ranked docs across all 4 DERO products; product_hint is a 1.5× score bias, not a filter |
estimate_deploy_cost | GetGasEstimate + manual surface extraction + manual gas interpretation | DVM deploy pre-flight — returns gas estimate + plain-text breakdown + parsed function surface |
trace_transaction_with_context | GetTransaction + (for SC installs) GetSC + manual classification | "What is this tx" — returns confirmation status, kind classification, ring stats, and parsed SC install surface inline |
audit_chain_artifact_claim | Multiple primitives + docs lookups + proof decode | End-to-end verifier for chain-related claims — returns narrative + cited daemon state + flagged-artifact analysis + optional bech32 proof round-trips. Backbone of the adversarial-context defense layer |
dero_forge_demo_proof | dero_get_transaction + manual commitment math + bech32 encode | Forge a deroproof… display object for any tx / ring slot / amount — the one-call reproduction of the inflation-claim Part 3 demo that Verified ✓ proves nothing: payload proofs are user-forgeable. Also exercises SDK proof-decode paths. |
tela_inspect | GetSC + manual TELA-INDEX-1/DOC-1 schema parsing | "What is this TELA contract/app" — auto-detects INDEX vs DOC, decodes the manifest (name, dURL, mods, the full DOC file list, version history, ratings) or the file metadata. Reads raw stored keys so large manifests aren't truncated |
tela_get_doc_content | GetSC + comment-block extraction (+ gzip decode) | "Show me this TELA file's content" — extracts the actual on-chain HTML/CSS/JS from a TELA-DOC-1, transparently gunzipping .gz files to plaintext |
dero_durl_to_scid | a separate Gnomon indexer | "What's the SCID for vault.tela" — resolves a TELA dURL to its on-chain SCID(s) by discovering apps in-process (no external indexer). Non-unique dURLs return the newest as primary and disclose other claimants |
dero_tela_list_apps | a separate Gnomon indexer | "What TELA apps exist" — lists/searches discovered TELA apps (dURL, name, SCID, file count) with transparent scan-coverage metadata |
Each composite is fully documented in docs/composites.md (opens in a new tab) (design contract, accepted/rejected designs, failure modes), and every composite ships with a green flow test in CI that runs against a live public daemon.
Why composites matter for agents. A generic JSON-RPC client can chain primitives, but it cannot stitch the right docs context or classify failure modes for free. Composites are the wedge: they deliver agent-ready answers from the canonical DERO data sources in one call.
Primitive Tools
The 21 primitives map 1:1 onto daemon RPC methods (18) plus the bundled docs index (3). Use them when a composite is unavailable or you need raw data.
Daemon RPC
| Tool | RPC Method | Purpose |
|---|---|---|
dero_daemon_ping | DERO.Ping | Liveness check |
dero_daemon_echo | DERO.Echo | Roundtrip string echo |
dero_get_info | DERO.GetInfo | Network height, difficulty, version, hashrate, testnet flag |
dero_get_height | DERO.GetHeight | Height, stableheight, topoheight |
dero_get_block_count | DERO.GetBlockCount | Total block count |
dero_get_block | DERO.GetBlock | Full block by hash or height |
dero_get_block_header_by_hash | DERO.GetBlockHeaderByHash | Block header by hash |
dero_get_block_header_by_topo_height | DERO.GetBlockHeaderByTopoHeight | Block header by topoheight |
dero_get_last_block_header | DERO.GetLastBlockHeader | Tip block header |
dero_get_block_template | DERO.GetBlockTemplate | Mining block template |
dero_get_transaction | DERO.GetTransaction | Transaction record by hash |
dero_get_tx_pool | DERO.GetTxPool | Mempool transaction hashes |
dero_get_sc | DERO.GetSC | Smart contract code, variables, balances |
dero_get_gas_estimate | DERO.GetGasEstimate | Daemon-side gas estimate for a contract source or call |
dero_get_encrypted_balance | DERO.GetEncryptedBalance | Encrypted balance for an address |
dero_get_random_address | DERO.GetRandomAddress | Random registered wallet addresses |
dero_name_to_address | DERO.NameToAddress | Resolve a registered name to its address |
dero_decode_proof_string | (local — no RPC) | Decode a DERO bech32 proof/address string locally. Powers the adversarial-context defense layer and the demo-proof composite |
Bundled docs index
| Tool | Purpose |
|---|---|
dero_docs_list | Enumerate available doc pages across derod, tela, hologram, deropay |
dero_docs_search | Full-text search across the bundled docs index — in-process, no network round-trip |
dero_docs_get_page | Fetch a single doc page by slug with full plain-text content and headings |
Resources and Prompts
Beyond tools, the server exposes 4 resources and 5 prompts so MCP-aware clients can surface them in their UI:
Resources
| URI | Content |
|---|---|
dero://mcp/server-info | Server metadata, tool list, resource list, prompt names, daemon endpoint |
dero://mcp/safety-boundary | Read-only posture and excluded method list (transfer, scinvoke, etc.) |
dero://mcp/example-flows | Composite-first agent flow recipes for common DERO investigations |
dero://mcp/composites | Structured catalog of all 11 composites — what each replaces, when to call it, what it returns, and which _meta.error codes it can emit |
Prompts
| Prompt | What it scripts |
|---|---|
network_health_check | Drives diagnose_chain_health with optional reference_topoheight |
inspect_smart_contract | Drives explain_smart_contract for any SCID |
trace_transaction | Drives trace_transaction_with_context for any tx hash |
find_dero_docs_for_intent | Drives recommend_docs_path with a natural-language intent + optional product_hint |
estimate_deploy_for_contract | Drives estimate_deploy_cost with DVM-BASIC source |
Structured Errors
Every tool wraps failures in a structured _meta.error block so agents can react programmatically instead of parsing error strings:
| Code | Emitted by | Meaning | Retryable |
|---|---|---|---|
INVALID_INPUT | estimate_deploy_cost + others | Tool input shape is wrong (wraps daemon -32098 for DVM compile errors); raw message preserved in _meta.error.raw | no — read the hint |
INVALID_BECH32 | dero_decode_proof_string, audit + forge composites | Bech32 proof/address string failed to decode | no — re-check input string |
NO_DOCS_MATCH | recommend_docs_path | Intent matched zero pages across all 4 products | no — rephrase intent (drop verbs) |
DOC_NOT_FOUND | dero_docs_get_page | Slug doesn't exist in the bundled index | no — use dero_docs_search to find valid slugs |
TX_NOT_FOUND | trace_transaction_with_context | Daemon returned an empty record for the hash | yes — verify hash + network; retryable if freshly broadcast |
RPC_UNREACHABLE | All daemon tools | Daemon not reachable on DERO_DAEMON_URL | yes — check daemon + run npm run doctor |
RPC_INVALID_PARAMS | Most daemon tools | Daemon rejected the request shape | no — check arg names and types |
RPC_METHOD_NOT_FOUND | All daemon tools | Daemon outdated or not Stargate | no — surface to user; they need to upgrade |
RPC_HTTP_ERROR | All daemon tools | HTTP-level error from the daemon | yes — check DERO_DAEMON_URL |
DOCS_UNAVAILABLE | All docs tools | Bundled docs index missing from the install | no — reinstall dero-mcp-server |
TOOL_EXECUTION_ERROR | All tools | Catch-all unexpected error | yes — retry once, then inspect daemon logs |
Every error code carries a hint string with actionable next steps so the agent can recover or explain the failure cleanly to the user.
Read-Only by Design
Every one of the 32 tools carries the MCP read-only annotation block:
{
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": false,
"openWorldHint": false
}This lets MCP hosts safely auto-approve any tool call from this server without prompting on every read. The server cannot:
- Send transactions
- Transfer funds
- Invoke smart contracts (only estimate deploy cost via
estimate_deploy_cost— nothing is submitted to chain) - Submit blocks
- Hold wallet keys or talk to wallet RPC
Wallet RPC methods (transfer, scinvoke, DERO.SendRawTransaction, DERO.SubmitBlock) are explicitly excluded. The full read-only posture, the six AND-gated conditions that would be required to expand the boundary, and the rationale for each are documented in docs/decision-boundary.md (opens in a new tab).
If you need write capabilities in the future, they will be gated behind explicit flags and a separate wallet URL and a distinct annotation block (readOnlyHint: false) and documented escalation — never enabled by default.
Environment
| Variable | Default | Description |
|---|---|---|
DERO_DAEMON_URL | http://82.65.143.182:10102 | Daemon base URL. Set to http://127.0.0.1:10102 for a local node. |
DERO_DOCS_ROOT | (unset; uses bundled index) | Optional dev override pointing at a local docs source tree. Production deployments should leave this unset to use the bundled index. |
DERO_MCP_HTTP | unset | Set to 1 (or pass --http) to start in streamable-HTTP mode instead of stdio. |
DERO_MCP_HTTP_PORT | 8787 | HTTP listen port when running in HTTP mode. |
DERO_MCP_HTTP_HOST | 127.0.0.1 | HTTP bind address. Use 0.0.0.0 to bind publicly (only behind auth + TLS upstream). |
DERO_MCP_AUTH_TOKEN | unset | Bearer token for HTTP /mcp requests. If set, every request must carry Authorization: Bearer <token>. Constant-time compared. |
Verify, Don't Trust
- Source code on GitHub (opens in a new tab) — composite design contract in
docs/composites.md, read-only posture indocs/decision-boundary.md, agent-ready evidence indocs/mcp-agent-ready-evidence.md - Bundled with the npm package:
SKILL.mdis the per-tool agent operating manual (composite-first rule, port reference, structured error contract, workflow recipes, safety rules);POSITIONING.mdcovers who this server is for vs. who it isn't, with a comparison vs. ACP / Stripe / Crossmint / Skyfire - Agent-discovery surfaces at
/.well-known/agent-card.json(A2A v0.2-draft descriptor for the broader agent ecosystem) and/.well-known/mcp-server-card.json(MCP-specific descriptor) - Package on npm (opens in a new tab)
- Listed in the official MCP registry (opens in a new tab) as
io.github.DHEBP/dero-mcp-server - CI runs full smoke probes, composite flow tests, primitive flow tests, description / citation drift guards, and HTTP transport smoke tests on every push
- MIT licensed — fork it, audit it, improve it
See Also
- DERO Daemon RPC API — full RPC reference for the methods the primitives wrap
- Running a DERO Node — set up your own daemon
- Smart Contract Fundamentals — DVM concepts the composites cite
- XSWD — browser wallet integration (for write flows the MCP server intentionally excludes)
SKILL.md(opens in a new tab) — agent operating manual served at the docs origin (mirror of the npm-bundled file)agents.md(opens in a new tab) — human-and-LLM-readable operating runbook for the whole DERO docs surfacellms.txt(opens in a new tab) — curated agent map of the DERO docs corpus