io.github.vdappdev2/address
MCP server for defining Verus currencies — tokens, fractional baskets, centralized, ERC-20 mapped
Versions
0.1.7latest0.1.60.1.50.1.40.1.3+ show 3 moreshow less
0.1.20.1.10.1.0Tools 49
status Check registry freshness and daemon reachability. Use this to verify chain health before starting a workflow, or to debug why calls to other MCPs are failing. Without a chain parameter, returns an overview of all registered chains. With a chain parameter, returns detailed status for that specific chain.
getinfo Get blockchain and node information for a running chain. Returns version, block height, connections, difficulty, sync status, and fee configuration. Use this to check whether a daemon is running and synced before performing operations on that chain.
getwalletinfo Get wallet state for a running chain. Returns balances (confirmed, unconfirmed, immature, staking-eligible), reserve currency balances, transaction count, and key pool status. Use this for a quick overview of wallet health and native + reserve currency holdings. Note: reserve_balance is an object keyed by currency name, showing all non-native currencies held in the wallet.
help Get daemon documentation for any RPC command. With no command argument, returns a list of all available RPCs grouped by category. With a command name, returns detailed usage including parameters, types, and examples. Use this when an agent needs to understand an RPC that isn\
getblockcount Get the current block count (height of the longest chain). Returns a single number — the most lightweight way to check the current block height. Use this for polling block progress, such as waiting for a name commitment to confirm before calling registeridentity.
getcurrency Get the full definition and current state of a currency. Returns the currency\
refresh_chains Re-run chain discovery and rewrite the chain registry file. Call this after starting a new daemon, stopping a daemon, or when the registry appears stale. Discovery scans OS-appropriate data directories for .conf files, parses them, and calls getinfo on each discovered chain to confirm it\
stop Stop a running daemon. This shuts down the daemon process for the specified chain entirely — ALL connected clients, MCP servers, CLI users, and applications connected to this daemon will lose connectivity. This is not a per-session disconnect; it terminates the daemon. After stopping, the chain will no longer be reachable. Consider calling refresh_chains after stopping so other MCPs see the updated state.
verusd Start a Verus daemon instance. This is a system command that spawns a new process — it is NOT an RPC call to an existing daemon. The daemon runs independently of this MCP server (detached process). After starting, the tool waits briefly and verifies the daemon launched successfully via getinfo. Call refresh_chains after a successful start so other MCPs can discover the new daemon.
sendrawtransaction Broadcast a signed raw transaction to the network. Takes a hex-encoded signed transaction and submits it to the local node, which relays it to the network. Returns the transaction hash (txid) on success. This is the companion to definecurrency — definecurrency returns a signed hex that must be broadcast here. Also used for any pre-signed transaction hex.
signrawtransaction Sign inputs of a raw transaction. Takes a hex-encoded transaction and signs it with keys available in the wallet (or with explicitly provided private keys). Returns the signed hex and whether all inputs are fully signed. Use this for multisig workflows where multiple parties need to sign. For definecurrency in the normal single-signer case, the hex is returned already signed — signrawtransaction is not needed.
getcurrencybalance Get multi-currency balances for a specific address. Returns all currency balances held at the address, including the native chain currency and any reserve/token currencies. Supports transparent addresses, private (z) addresses, VerusIDs, and wildcard patterns. Use this for detailed per-address multi-currency holdings. For a quick overview of the wallet\
getcurrencyconverters Find fractional basket currencies that can convert between specified currencies. Returns all baskets that hold the listed currencies as reserves, along with their current state (reserves, prices, conversion volumes). Use this to discover conversion paths before calling estimateconversion or sendcurrency with convertto. Two input modes: simple (pass currency names) or advanced (pass a query object with target conversion details).
estimateconversion Estimate the output of converting one currency to another, accounting for pending conversions, fees, and slippage. Does not broadcast a transaction — this is a read-only estimate. Use this before sendcurrency with convertto to preview the expected output. Can estimate a single conversion or an array of conversions using the same basket. IMPORTANT: when both source and destination currencies are reserves of a fractional basket (neither is the basket itself), you MUST specify
listcurrencies List and search currencies registered on the blockchain. Returns an array of currency definitions with their current state. Supports filtering by launch state, system type, source system, and converter reserves. Without a query object, returns all currencies on the local chain. Use filters when possible — unfiltered queries on mainnet can return very large result sets.
z_getoperationstatus Check the status of async operations. Returns status, result, and timing for one or more operations. Operations remain in memory after completion — call this to retrieve results. This is the companion tool to sendcurrency, which returns an operation ID that must be polled here to get the transaction ID. Without operationids, returns all operations known to the node.
gettransaction Get detailed information about a wallet transaction by transaction ID. Returns amounts, confirmations, block info, and detailed input/output breakdowns including reserve transfers and multi-currency details. The transaction must be in the node\
z_getnewaddress Generate a new shielded Sapling address (zs-address) for private transactions. Use this to create addresses for identity privateaddress fields or private sends. Each call generates a unique shielded address.
listtransactions List recent wallet transactions with pagination. Returns an array of transactions including sends, receives, and multi-currency operations. Each entry includes amounts, confirmations, block info, and — for multi-currency transactions — token amounts and reserve output details. Results are returned most-recent-last.
sendcurrency Send, convert, or cross-chain transfer currency. This is the primary tool for moving value on Verus. Supports simple sends, currency conversions through fractional baskets, cross-chain transfers, currency/ID exports, minting, burning, and data storage. Returns an operation ID (opid) — poll z_getoperationstatus with the opid to check for completion and get the resulting transaction ID. If returntxtemplate is true, returns the raw transaction template instead of broadcasting. IMPORTANT: when converting between two reserve currencies (neither is the basket itself), you MUST include
definecurrency Define a new currency on the blockchain. Creates a signed transaction that defines the currency — the transaction is NOT broadcast automatically. The returned `hex` field must be passed as the `hexstring` parameter to sendrawtransaction (in chain-mcp) to actually launch the currency. Supports simple tokens (options: 32), fractional basket currencies (options: 33), centralized tokens (proofprotocol: 2), ID control tokens (options: 2080), and Ethereum ERC-20 mapped tokens (proofprotocol: 3). A VerusID with the same name must exist, be controlled by the wallet, and have sufficient funds to pay the definition fee. Only root IDs can define currencies (except ID control tokens, which subIDs can also define). After broadcasting, wait for the preconversion timeframe (minimum 20 blocks), then verify with getcurrency (chain-mcp). FEE DISCOVERY: Call getcurrency (chain-mcp) on the chain\
getidentity Look up a VerusID by name or i-address. Returns the identity\
getidentitycontent Get identity content/data with optional VDXF key filter and height range. Returns the cumulative content state — all content across all updates within the specified range. Unlike getidentityhistory, this does not return per-revision snapshots. Use this to read structured data stored on an identity (profiles, timestamps, application data) without needing to process the full revision history.
getidentityhistory Get the full revision history of a VerusID. Returns an array of identity snapshots, one per update transaction. Each entry shows the identity state as it was set in that specific transaction, along with the block hash, height, and transaction details. Use this to audit changes to an identity over time — primary address changes (transfers), content updates, authority changes, etc. Note: each history entry\
getvdxfid Get the VDXF key ID from a URI string. Converts a human-readable VDXF URI (e.g.,
listidentities List VerusIDs in the local wallet. Returns all identities that this wallet can spend for, sign for, or watch. Use this to discover which identities are available before performing identity operations. By default includes identities we can spend for and sign for, but not watch-only.
registernamecommitment Step 1 of identity registration. Creates a name commitment transaction that reserves a name without revealing it. The commitment hides the name itself while ensuring miners cannot front-run the registration. After this tool succeeds, wait 1 block before calling registeridentity (step 2). The commitment data is saved to disk so it persists across conversations — if a session ends before registration, the next session can pick up the commitment. Names must not have leading, trailing, or multiple consecutive spaces and must not include: \\ / : * ?
registeridentity Step 2 of identity registration. Uses a confirmed name commitment to register the identity on-chain. The commitment must have been mined (wait 1 block after registernamecommitment). The tool checks for saved commitment data from a previous registernamecommitment call — if available, the agent does not need to pass the commitment details manually. On successful registration, the saved commitment file is cleaned up. IDENTITY DEFINITION: Keep it minimal — only include fields you are explicitly setting to non-default values. Omit revocationauthority/recoveryauthority to default to self. TIMELOCK: Do NOT include timelock in the identity JSON unless you deliberately intend to set an absolute block height lock. Omitting timelock defaults to 0 (unlocked). To configure timelocks safely after registration, use setidentitytimelock which provides setunlockdelay and unlockatblock controls. Setting a timelock value here creates an absolute block height lock that CANNOT be removed by updateidentity — only by revoke+recover. Omit privateaddress unless explicitly assigning one. SAFETY: NEVER set revocationauthority to another identity while leaving recoveryauthority as self — if the identity is revoked by the external authority, it cannot recover itself (recovery requires the recovery authority to act, and a revoked identity cannot authorize its own recovery). This bricks the identity. If delegating revocation, always also delegate recovery to a different identity. POSITIONAL PARAMS: The daemon RPC is positional: registeridentity jsonidregistration (returntx) (feeoffer) (sourceoffunds). If passing sourceoffunds, you must also fill returntx and feeoffer. FEE DISCOVERY: Call getcurrency (chain-mcp) on the parent currency to find idregistrationfees. For basket currencies, if idimportfees is a satoshi-scale value it encodes a reserve currency index: 0.00000000 = first reserve (index 0), 0.00000001 = second reserve (index 1), etc. The idregistrationfees amount is then denominated in that reserve currency — calculate how much of the basket currency equals that amount at current conversion prices. Example: idregistrationfees=15 + idimportfees=0.00000001 (index 1=USD) means 15 USD worth of the basket currency. Default idimportfees (e.g., 0.02) means the fee is in the basket currency itself, but defaults may differ per chain — check getcurrency to verify. FEE SHORTCUT: If unsure of the exact fee (especially with reserve-denominated fees and referral discounts), pass feeoffer=0.00000001 — the daemon will reject and return the minimum required fee in the error message, then retry with that amount.
updateidentity Update an identity\
revokeidentity Revoke an identity, making it unable to spend funds or sign transactions. Only the revocation authority (or token revocation authority) can perform this action. A revoked identity can only be restored by the recovery authority using recoveridentity. This is a safety mechanism — use it if the identity\
recoveridentity Recover a revoked or compromised identity. Only the recovery authority (or token recovery authority) can perform this. Typically used to set new primary addresses after a key compromise, effectively transferring control to new keys. Pass the full identity definition with the desired recovery state (new primary addresses, etc.). Always include
setidentitytimelock Set or modify a timelock on a VerusID. Timelocking restricts when an identity can spend funds on this chain. This only affects the identity on the current chain. Two modes:\n\n- setunlockdelay: Set a delay (in blocks) that must pass after an unlock request. Sets flags=2 (delay lock active), timelock=N (the delay in blocks). The identity cannot spend until an unlock is triggered and the delay passes.\n\n- unlockatblock: Set an absolute block height at which the identity unlocks. When used with unlockatblock=0 on a delay-locked identity (flags=2), it TRIGGERS the unlock countdown — the daemon converts the delay into an absolute block height (approximately current_block + delay) and clears the delay flag. This is the standard way to initiate unlocking a delay-locked identity. unlockatblock=0 does NOT work on absolute block height locks (flags=0, timelock > 0) — those can only be removed by revoke+recover.\n\nExactly one of unlockatblock or setunlockdelay must be specified.\n\nTIMELOCK WORKFLOW: 1) Set delay: setunlockdelay=N → identity locked with N-block delay. 2) Trigger unlock: unlockatblock=0 → countdown starts, identity unlocks at ~current_block+N. 3) Wait for block to pass. 4) Identity can spend again. To cancel a countdown (e.g., attacker triggered unlock), the revocation authority can revoke — revocation destroys the countdown entirely. Then recover to restore the identity with no timelock.\n\nREMOVING TIMELOCKS: Delay locks (flags=2) can be cleared by revoke+recover (omit timelock in recovery JSON). Absolute locks (flags=0, timelock > 0) can ONLY be cleared by revoke+recover. updateidentity CANNOT modify or remove any timelock once set.
validateaddress Validate an address and return detailed information about it. Returns whether the address is valid, whether it belongs to this wallet (ismine), the address type, and associated metadata. Use this to verify addresses before sending funds, or to check if a given address is controlled by the local wallet.
z_validateaddress Validate a shielded (Sapling) z-address and return detailed information. Returns whether the address is valid, whether it belongs to this wallet (ismine), the address type, and key components (payingkey, transmissionkey, diversifier). Use this to verify z-addresses before sending funds or data, or to check if a z-address is controlled by the local wallet. Complements validateaddress, which only works for transparent (R/i) addresses.
getaddressesbyaccount List all transparent addresses for an account. In Verus, the default account is
z_listaddresses List all shielded (Sapling) addresses in the wallet. Returns an array of zs-addresses. Use this to see all shielded addresses available for private transactions, or to find an existing shielded address for use as an identity privateaddress.
getnewaddress Generate a new transparent (R-address) for receiving payments. Use this to create fresh addresses for identity primaryaddresses, change addresses, or destination addresses. Each call generates a unique address from the wallet\
getoffers Get all open offers for a specific currency or identity. Returns both buy and sell offers — offers of the asset and offers for the asset. Use iscurrency to switch between currency offers and identity offers. Response keys are dynamic and generated by the daemon based on the queried asset — parse them dynamically. Use this to discover what\
listopenoffers List open offers from the current wallet. Shows what this wallet has offered on-chain. Can filter by expired/unexpired status. Use this to check the status of offers the agent has created, or to find offers that need to be closed.
makeoffer Create a new on-chain atomic swap offer. Offers are fully decentralized — no intermediary, no escrow. The offer transaction locks the offered asset on-chain until the offer is taken, expires, or is closed. Supports currency-for-currency, currency-for-identity, identity-for-currency, and identity-for-identity swaps. For currency offers, use {
takeoffer Accept an existing on-chain offer. Creates and posts a transaction that atomically executes the exchange — both sides swap in a single transaction, or neither does. The offer transaction must have at least 1 confirmation before it can be taken. Before taking, verify the offer hasn\
closeoffers Close (cancel) open offers and reclaim the locked funds. Returns null on success. Always closes expired offers automatically, even if no parameters are given. When specific offer txids are provided, closes only those offers. Use this to cancel offers that are no longer wanted, or as periodic cleanup to reclaim funds from expired offers.
z_listreceivedbyaddress List transactions and data received at a shielded (z) address. Data transactions appear with amount: 0 and a memo containing the data descriptor (a JSON object keyed by the VDXF datadescriptor address). Use this as step 1 of the data retrieval pipeline: list received data, then pass the descriptor to decryptdata. Value transactions appear with their amount and standard memo.
decryptdata Decrypt data stored on-chain. Accepts a data descriptor (from z_listreceivedbyaddress memo), viewing key (EVK or IVK), and optional txid. With retrieve: true, the daemon fetches and decrypts the referenced data. Always pass the EVK (from z_exportviewingkey) — without it the daemon returns still-encrypted data even if the wallet holds the spending key. For encrypted identity content, pass the original encrypted DataDescriptor from signdata (not the on-chain version, which may have modified flags). Alternatively, use iddata to query and decrypt identity content by identityid and vdxfkey.
z_exportviewingkey Export the extended viewing key (EVK) for a shielded address. The viewing key allows decryption of all data encrypted to this z-address without granting spending authority. Share it to grant read-only access. Pass the returned key as the evk parameter to decryptdata.
z_viewtransaction View detailed shielded transaction information including spends and outputs for a z-transaction in the wallet. Shows addresses, amounts, memos, and output indices. Useful for inspecting data-carrying transactions to understand their structure before decryption.
signdata Sign data with a VerusID or transparent address. Generates a hash of the provided data and signs it. Supports multiple input modes (message, file, hex, base64, pre-computed hash, vdxfdata) and hash algorithms (sha256, sha256D, blake2b, keccak256). Can sign a single piece of data or build a Merkle Mountain Range (MMR) over multiple items. For multi-sig identities, pass an existing partial signature to accumulate signatures. Can also encrypt data to a z-address via encrypttoaddress — returns both plaintext and encrypted versions with an SSK for selective disclosure. Supports vdxfdata input — as a string (equivalent to message) or as a JSON object (VDXF binary serialization, producing a different hash). Use the object form to sign data in the same canonical format as on-chain identity contentmultimap entries. Available in read-only mode — signing does not spend funds or change blockchain/wallet state.
verifysignature Verify a signature produced by signdata. Checks that the signature is valid for the given data and identity/address. Returns signaturestatus:
z_importviewingkey Import a viewing key to enable decryption of data encrypted to another z-address. Grants read-only access without spending authority. The key can be obtained from z_exportviewingkey. After import, decryptdata can decrypt data encrypted to that address without passing the key explicitly. Note: rescan can take minutes if scanning a large block range.
Permissions 3
network medium shell high env_vars low