Gives AI agents the full lifecycle management of VerusID blockchain identities through 11 local RPC tools. You can register new IDs, update their on-chain data, revoke and recover them, query the identity chain, and set time locks for delayed operations. Part of a seven-server suite that talks directly to your local Verus daemon over JSON-RPC with no cloud dependencies. Enforces read-only modes per server, logs all write operations to append-only audit files, and requires the chain-mcp foundation server to discover running daemons. If you're building agents that need to interact with Verus's protocol-level identity system, this handles everything from creation to recovery without touching external APIs.
Public tool metadata for what this MCP can expose to an agent.
identity_whoamiGet your agent identity info — name, email, DID, and scopesGet your agent identity info — name, email, DID, and scopes
No parameter schema in public metadata yet.
identity_signSign arbitrary data with this identity's Ed25519 private key. Returns the signature and the identity's DID.1 paramsSign arbitrary data with this identity's Ed25519 private key. Returns the signature and the identity's DID.
datastringidentity_verifyVerify a signature against any did:web identity. Resolves the DID Document and checks the Ed25519 signature.3 paramsVerify a signature against any did:web identity. Resolves the DID Document and checks the Ed25519 signature.
didstringdatastringsignaturestringmail_sendSend an email from your agent's inbox. Supports up to 10 attachments (10 MB each, 25 MB total).7 paramsSend an email from your agent's inbox. Supports up to 10 attachments (10 MB each, 25 MB total).
ccarraytoarraybccarrayhtmlstringtextstringsubjectstringattachmentsarraymail_replyReply to an existing email in a thread. Supports up to 10 attachments (10 MB each, 25 MB total).4 paramsReply to an existing email in a thread. Supports up to 10 attachments (10 MB each, 25 MB total).
htmlstringtextstringmessageIdstringattachmentsarraymail_list_messagesList emails in your agent's inbox. Returns newest first.3 paramsList emails in your agent's inbox. Returns newest first.
limitnumberlabelsstringpageTokenstringmail_get_messageGet a specific email by its messageId1 paramsGet a specific email by its messageId
messageIdstringmail_get_attachmentDownload the contents of an email attachment as base64-encoded data. Use mail.get_message or mail.get_thread first to find attachment IDs and metadata.2 paramsDownload the contents of an email attachment as base64-encoded data. Use mail.get_message or mail.get_thread first to find attachment IDs and metadata.
messageIdstringattachmentIdstringmail_list_threadsList email threads in your agent's inbox. Returns newest first.2 paramsList email threads in your agent's inbox. Returns newest first.
limitnumberpageTokenstringmail_get_threadGet a full email thread with messages (newest 200 by default)2 paramsGet a full email thread with messages (newest 200 by default)
limitnumberthreadIdstringmail_update_labelsAdd or remove labels on a message3 paramsAdd or remove labels on a message
addLabelsarraymessageIdstringremoveLabelsarraymail_update_thread_labelsAdd or remove labels on a thread (e.g. 'starred', 'important', 'archived', or custom labels). Thread labels are separate from message labels. Labels must be 1-100 chars from [a-zA-Z0-9_-:.]. Max 20 labels per call. Removing a label deletes user data — use with care.3 paramsAdd or remove labels on a thread (e.g. 'starred', 'important', 'archived', or custom labels). Thread labels are separate from message labels. Labels must be 1-100 chars from [a-zA-Z0-9_-:.]. Max 20 labels per call. Removing a label deletes user data — use with care.
threadIdstringaddLabelsarrayremoveLabelsarraymail_delete_messageDelete a single message from the inbox1 paramsDelete a single message from the inbox
messageIdstringmail_delete_threadDelete an entire thread and all its messages1 paramsDelete an entire thread and all its messages
threadIdstringmail_list_rulesList all allow/block rules for this identityList all allow/block rules for this identity
No parameter schema in public metadata yet.
mail_add_ruleAdd an allow or block rule. Use type ALLOW or BLOCK, scope RECEIVE/SEND/REPLY, and value as email or *@domain.com.3 paramsAdd an allow or block rule. Use type ALLOW or BLOCK, scope RECEIVE/SEND/REPLY, and value as email or *@domain.com.
typestringALLOW · BLOCKscopestringRECEIVE · SEND · REPLYvaluestringmail_delete_ruleDelete an email allow/block rule by its ID1 paramsDelete an email allow/block rule by its ID
ruleIdstringvault_listList all credentials in the vault (metadata only, no secrets)List all credentials in the vault (metadata only, no secrets)
No parameter schema in public metadata yet.
vault_getRetrieve a decrypted credential from the vault. For TOTP credentials, use vault.totp instead to get the code.1 paramsRetrieve a decrypted credential from the vault. For TOTP credentials, use vault.totp instead to get the code.
namestringvault_totpGenerate the current 6-digit TOTP code. Works on any credential that has a TOTP secret (standalone TOTP type or any credential with a 'totp' field). Response also includes backupCodesRemaining — call vault.get to read the actual backup codes if a fallback is needed.1 paramsGenerate the current 6-digit TOTP code. Works on any credential that has a TOTP secret (standalone TOTP type or any credential with a 'totp' field). Response also includes backupCodesRemaining — call vault.get to read the actual backup codes if a fallback is needed.
namestringvault_totp_use_backupAtomically consume one single-use TOTP backup code. Moves the popped code from data.backupCodes into data.usedBackupCodes (kept as an audit trail) and returns it. Use when the live TOTP code is unavailable (clock skew, device lost). Each code can only be used once.1 paramsAtomically consume one single-use TOTP backup code. Moves the popped code from data.backupCodes into data.usedBackupCodes (kept as an audit trail) and returns it. Use when the live TOTP code is unavailable (clock skew, device lost). Each code can only be used once.
namestringvault_storeStore or update an encrypted credential in the vault5 paramsStore or update an encrypted credential in the vault
dataobjectnamestringtypestringLOGIN · API_KEY · OAUTH · TOTP · SSH_KEY · DATABASEmetadataobjectexpiresAtstringvault_deleteRemove a credential from the vault1 paramsRemove a credential from the vault
namestringcalendar_createCreate a new event on this identity's calendar6 paramsCreate a new event on this identity's calendar
endAtstringtitlestringstartAtstringisAllDaybooleanlocationstringdescriptionstringcalendar_updateUpdate an existing calendar event7 paramsUpdate an existing calendar event
endAtstringtitlestringeventIdstringstartAtstringisAllDaybooleanlocationstringdescriptionstringcalendar_listList events on this identity's calendar3 paramsList events on this identity's calendar
tostringfromstringlimitintegercalendar_getGet details of a specific calendar event1 paramsGet details of a specific calendar event
eventIdstringcalendar_deleteDelete a calendar event1 paramsDelete a calendar event
eventIdstringcalendar_set_publicMake this identity's calendar public or private. Public calendars are viewable at /identities/:id/calendar.json1 paramsMake this identity's calendar public or private. Public calendars are viewable at /identities/:id/calendar.json
enabledbooleanpayments_payPay for an x402-priced URL in USDC under this identity's active mandate. Returns the resource content plus cost, balance, and mandate progress. Use dryRun:true to preview without spending.2 paramsPay for an x402-priced URL in USDC under this identity's active mandate. Returns the resource content plus cost, balance, and mandate progress. Use dryRun:true to preview without spending.
urlstringdryRunbooleanpayments_mandates_createCreate the spend policy for this identity's wallet. Installs an on-chain session key — first call takes 10–30 seconds. If the returned `installError` is set, the mandate is unusable and creation should be retried.3 paramsCreate the spend policy for this identity's wallet. Installs an on-chain session key — first call takes 10–30 seconds. If the returned `installError` is set, the mandate is unusable and creation should be retried.
validUntilstringdailyCapUsdcstringmaxPerCallUsdcstringpayments_mandates_listList spend mandates attached to this identity's wallet — active, expired, revoked, and errored, latest first.List spend mandates attached to this identity's wallet — active, expired, revoked, and errored, latest first.
No parameter schema in public metadata yet.
payments_mandates_getFetch one mandate by id, with live spend counters.1 paramsFetch one mandate by id, with live spend counters.
mandateIdstringpayments_mandates_revokeRevoke a mandate. The on-chain session key is not uninstalled (manual via Console if needed); settled payments are unaffected.1 paramsRevoke a mandate. The on-chain session key is not uninstalled (manual via Console if needed); settled payments are unaffected.
mandateIdstringpayments_activityBank-statement-style merged feed of payments sent (direction: 'out') and received (direction: 'in') for this identity, latest first.1 paramsBank-statement-style merged feed of payments sent (direction: 'out') and received (direction: 'in') for this identity, latest first.
limitinteger7 MCP servers giving AI agents direct, local access to the Verus blockchain — 49 tools, zero cloud dependencies. No API keys. No accounts. No intermediary between the agent and the chain.
Works with Claude Code, Cursor, and any MCP-compatible client.
Prerequisites: a running Verus daemon and Node.js 18+.
Add the foundation server to your MCP client config:
{
"mcpServers": {
"verusidx-chain": {
"command": "npx",
"args": ["-y", "@verusidx/chain-mcp"]
}
}
}
Then tell your AI to call refresh_chains — it discovers your local daemons automatically. That's it.
No separate install step — npx fetches and runs the package on demand. Add more servers as you need them (see below).
| Package | Tools | Purpose |
|---|---|---|
@verusidx/chain-mcp | 11 | Foundation — chain discovery, daemon management, health checks, currency lookup, raw transactions, RPC help |
@verusidx/identity-mcp | 11 | Create, manage, and query VerusIDs |
@verusidx/send-mcp | 8 | Send, convert, and transfer currency; check balances and conversions |
@verusidx/data-mcp | 7 | Retrieve, decrypt, sign, and verify on-chain data; manage viewing keys |
@verusidx/address-mcp | 6 | Generate, validate, and list transparent and shielded addresses |
@verusidx/marketplace-mcp | 5 | On-chain offers and trades |
@verusidx/definecurrency-mcp | 1 | Define and launch new currencies |
chain-mcp is the foundation. It discovers running daemons and writes a registry file that all other servers read. Install it first. Every tool requires a chain parameter (e.g., "VRSC", "vrsctest") — there is no default chain.
Each server is independent — add or remove without affecting the others:
{
"mcpServers": {
"verusidx-chain": {
"command": "npx",
"args": ["-y", "@verusidx/chain-mcp"]
},
"verusidx-identity": {
"command": "npx",
"args": ["-y", "@verusidx/identity-mcp"]
},
"verusidx-send": {
"command": "npx",
"args": ["-y", "@verusidx/send-mcp"]
},
"verusidx-data": {
"command": "npx",
"args": ["-y", "@verusidx/data-mcp"]
}
}
}
Same pattern for @verusidx/address-mcp, @verusidx/marketplace-mcp, and @verusidx/definecurrency-mcp. See each package's README for details.
Giving an AI agent access to a wallet has real consequences. These servers are designed with that in mind.
| Feature | How it works |
|---|---|
| Read-only mode | Set VERUSIDX_READ_ONLY=true per-server — write tools aren't just disabled, they're not registered. The AI can't see or attempt them. |
| Spending limits | Per-currency caps in spending-limits.json, enforced before the RPC call reaches the daemon. Default: 10 VRSC per transaction. |
| Audit logging | Every write operation logged to date-stamped, append-only JSONL files with 0600 permissions. |
| No new attack surface | Credentials read from the daemon's own .conf file. No cloud storage. No env vars with passwords. |
| Minimal dependencies | Shared library has zero runtime deps. MCP servers depend on exactly 2 packages: @modelcontextprotocol/sdk and zod. |
AI Client (Claude Code, Cursor, etc.)
|
| stdio (local process, no network)
v
verusidx MCP servers (7 servers, 49 tools)
|
| JSON-RPC over localhost
v
verusd (your local Verus daemon)
@verusidx/shared) — registry reader, RPC client with credential caching, error normalization, audit logging, spending limits, read-only guard. Zero runtime dependencies.chains.json written atomically by chain-mcp, read by all other servers via stat()-based cache invalidation.Environment variables you can set (optional):
| Variable | Applies to | Description |
|---|---|---|
VERUSIDX_READ_ONLY | All servers | true to disable write tools. Set per-server for fine-grained control. |
VERUSIDX_AUDIT_LOG | All servers | false to disable audit logging (default: enabled) |
VERUSIDX_AUDIT_DIR | All servers | Custom audit log directory |
VERUSIDX_SPENDING_LIMITS_PATH | All servers | Custom path to spending-limits.json |
VERUSIDX_DATA_DIR | chain-mcp | Override the chain data directory for discovery |
VERUSIDX_EXTRA_CHAINS | chain-mcp | Add remote daemons. Format: name:host:port:user:pass, comma-separated |
VERUSIDX_BIN_PATH | chain-mcp | Directory containing the verusd binary (if not on PATH) |
Servers that send funds (send-mcp, marketplace-mcp) enforce per-currency spending limits. A default spending-limits.json is created automatically on first run:
{
"VRSC": 10
}
This caps any single sendcurrency call at 10 VRSC. To adjust limits, edit the file at:
~/Library/Application Support/verusidx-mcp/spending-limits.json~/.config/verusidx-mcp/spending-limits.json%APPDATA%\verusidx-mcp\spending-limits.jsonAdd entries for any currency: { "VRSC": 100, "Bridge.vETH": 0.5 }. Currency names are case-insensitive.
# Prerequisites: Node.js >= 18, pnpm
pnpm install
pnpm -r build # build all packages
pnpm -r test # test all packages
# Build a specific server and its dependencies
pnpm --filter @verusidx/chain-mcp... build
verusidx-mcp/
├── packages/
│ ├── shared/ # @verusidx/shared — internal library
│ ├── chain/ # @verusidx/chain-mcp — foundation server
│ ├── identity/ # @verusidx/identity-mcp
│ ├── send/ # @verusidx/send-mcp
│ ├── data/ # @verusidx/data-mcp
│ ├── definecurrency/ # @verusidx/definecurrency-mcp
│ ├── marketplace/ # @verusidx/marketplace-mcp
│ └── address/ # @verusidx/address-mcp
└── tool-specs/ # Agent-facing tool description specs
fetch)@modelcontextprotocol/sdk and zodonlyBuiltDependencies: [] blocks dependency install scripts.conf files — never stored by the MCP serversVerus is an open-source, fair-launch blockchain — no ICO, no premine, no VC funding. Running since 2018 with hybrid PoW/PoS consensus and a CPU-mineable hash algorithm (VerusHash 2.2).
There are no smart contracts. Identity, data storage, DeFi conversions, atomic swaps, privacy (Sapling zk-proofs), and cross-chain bridges (PBaaS) are all consensus-level protocol features. For AI agents that need to transact reliably, protocol-level guarantees beat contract-level ones.