Tools
MCP Server

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

SurfaceCountNotes
Tools3218 daemon RPC wrappers + 3 docs-index tools + 11 composites
↳ Daemon primitives18One per common daemon read method, plus local bech32 proof/address decode
↳ Docs primitives3Search, fetch-by-slug, enumerate across derod / tela / hologram / deropay
↳ Composite tools11Multi-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)
Resources4server-info, safety-boundary, example-flows, composites
Prompts5Composite-first guided flows
Structured error codes11Every error carries a hint and a retryable flag for agent self-correction
Transports2Local 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 package3 docsREADME.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-server

Requires 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:10102

Then point the MCP server at it via DERO_DAEMON_URL (see below).

Configure Your MCP Client

Claude Desktop

Edit claude_desktop_config.json:

OSPath
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-server

Or with a local node:

opencode mcp add dero -e DERO_DAEMON_URL=http://127.0.0.1:10102 -- dero-mcp-server

Continue · 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-server

It 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)
VariableDefaultDescription
DERO_MCP_HTTPunsetSet to 1 (or pass --http) to start in HTTP mode
DERO_MCP_HTTP_PORT8787Listen port
DERO_MCP_HTTP_HOST127.0.0.1Bind address. Use 0.0.0.0 to bind publicly (do not without auth + TLS upstream)
DERO_MCP_AUTH_TOKENunsetIf 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 dero to 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.

CompositeReplacesWhen to call
diagnose_chain_healthPing + GetInfo + GetHeight + GetTxPoolAny "is the chain healthy / are we synced" question
explain_smart_contractGetSC + 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_path4× parallel dero_docs_search + manual rankingNatural-language intent → ranked docs across all 4 DERO products; product_hint is a 1.5× score bias, not a filter
estimate_deploy_costGetGasEstimate + manual surface extraction + manual gas interpretationDVM deploy pre-flight — returns gas estimate + plain-text breakdown + parsed function surface
trace_transaction_with_contextGetTransaction + (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_claimMultiple primitives + docs lookups + proof decodeEnd-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_proofdero_get_transaction + manual commitment math + bech32 encodeForge 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_inspectGetSC + 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_contentGetSC + 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_scida 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_appsa 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

ToolRPC MethodPurpose
dero_daemon_pingDERO.PingLiveness check
dero_daemon_echoDERO.EchoRoundtrip string echo
dero_get_infoDERO.GetInfoNetwork height, difficulty, version, hashrate, testnet flag
dero_get_heightDERO.GetHeightHeight, stableheight, topoheight
dero_get_block_countDERO.GetBlockCountTotal block count
dero_get_blockDERO.GetBlockFull block by hash or height
dero_get_block_header_by_hashDERO.GetBlockHeaderByHashBlock header by hash
dero_get_block_header_by_topo_heightDERO.GetBlockHeaderByTopoHeightBlock header by topoheight
dero_get_last_block_headerDERO.GetLastBlockHeaderTip block header
dero_get_block_templateDERO.GetBlockTemplateMining block template
dero_get_transactionDERO.GetTransactionTransaction record by hash
dero_get_tx_poolDERO.GetTxPoolMempool transaction hashes
dero_get_scDERO.GetSCSmart contract code, variables, balances
dero_get_gas_estimateDERO.GetGasEstimateDaemon-side gas estimate for a contract source or call
dero_get_encrypted_balanceDERO.GetEncryptedBalanceEncrypted balance for an address
dero_get_random_addressDERO.GetRandomAddressRandom registered wallet addresses
dero_name_to_addressDERO.NameToAddressResolve 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

ToolPurpose
dero_docs_listEnumerate available doc pages across derod, tela, hologram, deropay
dero_docs_searchFull-text search across the bundled docs index — in-process, no network round-trip
dero_docs_get_pageFetch 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

URIContent
dero://mcp/server-infoServer metadata, tool list, resource list, prompt names, daemon endpoint
dero://mcp/safety-boundaryRead-only posture and excluded method list (transfer, scinvoke, etc.)
dero://mcp/example-flowsComposite-first agent flow recipes for common DERO investigations
dero://mcp/compositesStructured catalog of all 11 composites — what each replaces, when to call it, what it returns, and which _meta.error codes it can emit

Prompts

PromptWhat it scripts
network_health_checkDrives diagnose_chain_health with optional reference_topoheight
inspect_smart_contractDrives explain_smart_contract for any SCID
trace_transactionDrives trace_transaction_with_context for any tx hash
find_dero_docs_for_intentDrives recommend_docs_path with a natural-language intent + optional product_hint
estimate_deploy_for_contractDrives 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:

CodeEmitted byMeaningRetryable
INVALID_INPUTestimate_deploy_cost + othersTool input shape is wrong (wraps daemon -32098 for DVM compile errors); raw message preserved in _meta.error.rawno — read the hint
INVALID_BECH32dero_decode_proof_string, audit + forge compositesBech32 proof/address string failed to decodeno — re-check input string
NO_DOCS_MATCHrecommend_docs_pathIntent matched zero pages across all 4 productsno — rephrase intent (drop verbs)
DOC_NOT_FOUNDdero_docs_get_pageSlug doesn't exist in the bundled indexno — use dero_docs_search to find valid slugs
TX_NOT_FOUNDtrace_transaction_with_contextDaemon returned an empty record for the hashyes — verify hash + network; retryable if freshly broadcast
RPC_UNREACHABLEAll daemon toolsDaemon not reachable on DERO_DAEMON_URLyes — check daemon + run npm run doctor
RPC_INVALID_PARAMSMost daemon toolsDaemon rejected the request shapeno — check arg names and types
RPC_METHOD_NOT_FOUNDAll daemon toolsDaemon outdated or not Stargateno — surface to user; they need to upgrade
RPC_HTTP_ERRORAll daemon toolsHTTP-level error from the daemonyes — check DERO_DAEMON_URL
DOCS_UNAVAILABLEAll docs toolsBundled docs index missing from the installno — reinstall dero-mcp-server
TOOL_EXECUTION_ERRORAll toolsCatch-all unexpected erroryes — 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

VariableDefaultDescription
DERO_DAEMON_URLhttp://82.65.143.182:10102Daemon 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_HTTPunsetSet to 1 (or pass --http) to start in streamable-HTTP mode instead of stdio.
DERO_MCP_HTTP_PORT8787HTTP listen port when running in HTTP mode.
DERO_MCP_HTTP_HOST127.0.0.1HTTP bind address. Use 0.0.0.0 to bind publicly (only behind auth + TLS upstream).
DERO_MCP_AUTH_TOKENunsetBearer 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 in docs/decision-boundary.md, agent-ready evidence in docs/mcp-agent-ready-evidence.md
  • Bundled with the npm package: SKILL.md is the per-tool agent operating manual (composite-first rule, port reference, structured error contract, workflow recipes, safety rules); POSITIONING.md covers 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