Connects Claude to the DERO privacy blockchain via daemon JSON-RPC. Exposes 21 read-only primitives (blocks, transactions, mempool, smart contract state, registered names) plus 7 composite tools that bundle multi-step queries with documentation lookups. Ships with a full DERO docs index covering derod, DVM-BASIC smart contracts, and the Stargate mainnet. Auto-detects local nodes at 127.0.0.1:10102 or falls back to a public endpoint. Runs stdio for Claude Desktop and Cursor, or streamable HTTP for remote integrations. No wallet RPC or transaction submission by design. Useful if you're building on DERO and want Claude to pull live chain data, analyze contracts, or surface docs without leaving the chat.
claude mcp add --transport http dero https://mcp.derod.org/mcpRun in your terminal. Add --scope user to make it available in every project.
Review the command, arguments, and environment values before installing — MCP servers run with your local permissions.
Verified live against the running server on Jun 10, 2026.
dero_daemon_pingDERO daemon connectivity check via DERO.Ping. When to call: as the first step in any chain investigation to confirm the daemon is reachable. Call before dero_get_info if you are unsure whether DERO_DAEMON_URL is correctly configured. Input Requirements: none. Output: a "Pong"...DERO daemon connectivity check via DERO.Ping. When to call: as the first step in any chain investigation to confirm the daemon is reachable. Call before dero_get_info if you are unsure whether DERO_DAEMON_URL is correctly configured. Input Requirements: none. Output: a "Pong"...
No parameters — call it with no arguments.
dero_daemon_echoEcho strings through the daemon via DERO.Echo. Useful for round-trip sanity checks. When to call: when you need to confirm that string payloads reach the daemon intact (e.g. before debugging a malformed call to a more complex tool). PREFER dero_daemon_ping for a lighter-weight...1 paramsEcho strings through the daemon via DERO.Echo. Useful for round-trip sanity checks. When to call: when you need to confirm that string payloads reach the daemon intact (e.g. before debugging a malformed call to a more complex tool). PREFER dero_daemon_ping for a lighter-weight...
words*arraydero_get_infoGet DERO daemon and chain metadata: height, topoheight, stableheight, difficulty, version, network, mempool size, and total supply (DERO.GetInfo). When to call: first thing in any chain-state investigation or sync-health check. Call this BEFORE dero_get_sc, dero_get_transactio...Get DERO daemon and chain metadata: height, topoheight, stableheight, difficulty, version, network, mempool size, and total supply (DERO.GetInfo). When to call: first thing in any chain-state investigation or sync-health check. Call this BEFORE dero_get_sc, dero_get_transactio...
No parameters — call it with no arguments.
dero_get_heightGet the current block heights: tip height, stable height (finalized), and topoheight (canonical ordering) via DERO.GetHeight. When to call: when you need a quick height snapshot without the full chain-info payload. PREFER dero_get_info when you also need network, version, or d...Get the current block heights: tip height, stable height (finalized), and topoheight (canonical ordering) via DERO.GetHeight. When to call: when you need a quick height snapshot without the full chain-info payload. PREFER dero_get_info when you also need network, version, or d...
No parameters — call it with no arguments.
dero_get_block_countGet the total block count via DERO.GetBlockCount. This is a tip count, not a topoheight. When to call: when you need just the block count (e.g. for delta math against a reference height). PREFER dero_get_height when you need tip and stable heights together. Input Requirements:...Get the total block count via DERO.GetBlockCount. This is a tip count, not a topoheight. When to call: when you need just the block count (e.g. for delta math against a reference height). PREFER dero_get_height when you need tip and stable heights together. Input Requirements:...
No parameters — call it with no arguments.
dero_get_last_block_headerGet the header of the current tip block via DERO.GetLastBlockHeader (no full block body). When to call: when you need tip block metadata (hash, miner, timestamp, difficulty) without the transactions or miner_tx payload. PREFER dero_get_block when you need transactions or the m...Get the header of the current tip block via DERO.GetLastBlockHeader (no full block body). When to call: when you need tip block metadata (hash, miner, timestamp, difficulty) without the transactions or miner_tx payload. PREFER dero_get_block when you need transactions or the m...
No parameters — call it with no arguments.
dero_get_blockFetch a full block (header + miner_tx + transactions + topo position) by height OR hash via DERO.GetBlock. When to call: when investigating a specific block or verifying a transaction's inclusion. Call dero_get_height first if you do not have a target height. PREFER citing der...2 paramsFetch a full block (header + miner_tx + transactions + topo position) by height OR hash via DERO.GetBlock. When to call: when investigating a specific block or verifying a transaction's inclusion. Call dero_get_height first if you do not have a target height. PREFER citing der...
hashstringheightintegerdero_get_block_header_by_topo_heightGet a block header by topological height (canonical ordering) via DERO.GetBlockHeaderByTopoHeight. When to call: when you need a header keyed by topo position rather than chain height. Topoheight is the canonical ordering used by DERO indexers; height is the consensus block he...1 paramsGet a block header by topological height (canonical ordering) via DERO.GetBlockHeaderByTopoHeight. When to call: when you need a header keyed by topo position rather than chain height. Topoheight is the canonical ordering used by DERO indexers; height is the consensus block he...
topoheight*integerdero_get_block_header_by_hashGet a block header by its 64-char hex hash via DERO.GetBlockHeaderByHash. When to call: when you have a block hash (e.g. from a tx confirmation) and need its header without the full block body. PREFER dero_get_block when you also need the txs or miner_tx. Input Requirements (C...1 paramsGet a block header by its 64-char hex hash via DERO.GetBlockHeaderByHash. When to call: when you have a block hash (e.g. from a tx confirmation) and need its header without the full block body. PREFER dero_get_block when you also need the txs or miner_tx. Input Requirements (C...
hash*stringdero_get_tx_poolList pending mempool transaction hashes via DERO.GetTxPool. When to call: when checking unconfirmed activity, watching for a specific tx to land, or estimating mempool pressure. NOTE: `tx_hashes` may be `null` or an empty array when the mempool is empty — treat both as "no pen...List pending mempool transaction hashes via DERO.GetTxPool. When to call: when checking unconfirmed activity, watching for a specific tx to land, or estimating mempool pressure. NOTE: `tx_hashes` may be `null` or an empty array when the mempool is empty — treat both as "no pen...
No parameters — call it with no arguments.
dero_get_random_addressGet random registered addresses from the chain (used for ring construction in private transfers) via DERO.GetRandomAddress. When to call: when building a transfer ring in external wallet tooling, or sampling chain participants. Optional asset SCID limits sampling to holders of...1 paramsGet random registered addresses from the chain (used for ring construction in private transfers) via DERO.GetRandomAddress. When to call: when building a transfer ring in external wallet tooling, or sampling chain participants. Optional asset SCID limits sampling to holders of...
scidstringdero_get_transactionFetch one or more transactions by hash via DERO.GetTransaction. Each tx is returned with confirmation status, block hash, and (optionally) decoded JSON fields. When to call: when tracing a tx by hash. Pair with dero_get_sc when the tx invokes a contract. PREFER citing dero_doc...2 paramsFetch one or more transactions by hash via DERO.GetTransaction. Each tx is returned with confirmation status, block hash, and (optionally) decoded JSON fields. When to call: when tracing a tx by hash. Pair with dero_get_sc when the tx invokes a contract. PREFER citing dero_doc...
txs_hashes*arraydecode_as_jsonintegerdero_get_encrypted_balanceGet the ENCRYPTED balance blob for a DERO address at a topo height via DERO.GetEncryptedBalance. CRITICAL: this returns an opaque encrypted blob, NOT a cleartext balance. Only the wallet holding the spend key can decrypt it. Do NOT present the encrypted bytes as a balance to t...3 paramsGet the ENCRYPTED balance blob for a DERO address at a topo height via DERO.GetEncryptedBalance. CRITICAL: this returns an opaque encrypted blob, NOT a cleartext balance. Only the wallet holding the spend key can decrypt it. Do NOT present the encrypted bytes as a balance to t...
scidstringaddress*stringtopoheight*integerdero_get_scRead smart contract state (code and/or stored variables) by SCID via DERO.GetSC. This is the primary entry point for any contract inspection on DERO. When to call: as the first step in any DVM contract investigation. Pair with dero_docs_search("DVM-BASIC") to interpret the ret...4 paramsRead smart contract state (code and/or stored variables) by SCID via DERO.GetSC. This is the primary entry point for any contract inspection on DERO. When to call: as the first step in any DVM contract investigation. Pair with dero_docs_search("DVM-BASIC") to interpret the ret...
codebooleanscid*stringvariablesbooleantopoheightintegerdero_get_gas_estimateEstimate gas (compute + storage) for transfers, SC deploys, or SC invokes via DERO.GetGasEstimate. This is a PRE-FLIGHT check; nothing is submitted. When to call: BEFORE any wallet-side transfer/scinvoke (using external wallet tooling) to size fees, OR when explaining deploy c...4 paramsEstimate gas (compute + storage) for transfers, SC deploys, or SC invokes via DERO.GetGasEstimate. This is a PRE-FLIGHT check; nothing is submitted. When to call: BEFORE any wallet-side transfer/scinvoke (using external wallet tooling) to size fees, OR when explaining deploy c...
scstringsc_rpcarraysignerstringtransfersarraydero_name_to_addressResolve a DERO on-chain registered name to its address via DERO.NameToAddress. When to call: when a user supplies a human-readable name (e.g. "myname") instead of a `dero1.../deto1...` address. Input Requirements (CRITICAL): - `name` MUST be a non-empty string. Resolution is c...2 paramsResolve a DERO on-chain registered name to its address via DERO.NameToAddress. When to call: when a user supplies a human-readable name (e.g. "myname") instead of a `dero1.../deto1...` address. Input Requirements (CRITICAL): - `name` MUST be a non-empty string. Resolution is c...
name*stringtopoheight*integerdero_get_block_templateGet a mining block template for a miner payout address via DERO.GetBlockTemplate. When to call: ONLY when you are actually mining. PREFER dero_get_last_block_header for general chain-tip inspection. Input Requirements (CRITICAL): - `wallet_address` MUST be a valid DERO address...3 paramsGet a mining block template for a miner payout address via DERO.GetBlockTemplate. When to call: ONLY when you are actually mining. PREFER dero_get_last_block_header for general chain-tip inspection. Input Requirements (CRITICAL): - `wallet_address` MUST be a valid DERO address...
blockbooleanminerstringwallet_address*stringdero_decode_proof_stringDecode any DERO bech32 string (`dero…`, `deto…`, `deroi…`, `detoi…`, or `deroproof…`) into its constituent parts: HRP, network, compressed public key, and any embedded RPC arguments (CBOR-encoded). For `deroproof…` strings the "public key" is a derived blinder point used in th...1 paramsDecode any DERO bech32 string (`dero…`, `deto…`, `deroi…`, `detoi…`, or `deroproof…`) into its constituent parts: HRP, network, compressed public key, and any embedded RPC arguments (CBOR-encoded). For `deroproof…` strings the "public key" is a derived blinder point used in th...
proof_string*stringdero_docs_searchSearch the bundled DERO documentation index across derod, tela, hologram, and deropay (145+ pages). In-process — no network round trip. When to call: when you need authoritative docs to answer a DERO question, OR before constructing a citation in your response. Call this BEFOR...4 paramsSearch the bundled DERO documentation index across derod, tela, hologram, and deropay (145+ pages). In-process — no network round trip. When to call: when you need authoritative docs to answer a DERO question, OR before constructing a citation in your response. Call this BEFOR...
limitintegerquery*stringproductstringderod · tela · hologram · deropaysectionstringdero_docs_get_pageGet a single bundled docs page by slug, with plain-text content and headings. When to call: AFTER dero_docs_search has returned a candidate slug, OR when you have a known slug from a prior citation. PREFER dero_docs_search first when you only have a topic in mind. Input Requir...3 paramsGet a single bundled docs page by slug, with plain-text content and headings. When to call: AFTER dero_docs_search has returned a candidate slug, OR when you have a known slug from a prior citation. PREFER dero_docs_search first when you only have a topic in mind. Input Requir...
slug*stringoffsetintegerproductstringderod · tela · hologram · deropaydero_docs_listList indexed bundled docs pages across all four products with slugs, titles, and canonical URLs. When to call: when surveying available docs (e.g. "what TELA tutorials exist?"), OR when you need a slug catalog before invoking dero_docs_get_page. PREFER dero_docs_search when yo...2 paramsList indexed bundled docs pages across all four products with slugs, titles, and canonical URLs. When to call: when surveying available docs (e.g. "what TELA tutorials exist?"), OR when you need a slug catalog before invoking dero_docs_get_page. PREFER dero_docs_search when yo...
limitintegerproductstringderod · tela · hologram · deropaydiagnose_chain_healthComposite: run a four-step chain (DERO.Ping → DERO.GetInfo → DERO.GetHeight → DERO.GetTxPool) and return a single narrative health report with chain metadata, mempool snapshot, machine-readable signals, and curated docs citations. When to call: as the first step in any chain-s...1 paramsComposite: run a four-step chain (DERO.Ping → DERO.GetInfo → DERO.GetHeight → DERO.GetTxPool) and return a single narrative health report with chain metadata, mempool snapshot, machine-readable signals, and curated docs citations. When to call: as the first step in any chain-s...
include_tx_poolbooleanexplain_smart_contractComposite: fetch a DERO smart contract (code + variables + balances) and return its function surface, a classification of the contract pattern (tela_index | tela_doc | token | registry | minimal | generic), a plain-language narrative, and curated DVM docs citations re-ordered...2 paramsComposite: fetch a DERO smart contract (code + variables + balances) and return its function surface, a classification of the contract pattern (tela_index | tela_doc | token | registry | minimal | generic), a plain-language narrative, and curated DVM docs citations re-ordered...
scid*stringtopoheightintegertela_inspectComposite: fetch a TELA contract by SCID (DERO.GetSC code + variables) and parse it as either a TELA-INDEX-1 app manifest or a TELA-DOC-1 file contract, auto-detecting which standard it is from the stored keys. TELA is DERO's on-chain web-app platform: an INDEX is the app mani...2 paramsComposite: fetch a TELA contract by SCID (DERO.GetSC code + variables) and parse it as either a TELA-INDEX-1 app manifest or a TELA-DOC-1 file contract, auto-detecting which standard it is from the stored keys. TELA is DERO's on-chain web-app platform: an INDEX is the app mani...
scid*stringtopoheightintegertela_get_doc_contentComposite: fetch the actual file content stored in a TELA-DOC-1 contract. A DOC's file (HTML/CSS/JS/...) lives inside a DVM-BASIC comment block in the contract code — NOT in a stored variable — so this tool fetches DERO.GetSC, confirms the SCID is a DOC, and extracts the file...3 paramsComposite: fetch the actual file content stored in a TELA-DOC-1 contract. A DOC's file (HTML/CSS/JS/...) lives inside a DVM-BASIC comment block in the contract code — NOT in a stored variable — so this tool fetches DERO.GetSC, confirms the SCID is a DOC, and extracts the file...
scid*stringoffsetintegertopoheightintegerrecommend_docs_pathComposite: take a natural-language intent, fan out parallel scoped searches across the bundled docs for all four DERO products (derod, tela, hologram, deropay), boost any product_hint matches by 1.5×, and return a ranked recommendation list with per-result rationale plus ready...3 paramsComposite: take a natural-language intent, fan out parallel scoped searches across the bundled docs for all four DERO products (derod, tela, hologram, deropay), boost any product_hint matches by 1.5×, and return a ranked recommendation list with per-result rationale plus ready...
intent*stringproduct_hintstringderod · tela · hologram · deropaylimit_per_productintegerestimate_deploy_costComposite: send a DVM-BASIC contract source to the daemon's gas estimator, then return the raw estimate alongside a plain-text breakdown (what each gas number means), the parsed contract surface, and curated DVM deploy docs as citations. When to call: BEFORE asking a wallet to...3 paramsComposite: send a DVM-BASIC contract source to the daemon's gas estimator, then return the raw estimate alongside a plain-text breakdown (what each gas number means), the parsed contract surface, and curated DVM deploy docs as citations. When to call: BEFORE asking a wallet to...
sc*stringsignerstringinclude_breakdownbooleantrace_transaction_with_contextComposite: look up a DERO transaction by hash, classify its confirmation status (confirmed | mempool | unknown) and kind (sc_install | transfer_or_invocation | coinbase | unknown), extract the SC surface inline when the tx is a contract install, and stitch the right DERO tx +...3 paramsComposite: look up a DERO transaction by hash, classify its confirmation status (confirmed | mempool | unknown) and kind (sc_install | transfer_or_invocation | coinbase | unknown), extract the SC surface inline when the tx is a contract install, and stitch the right DERO tx +...
decodebooleantx_hash*stringinclude_sc_contextbooleanaudit_chain_artifact_claimComposite: audit a chain artifact (block topoheight, block hash, TX hash, and/or proof string) end-to-end. Returns a verdict (`cited_in_false_claim` | `clean`), the actual on-chain facts (block reward, TX acceptance status), an optional proof-string decode, a relayable narrati...5 paramsComposite: audit a chain artifact (block topoheight, block hash, TX hash, and/or proof string) end-to-end. Returns a verdict (`cited_in_false_claim` | `clean`), the actual on-chain facts (block reward, TX acceptance status), an optional proof-string decode, a relayable narrati...
tx_hashstringblock_hashstringtopoheightintegerproof_stringstringinclude_forge_demobooleandero_forge_demo_proofComposite: build a fresh `deroproof…` display object for ANY chosen transaction, ring slot, and amount — including negative amounts that uint64-wrap into the trillions. The forged string is constructed locally from public chain data (no wallet, no keys, no broadcast). On an un...4 paramsComposite: build a fresh `deroproof…` display object for ANY chosen transaction, ring slot, and amount — including negative amounts that uint64-wrap into the trillions. The forged string is constructed locally from public chain data (no wallet, no keys, no broadcast). On an un...
tx_hexstringtx_hashstringring_slotintegeramount_derostringA read-only Model Context Protocol server for the DERO privacy blockchain — a private-by-default Layer 1 with encrypted balances, private smart contracts (DVM-BASIC), and no public transaction graph. 21 daemon primitives + 11 composite tools (including TELA on-chain app inspection and dURL→SCID discovery), with a bundled documentation index spanning derod, tela, hologram, and deropay.
Registry listing: io.github.DHEBP/dero-mcp-server · Version: 0.4.4 · Transports: stdio (default, npm package) · streamable-http (--http, for self-hosting)
An MCP server (Model Context Protocol) is a small program that gives your AI assistant — Claude Desktop, Cursor, OpenCode, ChatGPT with Custom Connectors — the ability to call specific tools on your behalf. Instead of the AI talking about DERO from memory, it can actually look things up: fetch a block, read a contract, search the docs, trace a transaction, estimate a deploy.
You install it once and point your AI host at it. From then on, every DERO question you ask in chat hits live chain data and the bundled docs corpus — not the AI's training cutoff.
If you're new to DERO: it's a privacy-first L1 blockchain — often described as a private alternative to Ethereum for builders who want smart contracts without a transparent ledger, or as a Monero alternative for users who want account-based privacy with native programmability instead of UTXO-only payments. Homomorphically encrypted balances. Ring signatures hide senders. Zero-knowledge range proofs (Bulletproofs) hide amounts. There is no public transaction graph. The current mainnet is DERO Stargate.
Full docs: derod.org
Model Context Protocol (MCP) server that exposes read-only and analysis calls against a DERO Stargate daemon JSON-RPC endpoint. Ships as a stdio process for local MCP hosts (Claude Desktop, Cursor, OpenCode) or in streamable-HTTP mode behind a domain (e.g. mcp.derod.org) for ChatGPT Custom Connectors, Cursor hosted mode, and any agent that needs a remote URL. See deploy/ for a reference self-hosted deployment.
Get a working DERO MCP connection in under 5 minutes.
node --version.127.0.0.1:10102, the server detects and uses it automatically; otherwise it falls back to a public RPC, so it works with zero setup. Run your own for production — how to.| Host | Where |
|---|---|
| Claude Desktop (macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Claude Desktop (Windows) | %APPDATA%\Claude\claude_desktop_config.json |
| Cursor | Settings → MCP → Add Server |
| OpenCode | Settings → MCP → Add Server |
Create the file if it doesn't exist.
{
"mcpServers": {
"dero-daemon": {
"command": "npx",
"args": ["-y", "dero-mcp-server"]
}
}
}
This uses npx to fetch and run the latest published version — no manual install or build required.
The server auto-detects a local node at 127.0.0.1:10102. To pin a specific daemon (custom port or a remote URL), add an env block:
"env": { "DERO_DAEMON_URL": "http://127.0.0.1:10102" }
Fully quit and reopen — not just refresh. MCP servers load at startup.
In a new chat:
"What's the current DERO chain height?"
A number back means you're connected. If you see an error, confirm the config file path is correct and your host was fully restarted (not just refreshed).
Once it's working, jump to Try a prompt for a full tour.
Once installed, your MCP host can do all of these on your behalf — in natural language, no JSON-RPC needed:
vault.tela → SCID), browse what's deployed, inspect an app's manifest and files, and read the actual on-chain HTML/JS/CSS — no separate indexer to runAfter installing and restarting your MCP host, paste any of these. Start simple and work up.
Single-tool questions that verify the install and exercise live queries.
"What's the current DERO chain height?"
"Resolve the DERO name 'engram' to an address."
"Find the documentation page on Bulletproofs."
"What does the smart contract at SCID 0000…0001 do?"
Composite tools that fan out into multiple primitives and return a synthesized answer with citations.
"Explain the smart contract at SCID 0000000000000000000000000000000000000000000000000000000000000001 — what it does, its functions, and which DVM-BASIC docs are relevant."
"Trace transaction with full context — confirmation, classification, and what it touched."
"What's the right reading path for someone new to DERO smart contracts who wants to deploy a DVM-BASIC contract?"
"Estimate the gas cost to deploy this DVM source: "
TELA apps are full web apps (HTML/CSS/JS) deployed entirely on-chain. The server discovers and reads them with no external indexer — the first discovery query runs a one-time ~15s scan, then it's instant.
"What's the SCID for vault.tela?"
"What TELA apps exist on DERO? Show me a few."
"Inspect the TELA app at SCID — what is it, who made it, and what files does it have?"
"Show me the actual HTML of that app's index.html."
For multi-step agent recipes, per-tool guidance, error contract, and the composite-first rule, see SKILL.md.
Not included (by design): wallet RPC (transfer, scinvoke), DERO.SendRawTransaction, DERO.SubmitBlock. Those can move funds or consensus data; add them only with explicit user consent and a locked-down setup.
SKILL.md — per-tool agent runbook: composite-first rule, structured error contract, citation rules, agent-loop recipes, port reference.POSITIONING.md — who DERO MCP is for, who it isn't, comparison vs ACP / Stripe / Crossmint / Skyfire, privacy posture.cd dero-mcp-server
npm install
npm run build
Run (auto-detects a local node at 127.0.0.1:10102, else public fallback, when DERO_DAEMON_URL is unset):
node dist/index.js
Or set an explicit URL (e.g. your local daemon):
DERO_DAEMON_URL=http://127.0.0.1:10102 node dist/index.js
Daemon resolution is local-first: with DERO_DAEMON_URL unset, the server uses a local node at 127.0.0.1:10102 if it answers, else the baked-in third-party public RPC (82.65.143.182:10102). Prefer your own node for privacy.
Strip a trailing /json_rpc if you paste a full JSON-RPC URL — this server appends /json_rpc.
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 | Listen 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 deploy/README.md. It's a self-hosting reference for mcp.derod.org-style instances — anyone can fork and run their own.
The stdio transport (below) and the HTTP transport share the same underlying server factory, so the tool surface, response shapes, and error codes are identical across both.
Add to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"dero-daemon": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/dero-mcp-server/dist/index.js"]
}
}
}
Optional: add "env": { "DERO_DAEMON_URL": "http://127.0.0.1:10102" } to pin a specific daemon. Not needed if your local node uses the default port — the server auto-detects it.
Restart Claude Desktop (or your OpenCode/Cursor host).
In Cursor Settings → MCP (or OpenCode MCP settings), add a server that runs the same command / args / env as above.
In OpenCode MCP settings, add a server with the same command / args / env as above.
| Variable | Default | Description |
|---|---|---|
DERO_DAEMON_URL | (local-first auto-detect) | Daemon base URL (no /json_rpc required). Unset → local node at 127.0.0.1:10102 if reachable, else public fallback (82.65.143.182:10102). Set to pin a specific endpoint. |
DERO_DOCS_ROOT | bundled index | Optional dev override: path to a local dero-docs clone to index live MDX instead of the shipped bundle. |
Docs tools read from data/docs-index.json, committed in this repo and shipped with the npm package. Rebuild the index when dero-docs changes:
npm run release:docs-check
git add data/docs-index.json && git commit -m "Refresh bundled docs index."
Or run Refresh docs bundle under Actions to open a PR. Pushes to dero-docs main can trigger that workflow via repository_dispatch when MCP_DOCS_SYNC_TOKEN is configured on the docs repo.
After merging a bundle update: bump the patch version in package.json and server.json, then npm publish --otp=... and mcp-publisher publish.
# Check daemon connectivity
npm run doctor
# MCP surface contract checks (tools/resources/prompts + error probe)
npm run smoke:mcp
# Docs retrieval checks (bundled index — no clone required)
npm run smoke:docs
# Run flow tests (10 RPC checks)
npm run test:flows
# Typecheck
npm run typecheck
Flow tests run against the default public RPC. Set DERO_DAEMON_URL to test against your own daemon.
CI runs on every push and PR — see .github/workflows/ci.yml.
Publish flow (maintainers):
mcp-publisher validate
mcp-publisher login github
mcp-publisher publish
Verify listing:
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.DHEBP/dero-mcp-server"
tela_inspect, tela_get_doc_content), TELA discovery (dero_durl_to_scid, dero_tela_list_apps), and docs retrieval (dero_docs_search, dero_docs_get_page, dero_docs_list)dero://mcp/server-info, dero://mcp/safety-boundary, dero://mcp/example-flows, dero://mcp/compositesnetwork_health_check, inspect_smart_contract, trace_transaction, find_dero_docs_for_intent, estimate_deploy_for_contractWhen a tool call fails, the server returns a structured error payload in tool content:
{
"ok": false,
"tool": "dero_get_sc",
"_meta": {
"error": {
"code": "RPC_UNREACHABLE",
"hint": "Confirm daemon is running and reachable, then rerun `npm run doctor`.",
"retryable": true,
"raw": "fetch failed"
}
}
}
Common code values:
INVALID_INPUTRPC_INVALID_PARAMSRPC_METHOD_NOT_FOUNDRPC_HTTP_ERRORRPC_UNREACHABLERPC_INVALID_RESPONSETOOL_EXECUTION_ERRORDERO_ENABLE_WALLET_RPC=1 + separate URL.MIT