dero-mcp-server
This server provides read-only access to a DERO Stargate blockchain daemon via MCP, enabling blockchain data retrieval, smart contract inspection, and network analysis. It does not support wallet calls, transaction submission, or block submission by design.
Connectivity & Diagnostics: Ping the daemon and echo strings through it to verify connectivity.
Chain Info: Retrieve height, difficulty, version, mempool size, and total block count.
Block Data: Fetch the latest block header, full blocks by height or hash, and block headers by topological height or hash.
Transaction Data: List pending mempool transactions and fetch full transaction details by hash.
Address & Balance: Get random registered addresses for ring signature construction, retrieve encrypted balance blobs for an address, and resolve on-chain names to addresses.
Smart Contracts: Read smart contract source code and stored variables by SCID; estimate gas costs for deployments, calls, or transfers.
Mining: Retrieve a block template for a given miner address (no block submission).
DERO MCP server
A 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 + 12 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.6.0 · Transports: stdio (default, npm package) · streamable-http (--http, for self-hosting)
What is an MCP server
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.
Related MCP server: RustChain MCP Server
What is DERO
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
About this server
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.
Quick start
Get a working DERO MCP connection in under 5 minutes.
What you need
Node.js 20+ (install) — verify with
node --version.An MCP host — Claude Desktop, Cursor, OpenCode, or ChatGPT with Custom Connectors. This walkthrough uses Claude Desktop; the JSON config below works identically in Cursor and OpenCode.
Optional: a local DERO daemon. If one is running on
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.
1. Open your MCP host's config
Host | Where |
Claude Desktop (macOS) |
|
Claude Desktop (Windows) |
|
Cursor | Settings → MCP → Add Server |
OpenCode | Settings → MCP → Add Server |
Codex CLI / IDE |
|
Create the file if it doesn't exist.
2. Add the DERO MCP server
{
"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" }3. Restart your MCP host
Fully quit and reopen — not just refresh. MCP servers load at startup.
4. Verify it works
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.
What you can do with it
Once installed, your MCP host can do all of these on your behalf — in natural language, no JSON-RPC needed:
Inspect the chain — blocks, transactions, mempool, encrypted balances, registered names
Analyze smart contracts — read code and state, classify the pattern, estimate deploy gas, pull relevant DVM-BASIC docs in one call
Trace transactions — look up any hash, confirm inclusion, classify the kind (transfer / SC install / SC call)
Explore the on-chain web (TELA) — discover apps by name (
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 runSearch the docs — across all four DERO sites (derod, tela, hologram, deropay)
Run composite analyses — chain health, claim audits, docs path recommendations, deploy pre-flights — each returns curated DERO docs citations alongside the data
Try a prompt
After installing and restarting your MCP host, paste any of these. Start simple and work up.
Basic
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?"
Intermediate
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 — the decentralized web on DERO
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.
See also
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.
Requirements
Node.js 20+
A reachable DERO daemon with RPC enabled (local node or your own remote URL).
Install & build
cd dero-mcp-server
npm install
npm run buildRun (auto-detects a local node at 127.0.0.1:10102, else public fallback, when DERO_DAEMON_URL is unset):
node dist/index.jsOr set an explicit URL (e.g. your local daemon):
DERO_DAEMON_URL=http://127.0.0.1:10102 node dist/index.jsDaemon 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.
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)Both stdio and HTTP serve MCP 2026-07-28 and retain compatibility with 2025-era clients. HTTP exchanges are stateless and do not issue Mcp-Session-Id; 2026 clients negotiate through server/discover.
Variable | Default | Description |
| unset | Set to |
|
| Listen port. |
|
| Listen address. Use |
| unset | If set, every |
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 public default daemon behind a hosted instance may use an older GetInfo schedule formula than CalcSupply; verify_supply still treats the offline schedule number as authoritative (see Verify the Supply).
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.
Claude Desktop (same pattern for OpenCode and Cursor)
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).
Cursor (or OpenCode)
In Cursor Settings → MCP (or OpenCode MCP settings), add a server that runs the same command / args / env as above.
OpenCode
In OpenCode MCP settings, add a server with the same command / args / env as above.
Codex
Codex supports DERO MCP as either a local stdio server or a streamable-HTTP server. The stdio setup is simplest for local development because Codex launches the server process for each session.
Add the published npm package with:
codex mcp add dero-daemon --env DERO_DAEMON_URL=http://127.0.0.1:10102 -- npx -y dero-mcp-serverReplace http://127.0.0.1:10102 with your daemon base URL when using a custom host or port. Do not include /json_rpc; this server appends it.
Equivalent ~/.codex/config.toml:
[mcp_servers.dero-daemon]
command = "npx"
args = ["-y", "dero-mcp-server"]
[mcp_servers.dero-daemon.env]
DERO_DAEMON_URL = "http://127.0.0.1:10102"A copyable example lives at .codex/config.example.toml. Rename or copy it to .codex/config.toml only when you want a project-scoped Codex config; Codex loads project config only for trusted projects.
For an already-running streamable-HTTP deployment, add the URL instead:
codex mcp add dero-daemon --url http://127.0.0.1:8787/mcpIf the HTTP server requires a bearer token, store the token in an environment variable and add --bearer-token-env-var DERO_MCP_AUTH_TOKEN.
Restart Codex or start a new session, then run /mcp to confirm dero-daemon is enabled. A simple verification prompt is:
"What's the current DERO chain height?"
Environment
Variable | Default | Description |
| (local-first auto-detect) | Daemon base URL (no |
| bundled index | Optional dev override: path to a local |
Maintainer: bundled docs
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.
Testing
# 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 typecheckFlow 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.
Official MCP Registry
Publish flow (maintainers):
mcp-publisher validate
mcp-publisher login github
mcp-publisher publishVerify listing:
curl "https://registry.modelcontextprotocol.io/v0.1/servers?search=io.github.DHEBP/dero-mcp-server"MCP Surface
Tools (33): 21 daemon read/analysis primitives + 12 composites, including
verify_supply(offline CalcSupply), TELA app inspection (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)Resources (4):
dero://mcp/server-info,dero://mcp/safety-boundary,dero://mcp/example-flows,dero://mcp/compositesPrompts (5):
network_health_check,inspect_smart_contract,trace_transaction,find_dero_docs_for_intent,estimate_deploy_for_contract
Error Contract
When 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_ERROR
Roadmap
Optional wallet-RPC tools behind
DERO_ENABLE_WALLET_RPC=1+ separate URL.Stricter typing / OpenAPI-derived tool schemas.
TELA-aware contract tooling (INDEX/DOC inspection, on-chain app discovery).
License
MIT
Available Tools
33 toolsaudit_chain_artifact_claimARead-onlyInspect
Composite: 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 narrative, and curated rebuttal docs citations.
When to call: when the user asks "what's going on with DERO block X?" / "is this transaction the inflation-claim TX?" / "does this proof string come from a known false claim?" PREFER this over chaining dero_get_block_header_by_topo_height + dero_get_transaction + dero_decode_proof_string yourself: the composite already runs them in parallel, joins them against the flagged false-claim registry, and emits a single verdict field plus a narrative so the agent does not need to compose the rebuttal arc from scratch each time.
Input Requirements (CRITICAL):
At least ONE of
topoheight,block_hash,tx_hash, orproof_stringMUST be provided. The composite throwsINVALID_INPUTotherwise.topoheightis OPTIONAL. Non-negative integer.block_hashis OPTIONAL. 64 hex characters.tx_hashis OPTIONAL. 64 hex characters.proof_stringis OPTIONAL. Fullderoproof…/ DERO bech32 string with HRP.include_forge_demois OPTIONAL (default false). When true ANDtx_hashis provided, also forges a fresh demo proof for the same TX (viadero_forge_demo_proof) and embeds it underforge_demo. The demo amount auto-selects: a flagged artifact's pinned amount (e.g. -2.2M for the 2022 claim) > the citedproof_stringV > -1 DERO. PREFER setting this true when the agent is fielding a "Verified ✓ means the chain minted coins, right?" question — the embedded forge IS the refutation.
Output: { verdict, inputs, matched_artifacts[], context_note, chain_facts, proof_decode, forge_demo, narrative, related_docs, _diagnostics }. verdict is cited_in_false_claim when any input matches the flagged-artifact registry, else clean. chain_facts is null when no chain-querying input was provided or all daemon calls failed; proof_decode is null when no proof_string was provided. forge_demo is null unless include_forge_demo: true was passed; on success it carries { skipped: false, forged_proof_string, target_amount, ring_slot, ring_size, ring_receiver_address, math, self_check, explorer_display_amount, demo_amount_source } (the slim form — full citations stay at the top level).
PREFER citing the returned related_docs verbatim in the agent response — they are the canonical rebuttal pages and have been validated against the bundled docs index by CI. Quote the context_note when verdict is cited_in_false_claim so the user understands why the artifact matters.
| Name | Required | Description | Default |
|---|---|---|---|
| tx_hash | No | 64-char hex transaction hash to audit. | |
| block_hash | No | 64-char hex block hash to audit. | |
| topoheight | No | Topological height of a block to audit. | |
| proof_string | No | Optional `deroproof…` / DERO bech32 string to also decode and check. | |
| include_forge_demo | No | When true AND tx_hash is provided, also forge a fresh demo proof for the same TX (via dero_forge_demo_proof) and embed it under `forge_demo`. Closes the rebuttal loop in one tool call. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations: it discloses that the tool throws INVALID_INPUT when no identifying input is provided, that chain_facts is null when daemon calls fail, that proof_decode and forge_demo are conditionally null, and that it joins against a flagged false-claim registry. It also reveals the demo amount auto-selection logic, which is valuable behavioral context not in the schema. No contradiction with readOnlyHint/destructiveHint/idempotentHint is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although lengthy, the description is well-structured with clear sections (Composite, When to call, Input Requirements, Output, PREFER directives) and front-loads the core purpose. Each sentence carries operational value, and the critical at-least-one rule is not present in the schema, so the repetition in Input Requirements is justified rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no output schema, the description provides a thorough output map: top-level fields, verdict semantics, null-condition behavior for chain_facts/proof_decode/forge_demo, and the slim forge_demo shape. It also covers error conditions, parallel execution, registry lookup, and documented citations, making the tool safely callable by an agent without prior context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description adds essential semantics: at least one of topoheight/block_hash/tx_hash/proof_string MUST be provided despite zero declared required params, and it adds format constraints (64 hex, full deroproof bech32 with HRP). For include_forge_demo it explains the default, the tx_hash precondition, and the intended rebuttal use case beyond the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'audit a chain artifact... end-to-end' and clearly states the outputs (verdict, chain facts, proof decode, narrative, citations). It also differentiates itself from siblings by naming the exact composite operation and explicitly saying to prefer it over chaining dero_get_block_header_by_topo_height + dero_get_transaction + dero_decode_proof_string.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit 'When to call' section with concrete user intents ('what's going on with DERO block X?', 'is this transaction the inflation-claim TX?', 'does this proof string come from a known false claim?'). It also states when NOT to chain manually, when to set include_forge_demo=true, and instructs the agent to cite related_docs verbatim.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_daemon_echoARead-onlyInspect
Echo 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 liveness probe.
Input Requirements (CRITICAL):
wordsMUST be a non-empty array of strings.
Output: the echoed string concatenated by the daemon.
| Name | Required | Description | Default |
|---|---|---|---|
| words | Yes | Strings to echo back |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context: it is a round-trip sanity check, requires a non-empty array, and returns the concatenated echoed strings. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured with clear sections: purpose, when to call, input requirements, and output. Every sentence earns its place, and the most important guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter echo tool with no output schema, the description is complete: it explains the purpose, when to use and not use it, the critical input requirement, and the output format. An agent has everything needed to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by specifying the non-empty constraint and clarifying that the daemon concatenates the returned string, which is not evident from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Echo strings through the daemon via DERO.Echo.' It clearly distinguishes the tool from dero_daemon_ping, making its purpose unambiguous even among many siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to call ('when you need to confirm that string payloads reach the daemon intact') and provides an alternative ('PREFER dero_daemon_ping for a lighter-weight liveness probe'), giving an agent clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_daemon_pingARead-onlyInspect
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" string when the daemon is healthy. On failure this tool returns a structured _meta.error with code RPC_UNREACHABLE and a retry hint.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and no destructiveness. The description adds concrete behavioral details: returns 'Pong' on success, structured _meta.error with RPC_UNREACHABLE on failure, and a retry hint. This adds value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise, structured into clear sections (When to call, Input Requirements, Output). Every sentence is necessary and front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, no output schema, and annotations present, the description fully covers purpose, usage, input, and output behavior. No gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema is empty and schema description coverage is 100%. The description states 'Input Requirements: none,' which is sufficient. Baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is a connectivity check via DERO.Ping, specifying the action and resource. It distinguishes from siblings by positioning it as the first step before other operations like dero_get_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call (first step in chain investigation) and when to use an alternative (call before dero_get_info if unsure about configuration).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_decode_proof_stringARead-onlyInspect
Decode 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 the proof's commitment math, NOT a wallet pubkey — the tool surfaces is_proof: true so the agent does not mislabel it.
When to call: when the user pastes a deroproof… / integrated-address string and wants to know what value or fields it encodes. PREFER this over chaining bech32 decoders + CBOR libraries yourself: the tool implements the exact same wire format as DEROHE rpc.NewAddress and surfaces the RPC_VALUE_TRANSFER uint64 both as raw and as a signed/wraparound interpretation. The decoder is verified against the publicly-cited 2022 inflation-claim proof string (embedded uint64 = 18446743853709551435 = signed -2,200,000.00181 DERO).
Input Requirements (CRITICAL):
proof_stringis REQUIRED. The full bech32 string including HRP and separator (e.g.deroproof1qyy…). Whitespace is trimmed but the case must be consistent (all lower OR all upper per BIP-0173).
Output: { decoded: { hrp, mainnet, is_proof, public_key_hex, arguments[] }, value_interpretation?: { uint64, signed_int64, is_negative_wraparound, signed_atoms, dero }, context_note?, related_docs? }. arguments is an array of { name, type, type_label, semantic_name?, value }. value_interpretation is present only when an RPC_VALUE_TRANSFER (V) + uint64 (U) argument is found. context_note + extra related_docs are silently attached when the input matches a flagged adversarially-cited artifact. Returns a structured _meta.error with code INVALID_BECH32 on parse failure.
PREFER citing integrity/payload-vs-transaction-proofs and integrity/negative-transfer-protection in any agent response that frames a deroproof… decode result — readers should understand that "this string decodes to value V" is a display-layer fact, not a consensus statement.
| Name | Required | Description | Default |
|---|---|---|---|
| proof_string | Yes | Full bech32 string with HRP, e.g. "deroproof1qyy…" or "dero1abc…". Whitespace is trimmed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only annotation, the description discloses important behaviors: whitespace trimming, case consistency requirements, conditional presence of `value_interpretation`, silent attachment of `context_note`/`related_docs` for flagged artifacts, and `INVALID_BECH32` error codes. It also clarifies that a decode result is a display-layer fact, not a consensus statement. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured into labeled sections: purpose, when to call, critical input requirements, output shape, and documentation-citation guidance. It front-loads the core purpose before the detailed output contract. Each section earns its place given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the full burden of explaining return values. It provides a detailed output contract, conditional fields, error behavior, and contextual caveats. It is complete enough for an agent to call the tool and interpret the result correctly without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful input semantics beyond the schema: the full string must include HRP and separator, the example format is reinforced, and BIP-0173 case consistency is explicitly required. This is genuinely useful for constructing valid calls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Decode any DERO bech32 string... into its constituent parts'. It enumerates the supported HRPs and distinguishes the special `deroproof…` case where the public key is a derived blinder point, not a wallet pubkey. This clearly separates it from the sibling tools, none of which are decoders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
An explicit 'When to call' section states the triggering user request (pasting a `deroproof…` / integrated-address string to learn what it encodes). It also gives an explicit alternative to avoid: chaining bech32 decoders + CBOR libraries yourself. This is actionable guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_docs_get_pageARead-onlyInspect
Get 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 Requirements (CRITICAL):
slugMUST be a non-empty doc slug relative to pages/ (e.g.rpc-api/daemon-rpc-api,tutorials/first-app,dero-pay/quick-start).productis OPTIONAL but RECOMMENDED to disambiguate identical slugs across docs sites (derod,tela,hologram,deropay).offsetis OPTIONAL. Long pages (the Captain archive, deep RPC references) are returned in 60000-char chunks; ifcontent_truncatedis true in the response, call again withoffset: next_offsetto fetch the next chunk.
Output: { product, slug, title, headings, content, content_offset, content_length, content_truncated, next_offset, canonical_url, last_updated, source_path }. content_length is the total page size; content_truncated + next_offset signal whether to paginate.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Doc slug relative to pages/ (e.g., "rpc-api/daemon-rpc-api", "tutorials/first-app", "dero-pay/quick-start") | |
| offset | No | Byte offset into the page plaintext. Use 0 (or omit) for the first chunk; pass next_offset from a prior response to continue reading a long page. | |
| product | No | Optional product scope to disambiguate duplicate slugs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral detail beyond the readOnly annotation, including pagination behavior with 60000-char chunks, the content_truncated and next_offset signals, and the meaning of content_length. This tells the agent exactly how to handle long pages and what to expect across repeated calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a one-line summary, a 'When to call' section, critical input requirements, and an output explanation. Every section carries necessary information, and the most important decision guidance appears near the top.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description compensates by specifying the exact output fields and explaining pagination-related fields. It also covers practical details like example slugs and product options, making the tool fully usable without external documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema covers 100% of parameters, the description adds critical semantic value: slug must be non-empty and relative to pages/, product is recommended to disambiguate duplicate slugs across docs sites, and offset has detailed chunking semantics with a clear retry instruction (pass next_offset when content_truncated is true).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a single bundled docs page by slug, with plain-text content and headings.' It clearly distinguishes this tool from sibling dero_docs_search and dero_docs_list by focusing on fetching one page by an exact slug rather than searching or listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: call it AFTER dero_docs_search returns a candidate slug, or when you already have a known slug from a prior citation. It also explicitly prefers dero_docs_search when only a topic is known, making the decision boundary unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_docs_listARead-onlyInspect
List 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 you have a specific question.
Input Requirements:
productis OPTIONAL. Provide to scope to one ofderod | tela | hologram | deropay.limitis OPTIONAL (default 120, max 500).
Output: { docs_source, total, products, pages: [{ product, slug, title, canonical_url, last_updated }] }.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max pages returned (default 120, max 500) | |
| product | No | Optional docs product filter: derod | tela | hologram | deropay |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only and non-destructive behavior, and the description adds the output contract including the returned shape and the 'bundled' aspect of the docs pages. It also documents limit defaults and max, covering important behavioral details beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well organized: a one-line summary, a usage section, input requirements, and an output shape. Every sentence earns its place, and the most important guidance is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only two optional parameters and no output schema, so the description carries the burden of explaining behavior and return values. It fully covers what the tool lists, when to call it, how to filter, and what the response looks like, and also names relevant sibling alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both product and limit are already fully described in the schema. The description mostly restates the same information, though it usefully frames product as an optional scoping parameter and repeats the limit default/max. This meets the baseline but adds little new semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb ('list') and resource ('indexed bundled docs pages across all four products') and names the key output fields (slugs, titles, canonical URLs). It also distinguishes itself from sibling tools by explicitly contrasting with dero_docs_search and dero_docs_get_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit 'When to call' guidance with concrete examples and a clear preference rule: use dero_docs_search for specific questions, use this tool for surveying or obtaining a slug catalog. This fully routes the agent to the correct sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_docs_searchARead-onlyInspect
Search 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 BEFORE explaining DVM, RPC methods, TELA contracts, Hologram simulator, or DeroPay webhooks. PREFER returning the top match's canonical_url and slug to the user as a citation.
Input Requirements (CRITICAL):
queryMUST be a non-empty search string.productis OPTIONAL. Provide when you know the scope to reduce noise (e.g.telafor TELA-DOC-1 questions).sectionis OPTIONAL. Provide a slug prefix to scope further (e.g.rpc-apiunderproduct=derod).limitis OPTIONAL (default 8, max 25).
Output: ranked matches with title, slug, headings, excerpt, canonical_url, and score.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max matches (default 8, max 25) | |
| query | Yes | Search text (e.g., "wallet rpc", "tela deployment", "deropay webhooks") | |
| product | No | Optional docs product filter: derod | tela | hologram | deropay | |
| section | No | Optional section slug prefix (e.g., "rpc-api", "guides", "dero-pay") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only and non-destructive behavior. The description adds useful behavioral context beyond that: 'In-process — no network round trip,' ranked output with a specific field list, and a recommendation to use canonical_url/slug as citations. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main purpose is front-loaded, followed by clearly-labeled usage, input requirements, and output sections. The prose is efficient, though the input requirements section partially duplicates schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately documents return fields, ranking behavior, and in-process execution. It covers invocation constraints and citation guidance. It does not mention no-result behavior or explicitly route to sibling doc tools, but the essential information for calling the tool correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100%, so the schema already documents every parameter. The description adds minor context such as using product to 'reduce noise' and section to 'scope further,' but largely restates the schema's own descriptions without adding substantial new semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise action and resource: 'Search the bundled DERO documentation index across derod, tela, hologram, and deropay (145+ pages).' This clearly distinguishes search from sibling tools like dero_docs_get_page or dero_docs_list, which retrieve or enumerate rather than search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to call' section explicitly states when to use the tool: when authoritative docs are needed, before constructing citations, and before explaining DVM, RPC methods, TELA contracts, Hologram simulator, or DeroPay webhooks. It gives clear context but does not explicitly identify when to use sibling alternatives instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_durl_to_scidARead-onlyInspect
Composite: resolve a TELA dURL (e.g. "vault.tela") to its on-chain SCID(s) by discovering TELA apps directly from chain — no external Gnomon indexer required. TELA apps advertise a human-readable dURL; this finds the contract(s) that claim it.
When to call: when a user asks "what's the SCID for .tela", "find the TELA app called X", or gives a dURL and wants the contract. IMPORTANT routing: for a registered DERO NAME like "quickbrownfox" (no dot, not a dURL), use dero_name_to_address instead — that is a name to address lookup, not a TELA app. This tool is only for TELA dURLs (they contain a dot / .tela / a dero:// prefix).
Input Requirements:
durlis REQUIRED. A TELA dURL such as "vault.tela", "feed.tela", or "dero://cipherchess.tela". Case- and prefix-insensitive.
Output: { query, normalized, found, match_count, scid, primary, collision, other_candidates[], narrative, related_docs } on a hit; { query, normalized, found:false, match_count:0, hint } on a miss. dURLs are NOT unique — when multiple contracts claim one, the NEWEST is returned as scid/primary and the rest are disclosed in other_candidates with collision:true. The first call triggers a ~10s one-time discovery scan of the newest chain contracts (cached afterward). Feed the returned scid to tela_inspect to view the app.
| Name | Required | Description | Default |
|---|---|---|---|
| durl | Yes | A TELA dURL to resolve, e.g. "vault.tela" or "dero://feed.tela". NOT a registered DERO name (use dero_name_to_address for names like "quickbrownfox"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnly and non-destructive, but the description adds substantive behavioral context: the first call triggers a ~10s one-time discovery scan, results are cached, dURLs are not unique, the newest match is returned as primary, collisions are disclosed, and exact output shapes on hit and miss are described. This goes well beyond what annotations reveal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear sections and front-loaded core purpose. It is dense with valuable detail, but it slightly repeats the dero_name_to_address routing instruction in both the 'When to call' section and the Input Requirements list, making it marginally less concise than ideal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description fully compensates by enumerating the exact output fields for both hit and miss cases, explaining collision behavior, first-call latency, caching, and how to follow up with tela_inspect. Nothing an agent needs to correctly invoke and interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents the durl parameter fully. The description adds useful semantics beyond the schema: case- and prefix-insensitivity, acceptance of 'dero://' prefixed inputs, and reinforcement that DERO names should not be passed here. This is a meaningful but not massive addition above the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('resolve'), a specific resource ('TELA dURL'), and the target ('on-chain SCID(s)'). It clearly distinguishes itself from dero_name_to_address by explaining that DERO names without dots are not TELA dURLs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit 'When to call' section with concrete user-phrase examples, and it names the alternative tool (dero_name_to_address) with the exact routing condition. It also explicitly states what this tool is NOT for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_forge_demo_proofARead-onlyInspect
Composite: 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 unpatched explorer it shows Verified ✓ for the chosen amount; on the chain, nothing has changed.
When to call: when a user pastes a deroproof… string and asks "does Verified ✓ mean the chain minted these coins?" Forge an equivalent string for the same TX with a different amount and show the result side-by-side — that is the most direct refutation. Also useful for reproducing the docs/integrity/inflation-claim Part 3 demonstration on arbitrary inputs.
Math: blinder = C[ring_slot] − amount × G, then bech32("deroproof", version || blinder || CBOR({HH: zeros, VU: uint64})). The tool runs the same equation proof.Prove() checks at proof/proof.go:88-95 and self-verifies before returning a string. If the self-check fails, the tool throws rather than emit a string that would not verify.
Input Requirements (CRITICAL):
Exactly ONE of
tx_hashortx_hexMUST be provided.tx_hashtriggers a daemon fetch (and surfaces the receiver address);tx_hexskips the daemon and uses the raw bytes the caller already has.ring_slotis OPTIONAL (default 0). Must be in [0, ring_size).amount_derois OPTIONAL (default "-1"). Signed decimal with up to 5 fractional digits, e.g."-1","1000000","-2200000.00181". Negative values produce uint64 wraparounds that unpatched explorers render as positive trillions.
Output: { forged_proof_string, target_amount: { dero, atoms_signed, atoms_uint64 }, ring_slot, ring_size, ring_receiver_address, math: { C_slot_hex, amount_x_G_hex, blinder_hex }, self_check: { verified, method }, explorer_display_amount, context_note, related_docs, _diagnostics }. ring_receiver_address is null when tx_hex was passed (the hex carries publickey pointers, not addresses).
READ-ONLY: this tool never broadcasts, never touches a wallet, never mutates chain state. It computes a string from public inputs and returns it. Annotation readOnlyHint: true is preserved. PREFER citing the returned related_docs (the integrity rebuttal pages) in any agent response — readers should understand the forged string is a display-layer object, not a consensus event.
| Name | Required | Description | Default |
|---|---|---|---|
| tx_hex | No | Raw TX bytes as hex (skip the daemon round-trip). Mutually exclusive with tx_hash. When provided, ring_receiver_address is omitted from the response (the hex carries publickey pointers, not full addresses). | |
| tx_hash | No | TX hash to forge against. Daemon fetches the TX hex + ring members. Mutually exclusive with tx_hex. | |
| ring_slot | No | Which ring slot 0..ring_size-1 the forged proof should resolve to. Defaults to 0. | |
| amount_dero | No | Target display amount in signed DERO (5 fractional digits = atomic precision). Negative values demonstrate the uint64 wraparound. Default "-1". | -1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses that the tool never broadcasts, never touches a wallet, never mutates chain state, constructs the string locally from public data, self-verifies before returning, and throws on self-check failure. This is rich behavioral context that annotations alone do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but densely structured with sections for purpose, when to call, math, input requirements, output, and read-only behavior. Every section earns its place, and the most important scoping and safety information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has four interdependent parameters and no output schema, yet the description compensates fully by enumerating all returned fields, explaining when ring_receiver_address is null, describing the self-check, listing related_docs, and noting diagnostics. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds critical semantics: exactly one of tx_hash or tx_hex must be provided despite no required schema fields, including the daemon-fetch vs raw-hex tradeoff. It also explains defaults, ring_slot bounds, fractional decimal format, and the negative-amount uint64 wraparound behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: forge a deroproof display object for an arbitrary transaction, ring slot, and amount. It clearly distinguishes itself from chain-inspection siblings by framing the result as a display-layer object and noting 'on the chain, nothing has changed.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to call' section is explicit: use it when a user pastes a deroproof string and asks whether Verified means the chain minted coins, and forge a side-by-side refutation. It also names the docs reproduction use case. It does not enumerate when not to call or name alternatives, but the trigger context is specific enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_blockARead-onlyInspect
Fetch 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 dero_docs_search("block structure") so the user can verify field semantics.
Input Requirements (CRITICAL):
You MUST provide exactly ONE of
hashorheight. Providing both or neither returns a structured INVALID_INPUT error.hashMUST be exactly 64 hex characters.heightMUST be a non-negative integer.
Output: full block with block_header, miner_tx, txs, and topo position fields.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | No | 64-char hex block hash | |
| height | No | Block height |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is covered. The description adds important behavioral context: the strict exactly-one input constraint and the INVALID_INPUT error condition, plus the exact output shape with topo position. This goes beyond the schema's basic type/pattern info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence, a 'When to call' section, a labeled critical input section, and an output summary. Every sentence is functional and no filler exists. The most important usage rule is prominently highlighted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, read-only lookup tool with full schema coverage, the description covers the purpose, invocation conditions, required input combination, parameter constraints, and output contents. It even suggests a docs-search path for deeper field semantics. There is no output schema, so the description appropriately enumerates the returned block components.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both params and the hash pattern. The description adds the critical rule that exactly one of hash or height must be supplied and states the height must be non-negative, which is already in the schema but reinforced. It does not add new param-level meaning beyond the exclusive-or requirement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch'), a precise resource ('full block ... by height OR hash'), and names the RPC method (DERO.GetBlock). It clearly distinguishes this from sibling tools like dero_get_block_header_by_hash by specifying that the full block includes header, miner_tx, transactions, and topo position.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to call it ('when investigating a specific block or verifying a transaction's inclusion') and tells the agent to call dero_get_height first if no height is known. It does not explicitly exclude alternative sibling block-header tools, but the 'full block' scope and output field list imply when the lighter header tools should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_block_countARead-onlyInspect
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: none.
Output: { count }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true), it clarifies that the count is a tip count, not topoheight, and shows the output format. Slightly more detail about edge cases could elevate to 5, but it effectively communicates behavioral nuance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences plus output example. No unnecessary words, information is front-loaded, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters and no output schema, the description fully covers purpose, usage context, output format, and alternative recommendations. Nothing missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist in the schema; baseline is 4. Description states 'Input Requirements: none', which is sufficient and adds no confusion.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description explicitly states 'Get the total block count' via a specific RPC method, distinguishes it from topoheight, and differentiates from sibling tool dero_get_height, making the purpose very clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit 'When to call' section with a use case (delta math), and directly recommends preferring dero_get_height for combined tip/stable heights, offering clear guidance on alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_block_header_by_hashARead-onlyInspect
Get 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 (CRITICAL):
hashMUST be exactly 64 hex characters (matches /^[0-9a-fA-F]{64}$/).
Output: { block_header: {...} }.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | Block top hash (hex) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only and non-destructive. The description adds meaningful behavioral context by noting the response omits the block body and showing the output shape { block_header: {...} }. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short labeled sections—purpose, when-to-call, input requirement, output—with no filler. Every sentence earns its place and the key scoping is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-required-parameter read tool, the description covers purpose, invocation condition, alternative tool, strict input format, and output shape. Nothing an agent needs to select and call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers the only parameter fully (pattern, type, required, description), so the baseline is 3. The description restates the 64-hex requirement and gives example source context ('from a tx confirmation'), adding emphasis but little new semantic information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb and resource: 'Get a block header by its 64-char hex hash', and clarifies it returns the header without the full block body. This distinguishes it from dero_get_block and the topo-height variant.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call ('when you have a block hash ... need its header without the full block body') and names dero_get_block as the alternative when txs or miner_tx are also needed. This gives an agent clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_block_header_by_topo_heightARead-onlyInspect
Get 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 height.
Input Requirements (CRITICAL):
topoheightMUST be a non-negative integer no greater than the current topoheight (call dero_get_info first if unsure).
Output: { block_header: { hash, height, topoheight, timestamp, ... } }.
| Name | Required | Description | Default |
|---|---|---|---|
| topoheight | Yes | Topological height |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive. The description adds the important runtime constraint that topoheight must not exceed the current topoheight and suggests calling dero_get_info first if unsure. It also includes an output shape, adding value beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well organized with clear sections: purpose, when to call, input requirements, and output. Every sentence adds useful information, and the critical constraint is highlighted. No filler or redundant restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only RPC call, this description is complete. The schema documents the parameter, annotations document the safety profile, and the description covers the dynamic input constraint and expected response shape. An agent has everything needed to decide to call it and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only says 'Topological height' with static min/max bounds. The description adds the crucial dynamic constraint that the value must be no greater than the current topoheight, explains the conceptual difference between topoheight and height, and provides practical guidance for verifying the value. This goes well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation and resource: 'Get a block header by topological height.' It also clearly distinguishes the topoheight key from consensus block height, which separates this from header lookup by hash or height without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides a 'When to call' condition: use it when you need a header keyed by topo position rather than chain height. It does not name specific sibling tools as alternatives, but the contextual contrast between topoheight and height gives clear guidance for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_block_templateARead-onlyInspect
Get 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_addressMUST be a valid DERO address (dero1...ordeto1...) that will receive the block reward.blockis OPTIONAL. Set true to include the raw block blob in the response.mineris an OPTIONAL label.
Output: block template payload suitable for a mining client. Does NOT submit a block; submission requires the excluded DERO.SubmitBlock method.
| Name | Required | Description | Default |
|---|---|---|---|
| block | No | Include block blob | |
| miner | No | Optional miner id / label | |
| wallet_address | Yes | Miner payout DERO address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds the important behavioral fact that this tool returns a template payload without submitting a block. It could disclose a bit more about response structure or failure behavior, but the non-submission clarification is valuable beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, when to call, critical input requirements, and output. It front-loads the most important usage guidance and each sentence supports tool selection or invocation without unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and moderate parameter complexity, the description covers when to use it, the required parameters, the optional parameters, and the high-level output. It stops short of describing the exact block template fields, but it gives enough context for an agent to call the tool correctly for mining purposes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description repeats most parameter meanings from the schema, such as 'block' including the raw block blob and 'miner' as an optional label. It adds only minor emphasis that wallet_address must be valid and receive the reward, but does not substantially expand parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get a mining block template for a miner payout address via DERO.GetBlockTemplate.' It also distinguishes itself from the sibling tool dero_get_last_block_header, making the tool's unique purpose immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to call' section explicitly restricts this tool to actual mining and names dero_get_last_block_header as the preferred alternative for general chain-tip inspection. It also clarifies that the tool does NOT submit a block, which helps the agent avoid misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_encrypted_balanceARead-onlyInspect
Get 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 the user.
When to call: when verifying that an address has on-chain encrypted state (e.g. before attempting a transfer with a wallet you control), or as a sub-step in another tool. PREFER citing dero_docs_search("encrypted balance") so the user understands the opacity.
Input Requirements (CRITICAL):
addressMUST start withdero1(mainnet) ordeto1(testnet).topoheightMUST be an integer; use-1for the latest chain tip.scidis OPTIONAL. Omit for native DERO; provide 64-hex SCID for asset balances.
Output: { status, registration, balance (encrypted blob), ... }.
| Name | Required | Description | Default |
|---|---|---|---|
| scid | No | Asset SCID hex; omit for native DERO | |
| address | Yes | DERO address (dero1… or deto1…) | |
| topoheight | Yes | Use -1 for latest chain tip |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses essential behavioral context: the returned bytes are encrypted and not a cleartext balance, only a wallet holding the spend key can decrypt, and the tool should never present encrypted bytes as a balance to the user. It also explains the meaning of topoheight=-1 and scid handling, adding significant value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear section labels (CRITICAL, When to call, Input Requirements, Output) and front-loads the most important caution about encrypted bytes. Every section contributes necessary operational guidance, and the length is justified given the tool's cryptographic sensitivity and domain complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for most invocation needs: it explains input constraints, output shape, and the critical caveat about encryption. Since there is no output schema, the explicit output summary helps. It could be slightly more complete by describing the registration field or providing an example, but the current level is sufficient for correct tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, but the tool description adds crucial semantic details: address must start with dero1 or deto1, topoheight -1 means latest chain tip, and scid should be omitted for native DERO while 64-hex SCID is for assets. These are not fully expressed in the schema and materially improve correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get the ENCRYPTED balance blob for a DERO address at a topo height via DERO.GetEncryptedBalance.' It immediately disambiguates the result as an opaque encrypted blob rather than a cleartext balance, which clearly distinguishes this tool from any balance-returning sibling. The mention of the RPC method adds precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides 'When to call' guidance, including verifying on-chain encrypted state, use before transfers, and as a sub-step in another tool. It also recommends citing dero_docs_search for user understanding. However, it does not explicitly specify when not to call it or name a direct alternative, so it lacks a full when-not/exclusion statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_gas_estimateARead-onlyInspect
Estimate 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 costs to a user. PREFER citing dero_docs_search("gas estimate" or "fees") so the user understands how compute vs storage gas are charged.
Input Requirements (CRITICAL):
At least ONE of
transfers,sc, orsc_rpcMUST be provided.scis the DVM-BASIC contract source string when estimating a deploy.sc_rpcis an array of{ name, datatype, value }invocation arguments (entrypoint + SC_ID + caller-provided params).signeris OPTIONAL but PREFERRED; pass thedero1.../deto1...address that would sign the eventual tx.
Output: { gascompute, gasstorage, status }.
| Name | Required | Description | Default |
|---|---|---|---|
| sc | No | SC source to deploy | |
| sc_rpc | No | SC invocation arguments (entrypoint, SC_ID, etc.) | |
| signer | No | Signer address used for estimation | |
| transfers | No | Optional transfer list |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds that this is a pre-flight check with nothing submitted, complementing the readOnlyHint annotation. It also discloses the output contract ({ gascompute, gasstorage, status }) in the absence of an output schema. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Organized with scannable bold sections and bullets; every sentence contributes. Slightly longer than necessary, but the one-of constraint and output detail justify the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-output-schema tool with a non-obvious one-of parameter constraint, the description covers action, trigger conditions, parameter semantics, and return shape. It is complete enough for an agent to invoke correctly without opening additional references.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema descriptions cover 100% of parameters, the prose adds a critical one-of requirement for transfers/sc/sc_rpc that the schema (all optional) would otherwise hide. It also clarifies sc's role as DVM-BASIC source, sc_rpc's {name,datatype,value} shape, and the preference for passing signer.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise action—estimate gas for transfers, SC deploys, or SC invokes—and names the underlying DERO.GetGasEstimate endpoint. It clearly distinguishes from pure read/chain tools, but does not contrast with the sibling estimate_deploy_cost, which overlaps in the deploy-cost use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit 'When to call' section: before wallet-side transfers/SC invokes to size fees, or when explaining deploy costs, and prefers dero_docs_search for user education. It lacks a 'when not to use' or explicit alternative tool mention (e.g., estimate_deploy_cost), so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_heightARead-onlyInspect
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 difficulty.
Input Requirements: none.
Output: { height, stableheight, topoheight }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds that it returns a specific output and is a 'quick snapshot' with less payload, which is useful but not extensive. It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with three short sections (purpose, when to use, input/output). No wasted words; each sentence serves a purpose. It is front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and clear annotations, the description covers all necessary information: what it does, when to use it, and what it returns. It is fully complete for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description explicitly states 'Input Requirements: none,' which adds clarity beyond the empty schema. No further information needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Get the current block heights' and specifies the three types (tip, stable, topoheight), providing a specific verb and resource. It explicitly distinguishes from sibling dero_get_info, making it easy for an agent to select.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit 'When to call' section and recommends preferring dero_get_info for additional data, giving clear context and alternatives for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_infoARead-onlyInspect
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_transaction, or dero_get_block when you do not already know the current tip. PREFER citing dero_docs_search("DERO.GetInfo") so the user can verify field semantics.
Input Requirements: none.
Output: full chain info JSON including topoheight, stableheight, height, network, version, difficulty, tx_pool_size, and total_supply.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, non-destructive. The description adds context by detailing the output fields and emphasizing that no input is needed. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is brief, well-structured with clear sections, and every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and clear annotations, the description is complete. It lists output fields and usage context, making it self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, baseline is 4. The description adds value by listing output fields and usage context, exceeding baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves DERO daemon and chain metadata, listing specific fields. It distinguishes from siblings by recommending this before other chain-state tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to call (first in chain-state investigation) and recommends citing docs for verification. While strong, it could more directly mention alternative simpler tools like dero_get_height.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_last_block_headerARead-onlyInspect
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 miner_tx.
Input Requirements: none.
Output: { block_header: { hash, height, topoheight, timestamp, difficulty, ... } }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by specifying the tool returns only the header (not full block body) and outlines the output structure. It does not contradict annotations and provides context beyond what annotations alone offer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of three short sentences. It front-loads the core action ('Get the header of the current tip block') and provides structured guidance on usage and output. Every sentence serves a purpose without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description fully covers purpose, usage context, and expected output format. It mentions the output structure ({ block_header: { hash, height, ... } }) which compensates for the lack of an output schema. No further information is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters. With schema coverage at 100% (empty schema), the description correctly provides no parameter details. Per guidelines, the baseline for 0 param tools is 4, and the description meets this standard by not requiring additional parameter explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the header of the current tip block, specifying 'no full block body'. It uses specific verbs ('Get the header') and resource ('current tip block'). This distinguishes it from siblings like dero_get_block which return full block data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call: 'when you need tip block metadata without the transactions or miner_tx payload'. It also names an alternative: 'PREFER dero_get_block when you need transactions or the miner_tx'. This provides clear guidance on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_random_addressARead-onlyInspect
Get 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 that asset.
Input Requirements:
scidis OPTIONAL. When provided it MUST be exactly 64 hex characters.
Output: { address: string[] }.
| Name | Required | Description | Default |
|---|---|---|---|
| scid | No | Optional asset smart-contract id (hex) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=true and destructiveHint=false, and the description adds useful behavior beyond that: it samples chain-registered addresses and can be restricted to holders of a specific asset via scid. It also discloses the output shape, which is helpful since no output schema is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, with the main verb and resource front-loaded in the first sentence followed by short labeled sections for usage, input requirements, and output. Every sentence carries useful information; there is no filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with one optional parameter and no output schema, the description fully covers purpose, when to call, parameter constraints and effect, and the return shape. An agent has everything needed to invoke and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers scid's type and pattern, so the baseline is 3. The description adds behavioral meaning: scid is optional, must be exactly 64 hex characters, and limits sampling to holders of that asset. This goes beyond the schema's minimal 'Optional asset smart-contract id (hex)' label.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get random registered addresses from the chain', and names the underlying RPC method, DERO.GetRandomAddress. It is clearly distinct from sibling tools like dero_name_to_address or dero_get_transaction, so an agent can identify when this tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes an explicit 'When to call' section with concrete use cases: building a transfer ring in external wallet tooling or sampling chain participants. It does not mention when not to call it or name alternative tools, but the provided context is clear enough for appropriate selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_scARead-onlyInspect
Read 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 returned code blob. PREFER citing dero_docs_search("smart contract") or dero_docs_get_page on a relevant DVM page so the user can interpret the contract's state model.
Input Requirements (CRITICAL):
scidMUST be exactly 64 hex characters (the contract id).codeis OPTIONAL (defaults to true). Set false to skip the source blob when you only need stored variables.variablesis OPTIONAL (defaults to true). Set false to skip variables when you only need the source.topoheightis OPTIONAL. Omit or use-1for the latest committed state.
Output: { code, balances, variables: { stringkeys, uint64keys }, ... }.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | Include contract source (default true) | |
| scid | Yes | 64-char hex Smart Contract ID | |
| variables | No | Include stored variables (default true) | |
| topoheight | No | Topo height; omit or use -1 for latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, and the description is consistent with that. The description adds valuable behavioral context beyond annotations: default values for code and variables, the meaning of topoheight (-1 for latest), the critical 64-hex scid requirement, and an outline of the output structure. This gives the agent a clear mental model of what happens when parameters are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but well-structured with clear sections: purpose, when-to-call, input requirements, and output. The most important information is front-loaded (what the tool does, then when to call). Some redundancy exists with the schema (defaults are repeated), but each line adds or reinforces useful context, so the length is justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, one-required-parameter tool with 100% schema coverage, the description covers everything needed: input validation, optional parameter behavior, output shape, and guidance on how to interpret results via docs. The presence of an output description compensates for the lack of an output schema. No significant information is missing for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description reinforces the schema's defaults but also adds extra meaning for parameters: 'Set false to skip the source blob when you only need stored variables' and 'Set false to skip variables when you only need the source.' These usage-oriented explanations go beyond the schema's simple 'Include ...' descriptions, justifying a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Read smart contract state') and the resource (code and/or stored variables by SCID). It also frames the tool as 'the primary entry point for any contract inspection on DERO', which gives a sense of scope. However, it does not explicitly name sibling tools like explain_smart_contract to differentiate itself, so the distinction is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit 'When to call' section: 'as the first step in any DVM contract investigation.' It also recommends pairing with dero_docs_search and tells the agent to prefer citing docs pages for user interpretation. It does not explicitly mention when NOT to use this tool or how it contrasts with explain_smart_contract, so it lacks exclusions for alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_transactionARead-onlyInspect
Fetch 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_docs_search("transaction structure") so the user can interpret confirmations, ring members, and SC fields.
Input Requirements (CRITICAL):
txs_hashesMUST be a non-empty array of 64-char hex strings.decode_as_jsonis OPTIONAL. PREFER1(any non-zero value) when you want JSON-decoded fields instead of raw blobs.
Output: { txs: [...], txs_as_hex: [...] } with per-tx confirmation, block hash, and (when decoded) parsed payload.
| Name | Required | Description | Default |
|---|---|---|---|
| txs_hashes | Yes | List of transaction hashes (hex) | |
| decode_as_json | No | Optional: decode each tx as JSON when non-zero |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful behavioral detail: each transaction returns confirmation status, block hash, and optionally decoded JSON fields, and it clarifies the difference between raw blobs and decoded payloads. This goes beyond the annotations while remaining consistent with them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized into summary, when-to-call, critical input requirements, and output format. It is front-loaded with the core purpose, and each section earns its place with actionable guidance. No fluff or redundant prose beyond useful emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description explains the return shape clearly: `{ txs: [...], txs_as_hex: [...] }` with per-transaction confirmation, block hash, and decoded fields when requested. It also covers required input format, optional parameter behavior, and related tools, making it complete enough for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters well. The description adds a modest clarification that decode_as_json should preferably be 1 and that it switches from raw blobs to JSON-decoded fields, but much of the input requirement text repeats schema constraints such as non-empty and 64-char hex. This is above baseline but not a major semantic addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: "Fetch one or more transactions by hash via DERO.GetTransaction." It also mentions when to call and how to pair with dero_get_sc, but it does not explicitly distinguish this tool from the sibling trace_transaction_with_context, which could also be used for hash-based tracing. Thus it is clear but lacks full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context: "When to call: when tracing a tx by hash," and advises pairing with dero_get_sc for contract invocations and citing dero_docs_search. It provides clear usage context and alternatives, but it does not explicitly state when not to use this tool or when to prefer trace_transaction_with_context instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_get_tx_poolARead-onlyInspect
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 pending".
Input Requirements: none.
Output: { tx_hashes: string[] | null }.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by explaining the output format and the edge case of null/empty array, which goes beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with clear sections: purpose, usage note, input, output. Every sentence adds value. Front-loads the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description adequately covers the output and edge cases. Could mention mempool state implications, but sufficient for the simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100%. The description states 'Input Requirements: none' which adds clarity. Baseline for 0 parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists pending mempool transaction hashes. The verb 'List' and resource 'pending mempool transaction hashes' are specific. The tool name and description distinguish it from siblings like dero_get_transaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on when to call: checking unconfirmed activity, watching for a specific tx, estimating mempool pressure. Includes a note about handling null/empty. Does not explicitly mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_name_to_addressARead-onlyInspect
Resolve 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):
nameMUST be a non-empty string. Resolution is case-sensitive on the daemon side.topoheightMUST be an integer; use-1for the latest registry state.
Output: { name, address }. On NOT_FOUND the daemon's RPC error is surfaced as a structured _meta.error.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Registered name | |
| topoheight | Yes | Use -1 for latest |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavior beyond annotations: case-sensitivity on the daemon side, the meaning of topoheight=-1 for latest registry state, and the NOT_FOUND error surfacing as _meta.error. This is richer than typical read-only descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with clear labels ('When to call', 'Input Requirements', 'Output'), front-loads the core purpose, and every sentence carries essential information. No filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only lookup with no output schema, the description is complete. It specifies input requirements, output shape ({ name, address }), and error behavior, so an agent has everything needed to invoke and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, which sets a baseline of 3. The description adds value by emphasizing name non-emptiness as CRITICAL, clarifying case-sensitive resolution, and explaining the daemon-side behavior. These details supplement the schema's basic type and description fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Resolve') and names the exact resource (DERO on-chain registered name to address) plus the underlying RPC method (DERO.NameToAddress). This clearly distinguishes it from sibling tools like dero_decode_proof_string or address-fetching tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to call: when a user supplies a human-readable name instead of a dero1.../deto1... address. This gives the agent a clear decision rule with concrete examples and leaves no ambiguity about applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dero_tela_list_appsARead-onlyInspect
Composite: list/browse the TELA apps discovered on-chain (each with its dURL, name, SCID, and doc count) — answers "what TELA apps exist?" without any external indexer. Powered by an in-process scan of the newest chain contracts.
When to call: when a user wants to explore or search the TELA ecosystem ("what TELA apps are there", "show me TELA games", "is there a TELA app about X"), or to find a SCID when they do not know the exact dURL. For an exact dURL use dero_durl_to_scid; to inspect a specific SCID use tela_inspect.
Input Requirements:
queryis OPTIONAL. Case-insensitive filter matched against dURL and name (e.g. "chess", "vault").limitis OPTIONAL (default 50, max 200).
Output: { query, total_matched, returned, truncated, apps:[{ scid, durl, name, install_height, doc_count }], index_meta, narrative, related_docs }. The first call triggers a ~10s one-time discovery scan (cached afterward). index_meta discloses how much of the chain was scanned so the answer's coverage is transparent.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max apps to return (default 50, max 200). | |
| query | No | Optional case-insensitive filter matched against dURL and name (e.g. "chess", "vault"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, destructiveHint=false), the description discloses important behavioral traits: it is a 'Composite' operation, triggered by an 'in-process scan of the newest chain contracts', and the 'first call triggers a ~10s one-time discovery scan (cached afterward)'. It also explains that index_meta discloses scan coverage, making result limitations transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose, when to call, input requirements, and output shape. It front-loads the core answer, includes only necessary detail, and the output code block is compact and informative. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description provides a full output shape and key behavioral caveats (first-call latency, caching, index_meta coverage transparency). It also clearly situates the tool relative to siblings, so an agent has everything needed to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both the schema and description document query as an optional case-insensitive filter and limit with default 50/max 200. The description adds usage context and examples but does not materially expand parameter semantics beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'list/browse the TELA apps discovered on-chain' and explicitly answers the question 'what TELA apps exist?'. It also differentiates itself from siblings by naming dero_durl_to_scid and tela_inspect as the tools for exact dURL or SCID lookup, so an agent can immediately tell this tool apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is an explicit 'When to call' section with concrete user intents ('what TELA apps are there', 'show me TELA games', 'is there a TELA app about X'), and clear exclusions: 'For an exact dURL use dero_durl_to_scid; to inspect a specific SCID use tela_inspect.' This leaves no ambiguity about when to choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_chain_healthARead-onlyInspect
Composite: 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-state investigation when the user asks "is the node healthy", "is it synced", or "what is the current state of the chain". PREFER this over chaining the four primitives yourself — the composite handles partial-failure modes and lag-depth classification consistently, and the response already cites the right docs page.
Input Requirements:
include_tx_poolis OPTIONAL (default true). Set false to skip the mempool snapshot when you only need chain-tip status.
Output: { status, narrative, signals[], chain, mempool, related_docs, _diagnostics }. status is one of healthy | lagging | partial | unreachable. chain is null when DERO.GetInfo was unreachable; mempool is null when skipped or the call failed. On total daemon unreachability the tool returns a structured _meta.error with code RPC_UNREACHABLE.
| Name | Required | Description | Default |
|---|---|---|---|
| include_tx_pool | No | Include mempool snapshot in narrative and response. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral context: partial-failure modes, lag-depth classification, null behavior for chain and mempool, structured error code RPC_UNREACHABLE, and automatic docs citations. This goes beyond what the annotations alone communicate, though it does not cover every edge case like rate limiting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized for the composite tool's complexity and uses clear labeled sections: composite purpose, when to call, input requirements, and output. It front-loads the most important information and every section contributes necessary details without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description thoroughly documents the return shape including status enum values, null handling, and error behavior. It covers invocation context, parameter semantics, and failure modes, making it complete for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents include_tx_pool with type, description, and default, so the baseline is 3. The description adds decision guidance by explaining when to set it to false ('when you only need chain-tip status'), which is genuinely useful semantic context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific composite operation—running a four-step RPC chain (DERO.Ping → DERO.GetInfo → DERO.GetHeight → DERO.GetTxPool)—and names the output as a narrative health report. It clearly distinguishes itself from sibling primitive tools like dero_daemon_ping and dero_get_info by emphasizing it is the composite that should be used for health investigations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit 'When to call' section lists concrete user intents ('is the node healthy', 'is it synced', 'what is the current state of the chain'). It also tells agents to PREFER this over manually chaining the four primitives, giving a clear alternative and rationale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
estimate_deploy_costARead-onlyInspect
Composite: 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 broadcast a deploy transaction, OR when explaining the cost of a contract to a user. PREFER this over chaining dero_get_gas_estimate yourself: this composite already explains gascompute vs gasstorage in plain language, parses the SC source to show what functions the user is about to deploy (reusing extractScSurface from explain_smart_contract), and protects against fabricating a breakdown when the daemon reports 0/0 with a non-OK status.
Input Requirements:
scis REQUIRED. The full DVM-BASIC contract source — must contain at least oneFunction ... End Functionblock. A function body alone will fail with INVALID_INPUT.signeris OPTIONAL. A dero1.../deto1... address that will sign the eventual deploy tx. The daemon uses it for fee context; omitting it still returns a meaningful estimate.include_breakdownis OPTIONAL (default true). Set false when you only need the raw numbers (e.g. piping into a fee table).
Output: { estimate: { gascompute, gasstorage, status }, breakdown: { compute_note, storage_note, total_units } | null, signer_used, include_breakdown, sc_surface: { functions, stringkeys, uint64keys, raw_code_length, function_count }, related_docs }. breakdown is null when include_breakdown=false OR when the daemon returned 0/0 with a non-OK status (never fabricated). On DVM compile failure the composite returns a structured _meta.error with code INVALID_INPUT and the daemon's exact compile message in _meta.error.raw.
| Name | Required | Description | Default |
|---|---|---|---|
| sc | Yes | DVM-BASIC contract source to deploy. MUST be the full contract (Function ... End Function blocks), not a function body alone. | |
| signer | No | Optional dero1.../deto1... signer for the eventual deploy tx. | |
| include_breakdown | No | Default true. Set false to return raw estimate numbers only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this read-only and non-destructive, and the description adds meaningful behavioral detail: it never fabricates a breakdown when the daemon returns 0/0 with non-OK status, and it returns structured errors on DVM compile failure. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section earns its place: purpose, when-to-use, input requirements, and output shape. It is well-organized with clear labels and no redundant repetition of schema-only details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description fully specifies the return shape, conditional null behavior, error behavior, and input constraints. For a composite tool with multiple moving parts, nothing critical is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds important semantics beyond schemas: sc must contain complete Function blocks or it fails with INVALID_INPUT, signer gives the daemon fee context but is optional, and include_breakdown defaults to true with a defined effect on output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific composite action: sending DVM-BASIC source to the daemon's gas estimator and returning the estimate, breakdown, contract surface, and docs. It clearly distinguishes itself from the sibling dero_get_gas_estimate by saying this composite should be preferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call (before broadcasting a deploy tx or when explaining contract cost) and when to prefer it over dero_get_gas_estimate. Also gives concrete conditions for setting include_breakdown to false.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_smart_contractARead-onlyInspect
Composite: 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 so the most relevant page is first. TELA contracts (apps/files) are detected first and cite the TELA spec; for a deep TELA parse use tela_inspect.
When to call: when the user wants to UNDERSTAND a smart contract — its functions, state shape, or which DVM concept to read about. PREFER this over chaining dero_get_sc with a docs lookup yourself: this composite already parses the DVM-BASIC source for function declarations, sorts stringkeys/uint64keys deterministically, and picks the right docs page from a heuristic so the agent does not have to learn DVM-BASIC syntax to summarize a contract.
Input Requirements:
scidis REQUIRED. Must be 64 hex chars (the smart contract id). Use0000…0001for the on-chain name registry as a known-good example.topoheightis OPTIONAL. Provide to inspect the contract at a specific topo height; omit for latest tip.
Output: { scid, topoheight, kind, surface: { functions[], stringkeys[], uint64keys[], balances }, narrative, raw_code_length, has_code, related_docs }. kind is one of tela_index | tela_doc | token | registry | minimal | generic. surface.functions items are { name, args, returns }. has_code is false when the SCID is unknown or has no on-chain code; functions is then [] and the narrative explains the gap. raw_code_length is always present so the agent knows when to fall back to dero_get_sc for the full source.
| Name | Required | Description | Default |
|---|---|---|---|
| scid | Yes | 64-char hex Smart Contract ID | |
| topoheight | No | Optional topo height; omit for latest tip |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations' readOnlyHint=true: it explains the composite nature, deterministic key sorting, TELA-first detection, heuristic docs page selection, and important edge behavior like has_code=false for unknown SCIDs. It also tells the agent when to fall back to dero_get_sc based on raw_code_length. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although the description is long, it is tightly structured into purpose, when-to-call, input requirements, and output sections. Every sentence carries actionable information, and the most important usage guidance is front-loaded before parameter details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates thoroughly by detailing the exact return shape, the kind enum values, the shape of surface.functions, and the fallback semantics of has_code and raw_code_length. Combined with clear input requirements and alternative routing, an agent has everything needed to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 applies, but the description adds real value by explicitly marking scid as REQUIRED with the 64-hex constraint, suggesting a known-good example, and clarifying that topoheight is optional and that omitting it uses the latest tip. This enriches the schema's terse descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('fetch a DERO smart contract ... and return its function surface, classification ... narrative, and curated DVM docs citations') and clearly differentiates itself from raw retrieval tools like dero_get_sc and deeper tools like tela_inspect. An agent can confidently understand what this tool does and why it exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to call ('when the user wants to UNDERSTAND a smart contract'), tells the agent to PREFER this over chaining dero_get_sc with a docs lookup, and names tela_inspect as the alternative for deep TELA parsing. It even provides a known-good example SCID, leaving no ambiguity about invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_docs_pathARead-onlyInspect
Composite: 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-to-cite related_docs.
When to call: at the START of any "where do I read about X?" or "which docs cover Y?" investigation, BEFORE calling dero_docs_search directly. PREFER this over guessing the right product: this composite already runs all four products in parallel, dedupes overlap, surfaces the top heading per result as rationale, and gives you the top-2 citations pre-built. Pass product_hint when the user has already said e.g. "TELA" or "DeroPay" so that product's matches float to the top.
Input Requirements:
intentis REQUIRED. Free-text description of what the user is trying to do (min 8 chars). Drop verbs and use product nouns like "deploy a TELA app" or "verify a DeroPay webhook signature" for best results.product_hintis OPTIONAL. One ofderod | tela | hologram | deropay. Multiplies hint-product scores by 1.5×.limit_per_productis OPTIONAL (default 2, max 5). Cap per-product hits before merging.
Output: { intent, product_hint, limit_per_product, recommended: [{ product, slug, title, canonical_url, score, boosted_score, rationale }], by_product: { derod | tela | hologram | deropay: { count, top_slug, top_score } }, related_docs: DeroCitation[] }. related_docs is the top-2 picks pre-built as citations the agent can drop straight into a response. On zero matches across every product the composite returns a structured _meta.error with code NO_DOCS_MATCH and a hint to rephrase or drop the product_hint.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | Yes | Natural-language description of what the user wants to do (e.g. "deploy a TELA app", "trace a transaction by hash", "verify a webhook signature"). | |
| product_hint | No | Optional bias toward one product (derod | tela | hologram | deropay) when known. | |
| limit_per_product | No | Cap per-product search results before merging. Default 2. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral detail beyond annotations: 1.5x boost for product_hint matches, deduping across products, top-heading rationale, pre-built top-2 citations, and the NO_DOCS_MATCH error behavior. This is exactly the kind of context that helps an agent predict execution semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but appropriately structured: core behavior first, then when-to-call, input requirements, and output shape. Every section earns its place given the composite nature of the tool and the lack of an output schema. No filler or tautological content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description fully documents the return shape, including the recommended array, by_product summary, related_docs citations, and the zero-match error structure. It also covers when to use it, input constraints, and the ranking boost behavior, making it complete enough for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description meaningfully exceeds it. It explains the intent style recommendation ('Drop verbs and use product nouns'), the effect of product_hint as a 1.5x score multiplier, and the merging cap behavior of limit_per_product. This adds practical semantics beyond the raw schema field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it fans out parallel scoped searches across all four DERO product docs and returns a ranked recommendation list with rationale and related_docs. It clearly differentiates itself from dero_docs_search by describing the composite behavior and the pre-built citations, so an agent can distinguish it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to call' section is explicit: call at the start of a docs-discovery investigation and BEFORE calling dero_docs_search directly. It also explicitly prefers this over guessing the product and explains when to pass product_hint, giving clear guidance and an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tela_get_doc_contentARead-onlyInspect
Composite: 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 bytes. Gzip-compressed files (a .gz filename, the TELA-CLI default) are transparently base64-decoded + decompressed to plaintext. Large files paginate via offset.
When to call: when a user wants to READ or inspect the actual code/markup a TELA app file holds (e.g. "show me the HTML of this TELA DOC", "what does this app's app.js contain"). Get DOC SCIDs from tela_inspect on an INDEX first. PREFER this over dero_get_sc: that returns the raw DVM contract wrapper; this extracts just the embedded file content and reports docType, size, and signature presence.
Input Requirements:
scidis REQUIRED. Must be 64 hex chars and reference a TELA-DOC-1 contract (an INDEX or non-TELA SCID returns INVALID_INPUT with guidance).offsetis OPTIONAL. Byte offset into the extracted content; passnext_offsetto read the next chunk of a large file.topoheightis OPTIONAL. Omit for the latest committed state.
Output: { scid, topoheight, filename, doc_type, sub_dir, content_embedded, content, content_offset, content_length, content_truncated, next_offset, compressed, decompressed, stored_filename, signature, signature_note, note, narrative, related_docs }. content is the plaintext file (a 60000-char chunk; paginate via next_offset), or null when content is not embedded (DocShard/STATIC/external). compressed is true for .gz files; decompressed is true when this tool gunzipped them (filename then strips .gz; stored_filename keeps the on-chain name). The contract's author signature presence is reported but NOT cryptographically verified.
| Name | Required | Description | Default |
|---|---|---|---|
| scid | Yes | 64-char hex Smart Contract ID of a TELA-DOC-1 file contract | |
| offset | No | Byte offset into the extracted file content; use next_offset to paginate large files | |
| topoheight | No | Optional topo height; omit for latest committed state |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true, destructiveHint=false) already establish safety; the description adds rich behavior: the composite DERO.GetSC fetch, base64-decode + gunzip decompression, 60000-char chunking with next_offset, null content for DocShard/STATIC/external, and the explicit caveat that signature presence is not cryptographically verified. It also discloses INVALID_INPUT behavior for non-DOC SCIDs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with bolded sections: purpose, when to call, input requirements, output. The most important scoping and alternative routing are front-loaded, and the detailed output explanation is justified because there is no output schema. No filler sentences, despite the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description thoroughly explains return fields like content, compressed, decompressed, stored_filename, next_offset, and the signature caveat. It covers pagination, compression, invalid-input behavior, and the relationship to tela_inspect and dero_get_sc. The tool's complexity is matched by the description's completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — each parameter is documented with type, constraints, and purpose. The description echoes the schema for scid/offset/topoheight and adds only one extra semantic detail: that an INDEX or non-TELA SCID returns INVALID_INPUT with guidance. Per the high-coverage baseline, a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: fetches and extracts the actual file content from a TELA-DOC-1 contract. Explains the internal mechanism (scraping a DVM-BASIC comment block) and explicitly distinguishes itself from dero_get_sc, which returns the raw wrapper. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Includes an explicit 'When to call' section: read/inspect actual code/markup of a TELA app file, with concrete example queries. Tells the agent to get DOC SCIDs from tela_inspect first, and instructs to prefer this tool over dero_get_sc with the reason why. This is model guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tela_inspectARead-onlyInspect
Composite: 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 manifest (like package.json) and DOCs are the individual files (HTML/CSS/JS) stored on chain.
When to call: as the FIRST step whenever a user references a TELA SCID, a .tela dURL app, or asks "what is this TELA contract/app", "what files does this TELA app have", or "is this a TELA INDEX or DOC". PREFER this over dero_get_sc + manual parsing or explain_smart_contract: explain_smart_contract treats TELA contracts as generic DVM and its surface CAPS stored keys at 50, which silently drops DOCn entries on large manifests — tela_inspect reads the raw stringkeys directly so it enumerates ALL DOC references, and it decodes the TELA header/mods/commit schema the generic tool does not understand.
Input Requirements:
scidis REQUIRED. Must be 64 hex chars (the TELA contract id).topoheightis OPTIONAL. Provide to inspect at a specific topo height; omit for the latest committed state.
Output: a discriminated union on kind. tela_index → { scid, topoheight, kind, index: { name, description, icon, durl, mods[], docs:[{position, key, scid, is_entrypoint, malformed}], doc_count, commit, version_history[], current_commit_hash, owner, updateable:'unknown', updateable_note, parse_notes[] }, narrative, related_docs }. tela_doc → { ..., doc: { filename, doc_type, sub_dir, durl, signature, content_embedded, code_size_bytes, immutable }, narrative, related_docs }. not_tela → { ..., kind:'not_tela', reason, observed:{ stringkey_sample[], stringkeys_total, has_code, markers[] }, narrative } — returned (NOT an error) when the SCID is unknown or lacks TELA markers. Updateability cannot be derived from chain state (ringsize is not in GetSC) so it is honestly reported as 'unknown'.
| Name | Required | Description | Default |
|---|---|---|---|
| scid | Yes | 64-char hex Smart Contract ID of a TELA-INDEX-1 or TELA-DOC-1 contract | |
| topoheight | No | Optional topo height; omit for the latest committed state |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only and non-destructive behavior, and the description adds substantial context beyond that: it reads raw stringkeys, auto-detects the standard, returns not_tela as a normal result rather than an error, and honestly reports updateability as unknown. This gives the agent a clear model of the tool's behavior and edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but tightly organized: purpose, when to call, input requirements, and output shape. Every sentence adds useful information, and the critical usage guidance is front-loaded before the detailed output contract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description fully documents the discriminated union result shapes, the not_tela fallback, and the known limitation about updateability. Combined with the rich annotations and complete param schema, an agent has everything needed to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description repeats the scid and topoheight requirements but adds minimal extra meaning beyond the schema, such as clarifying that the SCID refers to a TELA contract. No meaningful parameter behavior is undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description defines a composite fetch-and-parse action with a specific verb and resource, and names the exact TELA standards it detects. It distinguishes itself from generic tools like explain_smart_contract and dero_get_sc by explaining its specialized parsing behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to call as the first step for TELA-related queries, and explicitly says to prefer it over dero_get_sc plus manual parsing or explain_smart_contract. It also explains the limitation of the alternative, making the selection criterion actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_transaction_with_contextARead-onlyInspect
Composite: 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 + DVM docs pages as citations.
When to call: as the FIRST step when investigating any tx by hash — the user asks "what is this tx", "is this confirmed", "what contract did this deploy", or "what does this tx do". PREFER this over chaining dero_get_transaction with dero_get_sc yourself: for SC INSTALL txs the composite already extracts the deployed function surface inline (no second RPC needed because the source is embedded in the tx record), classifies the kind so the agent does not have to inspect the raw shape, and protects against the "empty record" failure mode by surfacing structured TX_NOT_FOUND when the daemon does not know the hash.
Input Requirements:
tx_hashis REQUIRED. Must be 64 hex chars.decodeis OPTIONAL (default true). Pass false to ask the daemon to skip the JSON-decoded view (raw hex still comes back; the field hint that the binary is available).include_sc_contextis OPTIONAL (default true). Set false to skip the inline extractScSurface call for SC install txs (useful when you only need confirmation / ring info).
Output: { tx_hash, confirmation: { status, block_height, valid_block, invalid_blocks, in_pool }, kind, ring: { groups, first_group_size }, reward, signer_visible, native_balance, sc_install: { scid, surface, raw_code_length, has_code } | null, raw_tx_hex_length, narrative, related_docs, _diagnostics }. sc_install is non-null ONLY when the tx is a contract install AND the surface extractor produced something (tx_hash IS the resulting SCID in that case). SC invocation arg decoding is NOT performed — that requires walking the binary tx blob with the DERO tx codec, which is not bundled in this MCP. The composite surfaces raw_tx_hex_length so the agent knows the binary is available via dero_get_transaction. On unknown hash the daemon returns an empty record and the composite returns a structured _meta.error with code TX_NOT_FOUND.
| Name | Required | Description | Default |
|---|---|---|---|
| decode | No | Pass decode_as_json=1 to the daemon. Default true. Decoded JSON view is informational; the raw hex always comes back. | |
| tx_hash | Yes | 64-char hex transaction hash | |
| include_sc_context | No | When true (default), runs the SC-install surface extraction inline when the tx contains contract code. SC invocation arg decoding is NOT performed in either mode; see module docs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/non-destructive, and the description adds substantial behavior beyond that: the TX_NOT_FOUND structured error on unknown hashes, the 'empty record' failure mode it protects against, the explicit non-performance of SC invocation arg decoding with the reason (codec not bundled), the conditional sc_install nullability, and the raw_tx_hex_length hint that routes agents to dero_get_transaction for the binary. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but every sentence earns its place — this is a composite tool with no output schema, so the density is justified. The structure is optimally ordered: What → When → Input requirements → Output shape → Limitations → Error behavior. The summary is front-loaded so an agent can decide whether to read the details without scanning the whole block.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 params, no output schema, and complex conditional behavior, the description is nearly complete: it documents the full output shape, the sc_install null condition, error semantics, and the known limitation on arg decoding. One small blemish: the error section says the composite returns 'a structured _meta.error' while the output shape lists only _diagnostics, leaving the relationship between the two fields slightly ambiguous for an agent parsing the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value on top: it marks tx_hash REQUIRED with the 64-hex constraint front and center, explains the practical effect of decode=false (raw hex still comes back), and gives a use-case trigger for include_sc_context=false ('when you only need confirmation / ring info'). This exceeds the schema's mechanical definitions but is not a huge leap beyond them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific composite operation with concrete verbs — look up, classify, extract, stitch — and enumerates exact outputs: confirmation status (confirmed | mempool | unknown), kind (sc_install | transfer_or_invocation | coinbase | unknown), and inline SC surface for contract installs. It explicitly distinguishes itself from chaining dero_get_transaction with dero_get_sc, so an agent can tell it apart from siblings without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides an explicit 'When to call' section listing concrete user intents ('what is this tx', 'is this confirmed', 'what contract did this deploy'), states it should be the FIRST step, and names the alternative pattern (chaining dero_get_transaction with dero_get_sc) with reasons to prefer the composite. It also explains why the alternative is unnecessary for SC installs (source is embedded in the tx record).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_supplyARead-onlyInspect
Composite: recompute DERO total supply offline via CalcSupply (premine + one-time launch credit + Σ CalcBlockReward epochs — DEROFDN community-dev / dero-docs schedule), optionally cross-check against DERO.GetInfo.total_supply.
When to call: when the user asks "what is the total supply", "does GetInfo match the schedule", "verify the supply", or wants an independent recompute that does not trust a node. PREFER this over reading GetInfo alone — GetInfo on older builds can undercount after halvings (display quirk, not inflation). PREFER citing the returned related_docs (integrity/verify-the-supply).
Input Requirements:
heightis OPTIONAL. Non-negative integer topoheight/height. Default: tip topoheight from DERO.GetInfo.If the daemon is unreachable you MUST pass
height— otherwise the tool returns RPC_UNREACHABLE / INVALID_INPUT.
Output: { height, height_source, calc_supply_atoms, calc_supply_dero, block_reward_atoms, block_reward_dero, getinfo_total_supply, match, formula_note, narrative, related_docs, _diagnostics }. match is true/false when GetInfo.total_supply is present, else null. Scope is schedule CalcSupply only — NOT a UTXO census.
| Name | Required | Description | Default |
|---|---|---|---|
| height | No | Topoheight / height to evaluate. Default: tip topoheight from DERO.GetInfo. Required when the daemon is unreachable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, but the description adds substantial context: the computation is offline, the optional cross-check behavior, the halving undercount display quirk, the exact error conditions if daemon is unreachable without a height, and the limited scope to schedule CalcSupply. This goes well beyond the annotation safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections: purpose, when to call, input requirements, and output. It front-loads the most decision-relevant information and every sentence adds value—such as the preference over GetInfo and the error condition. Length is justified by the tool's composite nature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully explains the return shape, including the meaning of 'match', and provides related_docs. It covers error behavior, defaults, scope limitations, and the offline recompute approach. An agent has all the context needed to invoke and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and already explains height's default and the requirement when the daemon is unreachable. The description mostly repeats that information, adding only the concrete error outcome. Since the schema carries the parameter semantics, no additional meaning is needed, so the baseline of 3 holds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'recompute DERO total supply offline via CalcSupply' and 'cross-check against DERO.GetInfo.total_supply.' It clearly distinguishes itself from GetInfo by stating 'PREFER this over reading GetInfo alone,' so an agent can identify this tool's unique role among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to call' section explicitly lists trigger queries, then gives a concrete comparison to the alternative: GetInfo can undercount after halvings on older builds. It also excludes a non-goal ('NOT a UTXO census') and specifies the required height condition for unreachable daemons. This leaves no ambiguity about when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose. The raw RPC tools (e.g., dero_get_block, dero_get_transaction) are individually scoped, composite tools (diagnose_chain_health, estimate_deploy_cost) provide higher-level operations, and docs tools serve search and retrieval. No two tools overlap in function.
Tools follow a consistent 'dero_' prefix pattern. Raw RPC tools use 'dero_<verb>_<noun>' (e.g., dero_get_block, dero_get_height). Composite tools have descriptive names (diagnose_chain_health, estimate_deploy_cost). Docs tools use 'dero_docs_<verb>'. Naming is uniform and predictable.
With 25 tools, the set is somewhat large but still well-scoped for a comprehensive blockchain server. It covers raw RPC, composite operations, and documentation utilities. The number is justified by the domain's needs, though it borders on heavy.
The tool set provides thorough coverage of DERO daemon RPC operations: chain info, blocks, transactions, smart contracts, mining template, gas estimation, name resolution, encrypted balance, and more. Composite tools fill gaps for health checking, cost estimation, and transaction tracing. Documentation tools complete the surface. No critical gaps.
Maintenance
Related MCP Connectors
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Hosted MCP server for live Bittensor chain reads and self-custodial on-chain writes.
Public read-only MCP server for HODLXXI agent identity, trust, receipts, and verification.
Tenzro Network MCP server: wallet, identity, payments, inference, staking, bridges, verification.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA read-only MCP server for Hyperliquid that provides public market data (prices, order books, funding) and any wallet's positions, orders, and fills via MCP tools, without requiring a private key.MIT
- FlicenseNot gradedqualityDmaintenanceEnables MCP-compatible clients to query the RustChain blockchain, check balances, list miners, view epoch info, check network health, transfer RTC, and browse recent transactions and bounties.
- AlicenseAqualityBmaintenanceA read-only MCP server that queries multichain EVM on-chain data through Blockscout REST API, providing tools for address info, transactions, logs, and more.1625MIT
- AlicenseAqualityBmaintenanceA read-only MCP server for querying Hyperliquid perp markets, funding rates, order books, candles, and account positions/fills/funding for any address, without needing API keys or wallets.8551MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/DHEBP/dero-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server