Skip to main content
Glama

Server Details

Verify crypto wallets and generate proof of funds letters for buying real estate with crypto.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 78 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
realopengroup/mcp-server
GitHub Stars
0
Server Listing
RealOpen MCP Server
ChatGPT
–
Claude
–

TDQS

A4.1/5.0

Scored across 26 tools

Disambiguation4/5

Most tools target clearly distinct resources or actions, and descriptions explicitly separate get_account_status from get_wallet_summary and clarify the two verification methods. However, add_wallet doubles as a retry path that overlaps refresh_wallet_verification, and get_started, get_account_status, open_realopen, and open_buying_power_panel all surface 'next step' or panel guidance, creating some boundary ambiguity.

Naming Consistency4/5

The set follows a consistent snake_case verb_noun pattern (add_wallet, verify_wallet_signature, generate_proof_of_funds, refresh_wallet_balance). Minor deviations like logout, get_started, and get_how_it_works break the noun pattern slightly but remain readable and predictable.

Tool Count3/5

At 26 tools the surface is heavy for a consumer crypto real-estate workflow, even though most tools serve distinct functions. The knowledge tools (get_faq, get_how_it_works, get_fee_structure, get_service_areas, get_supported_crypto), marketing tools, and panel openers could be consolidated without losing capability.

Completeness4/5

The core lifecycle is well covered: add/verify (signature or transfer)/refresh/link xpub/remove wallets, identity verification, buying-power check, Proof of Funds, RealScore report, and supporting knowledge tools. Minor gaps include no way to retrieve or list previously generated documents, no individual wallet detail lookup beyond the summary, and no wallet label/edit operation.

Available Tools

26 tools
add_walletA
Idempotent
Inspect

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.

NameRequiredDescriptionDefault
addressYesThe public wallet address to add

Output Schema

NameRequiredDescription
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

TDQS

A4.8/5.0
Behavior5/5

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

Goes far beyond the annotations: discloses the inline Verify Wallet widget, the consent prompt and cancelled-call behavior, stale tool output after widget use, zero-balance stealth-address caveats, shielded Zcash rejection (shielded_zcash), unsupported legacy BNB addresses, and that ETC counts for proof of funds but is not a settlement asset.

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 purpose is front-loaded and the sections are topically organized, but the description is very long for a one-parameter tool and contains repetitive chain guidance (EVM coverage, Zcash rules) plus prompt-like all-caps instructions that could be trimmed. Much of it earns its place operationally, but it is not concise.

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 open-world multi-chain scope, consent widget, and verification handoff, the description supplies everything an agent needs: return widget behavior, post-verification re-check instructions, custody fallback, and chain-specific caveats. The output schema covers return values, and the description still explains the user-facing rendering appropriately.

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

Parameters5/5

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

Although the schema already documents the single address parameter at 100% coverage, the description adds substantial meaning: EVM 0x addresses work across multiple chains, Zcash requires t1/t3 transparent addresses, Dogecoin D… vs 9…/A… multisig behavior differs, and bnb1 legacy addresses are unsupported.

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?

States a specific verb and resource (submit a public crypto wallet address) and the business purpose (verify ownership and count holdings toward a Proof of Funds letter). It distinguishes itself from siblings like get_wallet_summary, verify_wallet_signature, and verify_wallet_transfer by explaining it creates the verification challenge those tools consume.

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?

Explicitly covers when to use it (new wallet, retry after FAILED/unverified, re-call when already verified), when not to force it (exchange custody), and what to do after widget verification (call get_wallet_summary first). It also gives chain-specific preconditions, such as asking Zcash users about transparent addresses before starting.

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

check_buying_powerCheck Crypto Buying PowerA
Read-onlyIdempotent
Inspect

Checks whether the user's VERIFIED crypto appears to cover a property price. Compares target_price_usd against verified buying power (the most a Proof of Funds letter can state, from verified wallets only) and lists what is still incomplete: identity check, wallet verification, or a shortfall. Optionally narrows to one asset. Use for "can my Bitcoin cover a $2 million home?" and before generating a Proof of Funds letter for a specific amount. Unverified wallets never count. This is an estimate of coverage, not a loan decision. Read-only: it does not move, sell, convert, or reserve any crypto.

NameRequiredDescriptionDefault
assetNoLimit the check to one crypto asset, as a ticker or name (BTC, Bitcoin, ZEC)
target_price_usdNoProperty price or Proof of Funds amount in US dollars. Omit to use the saved price, or to just report verified buying power.

Output Schema

NameRequiredDescription
introYesShort introduction shown while onboarding is under way; null once it is complete
linksYesExisting realopen.com pages for each step
intentYesWorkflow this request asked for, if any
accountYes
contextYes
noticesYes
summaryYesShort plain-language summary. Lead with this; it reads well aloud.
surfaceYeshome | panel | inline
unlocksYesWhat verification makes available, shown before there are results
versionYes
walletsYes
identityYes
progressYes
assessmentYes
input_errorNoPresent when a supplied value could not be used
next_actionYesThe one recommended next step
buying_powerYes
authenticatedYes
proof_of_fundsYes
blocked_requestNoPresent when the user asked for something these tools cannot do
realscore_reportYesThe asset verification document for a mortgage lender. Not a loan decision.
results_availableYesTrue once there is buying power or a letter to show
secondary_actionsYesThings the user can also do now, such as continuing a wallet while an identity check is reviewed
verification_guideNoHow wallet verification works for the chosen asset

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly or idempotent annotations, it explicitly says it does not move, sell, convert, or reserve crypto, that unverified wallets never count, and that the result is a coverage estimate rather than a loan decision. It also says the response lists which requirements are still incomplete, which the annotations do not reveal.

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

Conciseness4/5

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

The core comparison is front-loaded, followed by what the check returns and the usage examples. It is dense but almost every clause adds either scope, a usage trigger, or a safety boundary; the caveat sentences could be tightened slightly.

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?

The description covers the input intent, the verification prerequisite, the kinds of gaps the response reports, and the read-only safety profile, while an output schema already documents the return values. Nothing an agent needs in order to call this tool correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already fully documented, including the omit-to-use-saved-price behavior. The description confirms that asset narrows the check to one asset and that the target amount is compared against verified buying power, but adds little beyond the schema apart from intent.

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 states a specific verb and resource: it compares target_price_usd against verified buying power and reports remaining gaps (identity check, wallet verification, shortfall). It also separates itself from generate_proof_of_funds by positioning this check as the step before that letter is produced.

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

Usage Guidelines4/5

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

It gives concrete triggers — the "can my Bitcoin cover a $2 million home?" question and pre-Proof-of-Funds checks — and notes that the wallet must be verified. It never names an explicit alternative to use instead (for example, the UI-oriented open_buying_power_panel or generate_proof_of_funds itself), so the routing guidance stops short of full coverage.

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

generate_proof_of_fundsAInspect

Generate a crypto Proof of Funds letter (PDF) for the authenticated user — the document a buyer attaches to a cash offer on real estate to show verified crypto holdings; it states a fiat amount with no crypto references, so it reads like any other cash-buyer Proof of Funds (optional on a financed offer, where the lender's preapproval backs the offer). Requires completed identity verification and at least one verified wallet. Returns a download link valid for 30 days. This creates a letter only — it does not move, convert, or reserve any funds; the purchase itself is funded through RealOpen outside this chat. The response renders an inline widget with a thumbnail preview and download/share controls; you do not need to repeat the download URL in your text response — the widget handles presentation. CANCELLED-CALL HANDLING: if a prior invocation 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 the POF was generated unless this tool actually returned a download_url — if the response is empty or missing, the call did not land and should be retried, not reported as complete. CEILING: the requested amount must be ≤ pof_ceiling_usd from get_wallet_summary; never use total_verified_usd or the sum of wallets[].total_usd as a ceiling — total_verified_usd is pre-haircut (before a volatility/pricing buffer) and the generator will reject amounts above the true ceiling. If unsure of the current ceiling, call get_wallet_summary first.

NameRequiredDescriptionDefault
amountYesRequested Proof of Funds amount
currencyNoCurrency for the letter (default: USD)USD

Output Schema

NameRequiredDescription
amountYes
statusYesready when the letter generated successfully
currencyYes
file_nameNo
valid_untilNoISO date — letter expires after 30 days
download_urlYesPDF download URL — handed to the widget; the model should not echo it
thumbnail_urlYesTop-of-letter PDF preview image URL — used by the widget

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false) by clarifying the tool creates a letter only and does not move, convert, or reserve funds, that the download link is valid for 30 days, that an inline widget renders, and that cancelled/failed calls should be retried rather than reported as success. The ceiling-rejection behavior and the warning against using total_verified_usd are exactly the non-obvious traits an agent needs.

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

Conciseness4/5

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

Purpose is front-loaded and the ALL-CAPS section labels (CANCELLED-CALL HANDLING, CEILING) make the critical operational guidance scannable. It is longer than ideal — the widget/download-URL passage and the financed-offer aside could be trimmed — but nearly every sentence carries distinct information.

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?

An output schema exists and the description still names the key return value (download_url), which is what the agent must check before telling the user the POF was generated. With prerequisites, ceiling rule, fund-safety disclosure, and retry semantics all covered, nothing an agent needs to invoke or report this tool correctly is missing.

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?

Schema coverage is 100%, so the baseline is 3; the description earns above that by giving real semantic constraints on amount: it must be ≤ pof_ceiling_usd from get_wallet_summary, and it explains why total_verified_usd is not a valid ceiling because it is pre-haircut. Currency is left to the schema, which handles it adequately via the enum.

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?

States a specific verb+resource+artifact: generate a crypto Proof of Funds letter PDF for the authenticated user, with a clear explanation of what the document is and what it omits (no crypto references). This is unmistakably distinct from siblings like get_wallet_summary or generate_realscore_report.

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?

Explicitly frames when this applies (cash offer on real estate, optional on financed offers) and states prerequisites: completed identity verification and at least one verified wallet. It also routes to get_wallet_summary when the ceiling is unknown, which is a concrete alternative-call instruction.

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

generate_realscore_reportGet RealScore ReportA
Idempotent
Inspect

Creates the user's RealScore Report: the asset verification document a buyer gives a mortgage lender when the down payment or reserves come from crypto. It covers identity, every verified wallet, current holdings, balance history and RealOpen's conversion adjustment, in one PDF with a public document id the lender can check. Requires a verified identity and at least one verified wallet; otherwise it returns what is missing. Returns a private download link valid for 30 days; each request creates a new report at current values (a repeat within a few minutes returns the same one). It is not a loan decision, pre-approval or qualification, and it does not move, convert, or reserve any crypto.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
doc_idYesPublic document id printed on the report (RS-…)
reusedYesTrue when a report created in the last few minutes was returned instead of a new one
statusYesready when the report is available
report_idYes
verify_urlYesPage where a lender can check the document id
valid_untilYesYYYY-MM-DD; the link stops working after this
download_urlYesPrivate PDF link for the user; do not repeat it in chat
generated_atYesWhen the report was created (ISO)
wallet_countYesHow many verified wallets the report covers
lookback_daysYesLength of the balance history window
thumbnail_urlYesPrivate preview image of the first page, shown by the app; do not repeat it in chat

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: states preconditions and that it reports what is missing, discloses the 30-day private download link, explains that each call regenerates at current values while a repeat within minutes returns the same report (matching idempotentHint=true), and draws explicit scope boundaries (not a loan decision/pre-approval, does not move, convert, or reserve crypto). This is the kind of operational and safety context annotations cannot carry.

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

Conciseness4/5

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

Front-loads what the report is, then prerequisites, then return behavior, then limits — a sensible information hierarchy. The prose is dense with no filler sentences, though it is on the longer side for a no-parameter call.

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?

An output schema exists and the description still covers preconditions, regeneration/idempotency nuance, link lifetime, and explicit non-goals. Nothing an agent needs to decide whether and how to call this tool is missing.

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 tool takes zero parameters, so per the rubric the baseline is 4. The description adds no parameter discussion, which is appropriate since there is nothing to document and the schema is empty.

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

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Creates the user's RealScore Report') and then defines precisely what the artifact is and contains (identity, verified wallets, holdings, balance history, conversion adjustment). An agent can tell what it produces without opening the schema. It never names the closest sibling, generate_proof_of_funds, so explicit sibling differentiation is missing.

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

Usage Guidelines4/5

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

Gives clear triggering context ('the asset verification document a buyer gives a mortgage lender when the down payment or reserves come from crypto') plus hard prerequisites (verified identity, at least one verified wallet). What is absent is any when-to-use-this-vs-that guidance relative to generate_proof_of_funds or the other wallet/verification tools.

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

get_account_statusA
Read-onlyIdempotent
Inspect

Returns a high-level account overview of where the user stands in getting ready to buy real estate with crypto: identity verification state, wallet count (not individual wallet details), and Proof of Funds eligibility. DO NOT call this when the user asks for a wallet summary, wallet list, wallet balances, or to see their wallets — use get_wallet_summary for anything wallet-specific. This tool is for answering "is my account ready?"-style questions and for resuming setup: the response includes activation.next_action — the single correct next step for this user's state. The response renders an inline progress widget (checklist + one next-step CTA); keep your text to a short summary and let the widget carry the presentation.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
pofNo
emailNo
user_idNo
walletsNoAggregate wallet counts. For per-wallet details, call get_wallet_summary.
last_nameNo
activationNoProgress + next-step routing resolved from the account state. Follow next_action rather than re-deriving the step order. Fully-activated users get a "generate another POF / wallet summary" action, never an onboarding CTA.
first_nameNo
account_hintNoPresent only for brand-new/empty accounts — if the user expected existing RealOpen data, surface this guidance (they may have connected with a different email than their realopen.com account)
identity_verificationNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: the response includes activation.next_action and renders an inline progress widget, with an instruction to keep accompanying text short. A small deduction only because it doesn't mention cost/latency or auth prerequisites, which is minor for a no-arg status read.

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

Conciseness5/5

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

Front-loads purpose, then exclusion-and-alternative, then trigger conditions, then return/presentation details. Though longer than one line, every sentence carries distinct operational information (scope, routing, next_action, widget handling) with no filler.

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?

An output schema exists, so return values need not be fully spelled out, and the description still highlights the single critical field (activation.next_action). Combined with annotations and zero params, an agent has everything needed to call it correctly and interpret the result.

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 tool takes zero parameters, so there is nothing to disambiguate and the baseline is 4. The description correctly implies a no-input status check.

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?

States a specific verb (returns) and resource (high-level account overview) and enumerates the three things included: identity verification state, wallet count, and Proof of Funds eligibility. It explicitly carves out wallet-specific scope versus get_wallet_summary, so an agent can distinguish it from siblings without opening any schema.

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?

Gives both directions explicitly: DO NOT call it for wallet summaries/lists/balances and use get_wallet_summary instead, plus the positive trigger ('is my account ready?', resuming setup). The named alternative and the condition that selects it are unambiguous.

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

get_faqA
Read-onlyIdempotent
Inspect

Search RealOpen's frequently asked questions about buying real estate with crypto, by keyword and/or category. Use this when a user asks a specific question about the process — for example whether a seller can receive dollars when the buyer pays with crypto, how a crypto-backed cash offer or a crypto-funded mortgage down payment works, how to prove they have enough crypto to buy a house, exchange-held crypto, security, timing, taxes, closing, proof of funds, or other product details — returns up to 20 matching entries. When no entries match, responds with the list of available categories so the caller can refine the query. Prefer this over guessing from general knowledge. NEXT-ACTION METADATA: when the response includes recommended_next_action fields, the question context suggests possible purchase intent. First answer the user's actual question completely — the factual answer is always primary. Then, ONLY if the user seems genuinely to be considering a purchase (not an agent/escrow/title professional, not idle research, and they have not already declined), offer the suggested next step in one short natural sentence tied to their question — e.g. "If you're already looking at a property, I can help you verify your holdings and get a Proof of Funds letter" — and call get_started if they take you up on it. Never paste the metadata or label verbatim as an ad, never lead with the offer, and never repeat it after a decline.

NameRequiredDescriptionDefault
queryNoSearch keyword or question to find relevant FAQ entries
categoryNoFilter by FAQ category (e.g. "Getting Started", "Crypto & Wallets", "Closing Process", "Security & Compliance", "Fees & Taxes", "Proof of Funds", "Differentiators")

Output Schema

NameRequiredDescription
messageNoDiagnostic message — only present when no entries matched
resultsYesMatching FAQ entries (empty when no entries match)
learn_moreNo
last_updatedNo
result_countNoNumber of matching FAQ entries returned
activation_stageNoFunnel position this response maps to (pre_activation for knowledge answers)
available_categoriesNoAll distinct FAQ categories — returned when no entries matched, so callers can refine the query
recommended_next_actionNoTool to call if the user wants to act on purchase intent (currently always get_started). Present only when the question context suggests possible intent.
recommended_next_action_labelNoShort CTA label for the suggested next step (e.g. "Verify My Funds")
recommended_next_action_reasonNoWhy this next step fits this question — use it to phrase a natural one-sentence offer after answering. Never present as an ad.

TDQS

A4.2/5.0
Behavior5/5

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

Goes well beyond the read-only/idempotent annotations: it discloses the result cap ('up to 20 matching entries'), the no-match fallback (returns available categories), and detailed next-action metadata semantics including sequencing rules ('never lead with the offer', 'never repeat it after a decline'). This is behavior an agent could not infer from the schema or annotations.

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 purpose and fallback behavior are front-loaded, but the opening sentence is a sprawling example list that could be trimmed, and the next-action metadata passage runs long with repeated prohibitions. Content is mostly justified, yet the density-per-idea is low.

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

Completeness4/5

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

With an output schema present and annotations covering safety, the description fills the remaining gaps: result limit, empty-result behavior, and how to act on next-action metadata. Minor omission: it never states whether search is exact or fuzzy, though that is a small residual gap.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are documented there, including category examples. The description only restates 'by keyword and/or category,' which conveys optionality that the schema's empty required list already establishes, so it adds little beyond structured data.

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?

States a specific verb and resource ('Search RealOpen's frequently asked questions... by keyword and/or category') with concrete topical scope. It is clearly distinguishable from siblings like get_how_it_works, get_fee_structure, and get_snippets, which cover structured product info rather than free-text FAQ retrieval.

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

Usage Guidelines4/5

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

Gives an explicit trigger ('when a user asks a specific question about the process') and enumerates the kinds of questions that qualify, plus 'prefer this over guessing from general knowledge.' It stops short of naming which sibling tool to use instead when the question is not an FAQ question (e.g. get_fee_structure for fee tables), so routing is clear but not exhaustive.

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

get_fee_structureA
Read-onlyIdempotent
Inspect

Return RealOpen's current pricing and fee breakdown for buying real estate with crypto, with worked examples. Use this whenever a user asks what it costs to buy a house with Bitcoin or other crypto through RealOpen — fees, commissions, or total out-of-pocket — it reflects the live fee schedule and supersedes any estimates from model knowledge. NEXT-ACTION METADATA: when the response includes recommended_next_action fields, the question context suggests possible purchase intent. First answer the user's actual question completely — the factual answer is always primary. Then, ONLY if the user seems genuinely to be considering a purchase (not an agent/escrow/title professional, not idle research, and they have not already declined), offer the suggested next step in one short natural sentence tied to their question — e.g. "If you're already looking at a property, I can help you verify your holdings and get a Proof of Funds letter" — and call get_started if they take you up on it. Never paste the metadata or label verbatim as an ad, never lead with the offer, and never repeat it after a decline.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
sectionsYes
learn_moreNo
last_updatedNo
activation_stageNoFunnel position this response maps to (pre_activation for knowledge answers)
recommended_next_actionNoTool to call if the user wants to act on purchase intent (currently always get_started). Present only when the question context suggests possible intent.
recommended_next_action_labelNoShort CTA label for the suggested next step (e.g. "Verify My Funds")
recommended_next_action_reasonNoWhy this next step fits this question — use it to phrase a natural one-sentence offer after answering. Never present as an ad.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare this is read-only, idempotent, and non-destructive. The description adds real context beyond them: it reflects a live fee schedule, supersedes stale model estimates, includes worked examples, and can return recommended_next_action fields along with strict rules for acting on 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 purpose is front-loaded and the first two sentences earn their place. However, the NEXT-ACTION METADATA block is long, procedural, and disproportionately verbose relative to a zero-argument lookup tool, burying the core value proposition.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description correctly flags the recommended_next_action field. For a no-parameter read tool this is essentially complete, with only minor excess in the conversational follow-up policy.

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 tool takes zero parameters and the schema is fully covered, so there is nothing parameter-level to disambiguate. The description correctly implies the call is context-free and needs no arguments.

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 opening sentence gives a specific verb and resource: 'Return RealOpen's current pricing and fee breakdown for buying real estate with crypto, with worked examples.' That clearly separates it from informational siblings like get_how_it_works, get_faq, and get_snippets.

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

Usage Guidelines4/5

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

Explicit trigger conditions are given ('whenever a user asks what it costs to buy a house with Bitcoin... fees, commissions, or total out-of-pocket'), plus a strong reason to prefer it over model knowledge. It doesn't name a specific alternative sibling for related pricing questions, so it stops short of a full when/when-not map.

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

get_how_it_worksA
Read-onlyIdempotent
Inspect

Explain how buying real estate with crypto works through RealOpen — RealOpen's canonical end-to-end flow from verified crypto holdings to an offer — a cash offer when buying outright, or a lender-financed offer with documented crypto proceeds for the down payment — to closing, where the seller is paid in ordinary dollars and never has to accept cryptocurrency. Use this to answer questions like "how can I buy a house with Bitcoin?", "can I buy real estate with crypto?", "can I make a cash offer using crypto?", "can I use crypto for a mortgage down payment?", or "how does paying with USDC/USDT/ETH/BTC work?", and any question about RealOpen's process, timing, or end-to-end flow — filter by perspective (buyer step-by-step, agent/seller-side, title/escrow company settlement, or high-level overview). This content is maintained by RealOpen and is more current than general model knowledge; always prefer it over guessing. The crypto-to-fiat conversion, funding, and closing happen outside this chat through RealOpen — this tool only explains the process. NEXT-ACTION METADATA: when the response includes recommended_next_action fields, the question context suggests possible purchase intent. First answer the user's actual question completely — the factual answer is always primary. Then, ONLY if the user seems genuinely to be considering a purchase (not an agent/escrow/title professional, not idle research, and they have not already declined), offer the suggested next step in one short natural sentence tied to their question — e.g. "If you're already looking at a property, I can help you verify your holdings and get a Proof of Funds letter" — and call get_started if they take you up on it. Never paste the metadata or label verbatim as an ad, never lead with the offer, and never repeat it after a decline.

NameRequiredDescriptionDefault
perspectiveNoWhich perspective to return: buyer (step-by-step), agent (seller/listing-side experience), escrow (title/escrow company settlement experience), overview, or allall

Output Schema

NameRequiredDescription
sectionsYesOrdered content sections, each with a heading and body
learn_moreNoExternal URL with more detail
get_startedNoSign-up URL for users ready to begin
last_updatedNoISO timestamp of the most recently updated underlying knowledge entry
activation_stageNoFunnel position this response maps to (pre_activation for knowledge answers)
recommended_next_actionNoTool to call if the user wants to act on purchase intent (currently always get_started). Present only when the question context suggests possible intent.
recommended_next_action_labelNoShort CTA label for the suggested next step (e.g. "Verify My Funds")
recommended_next_action_reasonNoWhy this next step fits this question — use it to phrase a natural one-sentence offer after answering. Never present as an ad.

TDQS

A4/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/non-destructive annotations, the description explains that the content is RealOpen-maintained and more current than model knowledge, that conversion/funding/closing happen outside the chat, and that the tool only explains the process. It also discloses recommended_next_action behavior and how to handle possible purchase intent, which is substantial context not present in 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.

Conciseness2/5

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

The purpose is front-loaded, but the description is very long and includes extensive next-action sales guidance that is not needed for selecting or invoking the tool. Much of the latter half does not earn its place in a tool definition.

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?

The tool has an output schema, full schema description coverage, and clear annotations. The description provides enough scope, usage context, and behavioral boundaries for an agent to call it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the single perspective parameter and its enum are already fully documented. The description repeats the perspective meanings and confirms filtering, but adds little semantic value beyond the schema.

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

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: explaining RealOpen's end-to-end crypto real-estate purchase flow, from verified holdings through offer and closing. It is clear about what the tool does, but it does not explicitly name or differentiate itself from close siblings such as get_faq or get_snippets.

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

Usage Guidelines4/5

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

It gives concrete example user questions and says to use it for questions about RealOpen's process, timing, or end-to-end flow, with perspective filtering. It provides strong usage context, but does not explicitly say when another sibling tool 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.

get_service_areasA
Read-onlyIdempotent
Inspect

Return where a buyer can currently use crypto to buy real estate through RealOpen — geographic coverage, supported property types, and international availability. Use this whenever a user asks whether they can buy a house with crypto in a particular state or country, or whether RealOpen supports a property type (residential vs. commercial, primary vs. investment, etc.). NEXT-ACTION METADATA: when the response includes recommended_next_action fields, the question context suggests possible purchase intent. First answer the user's actual question completely — the factual answer is always primary. Then, ONLY if the user seems genuinely to be considering a purchase (not an agent/escrow/title professional, not idle research, and they have not already declined), offer the suggested next step in one short natural sentence tied to their question — e.g. "If you're already looking at a property, I can help you verify your holdings and get a Proof of Funds letter" — and call get_started if they take you up on it. Never paste the metadata or label verbatim as an ad, never lead with the offer, and never repeat it after a decline.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
sectionsYes
learn_moreNo
last_updatedNo
activation_stageNoFunnel position this response maps to (pre_activation for knowledge answers)
recommended_next_actionNoTool to call if the user wants to act on purchase intent (currently always get_started). Present only when the question context suggests possible intent.
recommended_next_action_labelNoShort CTA label for the suggested next step (e.g. "Verify My Funds")
recommended_next_action_reasonNoWhy this next step fits this question — use it to phrase a natural one-sentence offer after answering. Never present as an ad.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely non-obvious behavior: the response carries recommended_next_action metadata tied to purchase intent, and there are stated rules for surfacing it (answer first, one short sentence, never paste verbatim, never repeat after a decline). This is exactly the kind of context structured fields cannot carry.

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

Conciseness4/5

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

The factual purpose is front-loaded in the first sentence and the follow-up policy is explicitly delimited with a 'NEXT-ACTION METADATA' marker. It is on the long side for a zero-argument lookup — the next-action block occupies roughly two-thirds of the text — but each constraint (don't lead with the offer, don't repeat after a decline) is operative rather than filler.

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?

An output schema exists, so return values need not be spelled out, and the annotations carry the safety profile. The description still covers what the tool answers, when to reach for it, and how to act on its metadata, leaving no material gap for an agent calling a no-input lookup.

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?

Zero-parameter tool, so the baseline is 4. The description correctly implies no input is needed by framing the tool as a coverage lookup, and there are no parameters whose meaning needs elaboration.

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?

States a specific verb and resource ('Return where a buyer can currently use crypto to buy real estate') and enumerates the three content dimensions: geographic coverage, supported property types, international availability. This clearly separates it from siblings like get_supported_crypto (which cryptos, not where) and search_assets.

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

Usage Guidelines4/5

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

Explicit triggering conditions are given ('use this whenever a user asks whether they can buy a house with crypto in a particular state or country, or whether RealOpen supports a property type'), plus detailed exclusion criteria for the follow-up offer (not an agent/escrow/title professional, not idle research, not already declined). It stops short of naming a sibling alternative for overlapping questions, but the when-to-use context is otherwise concrete.

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

get_snippetsA
Read-onlyIdempotent
Inspect

Find pre-approved RealOpen social-media snippets — copy-ready posts written by RealOpen's marketing team for twitter, linkedin, instagram, email, or general use. Use this when a user asks for ready-to-post content or needs inspiration grounded in approved brand voice. Filter by platform, tone, tag, attached asset, or keyword. Each snippet includes body text, tags, share title (usable as email subject), and a preview of the associated visual asset when one is attached.

NameRequiredDescriptionDefault
tagsNoFilter by snippet tags (matches ANY)
toneNoFilter by snippet tone
keywordNoFree-text search on snippet text and title
asset_idNoGet snippets tied to a specific asset by ID
platformNoFilter by target platform

Output Schema

NameRequiredDescription
snippetsYesUp to 20 matching snippets (random order to avoid stale top-matches)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds that snippets are pre-approved by marketing and lists the returned fields including body text, tags, share title, and asset preview, which helps set expectations without contradicting 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.

Conciseness4/5

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

The description is four sentences and front-loads the core definition before usage and filter details. The final sentence overlaps with the output schema's coverage of return fields, but it remains short and readable.

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

Completeness4/5

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

Given the rich annotations, a full input schema, and an output schema, the description covers purpose, when to use, filterable dimensions, and return contents. It does not spell out pagination or how multiple filters combine, which are minor gaps for a read-only snippet lookup.

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

Parameters3/5

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

With 100% schema description coverage, the schema already defines each of the five optional filters, including enum values and the tags 'matches ANY' behavior. The description repeats the filter dimensions but adds no syntax, default, or combination semantics beyond the schema.

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 ('Find') and a precisely scoped resource ('pre-approved RealOpen social-media snippets'), then enumerates platform contexts. It clearly distinguishes this lookup from sibling tools like search_assets by focusing on marketing snippet content rather than asset records.

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

Usage Guidelines4/5

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

It gives an explicit usage trigger: 'Use this when a user asks for ready-to-post content or needs inspiration grounded in approved brand voice.' It does not name a 'do not use' case or point to an alternative tool, but the scenario is clear and actionable.

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

get_startedA
Read-onlyIdempotent
Inspect

The front door to buying real estate with crypto through RealOpen — for anyone holding Bitcoin, Ethereum, USDC, USDT, or other crypto who wants to buy a home or other property — outright, with a cash offer backed by a crypto Proof of Funds letter, or with a mortgage and documented crypto proceeds for the down payment. Returns the setup path from a fresh account to a Proof of Funds letter — and, for signed-in users, resolves their ACTUAL next step from live account state (wallet → identity → Proof of Funds; the first two can be done in either order, the letter needs both). Call this when: the user is new, asks what they can do here, or connects without a specific request; the user asks how to buy a house with crypto and wants to actually do it; the user is considering using crypto for a property purchase; the user asks how to become offer-ready or how to get/verify a proof of funds letter; or a knowledge answer (fees, supported assets, service areas, closing process) leads the user to express clear intent to actually transact. Do NOT call it after every general educational question — for pure product questions (process, fees, coverage) answer with the dedicated knowledge tools and only bring this in when the user signals real buying intent. Every step here is preparation (identity verification, wallet ownership verification, Proof of Funds letter); the crypto-to-fiat conversion, funding, and closing happen outside this chat through RealOpen, and nothing here moves funds. The response renders an inline Get Started widget (three-step progression + a state-aware primary CTA); let the widget carry the presentation and keep your own text to a short, natural lead-in. The structured activation.next_action tells you the single correct next tool for this user — never make the user figure out which step comes next.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
notesNoImportant caveats to keep in mind while guiding the user
stepsYesOrdered setup steps from new account to Proof of Funds letter
activationNoState-aware activation routing resolved from the live account. Follow next_action rather than re-deriving the step order.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the description's job is to add context — and it does: it discloses that the response renders an inline Get Started widget, that the primary CTA is state-aware, that activation.next_action dictates the correct follow-up tool, and critically that 'nothing here moves funds' (conversion/funding/closing happen outside chat). That last point is a real behavioral boundary an agent could not infer from annotations.

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

Conciseness4/5

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

Front-loaded correctly — the opening sentence establishes what it is and who it's for before any routing rules. It is dense though: a single long paragraph packing triggers, exclusions, widget behavior, and next_action handling would scan faster as a structured list, and the closing sentence ('never make the user figure out which step comes next') slightly restates the activation.next_action point.

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?

For a zero-parameter, read-only routing/discovery tool with an output schema and full annotation coverage, the description supplies everything an agent needs: entry conditions, exclusions, what the response contains, that a widget handles presentation, how to consume the structured next_action, and the assurance that no funds move. Nothing material is missing.

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?

Zero parameters, so there is nothing for the description to disambiguate and the dimension defaults to the 4 baseline. The description does not need to compensate for anything, but it also earns no bonus for parameter guidance.

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?

Opens with a specific framing ('The front door to buying real estate with crypto through RealOpen') and states precisely what it returns: 'the setup path from a fresh account to a Proof of Funds letter', plus state-aware next-step resolution for signed-in users. This is distinct from the sibling knowledge tools (get_faq, get_how_it_works, get_fee_structure) and from action tools like start_identity_verification or generate_proof_of_funds.

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?

Explicit when-to-call triggers are enumerated (new user, no specific request, buying-intent signal, offer-ready/proof-of-funds questions), and there is an explicit when-NOT clause: 'Do NOT call it after every general educational question — for pure product questions ... answer with the dedicated knowledge tools'. It even names the alternative category, which is exactly what separates this from get_faq/get_how_it_works.

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

get_supported_cryptoA
Read-onlyIdempotent
Inspect

Return the current list of cryptocurrencies, blockchains, and stablecoins a buyer can use to buy real estate through RealOpen — Bitcoin (BTC), Ethereum (ETH), USDC, USDT, and others. Use this to answer "can I buy a house with X?", "can I pay for property with X?", or whenever a user needs the live list of supported tokens and networks. Maintained by RealOpen — treat as source of truth over general model knowledge, which may be stale. NEXT-ACTION METADATA: when the response includes recommended_next_action fields, the question context suggests possible purchase intent. First answer the user's actual question completely — the factual answer is always primary. Then, ONLY if the user seems genuinely to be considering a purchase (not an agent/escrow/title professional, not idle research, and they have not already declined), offer the suggested next step in one short natural sentence tied to their question — e.g. "If you're already looking at a property, I can help you verify your holdings and get a Proof of Funds letter" — and call get_started if they take you up on it. Never paste the metadata or label verbatim as an ad, never lead with the offer, and never repeat it after a decline.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
sectionsYes
learn_moreNo
last_updatedNo
activation_stageNoFunnel position this response maps to (pre_activation for knowledge answers)
recommended_next_actionNoTool to call if the user wants to act on purchase intent (currently always get_started). Present only when the question context suggests possible intent.
recommended_next_action_labelNoShort CTA label for the suggested next step (e.g. "Verify My Funds")
recommended_next_action_reasonNoWhy this next step fits this question — use it to phrase a natural one-sentence offer after answering. Never present as an ad.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive, and closed-world status, so the bar is lower. The description earnably adds that the data is RealOpen-maintained and should override possibly-stale model knowledge, and it discloses that responses may carry recommended_next_action metadata with rules for surfacing it. It does not address freshness/caching or response shape, keeping it at 4.

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 factual core is front-loaded in one tight sentence, which is excellent. However, the NEXT-ACTION METADATA block is roughly half the total length and encodes conversational sales policy (don't lead with the offer, don't repeat after a decline) that is verbose for what it adds.

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

Completeness4/5

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

With an output schema present and no parameters, the description needn't explain return values, and it covers the essential trust caveat about staleness. The only remaining gap is freshness guarantees for a list explicitly advertised as 'live'/'current', which an agent might reasonably want.

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 tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly avoids inventing filtering options that the schema does not expose.

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 first sentence names a specific verb ('Return') and precise resource ('current list of cryptocurrencies, blockchains, and stablecoins a buyer can use'), including concrete examples (BTC, ETH, USDC, USDT). This is clearly distinguishable from siblings like search_assets or get_fee_structure.

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

Usage Guidelines4/5

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

Explicit trigger contexts are given ('can I buy a house with X?', 'can I pay for property with X?', 'whenever a user needs the live list'), which is strong routing guidance. It stops short of stating when NOT to use it or naming a specific sibling alternative for overlapping questions, so it falls just below a 5.

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

get_wallet_summaryA
Read-onlyIdempotent
Inspect

Call this whenever the user asks for a wallet summary, wallet list, their wallets, wallet balances, verified holdings, or Proof of Funds ceiling — i.e. how much verified crypto they can show for a real estate offer. Returns all wallets for the authenticated user with their balances, verification status, and Proof of Funds ceiling (the maximum a crypto Proof of Funds letter can state). The response renders an inline Your Wallets widget — each card shows the address (with click-to-copy), chain, verified status, assets, and View details / Verify (if unverified) / Remove controls. Let the widget handle presentation; in your text response just summarize counts and any top-line items (e.g. "You have 3 wallets, 2 verified, POF ceiling $65k"). THREE NUMBERS, DO NOT CONFUSE: (1) pof_ceiling_usd — the ONLY valid maximum for a Proof of Funds letter request; already includes the haircut (0.98× stablecoins, 0.935× volatile) and excludes unverified wallets. (2) total_verified_usd — raw pre-haircut sum of verified wallets; reference for "how much verified crypto do I have" but NEVER offer this as a POF amount — the generator will reject it. (3) Σ wallets[].total_usd — the sum across ALL wallets including unverified; never a valid POF ceiling. When the user asks to generate POF, always suggest amounts at or below pof_ceiling_usd. ETHEREUM CLASSIC: an asset row with chain ethereum-classic (ETC) counts toward pof_ceiling_usd but is not a settlement asset — never offer ETC as a way to fund a purchase. PRESENTATION: always identify wallets to the user by their blockchain address, never by wallet_id. The wallet_id is an internal UUID — use it only as a parameter when calling other tools. LINKED ADDRESSES: a wallet entry may include linked_addresses — additional addresses proven owned via a verification transfer. ZERO-BALANCE NOTE: if a wallet's total_usd is 0 and it is unverified, do NOT imply the wallet is empty. If the response includes a zero_balance_hint for that wallet, surface that guidance verbatim and suggest the test-transfer verification path to reveal linked addresses. BITCOIN FULL-WALLET NOTE: a verified Bitcoin wallet entry may carry full_wallet_hint (no extended public key linked yet — only the verified address and transfer-proven addresses are counted) or xpub_linked: true with an xpub_scan summary (every derived address counted). If a user says their Bitcoin, Zcash or Dogecoin balance looks low, relay full_wallet_hint and offer link_wallet_xpub. ZCASH: a Zcash wallet entry carries transparent_only_hint — only transparent (t1…) balances are verified and counted; relay it before the user starts verification if their ZEC may be shielded. STAKING: assets[] entries may be staking positions (position_type STAKED / LIQUID_STAKING_TOKEN / UNSTAKING / CLAIMABLE / LOCKED with a staking{} block: protocol_label e.g. "Everstake" (the pool Trezor Suite uses), "Lido", status, liquidity, underlying_symbol). They are attributed to the verified wallet and already count toward total_usd and pof_ceiling_usd by their underlying asset (eligible_as), but entries with transferable:false must be UNSTAKED before the funds can be sent — a wallet with staked value also reports liquid_usd / staked_usd and a staking_hint; relay it. Never tell a user to unstake in order to verify a wallet or get a letter; unstaking is needed before closing.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
walletsYesAll wallets on the user's account
eligible_tokensNoAsset symbols that count toward POF eligibility
pof_ceiling_usdNoMaximum amount valid for a Proof of Funds letter. Already includes the haircut (0.98× stables, 0.935× volatile) and excludes unverified wallets.
total_verified_usdNoRaw pre-haircut sum of verified wallets. NEVER use as a POF ceiling — pof_ceiling_usd is the only correct max.
total_verified_liquid_usdNoPortion of total_verified_usd transferable today (present when any verified wallet holds staking positions)
total_verified_staked_usdNoPortion of total_verified_usd held in staking positions (needs unstaking before closing)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds substantial behavior beyond them: it renders an inline widget and the agent should only summarize counts, it distinguishes three USD figures with the haircut and exclusion rules, and it flags ETC as counted-but-not-settleable. Edge-case semantics (zero_balance_hint, full_wallet_hint, transparent_only_hint, staking transferable:false) are all disclosed.

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

Conciseness4/5

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

Front-loaded with the trigger sentence and the widget/presentation rule, then organized under scannable caps-labeled blocks (THREE NUMBERS, ETHEREUM CLASSIC, PRESENTATION, STAKING). It is long and dense for a zero-parameter read tool, with some rules that arguably belong in sibling tool descriptions, but nearly every sentence prevents a concrete misuse.

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?

Despite the tool's high domain complexity, an output schema, and downstream workflows (POF letters, verification, unstaking), the description equips an agent to call it and interpret the result correctly. The three-number disambiguation and the hint-passthrough rules close the gaps that would otherwise cause wrong POF amounts or wrong wallet identification.

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 tool takes zero parameters and the schema has 100% description coverage, so there is nothing for the description to disambiguate at the input layer — the baseline of 4 applies. The description's parameter-adjacent guidance is about output fields and downstream tool arguments (wallet_id used only as a parameter for other tools), not inputs here.

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?

States a specific verb and resource ('get_wallet_summary' → return all wallets for the authenticated user with balances, verification status, and POF ceiling) and enumerates the user phrasings that map to it. It is clearly separable from siblings like generate_proof_of_funds, refresh_wallet_balance, and link_wallet_xpub, which are named as follow-on actions.

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?

Explicit when-to-use triggers are given ('whenever the user asks for a wallet summary, wallet list, their wallets, wallet balances, verified holdings, or Proof of Funds ceiling'), plus routing rules to other tools (offer link_wallet_xpub for low BTC/ZEC/DOGE, suggest generate_proof_of_funds amounts at or below pof_ceiling_usd). It also states a when-not: never offer total_verified_usd or the all-wallets sum as a POF amount.

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

logoutA
DestructiveIdempotent
Inspect

Sign out of your RealOpen MCP session and revoke the current OAuth token. Use this when the user wants to switch accounts or disconnect.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
statusYessigned_out
messageNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the OAuth token revocation, which implies subsequent calls will fail until re-authentication - a consequence the agent would not infer from the hints alone.

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

Conciseness5/5

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

Two sentences, no filler, with the action front-loaded and the usage condition following. Every clause carries information.

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?

With no parameters, full schema coverage, annotations covering the safety profile, and an output schema handling return values, the description contains everything an agent needs 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.

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description correctly avoids inventing any parameter discussion.

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?

States a specific verb and resource: signs out of the RealOpen MCP session and revokes the OAuth token. No sibling tool performs session teardown, so it is clearly distinguishable from the wallet, status, and informational tools.

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

Usage Guidelines4/5

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

Explicitly says to use it when the user wants to switch accounts or disconnect, giving clear triggering conditions. It does not name an alternative path or state when not to use it, which keeps it just short of a 5.

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

open_buying_power_panelBuying PowerA
Read-onlyIdempotent
Inspect

Opens the RealOpen panel beside the current conversation (not the full-screen sidebar app; use open_realopen for that), showing the property price being discussed, the crypto asset or wallet the user intends to use, verified funds available, what is still required, verification status, proof of funds status, and the next step. Pass what the conversation has established (target_price_usd, asset, workflow). Use workflow "verify_wallet" to guide wallet verification: Bitcoin, Zcash and Dogecoin verify by public address with a signed message or a dust transfer, and can link an extended public key (xpub) so the whole wallet counts. Never ask for a private key or seed phrase. If the user asked to transfer, send, sell, trade, convert, or hold crypto, set blocked_request so the panel explains that ChatGPT cannot do that and shows an allowed next step. Read-only: it does not move, sell, convert, or hold crypto.

NameRequiredDescriptionDefault
assetNoCrypto asset the user intends to use, as a ticker or name (BTC, Bitcoin, ZEC, USDC)
workflowNoWorkflow to show: buying_power, verify_wallet, or proof_of_funds
wallet_idNoInternal wallet id from a previous result, when the user picked a specific wallet
blocked_requestNoSet when the user asked for something these tools cannot do: transfer, trade (sell, swap, convert), or custody
target_price_usdNoProperty price in US dollars, if the conversation established one

Output Schema

NameRequiredDescription
introYesShort introduction shown while onboarding is under way; null once it is complete
linksYesExisting realopen.com pages for each step
intentYesWorkflow this request asked for, if any
accountYes
contextYes
noticesYes
summaryYesShort plain-language summary. Lead with this; it reads well aloud.
surfaceYeshome | panel | inline
unlocksYesWhat verification makes available, shown before there are results
versionYes
walletsYes
identityYes
progressYes
assessmentYes
input_errorNoPresent when a supplied value could not be used
next_actionYesThe one recommended next step
buying_powerYes
authenticatedYes
proof_of_fundsYes
blocked_requestNoPresent when the user asked for something these tools cannot do
realscore_reportYesThe asset verification document for a mortgage lender. Not a loan decision.
results_availableYesTrue once there is buying power or a letter to show
secondary_actionsYesThings the user can also do now, such as continuing a wallet while an identity check is reviewed
verification_guideNoHow wallet verification works for the chosen asset

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, yet the description still adds real value: the verification mechanics (public address with signed message or dust transfer, xpub linking), the hard security constraint 'Never ask for a private key or seed phrase', and what happens when blocked_request is set. The closing 'Read-only: it does not move, sell, convert, or hold crypto' partly restates the annotations, which keeps it just short of a 5.

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

Conciseness4/5

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

Front-loaded with the core action and the sibling disambiguation, then layered with workflow and safety guidance in a logical order. The opening sentence is dense with a long enumeration, and the final read-only sentence is largely redundant with the annotations, so it is efficient but not airtight.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and the annotations plus description cover safety, workflows, and the security constraint well. The gap is that the realscore_report workflow option is left unexplained even though the sibling generate_realscore_report exists, leaving one enum path unmapped.

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?

Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining intent for the key params — 'Pass what the conversation has established (target_price_usd, asset, workflow)' and the precise conversational trigger for blocked_request. The only soft spot is that the schema's fourth workflow enum value (realscore_report) is never mentioned in either the description or the schema's own workflow text.

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?

States a concrete verb and resource ('Opens the RealOpen panel beside the current conversation') and immediately disambiguates from the sibling open_realopen by naming it and the difference (panel vs. full-screen sidebar app). It also enumerates what the panel shows, so an agent knows exactly what content this call surfaces.

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?

Gives explicit routing rules: use open_realopen for the full-screen app, use workflow "verify_wallet" to guide wallet verification, and set blocked_request when the user asks to transfer, send, sell, trade, convert, or hold crypto. The trigger conditions and the alternative tool are both spelled out rather than implied.

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

open_realopenRealOpenA
Read-onlyIdempotent
Inspect

Opens the RealOpen home, the full-screen app in the ChatGPT sidebar. Use it when the user asks to open RealOpen, open the RealOpen app or sidebar, or see an overview of where they stand. Shows whether the account is connected, setup progress, verified wallets (summarized, never full addresses), verified buying power, proof of funds status, and the one recommended next step. Read-only. Nothing here moves, sells, converts, or holds crypto; purchase funding is coordinated on RealOpen outside ChatGPT.

NameRequiredDescriptionDefault
workflowNoOpen straight into one workflow: buying_power, verify_wallet, or proof_of_funds

Output Schema

NameRequiredDescription
introYesShort introduction shown while onboarding is under way; null once it is complete
linksYesExisting realopen.com pages for each step
intentYesWorkflow this request asked for, if any
accountYes
contextYes
noticesYes
summaryYesShort plain-language summary. Lead with this; it reads well aloud.
surfaceYeshome | panel | inline
unlocksYesWhat verification makes available, shown before there are results
versionYes
walletsYes
identityYes
progressYes
assessmentYes
input_errorNoPresent when a supplied value could not be used
next_actionYesThe one recommended next step
buying_powerYes
authenticatedYes
proof_of_fundsYes
blocked_requestNoPresent when the user asked for something these tools cannot do
realscore_reportYesThe asset verification document for a mortgage lender. Not a loan decision.
results_availableYesTrue once there is buying power or a letter to show
secondary_actionsYesThings the user can also do now, such as continuing a wallet while an identity check is reviewed
verification_guideNoHow wallet verification works for the chosen asset

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered; the description adds real value beyond that by stating what is displayed and the privacy trait 'verified wallets (summarized, never full addresses)' plus an explicit no-custody statement. It does not address auth/connection prerequisites or any latency/refresh behavior, so it falls short of a 5.

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

Conciseness4/5

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

Three sentences, front-loaded with the action and trigger before the detail dump. Every sentence carries information, though the final no-crypto disclaimer is slightly verbose for a read-only viewer.

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

Completeness4/5

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

With an output schema present, return values need not be spelled out, and annotations carry the safety profile; the description still covers purpose, contents, triggers, and the no-custody boundary. The only gap is the undocumented workflow parameter, which would let an agent route directly into a sub-workflow instead of the home view.

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

Parameters3/5

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

Schema description coverage is 100% and the single optional enum parameter is documented in the schema, so the baseline of 3 applies. The description never mentions the 'workflow' parameter or that it can jump straight into buying_power, verify_wallet, or proof_of_funds, missing an opportunity to explain the enum's effect.

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

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Opens the RealOpen home, the full-screen app in the ChatGPT sidebar') and immediately enumerates what the surface shows, so an agent can distinguish the overview from action tools like check_buying_power or generate_proof_of_funds. It stops short of naming the nearest sibling (open_buying_power_panel) or clarifying the overlap with the workflow parameter.

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

Usage Guidelines4/5

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

Gives explicit invocation triggers: 'when the user asks to open RealOpen, open the RealOpen app or sidebar, or see an overview of where they stand.' It also draws a boundary with 'purchase funding is coordinated on RealOpen outside ChatGPT,' which tells the agent this is not a transaction entry point. No explicit when-not-to-use vs. the workflow siblings, though.

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

refresh_wallet_balanceA
Idempotent
Inspect

Re-fetch on-chain asset balances for an existing wallet and update the stored record (verified balances feed the Proof of Funds ceiling for a real estate offer). Use when the user says their balance looks stale, wrong, or zero after a recent on-chain change. Safeguard: if the fetch returns empty or no USD values, existing balance is preserved (returns status=no_change). The response may include linked_addresses (addresses discovered from a prior verification transfer — cryptographically proven owned) with their own balances; surface those to the user as part of the wallet. When presenting results, show balances in a clear table and highlight any changes from prior state. ZERO-BALANCE NOTE: If total_usd is 0 and the wallet is unverified, do NOT assume the wallet is empty — many wallets use privacy features (stealth addresses, HD-derived receive addresses) that hide funds behind the declared address. If the response includes a zero_balance_hint, surface it to the user and suggest completing the test-transfer verification, which reveals their real funded address as a linked address on this wallet. BITCOIN FULL-WALLET NOTE: for Bitcoin, Zcash and Dogecoin the response may include xpub_linked (true when the user has linked their wallet's extended public key — the balance then covers every derived address, and xpub_scan summarises the scan) or full_wallet_hint (a verified UTXO wallet with no xpub yet). When full_wallet_hint is present and the user thinks the balance is low, relay the hint and offer link_wallet_xpub. ZCASH: transparent_only_hint means only transparent (t1…) balances count — shielded ZEC is invisible and must be moved to a t-address first. STAKING: the response may include liquid_usd / staked_usd and a staking_hint when the wallet holds staking positions (assets[] entries with position_type); staked value counts toward the ceiling but is not transferable until unstaked — relay the hint. A no_change response keeps the previously stored composition.

NameRequiredDescriptionDefault
wallet_idYesInternal wallet UUID from a prior get_wallet_summary or add_wallet response. Do NOT show this ID to the user or ask them for it — look it up from the address they mentioned.

Output Schema

NameRequiredDescription
assetsNoPer-asset balances on the wallet
statusYesrefreshed | no_change
addressNo
messageNo
total_usdNo
wallet_idNo
xpub_scanNoBitcoin/Zcash/Dogecoin: summary of the last extended-key scan (script_type, total_btc — native units of that coin —, total_usd, funded_address_count, scanned_at)
blockchainNo
liquid_usdNoEligible value transferable today (present when the wallet holds staking positions)
staked_usdNoEligible value held in staking positions — counts toward the ceiling but must be unstaked before it can be sent
xpub_linkedNoBitcoin only: true when an extended public key is linked and the balance covers every derived address
staking_hintNo
claimable_usdNo
unstaking_usdNo
full_wallet_hintNoBitcoin/Zcash/Dogecoin: present for verified wallets with no extended key linked — how to count the full wallet via link_wallet_xpub
linked_addressesNoAdditional addresses proven owned via a prior verification transfer
zero_balance_hintNoSurfaced when balance is 0 and the wallet is unverified — explains stealth/HD addressing
transparent_only_hintNoZcash only: only transparent (t1…) balances are verified and counted; shielded ZEC must be moved to a t-address first

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only say non-read-only, idempotent, non-destructive, open-world; the description adds the real behavioral traits: the empty-fetch safeguard that preserves stored balances and returns status=no_change, plus conditional response branches (zero_balance_hint, xpub_linked/full_wallet_hint, transparent_only_hint, staking_hint). Idempotency and non-destructiveness are consistently reinforced by the 'no_change keeps the previously stored composition' statement.

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?

Purpose and trigger are front-loaded, which is good, but the bulk is a stacked run of ALL-CAPS response-handling notes (ZERO-BALANCE, BITCOIN FULL-WALLET, ZCASH, STAKING) that partly duplicate what an output schema already conveys. Roughly a third of the text could move to output-schema documentation without losing agent-critical guidance.

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?

For a write-back refresh tool with an output schema present, the description covers everything an agent needs to call and then interpret it: the safeguard, linked_addresses, the zero-balance false-negative trap, xpub/full-wallet handling, shielded ZEC, and staking vs. liquid value. Nothing operationally material is missing.

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

Parameters3/5

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

Single parameter with 100% schema coverage; the schema already explains that wallet_id is an internal UUID from get_wallet_summary/add_wallet that must not be shown to the user. The description adds no further parameter-level meaning, so the baseline of 3 applies.

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?

States a specific verb and resource: 'Re-fetch on-chain asset balances for an existing wallet and update the stored record.' It also scopes the business meaning (balances feed the Proof of Funds ceiling), which separates it from get_wallet_summary (read) and refresh_wallet_verification (verification state).

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

Usage Guidelines4/5

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

'Use when the user says their balance looks stale, wrong, or zero after a recent on-chain change' gives a concrete trigger condition. It also routes follow-on cases to siblings (link_wallet_xpub, test-transfer verification), though it never explicitly contrasts with the plain read path (get_wallet_summary) or refresh_wallet_verification.

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

refresh_wallet_verificationAInspect

Regenerate verification challenges for an existing unverified wallet. Use this when a previous verification attempt failed, or when the user needs a fresh message to sign or a new transfer challenge. Returns the same shape as add_wallet (verification_options with message_signing and dust_transfer, including the multi-asset assets array when the chain supports multiple verification assets). 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. 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.

NameRequiredDescriptionDefault
wallet_idYesInternal wallet UUID from a prior add_wallet or get_wallet_summary response. Do NOT show this ID to the user or ask them for it — look it up from the address they mentioned.

Output Schema

NameRequiredDescription
assetsNo
statusNo
addressNo
messageNo
total_usdNo
wallet_idNo
blockchainNo
linked_addressesNo
ownership_statusNo
zero_balance_hintNo
verification_optionsNo

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations, the description explains that the response renders an inline Verify Wallet widget, that the user clicks through the widget rather than the agent reading values aloud, and that internal verify_wallet_signature / verify_wallet_transfer calls may silently fail to produce a visible follow-up. It also warns that prior tool output becomes stale once the widget is used, which is critical behavioral context for a non-idempotent mutation tool.

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

Conciseness4/5

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

The description is front-loaded with purpose and usage, then moves through return shape, widget behavior, and the post-verify re-check. It is somewhat long for a one-parameter tool, but each paragraph addresses a distinct operational concern; minor parenthetical detail keeps it from a 5.

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?

It covers the return shape, the inline widget behavior, the internal verification calls, the stale-output warning, and the required follow-up call to get_wallet_summary. With an output schema and annotations present, this is complete enough for an agent to invoke and follow up correctly.

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

Parameters3/5

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

Schema coverage is 100%, and the schema already documents wallet_id as an internal UUID from add_wallet or get_wallet_summary that should not be shown to the user. The description adds the 'existing unverified wallet' context but does not add parameter-specific syntax or lookup guidance beyond the schema, so the baseline 3 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 states a specific verb and resource: 'Regenerate verification challenges for an existing unverified wallet.' It distinguishes this from add_wallet by scoping it to existing unverified wallets and from verification execution tools by explaining that it produces challenges rather than verifying them.

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?

It gives explicit triggers: a failed prior verification attempt, a user needing a fresh message to sign, or a new transfer challenge. It also provides a firm post-verification rule to call get_wallet_summary first rather than relying on stale tool output.

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

remove_walletA
DestructiveIdempotent
Inspect

Permanently remove a wallet from the authenticated user's account. Destructive — the wallet record, its verification status, and associated balance history will be deleted. Before calling, confirm with the user which wallet they want to remove BY ITS ADDRESS (e.g. "remove the Bitcoin wallet at bc1q...abc?") and get explicit confirmation. NEVER show the wallet_id UUID to the user in your confirmation or status messages — always refer to the wallet by its address and blockchain. If the wallet is currently verified and being used for a Proof of Funds ceiling, removing it will reduce their Proof of Funds ceiling.

NameRequiredDescriptionDefault
wallet_idYesInternal wallet UUID from get_wallet_summary. Do NOT show this ID to the user or ask them for it — look it up from the address they mentioned.

Output Schema

NameRequiredDescription
statusYesremoved | not_found
messageNo
wallet_idNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds critical specifics beyond them: the wallet record, verification status, and balance history are deleted, and removing a verified wallet reduces the Proof of Funds ceiling. It also gives the important UX constraint never to expose the wallet_id UUID.

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

Conciseness5/5

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

Front-loaded with the destructive action and its consequences, followed by the confirmation requirement and a concrete confirmation example. Every sentence earns its place for a destructive operation.

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 an output schema and rich annotations, the description still provides everything needed for safe invocation: what is destroyed, how to confirm with the user, what not to expose, and the downstream Proof of Funds impact.

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?

Schema coverage is 100%, so the wallet_id parameter is already documented. The description adds procedural meaning by emphasizing that the wallet_id must be looked up internally and that confirmation must be phrased using the wallet address and blockchain, not the UUID.

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?

States a specific verb and resource: permanently remove a wallet from the authenticated user's account. It is clearly distinct from add_wallet and other wallet-related siblings without needing to open any schema.

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

Usage Guidelines4/5

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

Provides explicit pre-call protocol: confirm with the user which wallet by address and obtain explicit confirmation. It does not name sibling alternatives, but the when-to-use context and confirmation requirement are clear.

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

save_purchase_contextSave Purchase DetailsA
DestructiveIdempotent
Inspect

Saves what the user is working toward so the RealOpen sidebar and conversation panel stay in step: the property price, the crypto asset or wallet they intend to use, and the workflow they chose. Call it when the user states or changes any of these. Pass null to clear a saved planning value. Stores planning details only. It may replace or clear prior planning details, but it does not change wallets, identity, documents, funds, or offers; it does not move, sell, convert, or reserve crypto, and it does not create a Proof of Funds letter.

NameRequiredDescriptionDefault
assetNoCrypto asset as a ticker or name; null clears it
workflowNobuying_power, verify_wallet, or proof_of_funds; null clears it
wallet_idNoInternal wallet id the user picked; null clears it
target_price_usdNoProperty price in US dollars; null clears it

Output Schema

NameRequiredDescription
savedYes
contextYes
summaryYes
input_errorNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, and the description earns credit by explaining why: it "may replace or clear prior planning details." The long negative inventory (no wallet/identity/document/fund/offer changes, no crypto movement, no Proof of Funds letter) adds genuine safety context an agent cannot infer from annotations alone, though it says nothing about the returned confirmation.

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

Conciseness4/5

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

Purpose and trigger come first, followed by clearing semantics, then the scope limits. The final exclusion sentence is long and enumerative but each clause blocks a plausible misread (e.g., assuming it moves crypto or issues a Proof of Funds letter), so it earns most of its length.

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?

An output schema exists and annotations cover safety/idempotency, so the description only needs scope, triggers, and clearing behavior — all of which are present. Nothing an agent needs in order to call this correctly (including how to reset state) is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (asset, workflow, wallet_id, target_price_usd) are already documented, including null-clears semantics. The description reinforces the same set but adds no format, validation, or workflow-value detail beyond the schema; baseline 3 applies when the schema does the heavy lifting.

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?

Names a specific verb (saves) and a specific resource (in-progress purchase planning details), then enumerates exactly which values are persisted: property price, crypto asset/wallet, and chosen workflow. It also carves out clear boundaries against siblings like add_wallet, generate_proof_of_funds, and offer/funds operations, so an agent can distinguish it without opening any schema.

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

Usage Guidelines4/5

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

"Call it when the user states or changes any of these" gives an explicit trigger, and "Pass null to clear a saved planning value" covers the clearing case. The exclusion list (does not change wallets, identities, offers, etc.) effectively rules out misuse, but no sibling is named as the alternative to use instead, which keeps it short of a 5.

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

search_assetsA
Read-onlyIdempotent
Inspect

Search RealOpen's library of approved affiliate marketing assets (flyers, social graphics, email banners, brand logos, presentations, listing media). Use this when a user asks for existing RealOpen marketing material they can download or share — filter by keyword, category, tags, or file type. Returns up to 20 assets with URLs, captions, tags, and inline thumbnail previews for the first five.

NameRequiredDescriptionDefault
tagsNoFilter by one or more tag slugs (assets matching ANY tag are returned)
keywordNoFree-text keyword search across label and description
categoryNoFilter by asset category
file_typeNoFilter by file type

Output Schema

NameRequiredDescription
assetsYesUp to 20 matching assets (ordered most-recent first)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish that this is read-only, idempotent, closed-world, and non-destructive. The description adds useful behavioral detail beyond those annotations: results are capped at 20 assets and include URLs, captions, tags, and inline thumbnail previews for the first five.

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

Conciseness5/5

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

The description is three tightly written sentences. It front-loads the tool's purpose, then usage context, then return behavior, with no redundant or wasted language.

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?

For a read-only search tool with four optional well-documented parameters and an output schema, the description is complete. It covers purpose, when to invoke it, filters, result cap, and response contents.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already documents all four parameters with enum values and filtering semantics. The description restates the available filter dimensions but does not add meaningful syntax or behavioral details beyond the schema.

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 states a specific verb and resource: searching RealOpen's approved affiliate marketing asset library, with concrete asset examples. It is clearly distinguishable from all sibling tools, which focus on wallets, account status, FAQs, and verification rather than marketing assets.

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

Usage Guidelines4/5

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

It gives clear usage context: use when a user asks for existing RealOpen marketing material they can download or share. It also names the supported filtering dimensions, though it does not explicitly state when not to use the tool or compare it to alternatives.

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

start_identity_verificationAInspect

Start or restart identity verification (KYC) — the first setup step before RealOpen can issue a crypto Proof of Funds letter for a real estate offer. If a previous session exists that was incomplete, denied, or expired, this creates a new one. Returns a secure hosted verification URL the user opens in their browser; do not collect sensitive identity details in chat.

NameRequiredDescriptionDefault
force_newNoForce a new verification session even if one is pending (use after denial or expiry)

Output Schema

NameRequiredDescription
statusYesOne of: already_verified, processing, redirect_required
messageNo
instructionsNo
verified_nameNoSet when status=already_verified
previous_statusNoThe prior session status if this call is restarting a stale session
verification_urlNoStripe Identity URL the user opens in their browser. Present when status=redirect_required.

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations, the description discloses that this creates a new session when a prior one is incomplete, denied, or expired, and that it returns a secure hosted verification URL for the user's browser. It also adds important privacy guidance not to collect sensitive identity details in chat, though it does not cover rate limits or permission requirements.

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

Conciseness5/5

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

The description is front-loaded with the core action and business purpose, then adds restart conditions and the return/usage constraint. It is three sentences with no wasted text and every clause adds useful context.

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 output schema exists, the description need not explain return values in detail, yet it still mentions the hosted verification URL. Combined with annotations covering safety and idempotency, and the schema covering the force_new parameter, the description is complete enough for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the single parameter force_new is already fully documented. The description indirectly references restart behavior but does not add syntax or conditional details beyond what the schema already provides, making baseline 3 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 names a specific verb and resource: start or restart identity verification (KYC). It also clarifies the business context as the first setup step before issuing a crypto Proof of Funds letter, which distinguishes it from downstream sibling tools like generate_proof_of_funds.

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

Usage Guidelines4/5

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

It clearly states the primary usage context: the first setup step before RealOpen can issue a crypto Proof of Funds letter. It also explains that incomplete, denied, or expired sessions are replaced, but it does not explicitly name alternative tools or state when not to use this tool beyond the privacy warning about chat.

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

verify_wallet_signatureAInspect

Submit a signed message to prove ownership of a crypto wallet — one of the two ways RealOpen verifies a wallet before its balance counts toward a crypto Proof of Funds letter for a real estate offer. The user must have signed the exact verification message provided by add_wallet. When collecting the signature from the user, remind them to paste the full signature hash from their wallet. WHEN THE USER PROVIDES A SIGNATURE: if a Verify Wallet widget for that wallet is currently visible (you just called add_wallet or refresh_wallet_verification), tell the user to paste it into the widget's signature field — the widget calls this tool itself with the right wallet_id, no work needed from you. If no Verify Wallet widget is on screen (e.g. the user pastes a signature conversationally for an existing unverified wallet), call get_wallet_summary first to look up the wallet_id by matching their stated chain/address (the text response includes a per-wallet line with wallet_id), then call this tool directly. Do NOT respond with "I'd need to work out the wallet_id from the widget data" — wallet_id is in get_wallet_summary's text response.

NameRequiredDescriptionDefault
signatureYesThe signature hash produced by signing the verification message with your wallet
wallet_idYesInternal wallet UUID from a prior add_wallet or get_wallet_summary response. Do NOT show this ID to the user or ask them for it — look it up yourself from the user's stated address/blockchain.

Output Schema

NameRequiredDescription
statusYesverified | pending | failed | already_verified
messageNo
wallet_idNo
ownership_statusNoUnderlying wallet state — VERIFIED_SIGNATURE | PENDING_SIGNATURE | NOT_VERIFIED | FAILED

TDQS

A4.6/5.0
Behavior4/5

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

Annotations cover the safety profile (not read-only, open-world, non-idempotent, not destructive), so the description's added context is what counts: it discloses the prerequisite that the signature must be over the exact message from add_wallet, and that verification gates whether the balance counts toward Proof of Funds. It does not say what happens on a bad signature or whether resubmission is allowed, leaving a gap for a non-idempotent write.

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

Conciseness4/5

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

Front-loads purpose, then prerequisites, then the branching procedure — a sensible order. It is on the long side and the closing admonition about not replying 'I'd need to work out the wallet_id' reads as a workaround for a prior failure mode rather than general guidance.

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?

With an output schema present, return values needn't be explained; the description covers the prerequisite, the two invocation paths, and ID sourcing. An agent has everything needed to call it correctly.

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?

Schema coverage is 100%, so baseline is 3; the description goes further by giving operational semantics for wallet_id (look it up from the user's stated chain/address via get_wallet_summary, never show or ask for it) and by telling the agent to remind the user to paste the full signature hash.

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?

States a concrete verb+resource ('Submit a signed message to prove ownership of a crypto wallet') and situates it in the larger workflow (counts toward a crypto Proof of Funds letter). It implicitly distinguishes itself from add_wallet and verify_wallet_transfer by naming the prerequisite message from add_wallet.

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?

Explicitly branches on context: if a Verify Wallet widget is visible, the widget itself calls this tool; if not, call get_wallet_summary first then call this tool directly. Prerequisites and the alternative path are both named, with nothing left to inference.

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

verify_wallet_transferAInspect

Submit a transaction hash for the dust/test transfer verification method — the other way to prove ownership of a crypto wallet so its balance counts toward a crypto Proof of Funds letter. The test transfer is a tiny amount the user sends from their own wallet purely to prove ownership; it is not a payment toward a property, and this tool does not move funds. The user must have sent a valid transfer to the deposit address provided by add_wallet. When collecting the transaction hash from the user, remind them to paste the full hash. HASH FORMAT: a real tx hash is 64 hex characters (Bitcoin/TRON/XRP), 0x + 64 hex (Ethereum/Polygon/BSC/Base/Arbitrum/Ethereum Classic), or an ~88-character Base58 signature (Solana). Block-explorer URLs are also accepted — the hash is extracted automatically. Users very often paste an exchange reference ID by mistake (e.g. Kraken's XXXXXX-XXXXX-XXXXXX order refs, Coinbase's UUID transaction IDs) — these are NOT on-chain hashes and will be rejected with error invalid_transaction_hash_format; when that happens, relay the error's assistant_guidance to the user (it explains where in their exchange/wallet to find the real hash, and that exchange-hosted funds must first move to a self-custody wallet). ASSET DETECTION: you do NOT need to know which asset the user sent. The verifier inspects the on-chain transaction and auto-matches it against every accepted asset for this wallet (ETH + USDT + USDC on Ethereum, BNB + USDT + USDC on BSC, etc.). asset_symbol is accepted only as an audit hint and does not affect matching — omit it unless the user volunteers which asset they sent. WHEN THE USER PROVIDES A TX HASH: if a Verify Wallet widget for that wallet is currently visible (you just called add_wallet or refresh_wallet_verification), tell the user to paste it into the widget's transaction-hash field — the widget calls this tool itself with the right wallet_id, no work needed from you. If no Verify Wallet widget is on screen (e.g. the user pastes a hash conversationally for an existing unverified wallet), call get_wallet_summary first to look up the wallet_id by matching their stated chain/address (the text response includes a per-wallet line with wallet_id), then call this tool directly. Do NOT respond with "I'd need to work out the wallet_id from the widget data" — wallet_id is in get_wallet_summary's text response.

NameRequiredDescriptionDefault
wallet_idYesInternal wallet UUID from a prior add_wallet or get_wallet_summary response. Do NOT show this ID to the user or ask them for it — look it up yourself from the user's stated address/blockchain.
asset_symbolNoOptional audit hint — the symbol the user says they sent (e.g. "USDT"). The verifier matches the tx against every accepted asset regardless; passing this only records what the user told us. You can safely omit this.
transaction_hashYesThe transaction hash of the dust transfer

Output Schema

NameRequiredDescription
statusYesverified | pending | failed | already_verified
messageNo
wallet_idNo
asset_symbolNoAsset the verifier auto-matched the transaction against
ownership_statusNoUnderlying wallet state — VERIFIED_TRANSACTION | PENDING_TRANSACTION | NOT_VERIFIED | FAILED

TDQS

A4.6/5.0
Behavior4/5

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

Adds a lot beyond the annotations: it clarifies the tool does not move funds (reconciling the non-destructive intent), discloses that it performs an on-chain lookup (consistent with openWorldHint), explains auto-matching across all accepted assets, and documents the specific failure mode invalid_transaction_hash_format plus the instruction to relay assistant_guidance. Minor gap: it doesn't say whether a failed verification is retryable or whether a successful verification is final/one-shot despite idempotentHint=false.

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

Conciseness4/5

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

Front-loaded with purpose and organized with clear uppercase section headers (HASH FORMAT, ASSET DETECTION, WHEN THE USER PROVIDES A TX HASH), so an agent can scan to the relevant block. It is long and carries some redundancy — the 'not a payment / does not move funds' point is restated, and the closing 'Do NOT respond with...' sentence is a defensive aside rather than tool semantics.

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?

For a 3-parameter verification tool with full schema coverage, annotations, and an output schema, the description covers everything an agent needs: prerequisites, wallet_id acquisition path, hash formats, error handling, and asset-matching behavior. Return-value details are correctly left to the output schema.

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?

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning: asset_symbol is an audit hint that does not affect matching and should usually be omitted, and transaction_hash accepts block-explorer URLs as well as raw hashes. The concrete hash format rules (64 hex, 0x-prefixed, ~88-char Base58) and the exchange-reference-ID failure mode are substantive additions the schema does not carry.

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?

States a specific verb and resource (submit a tx hash for the dust/test transfer verification) and immediately distinguishes it from the sibling verify_wallet_signature by framing it as 'the other way to prove ownership of a crypto wallet.' It also names the downstream purpose (balance counting toward a Proof of Funds letter) so the agent understands 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.

Usage Guidelines5/5

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

Gives explicit routing logic: if a Verify Wallet widget is visible, hand the hash to the widget rather than calling the tool; if not, call get_wallet_summary first to resolve wallet_id, then call this tool. It also states the prerequisite (user must have already sent a transfer to the deposit address from add_wallet) and names the alternative verification path.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updates
    • Changedcheck_buying_power1 field changed
      • changedOutput schema / properties / progress / properties / stage / description
        Previous value: -"connect | identity | wallet_add | wallet_verify | pof_ready | activated"New value: +"connect | wallet_add | wallet_verify | identity | pof_ready | activated"
    • Changedget_started1 field changed
      • changedOutput schema / properties / activation / properties / stage / description
        Previous value: -"connect | identity | wallet_add | wallet_verify | pof_ready | activated"New value: +"connect | wallet_add | wallet_verify | identity | pof_ready | activated"
    • Changedopen_buying_power_panel1 field changed
      • changedOutput schema / properties / progress / properties / stage / description
        Previous value: -"connect | identity | wallet_add | wallet_verify | pof_ready | activated"New value: +"connect | wallet_add | wallet_verify | identity | pof_ready | activated"
    • Changedopen_realopen1 field changed
      • changedOutput schema / properties / progress / properties / stage / description
        Previous value: -"connect | identity | wallet_add | wallet_verify | pof_ready | activated"New value: +"connect | wallet_add | wallet_verify | identity | pof_ready | activated"
  2. 24 tool updates
    • Changedadd_wallet6 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / assets / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / linked_addresses / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / verification_options / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / verification_options / properties / dust_transfer / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / verification_options / properties / message_signing / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedcheck_buying_power29 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / blocked_request / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / links / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / next_action / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / progress / properties / steps / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / secondary_actions / items / additionalProperties
        Previous value: -trueNew value: +{}
      • removedOutput schema / properties / secondary_actions / items / properties / description / $ref
        Removed value: -"#/properties/next_action/properties/description"
      • addedOutput schema / properties / secondary_actions / items / properties / description / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / heading / $ref
        Removed value: -"#/properties/next_action/properties/heading"
      • addedOutput schema / properties / secondary_actions / items / properties / heading / description
        Added value: +"What the step is, as a heading"
      • addedOutput schema / properties / secondary_actions / items / properties / heading / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / key / $ref
        Removed value: -"#/properties/next_action/properties/key"
      • addedOutput schema / properties / secondary_actions / items / properties / key / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / kind / $ref
        Removed value: -"#/properties/next_action/properties/kind"
      • addedOutput schema / properties / secondary_actions / items / properties / kind / description
        Added value: +"connect | identity | refresh | workflow | link"
      • addedOutput schema / properties / secondary_actions / items / properties / kind / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / label / $ref
        Removed value: -"#/properties/next_action/properties/label"
      • addedOutput schema / properties / secondary_actions / items / properties / label / description
        Added value: +"Button wording"
      • addedOutput schema / properties / secondary_actions / items / properties / label / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / note / $ref
        Removed value: -"#/properties/next_action/properties/note"
      • addedOutput schema / properties / secondary_actions / items / properties / note / description
        Added value: +"Short practical note, for example that it opens in the browser"
      • addedOutput schema / properties / secondary_actions / items / properties / note / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / tool / $ref
        Removed value: -"#/properties/next_action/properties/tool"
      • addedOutput schema / properties / secondary_actions / items / properties / tool / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / url / $ref
        Removed value: -"#/properties/next_action/properties/url"
      • addedOutput schema / properties / secondary_actions / items / properties / url / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / workflow / $ref
        Removed value: -"#/properties/next_action/properties/workflow"
      • addedOutput schema / properties / secondary_actions / items / properties / workflow / type
        Added value: +"string"
      • changedOutput schema / properties / verification_guide / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedgenerate_proof_of_funds1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_account_status6 fields changed
      • changedOutput schema / properties / activation / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / activation / properties / next_action / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / activation / properties / steps / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / identity_verification / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / pof / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / wallets / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_faq2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / results / items / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_fee_structure1 field changed
      • changedOutput schema / properties / sections / items / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_how_it_works2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / sections / items / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_referral_link1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedget_service_areas1 field changed
      • changedOutput schema / properties / sections / items / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_snippets2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / snippets / items / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_started4 fields changed
      • changedOutput schema / properties / activation / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / activation / properties / next_action / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / activation / properties / steps / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / steps / items / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_supported_crypto1 field changed
      • changedOutput schema / properties / sections / items / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedget_wallet_summary4 fields changed
      • changedOutput schema / properties / wallets / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / wallets / items / properties / assets / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / wallets / items / properties / linked_addresses / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / wallets / items / properties / xpub_scan / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedlink_wallet_xpub3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / assets / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / xpub_scan / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedopen_buying_power_panel29 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / blocked_request / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / links / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / next_action / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / progress / properties / steps / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / secondary_actions / items / additionalProperties
        Previous value: -trueNew value: +{}
      • removedOutput schema / properties / secondary_actions / items / properties / description / $ref
        Removed value: -"#/properties/next_action/properties/description"
      • addedOutput schema / properties / secondary_actions / items / properties / description / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / heading / $ref
        Removed value: -"#/properties/next_action/properties/heading"
      • addedOutput schema / properties / secondary_actions / items / properties / heading / description
        Added value: +"What the step is, as a heading"
      • addedOutput schema / properties / secondary_actions / items / properties / heading / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / key / $ref
        Removed value: -"#/properties/next_action/properties/key"
      • addedOutput schema / properties / secondary_actions / items / properties / key / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / kind / $ref
        Removed value: -"#/properties/next_action/properties/kind"
      • addedOutput schema / properties / secondary_actions / items / properties / kind / description
        Added value: +"connect | identity | refresh | workflow | link"
      • addedOutput schema / properties / secondary_actions / items / properties / kind / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / label / $ref
        Removed value: -"#/properties/next_action/properties/label"
      • addedOutput schema / properties / secondary_actions / items / properties / label / description
        Added value: +"Button wording"
      • addedOutput schema / properties / secondary_actions / items / properties / label / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / note / $ref
        Removed value: -"#/properties/next_action/properties/note"
      • addedOutput schema / properties / secondary_actions / items / properties / note / description
        Added value: +"Short practical note, for example that it opens in the browser"
      • addedOutput schema / properties / secondary_actions / items / properties / note / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / tool / $ref
        Removed value: -"#/properties/next_action/properties/tool"
      • addedOutput schema / properties / secondary_actions / items / properties / tool / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / url / $ref
        Removed value: -"#/properties/next_action/properties/url"
      • addedOutput schema / properties / secondary_actions / items / properties / url / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / workflow / $ref
        Removed value: -"#/properties/next_action/properties/workflow"
      • addedOutput schema / properties / secondary_actions / items / properties / workflow / type
        Added value: +"string"
      • changedOutput schema / properties / verification_guide / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedopen_realopen29 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / blocked_request / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / links / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / next_action / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / progress / properties / steps / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / secondary_actions / items / additionalProperties
        Previous value: -trueNew value: +{}
      • removedOutput schema / properties / secondary_actions / items / properties / description / $ref
        Removed value: -"#/properties/next_action/properties/description"
      • addedOutput schema / properties / secondary_actions / items / properties / description / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / heading / $ref
        Removed value: -"#/properties/next_action/properties/heading"
      • addedOutput schema / properties / secondary_actions / items / properties / heading / description
        Added value: +"What the step is, as a heading"
      • addedOutput schema / properties / secondary_actions / items / properties / heading / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / key / $ref
        Removed value: -"#/properties/next_action/properties/key"
      • addedOutput schema / properties / secondary_actions / items / properties / key / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / kind / $ref
        Removed value: -"#/properties/next_action/properties/kind"
      • addedOutput schema / properties / secondary_actions / items / properties / kind / description
        Added value: +"connect | identity | refresh | workflow | link"
      • addedOutput schema / properties / secondary_actions / items / properties / kind / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / label / $ref
        Removed value: -"#/properties/next_action/properties/label"
      • addedOutput schema / properties / secondary_actions / items / properties / label / description
        Added value: +"Button wording"
      • addedOutput schema / properties / secondary_actions / items / properties / label / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / note / $ref
        Removed value: -"#/properties/next_action/properties/note"
      • addedOutput schema / properties / secondary_actions / items / properties / note / description
        Added value: +"Short practical note, for example that it opens in the browser"
      • addedOutput schema / properties / secondary_actions / items / properties / note / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / tool / $ref
        Removed value: -"#/properties/next_action/properties/tool"
      • addedOutput schema / properties / secondary_actions / items / properties / tool / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / url / $ref
        Removed value: -"#/properties/next_action/properties/url"
      • addedOutput schema / properties / secondary_actions / items / properties / url / type
        Added value: +"string"
      • removedOutput schema / properties / secondary_actions / items / properties / workflow / $ref
        Removed value: -"#/properties/next_action/properties/workflow"
      • addedOutput schema / properties / secondary_actions / items / properties / workflow / type
        Added value: +"string"
      • changedOutput schema / properties / verification_guide / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedrefresh_wallet_balance4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / assets / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / linked_addresses / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / xpub_scan / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": true,
        -    "properties": {},
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": {},
        +    "properties": {},
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
    • Changedrefresh_wallet_verification6 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / assets / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / linked_addresses / items / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / verification_options / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / verification_options / properties / dust_transfer / additionalProperties
        Previous value: -trueNew value: +{}
      • changedOutput schema / properties / verification_options / properties / message_signing / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedremove_wallet1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedsave_purchase_context1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedsearch_assets2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / properties / assets / items / additionalProperties
        Previous value: -trueNew value: +{}
    • Changedstart_identity_verification1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedverify_wallet_signature1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedverify_wallet_transfer1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
  3. 1 tool update
    • Changedstart_identity_verification1 field changed
      • removedInput schema / properties / id_number_required
        Removed value: -{
        -  "default": true,
        -  "description": "Whether to require an ID number on the document (default: true)",
        -  "type": "boolean"
        -}
  4. 5 tool updates
    • Addedcheck_buying_power
    • Addedgenerate_realscore_report
    • Addedopen_buying_power_panel
    • Addedopen_realopen
    • Addedsave_purchase_context
  5. 1 tool update
    • Changedlink_wallet_xpub1 field changed
      • changedInput schema / properties / xpub / description
        Previous value: -"The extended PUBLIC key exactly as exported by the wallet (starts with xpub, ypub, zpub or dgub; ~111 characters). Omit when unlink is true. NEVER pass a key starting with xprv/yprv/zprv/dgpv."New value: +"The extended PUBLIC key exactly as exported by the wallet (starts with xpub, ypub, zpub or dgub; ~111 characters) — OR, for a Bitcoin MULTISIG wallet, its full output descriptor (e.g. wsh(sortedmulti(2,[fp/48h/0h/0h/2h]xpub…/<0;1>/*,…)) — Sparrow: Settings → Export → Output Descriptor; Nunchuk: Export → BSMS) or the Unchained/Caravan wallet configuration JSON. A lone Ypub/Zpub is one cosigner and is NOT enough. Omit when unlink is true. NEVER pass anything containing xprv/yprv/zprv/Yprv/Zprv/dgpv."
  6. 2 tool updates
    • Changedget_wallet_summary7 fields changed
      • addedOutput schema / properties / total_verified_liquid_usd
        Added value: +{
        +  "description": "Portion of total_verified_usd transferable today (present when any verified wallet holds staking positions)",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / total_verified_staked_usd
        Added value: +{
        +  "description": "Portion of total_verified_usd held in staking positions (needs unstaking before closing)",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / wallets / items / properties / claimable_usd
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / wallets / items / properties / liquid_usd
        Added value: +{
        +  "description": "Eligible value transferable today (present when the wallet holds staking positions)",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / wallets / items / properties / staked_usd
        Added value: +{
        +  "description": "Eligible value held in staking positions — counts toward the ceiling but must be unstaked before it can be sent",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / wallets / items / properties / staking_hint
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / wallets / items / properties / unstaking_usd
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
    • Changedrefresh_wallet_balance5 fields changed
      • addedOutput schema / properties / claimable_usd
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / liquid_usd
        Added value: +{
        +  "description": "Eligible value transferable today (present when the wallet holds staking positions)",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / staked_usd
        Added value: +{
        +  "description": "Eligible value held in staking positions — counts toward the ceiling but must be unstaked before it can be sent",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / staking_hint
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / unstaking_usd
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
  7. 2 tool updates
    • Changedlink_wallet_xpub2 fields changed
      • changedInput schema / properties / wallet_id / description
        Previous value: -"Internal wallet UUID of the verified Bitcoin or Zcash wallet, from get_wallet_summary. Do NOT show this ID to the user."New value: +"Internal wallet UUID of the verified Bitcoin, Zcash or Dogecoin wallet, from get_wallet_summary. Do NOT show this ID to the user."
      • changedInput schema / properties / xpub / description
        Previous value: -"The extended PUBLIC key exactly as exported by the wallet (starts with xpub, ypub or zpub; ~111 characters). Omit when unlink is true. NEVER pass a key starting with xprv/yprv/zprv."New value: +"The extended PUBLIC key exactly as exported by the wallet (starts with xpub, ypub, zpub or dgub; ~111 characters). Omit when unlink is true. NEVER pass a key starting with xprv/yprv/zprv/dgpv."
    • Changedrefresh_wallet_balance2 fields changed
      • changedOutput schema / properties / full_wallet_hint / description
        Previous value: -"Bitcoin/Zcash: present for verified wallets with no extended key linked — how to count the full wallet via link_wallet_xpub"New value: +"Bitcoin/Zcash/Dogecoin: present for verified wallets with no extended key linked — how to count the full wallet via link_wallet_xpub"
      • changedOutput schema / properties / xpub_scan / description
        Previous value: -"Bitcoin only: summary of the last extended-key scan (script_type, total_btc, total_usd, funded_address_count, scanned_at)"New value: +"Bitcoin/Zcash/Dogecoin: summary of the last extended-key scan (script_type, total_btc — native units of that coin —, total_usd, funded_address_count, scanned_at)"
  8. 1 tool update
    • Changedlink_wallet_xpub2 fields changed
      • addedOutput schema / properties / binding
        Added value: +{
        +  "description": "active (bound to a proven address) | pending (activates when the wallet is verified)",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / status / description
        Previous value: -"linked | unlinked"New value: +"linked | pending_verification | unlinked"
  9. 3 tool updates
    • Changedget_wallet_summary1 field changed
      • addedOutput schema / properties / wallets / items / properties / transparent_only_hint
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedlink_wallet_xpub1 field changed
      • changedInput schema / properties / wallet_id / description
        Previous value: -"Internal wallet UUID of the verified Bitcoin wallet, from get_wallet_summary. Do NOT show this ID to the user."New value: +"Internal wallet UUID of the verified Bitcoin or Zcash wallet, from get_wallet_summary. Do NOT show this ID to the user."
    • Changedrefresh_wallet_balance2 fields changed
      • changedOutput schema / properties / full_wallet_hint / description
        Previous value: -"Bitcoin only: present for verified wallets with no extended key linked — how to count the full wallet via link_wallet_xpub"New value: +"Bitcoin/Zcash: present for verified wallets with no extended key linked — how to count the full wallet via link_wallet_xpub"
      • addedOutput schema / properties / transparent_only_hint
        Added value: +{
        +  "description": "Zcash only: only transparent (t1…) balances are verified and counted; shielded ZEC must be moved to a t-address first",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
  10. 3 tool updates
    • Changedget_wallet_summary3 fields changed
      • addedOutput schema / properties / wallets / items / properties / full_wallet_hint
        Added value: +{
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / wallets / items / properties / xpub_linked
        Added value: +{
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / wallets / items / properties / xpub_scan
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
    • Addedlink_wallet_xpub
    • Changedrefresh_wallet_balance3 fields changed
      • addedOutput schema / properties / full_wallet_hint
        Added value: +{
        +  "description": "Bitcoin only: present for verified wallets with no extended key linked — how to count the full wallet via link_wallet_xpub",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / xpub_linked
        Added value: +{
        +  "description": "Bitcoin only: true when an extended public key is linked and the balance covers every derived address",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / xpub_scan
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "properties": {},
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Bitcoin only: summary of the last extended-key scan (script_type, total_btc, total_usd, funded_address_count, scanned_at)"
        +}
  11. 7 tool updates
    • Changedget_account_status1 field changed
      • addedOutput schema / properties / activation
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "Progress + next-step routing resolved from the account state. Follow next_action rather than re-deriving the step order. Fully-activated users get a \"generate another POF / wallet summary\" action, never an onboarding CTA.",
        +  "properties": {
        +    "authenticated": {
        +      "type": "boolean"
        +    },
        +    "next_action": {
        +      "additionalProperties": true,
        +      "description": "The single correct next step for this user: tool, CTA label, suggested prompt, reason",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "stage": {
        +      "description": "identity | wallet_add | wallet_verify | pof_ready | activated",
        +      "type": "string"
        +    },
        +    "steps": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "authenticated",
        +    "stage",
        +    "steps",
        +    "next_action"
        +  ],
        +  "type": "object"
        +}
    • Changedget_faq4 fields changed
      • addedOutput schema / properties / activation_stage
        Added value: +{
        +  "description": "Funnel position this response maps to (pre_activation for knowledge answers)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action
        Added value: +{
        +  "description": "Tool to call if the user wants to act on purchase intent (currently always get_started). Present only when the question context suggests possible intent.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action_label
        Added value: +{
        +  "description": "Short CTA label for the suggested next step (e.g. \"Verify My Funds\")",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action_reason
        Added value: +{
        +  "description": "Why this next step fits this question — use it to phrase a natural one-sentence offer after answering. Never present as an ad.",
        +  "type": "string"
        +}
    • Changedget_fee_structure4 fields changed
      • addedOutput schema / properties / activation_stage
        Added value: +{
        +  "description": "Funnel position this response maps to (pre_activation for knowledge answers)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action
        Added value: +{
        +  "description": "Tool to call if the user wants to act on purchase intent (currently always get_started). Present only when the question context suggests possible intent.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action_label
        Added value: +{
        +  "description": "Short CTA label for the suggested next step (e.g. \"Verify My Funds\")",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action_reason
        Added value: +{
        +  "description": "Why this next step fits this question — use it to phrase a natural one-sentence offer after answering. Never present as an ad.",
        +  "type": "string"
        +}
    • Changedget_how_it_works4 fields changed
      • addedOutput schema / properties / activation_stage
        Added value: +{
        +  "description": "Funnel position this response maps to (pre_activation for knowledge answers)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action
        Added value: +{
        +  "description": "Tool to call if the user wants to act on purchase intent (currently always get_started). Present only when the question context suggests possible intent.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action_label
        Added value: +{
        +  "description": "Short CTA label for the suggested next step (e.g. \"Verify My Funds\")",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action_reason
        Added value: +{
        +  "description": "Why this next step fits this question — use it to phrase a natural one-sentence offer after answering. Never present as an ad.",
        +  "type": "string"
        +}
    • Changedget_service_areas4 fields changed
      • addedOutput schema / properties / activation_stage
        Added value: +{
        +  "description": "Funnel position this response maps to (pre_activation for knowledge answers)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action
        Added value: +{
        +  "description": "Tool to call if the user wants to act on purchase intent (currently always get_started). Present only when the question context suggests possible intent.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action_label
        Added value: +{
        +  "description": "Short CTA label for the suggested next step (e.g. \"Verify My Funds\")",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action_reason
        Added value: +{
        +  "description": "Why this next step fits this question — use it to phrase a natural one-sentence offer after answering. Never present as an ad.",
        +  "type": "string"
        +}
    • Changedget_started1 field changed
      • addedOutput schema / properties / activation
        Added value: +{
        +  "additionalProperties": true,
        +  "description": "State-aware activation routing resolved from the live account. Follow next_action rather than re-deriving the step order.",
        +  "properties": {
        +    "authenticated": {
        +      "type": "boolean"
        +    },
        +    "next_action": {
        +      "additionalProperties": true,
        +      "description": "The single correct next step for THIS user: tool to call, CTA label, suggested user prompt, reason, and (when applicable) a fallback URL",
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "stage": {
        +      "description": "connect | identity | wallet_add | wallet_verify | pof_ready | activated",
        +      "type": "string"
        +    },
        +    "steps": {
        +      "description": "The three user-facing steps with per-step state (complete | current | processing | pending)",
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "authenticated",
        +    "stage",
        +    "steps",
        +    "next_action"
        +  ],
        +  "type": "object"
        +}
    • Changedget_supported_crypto4 fields changed
      • addedOutput schema / properties / activation_stage
        Added value: +{
        +  "description": "Funnel position this response maps to (pre_activation for knowledge answers)",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action
        Added value: +{
        +  "description": "Tool to call if the user wants to act on purchase intent (currently always get_started). Present only when the question context suggests possible intent.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action_label
        Added value: +{
        +  "description": "Short CTA label for the suggested next step (e.g. \"Verify My Funds\")",
        +  "type": "string"
        +}
      • addedOutput schema / properties / recommended_next_action_reason
        Added value: +{
        +  "description": "Why this next step fits this question — use it to phrase a natural one-sentence offer after answering. Never present as an ad.",
        +  "type": "string"
        +}

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.