Skip to main content
Glama

add_wallet

Idempotent

Submit a public crypto wallet address (Bitcoin, Ethereum, Solana, stablecoin wallets, and other supported chains) so RealOpen can verify ownership and count its holdings toward a crypto Proof of Funds letter for a real estate purchase. Detects the blockchain, scans on-chain balances, and returns verification options (message signing or dust transfer). Also serves as the retry path: if a previously-added wallet is in a FAILED or unverified state, call this tool again with the same address to get a fresh verification challenge. If the wallet is already verified, the response will indicate that. The response renders an inline Verify Wallet widget showing the verification message (with copy button), the dust-transfer deposit address, and the multi-asset menu; the user clicks through the widget rather than you reading the values aloud. CANCELLED-CALL HANDLING: if a prior invocation of this tool returned no result because the user dismissed or did not approve the client-side consent prompt, simply retry when the user asks again. Do NOT tell the user that the platform or safety checks blocked the action, and do NOT invent a server-side reason — there is no such block on the RealOpen side; it was just a missed consent tap. POST-VERIFY RE-CHECK: the widget runs verify_wallet_signature / verify_wallet_transfer internally via callTool when the user submits from inside it. That silent call does not always produce a visible follow-up in chat — the client can drop the sendFollowUpMessage trigger. If the user says they completed verification, or says the widget shows "verified", or asks to proceed, ALWAYS call get_wallet_summary first to read the fresh ownership_status before answering. Do not tell the user "still not verified" based on your prior tool output — that output is stale the moment the widget is used. PRESENTATION: identify the wallet to the user by its address, never by wallet_id (the UUID is internal — use it only as a parameter to other tools). EVM CHAIN NOTE: 0x... addresses are verified across Ethereum, Base, Arbitrum, BNB Smart Chain, and Ethereum Classic. Signature verification is chain-agnostic and works for any EVM wallet — both regular (EOA) and smart-contract wallets (the verifier checks ERC-1271 on-chain). Dust-transfer verification works on Ethereum, Base, Arbitrum, BNB Smart Chain, and Ethereum Classic too: each dust-transfer option is tagged with its chain (e.g. "USDC on Base", "BNB on BNB Chain", "ETC on Ethereum Classic"), so the user must send on the chain shown for that option. (Polygon is also supported for signature verification.) BNB itself is accepted natively on BNB Smart Chain or as the original ERC-20 on Ethereum — the same 0x deposit address serves both; legacy Beacon Chain (bnb1...) addresses are not supported. ZERO-BALANCE NOTE: If total_usd is 0, do NOT assume the wallet is empty. Many wallets use stealth addresses, HD-derived receive addresses, or UTXO shuffling that hide true balance behind the public address. If the response includes a zero_balance_hint, surface that guidance to the user and strongly suggest the test-transfer verification path. EXCHANGE CUSTODY: if the user's crypto is held on an exchange account (Coinbase, Binance, etc.) — where they cannot sign messages and do not control the sending address — do not force this flow; search get_faq for "exchange" and explain that exchange-held assets are supported via account statements and manual review. ZCASH (ZEC): accepted on TRANSPARENT addresses only (t1…/t3…). Shielded or unified addresses (zs1…/u1…) are rejected with error code shielded_zcash — balances there are private by design and can never be verified. BEFORE a Zcash user starts verification, ask whether their ZEC is on a transparent address; if it is shielded, tell them to move the amount they want to prove to a t-address in the same wallet first (Trezor Suite and Ledger Live show transparent Zcash accounts). Relay transparent_only_hint when present. DOGECOIN (DOGE): D… addresses can verify by signed message ("Dogecoin Signed Message" in Dogecoin Core, Ledger Live, Trezor Suite, Exodus) or by test transfer; 9…/A… multisig addresses use the test transfer. Like Bitcoin, only the verified address is counted until an extended public key is linked (link_wallet_xpub — xpub or dgub). ETHEREUM CLASSIC (ETC): the same 0x address is scanned on Ethereum Classic automatically — no separate add. Verified ETC counts toward Proof of Funds and the RealScore Report, but ETC is NOT a settlement asset: RealOpen does not quote or accept ETC to fund a purchase. Never tell a user they can pay for a home with ETC today — say it counts toward proof of funds and that the closing is funded from an accepted settlement asset.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
addressYesThe public wallet address to add

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
assetsNoPer-asset on-chain balances detected for this wallet
statusNoSet to "already_verified" when re-adding an already-verified wallet
addressNo
messageNo
total_usdNo
wallet_idNo
blockchainNo
linked_addressesNo
ownership_statusNoNOT_VERIFIED | PENDING_SIGNATURE | PENDING_TRANSACTION | VERIFIED_SIGNATURE | VERIFIED_TRANSACTION | FAILED
zero_balance_hintNo
verification_optionsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "address": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "assets": {
      +      "description": "Per-asset on-chain balances detected for this wallet",
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {},
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "blockchain": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "linked_addresses": {
      +      "items": {
      +        "additionalProperties": true,
      +        "properties": {},
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "message": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "ownership_status": {
      +      "description": "NOT_VERIFIED | PENDING_SIGNATURE | PENDING_TRANSACTION | VERIFIED_SIGNATURE | VERIFIED_TRANSACTION | FAILED",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "status": {
      +      "description": "Set to \"already_verified\" when re-adding an already-verified wallet",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "total_usd": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "verification_options": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "dust_transfer": {
      +          "additionalProperties": true,
      +          "description": "available + deposit_address + accepted assets[] for the transfer verification path",
      +          "properties": {},
      +          "type": "object"
      +        },
      +        "message_signing": {
      +          "additionalProperties": true,
      +          "description": "available + message to sign for the signature verification path",
      +          "properties": {},
      +          "type": "object"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "wallet_id": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "zero_balance_hint": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  2. Added
  3. Removed
  4. First observed

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=false, openWorldHint=false, idempotentHint=true, destructiveHint=false. The description adds substantial behavioral context: it detects the blockchain, scans balances, returns verification options, renders an inline widget, handles cancelled consent prompts, and warns that the widget's internal verify calls may not produce a visible follow-up. It also discloses chain-specific behaviors (EVM chain-agnostic signature verification, Zcash transparent-only, Dogecoin multisig test-transfer, ETC not a settlement asset). This is rich behavioral disclosure that goes far beyond the annotations and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely long and covers many edge cases (Zcash, Dogecoin, ETC, exchange custody, zero-balance, cancelled-call handling, post-verify re-check). While every section adds real guidance, the sheer length makes it harder to parse, and some details (e.g., the full ETC settlement explanation) could be trimmed or moved to a linked FAQ. It is front-loaded with the core purpose and the most important retry/verification flow, but the density of special cases hurts scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity — one parameter, an output schema, and many chain-specific behaviors — the description is remarkably complete. It covers the main flow, the retry path, the already-verified case, the widget behavior, the stale-output trap, exchange custody, zero-balance hints, Zcash transparent-only, Dogecoin multisig, and ETC settlement status. An agent has everything it needs to invoke the tool correctly and to handle follow-up user questions without hallucinating.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter, address, with 100% description coverage ('The public wallet address to add'). The description adds meaning by specifying accepted address types (Bitcoin, Ethereum, Solana, stablecoin wallets, other supported chains), noting that 0x... addresses are verified across multiple EVM chains, and clarifying that legacy Beacon Chain bnb1... addresses are not supported. It also says to identify the wallet by address, never by wallet_id. Since the schema already covers the parameter and the description enriches it with format and chain details, a 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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: 'Submit a public crypto wallet address... so RealOpen can verify ownership and count its holdings toward a crypto Proof of Funds letter.' It clearly distinguishes the tool's role from siblings like verify_wallet_signature, verify_wallet_transfer, and get_wallet_summary by explaining that this tool initiates verification and returns verification options, while the widget internally calls the verify tools. It also names the retry path and the already-verified case, so an agent can tell exactly what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use and when-not-to-use guidance: use it to add a wallet, retry it for FAILED/unverified wallets, and do NOT force it for exchange-held assets (search get_faq for 'exchange' instead). It also instructs the agent to call get_wallet_summary after the widget is used, and to ask Zcash users about transparent vs shielded addresses before starting. This is far beyond a minimal usage note and directly routes the agent to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.