Skip to main content
Glama
voidly-ai

voidly-agent-wallet-mcp

Official
by voidly-ai

@voidly/agent-wallet

A locally held Base USDC wallet for agents. It exposes an ESM library and a stdio MCP server for receiving USDC, bounded x402 payments, and recovery of Voidpay Marketplace results. The 0.x API may change; review its spending limits and keep wallet recovery material in your own secret manager. Node.js 20 or newer is required.

Run the MCP server

After publication, install the exact package version in your agent project:

npm install --save-exact @voidly/agent-wallet@0.1.0
VOIDLY_WALLET_NETWORK=base-sepolia \
VOIDLY_WALLET_PER_CALL_USDC=0.02 \
VOIDLY_WALLET_DAILY_USDC=0.05 \
./node_modules/.bin/voidly-agent-wallet-mcp

For a reviewed source checkout, build and run it directly:

npm ci
npm run build
VOIDLY_WALLET_NETWORK=base-sepolia \
VOIDLY_WALLET_PER_CALL_USDC=0.02 \
VOIDLY_WALLET_DAILY_USDC=0.05 \
node dist/mcp.js

Configure your MCP host to run the installed binary or source command over stdio. VOIDLY_WALLET_STATE_DIR selects a private, durable directory for the encrypted backup, spend ledger, and Marketplace recovery records. Keep the same directory across restarts. Base Sepolia defaults to the production and staging Voidpay payment origins. To restrict a staging run, set VOIDLY_WALLET_ALLOWED_ORIGINS=https://x402-staging.voidly.ai. Base mainnet requires both VOIDLY_WALLET_NETWORK=base and an explicit comma-separated VOIDLY_WALLET_ALLOWED_ORIGINS list before startup.

Related MCP server: cardzero-mcp

MCP tools

Tool

Input

Result

wallet_generate_recovery_secret

{}

One random 32-byte secret. Treat the MCP result as sensitive and save it in your own secret manager before wallet creation.

wallet_create

{}

Create a wallet and store its encrypted backup before returning its address.

wallet_restore_local

{}

Restore the local encrypted backup using VOIDLY_WALLET_RECOVERY_SECRET.

wallet_restore_relay

Optional address or backupKey

Restore a client-encrypted Relay backup using the recovery secret and VOIDLY_AGENT_KEY.

wallet_address

{}

Loaded wallet address.

wallet_receive_info

{}

Address, network, and USDC asset for receiving funds.

wallet_funding_request

{amountUsdc?: string, expectedChainId?: number}

Base USDC EIP-681 transfer URI and locally generated SVG QR for the loaded wallet.

wallet_balance

{}

USDC balance from the configured Base RPC.

wallet_prepare_voidly_seller_registration

{}

Fetch and validate one Voidly seller-registration challenge, sign it with the loaded wallet, and return the fixed registration submit path and body. It does not submit registration.

wallet_pay_x402

{url, method?: "GET" | "POST", body?, maxAmountUsd?}

Bounded paid HTTP result, or a structured uncertainty result after a signed retry.

wallet_marketplace_attempts

{}

Retained quote and payment coordinates for this wallet.

wallet_recover_marketplace

{quoteId}

Fresh payer-authenticated result GET for the original Marketplace payment; no second payment.

wallet_backup_relay

{}

Save another encrypted backup in Relay memory; returns its backup key.

wallet_create needs a generated recovery secret. Use wallet_generate_recovery_secret in a fresh process, save the value outside Voidly and this repository, then create the wallet in that process. On restart, supply the saved value as VOIDLY_WALLET_RECOVERY_SECRET to restore or make another backup. Losing the secret makes the encrypted backup unusable. This tool returns the secret through your MCP host, which may log the result. Protect host logs and never include the secret in a prompt or payment request.

The default network is Base Sepolia. Per-call and UTC-day caps default to 1 and 5 USDC; set VOIDLY_WALLET_PER_CALL_USDC and VOIDLY_WALLET_DAILY_USDC lower for a bounded run. The wallet reserves the full authorization before signing. An uncertain result still uses that day's local budget. Payment requires a durable local spend ledger; VOIDLY_WALLET_MEMORY_ONLY=1 supports encrypted Relay backup and restore but refuses payment.

Preserve the full local state directory. Relay backup covers the encrypted wallet key, not the local spend ledger or Marketplace attempt records. Restoring the key alone does not restore recovery for earlier Marketplace purchases. If an MCP restore finds no local spend ledger, new payments pause until the next UTC day.

Fund this agent

Call wallet_funding_request after loading a wallet, or use await wallet.fundingRequest({ amountUsdc: '1.25', expectedChainId: 8453 }) from the library when the wallet is configured for Base mainnet. The result includes the agent address, chain ID, USDC contract address, EIP-681 uri, and qrSvg. Base mainnet uses chain 8453; Base Sepolia uses 84532. expectedChainId rejects a request for a different chain. amountUsdc is optional; positive values can have up to nine whole-number digits and six decimal places. With no amount, the URI still identifies a USDC transfer to the agent, and a compatible payer wallet should ask for the amount.

The QR is generated locally from the URI. It does not send a transaction, contact a network, reveal a key, or change the wallet's spending limits. Wallet support for EIP-681 token transfers and chain switching varies. Before approving a transfer, the payer must verify the chain, USDC contract, recipient address, and amount in their wallet. Do not treat a displayed QR or a wallet-open action as proof that funds arrived; check the balance or transaction separately.

Optional fiat purchase: An eligible operator can buy USDC through MoonPay into a wallet they own and control. If MoonPay offers USDC on Base in that checkout, the operator can then make a separate, authorized Base USDC transfer to the verified agent address using this funding request. Check the token, chain, destination, net amount, and fees in each flow. MoonPay handles its own identity checks and availability. This kit does not construct a MoonPay checkout or collect its payment or identity data. See MoonPay's purchase guide and US wallet terms.

MoonAgents Card is a separate virtual-card product backed by supported Solana assets. It does not fund this Base wallet or make a Voidpay x402 payment.

wallet_prepare_voidly_seller_registration takes no arguments. It uses the loaded wallet address to request a one-use registration challenge from https://x402.voidly.ai on Base mainnet or https://x402-staging.voidly.ai on Base Sepolia. That exact origin must also be in the configured origin allowlist. Before signing, the wallet checks the canonical SIWE message against that domain, its exact /v1/providers/challenge URI, the selected Base chain, the wallet address, the validity window, the registration resource, and the exact statement Authorize one Voidly marketplace mutation. This does not transfer funds. It returns {submitUrl, body: {payload: {}, message, signature}}, where submitUrl is the fixed origin's /v1/providers/register endpoint. The caller POSTs body to submitUrl; the tool does not submit registration, sign a listing mutation, transfer funds, or expose a general message signer.

Call wallet_pay_x402 only for an origin you intend to pay. For a Voidpay Marketplace service, use the listing's public callUrl, method: "POST", its JSON input as body, and a maxAmountUsd you accept. The live 402 challenge sets the payable terms; a catalog card is discovery data.

After a signed retry, paymentMayHaveSettled: true means do not pay again. When the result contains a Marketplace quoteId, preserve the local attempt record, use wallet_marketplace_attempts if needed, then call wallet_recover_marketplace with that quote. For other x402 services, quoteId and recoverWith can be null; this kit provides no built-in result-recovery tool for those payments. A delivered recovery includes verifiedStatus, the signed receipt, and returned body bytes. Check truncated, bodyReadError, and headerErrors before treating MCP output as complete. refund_owed is an obligation, not proof that a refund was sent.

Library entry point

import { AgentWallet } from '@voidly/agent-wallet' provides create, fromPrivateKey, and fromSigner. A wallet instance offers address, receiveInfo(), fundingRequest(), balance(), prepareVoidlySellerRegistration(), payX402(), marketplaceAttempts(), recoverMarketplace(quoteId), and backupToStore(secret, store). The package also exports the file and Relay backup stores, durable spend and attempt stores, and recovery-secret helpers. Library callers must configure the included durable stores or equivalent implementations before paying and must retain their recovery secret outside the package.

With fromSigner, seller registration and Marketplace recovery also require an EIP-191 signMessage method.

The built-in create and restore paths hold the plaintext key locally; optional Relay backup sends a client-encrypted wallet-key envelope. Relay can associate the backup with its wallet address and authenticated agent account; this path does not send the plaintext wallet key or recovery secret. fromSigner uses a caller-supplied signer, whose custody depends on its implementation. Spend caps govern calls made through this wallet only. Seller signing is limited to registration. Creating and activating a listing still require separately scoped signatures from a signer controlling the same payout address.

Available Tools

13 tools
wallet_addressB

Get the locally held wallet address.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It implies a read-only local lookup ('locally held'), which is the key behavioral fact, but discloses nothing about auth needs, failure modes, or return format. Adequate but thin for a zero-annotation 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?

A single short sentence with no padding and the key scope qualifier front-loaded. It is efficient, though borderline terse for a tool in a crowded wallet namespace.

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

Completeness2/5

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

For a getter with no output schema, the description should convey what is returned (the address string) and how it relates to sibling tools such as wallet_receive_info. Neither is provided, leaving real gaps given the size of the sibling set.

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 baseline this scores 4. There is nothing for the description to compensate for and no misleading parameter info.

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 ('Get the locally held wallet address') and adds scope ('locally held'). However, it doesn't explicitly differentiate from siblings like wallet_receive_info or wallet_balance, which also surface wallet-derived data.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no prerequisites, and no mention of alternatives among the many wallet_* siblings. An agent must guess when this is preferred over wallet_receive_info or wallet_balance.

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

wallet_backup_relayB

Encrypt the local key with the agent-held recovery secret, then store only ciphertext in Relay memory.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it does disclose a meaningful behavioral property: only ciphertext is written to Relay memory, never plaintext key material. It is silent on reversibility, idempotency, the required witness (the agent-held recovery secret), and whether the local key is left intact or removed after backup.

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?

A single sentence that front-loads the encryption step and then the storage step in causal order. Zero filler and no redundant restatement of the tool name.

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

Completeness3/5

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

For a zero-parameter, no-output-schema tool the shape is simple, and the ciphertext-only design is the key fact an agent needs. Still, it omits the dependency on an existing recovery secret and the relationship to the restore siblings, which matter for a key-material operation.

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 with 100% schema coverage, so there is nothing for the description to disambiguate. Baseline of 4 applies; no parameter semantics are needed or missing.

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 names specific verbs and resources: encrypt the local key, store ciphertext in Relay memory. It is far more concrete than the bare name. It does not, however, differentiate itself from the obvious counterpart sibling wallet_restore_relay, leaving the agent to infer the pairing.

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

Usage Guidelines2/5

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

There is no statement of when this should be called versus siblings like wallet_restore_local or wallet_restore_relay, and no stated prerequisite such as the pre-existence of a recovery secret from wallet_generate_recovery_secret. Usage is only implied by the action verb.

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

wallet_balanceA

Read the wallet USDC balance from the configured Base RPC.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It usefully discloses the data source (configured Base RPC), which tells the agent the network and that no arguments are needed, but it omits error/failure behavior (e.g., unconfigured RPC or unreachable node), whether results are cached, and whether any auth is required.

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?

A single front-loaded sentence with no filler. Every word (verb, resource, source) earns its place.

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?

For a zero-param read tool with no output schema, the description covers the essentials: what is returned (USDC balance) and from where (Base RPC). The only minor gap is failure-mode behavior, which is not critical for an agent to invoke 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?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. The description correctly implies no input is needed.

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 (Read) and resource (wallet USDC balance) with the data source (configured Base RPC). This clearly distinguishes it from siblings like wallet_address, wallet_receive_info, and wallet_funding_request, which concern addresses, receive details, and funding rather than balance reads.

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

Usage Guidelines3/5

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

The read-only nature is implied by 'Read', giving implied usage guidance, but there is no explicit when-to-use framing, no mention of prerequisites (e.g., wallet must be configured/created), and no reference to alternative siblings for related balance or address queries.

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

wallet_createB

Generate a Base wallet key locally and encrypt it under the agent-held recovery secret before returning.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that the key is generated locally, encrypted under the recovery secret, and only returned after encryption, which is meaningful safety context. It does not address failure behavior, idempotency, or what happens if a wallet already exists.

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?

A single, well-front-loaded sentence that leads with the action and ends with the return-time guarantee. Nothing is wasted.

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

Completeness3/5

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

For a zero-param mutation tool with no annotations and no output schema, the description covers the core mechanism but omits operationally relevant facts: the state of any pre-existing wallet, idempotency, and the shape of the returned value. Adequate but with clear gaps.

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 the baseline of 4 applies. The description correctly implies no input is needed and instead conveys the environmental precondition (recovery secret) the caller must already have.

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: generate a Base wallet key locally and return it encrypted. It implicitly distinguishes from siblings like wallet_restore_local/restore_relay by describing creation of a fresh key, but it never names those alternatives to force the distinction.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance. The phrase 'under the agent-held recovery secret' hints that wallet_generate_recovery_secret is a prerequisite, but this dependency is left for the agent to infer and no alternatives (restore paths) are mentioned.

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

wallet_funding_requestA

Locally generate a Base USDC EIP-681 funding URI and SVG QR for this wallet. This does not sign or submit a transfer.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountUsdcNo
expectedChainIdNo

TDQS

A3.9/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden; it does disclose the most safety-relevant trait — generation is local and no signature or transfer is submitted. It stops short of stating whether the wallet must already exist locally or whether any RPC/network access occurs.

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 short sentences, artifact and safety boundary front-loaded, with zero filler. Every clause earns its place.

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

Completeness3/5

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

With no annotations and no output schema, the description needs to cover more. It handles the destructive-action question well but leaves the return shape (URI string plus SVG payload?) and the expectedChainId guard behavior unstated.

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 0%, so the description must compensate. It implies the asset (Base USDC) and therefore the chain, but does not define the amountUsdc format (units, decimals, string encoding) or what expectedChainId actually guards against (presumably a mismatch check). Partial compensation only.

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 gives a specific verb (generate) and precise artifacts (Base USDC EIP-681 funding URI and SVG QR), which is far more informative than a generic 'funding request'. An agent can distinguish this from wallet_address or wallet_receive_info because the output artifacts are named exactly.

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

Usage Guidelines3/5

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

Usage is implied by the artifact produced, and the boundary statement 'does not sign or submit a transfer' tells the agent this is a non-transactional path. However, no sibling alternatives (e.g., wallet_receive_info) or selection conditions are named, so the agent must infer when to pick this over adjacent tools.

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

wallet_generate_recovery_secretA

Generate a one-time 32-byte recovery secret. Store it in the agent secret manager before creating a wallet; it is never sent to Voidly.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and delivers meaningful context: it is one-time, exactly 32 bytes, must be persisted in the agent secret manager, and is never transmitted to Voidly. It does not clarify whether a second call invalidates a prior secret, nor what the return value looks like, leaving a small gap for a security-sensitive operation.

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 tight sentences, front-loaded with the action and its key constraint (one-time, 32-byte) followed by the mandatory storage step. Every clause earns its place with no redundancy.

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?

For a zero-parameter, no-output-schema tool with no annotations, the description covers purpose, ordering relative to wallet_create, storage requirement, and the key privacy guarantee. The only omission is lifecycle edge cases (repeat invocation, errors), which is minor given the tool's simplicity.

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 the schema baseline is 4. There is nothing further for the description to disambiguate, and it introduces no misleading parameter-like instructions.

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 ('Generate a one-time 32-byte recovery secret') with concrete size and lifecycle detail. It also implicitly distinguishes itself from siblings by tying its use to the moment 'before creating a wallet', which no other sibling claims.

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 sequencing guidance ('Store it in the agent secret manager before creating a wallet'), which tells the agent when in the flow to call it. It stops short of naming alternatives or stating when-not to call it (e.g. whether it can be re-run), so it falls just below explicit when/when-not coverage.

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

wallet_marketplace_attemptsA

List locally retained Marketplace quote and payment keys for payer-authenticated recovery; never retries or pays.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose two non-obvious traits: keys are 'locally retained' and the call 'never retries or pays', establishing a side-effect-free read. It still doesn't state what authentication is concretely required or what happens on a pagination/empty result, so it is strong but not exhaustive.

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?

A single tight sentence front-loads the verb and resource, then appends the safety constraint after a semicolon. No filler, though the phrasing is dense enough that it reads slightly compressed.

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?

For a zero-parameter, annotation-free list tool with no output schema, the description covers what is enumerated and its non-destructive nature. Only the return shape (key count, format) is left unstated, which is a minor gap given the simplicity.

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 the schema is complete by construction and the baseline is 4. There is no parameter information for the description to add or omit.

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 ('List') and a precise resource ('locally retained Marketplace quote and payment keys'), which an agent can distinguish from siblings like wallet_recover_marketplace. It stops short of explicitly contrasting itself with those siblings, but the scope is unambiguous.

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

Usage Guidelines3/5

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

'for payer-authenticated recovery' implies the context in which to reach for it, and 'never retries or pays' rules out using it as an action tool. However, it never names an alternative (e.g. wallet_recover_marketplace) or states when NOT to use it, leaving the routing decision partly to inference.

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

wallet_pay_x402A

Pay a public HTTPS x402 resource with local USDC authorization, within configured per-call and daily limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
bodyNo
methodNo
maxAmountUsdNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses that funds come from local USDC authorization and that per-call/daily limits are enforced, which is real behavioral context. However, it omits critical traits for a money-spending tool: irreversibility, what happens on insufficient funds or failed payment, and any auth requirements beyond 'local'.

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?

A single front-loaded sentence with no filler; the core action and its constraints appear immediately.

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

Completeness2/5

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

For a mutation/spend tool with no annotations, no output schema, and 0% parameter coverage, the description is too thin. It should clarify what the call returns (payment receipt, status), failure modes, and how the amount limit interacts with maxAmountUsd.

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

Parameters2/5

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

Schema description coverage is 0% across 4 parameters, so the description must compensate. It hints at a resource URL and per-call limits (loosely mapping to url and maxAmountUsd) but says nothing about body, method, or the format/units of maxAmountUsd, leaving most parameters undocumented.

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 ('Pay') plus a specific resource type ('public HTTPS x402 resource') and the funding mechanism ('local USDC authorization'). This clearly distinguishes it from the other wallet_* siblings, which are all about wallet lifecycle, balances, or recovery rather than spending.

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

Usage Guidelines3/5

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

The description implies usage (pay an x402 resource, subject to per-call and daily limits) but names no alternatives and gives no when-not-to-use guidance. An agent can infer intent but not how to choose between this and, say, wallet_funding_request.

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

wallet_prepare_voidly_seller_registrationA

Fetch and sign only Voidly's exact seller-registration SIWE challenge; return the fixed submit URL and body without submitting.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It clearly discloses that it fetches and signs only the exact challenge, returns a fixed submit URL and body, and does not submit. It does not cover auth requirements, rate limits, or whether signing alters wallet state.

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?

A single sentence, front-loaded with the tool action and scoped by 'only' and 'without submitting.' Every phrase earns its place; there is no filler.

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?

For a zero-parameter preparation tool with no output schema, the description explains the inputs needed (none) and the return shape (fixed submit URL and body). It does not explain when to choose this over other wallet tools, but otherwise it is sufficient for correct invocation.

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?

There are zero parameters and the schema description coverage is 100%, so the baseline is 4. The description adds no parameter meaning because there are no parameters to describe.

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+resource: fetch and sign Voidly's exact seller-registration SIWE challenge, and return the submit URL/body without submitting. It is clearly not a tautology and is distinguishable from generic wallet tools, but it does not explicitly differentiate itself from any sibling by name.

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

Usage Guidelines3/5

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

Usage is implied: use this tool to prepare a Voidly seller-registration submission rather than to submit it. The 'without submitting' clause clarifies a boundary, but no alternative tool is named for the actual submission step and no explicit when-to-use/when-not-to-use guidance is given.

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

wallet_receive_infoA

Get the USDC receiving address and Base network information.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. The verb 'Get' strongly implies a read-only, side-effect-free lookup, which is meaningful signal, but the description says nothing about permissions, whether the wallet must be created first, or the response shape.

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?

A single front-loaded sentence with no filler, exactly sized for a no-argument getter.

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 no parameters, no annotations, and no output schema, the description is nearly sufficient: it names both the address and the network info that will be returned. It could say slightly more about what 'Base network information' contains, but nothing critical 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 there is nothing for the description to disambiguate; the baseline for a parameterless tool is 4.

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 ('Get') and resource ('the USDC receiving address and Base network information'), so the agent knows exactly what comes back. It does not differentiate itself from the sibling 'wallet_address', which sounds like it may overlap, so it stops short of a 5.

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

Usage Guidelines2/5

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

There is no guidance on when to call this versus 'wallet_address', 'wallet_balance', or 'wallet_funding_request', nor any stated preconditions (e.g. wallet must already exist). The agent must infer usage entirely from the name and description.

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

wallet_recover_marketplaceB

Sign a fresh payer recovery request for a locally retained Marketplace attempt; never sends a payment retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
quoteIdYes

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations the description carries the full burden, and it does disclose one meaningful trait: the operation signs only and never dispatches a payment retry. It omits permission requirements, whether signing consumes the retained attempt, idempotency, and any side effects on local state.

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?

One compact sentence, front-loaded with the action and its key safety caveat after the semicolon. No filler, though the dense domain phrasing trades some clarity for brevity.

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

Completeness2/5

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

For a signing tool with no annotations, no output schema, and an undocumented required parameter, the description leaves too much open: what the signed request is for, what the agent should do with it, and how to source quoteId are all unstated.

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

Parameters2/5

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

Schema coverage is 0% and the single parameter quoteId is never mentioned in the description. The phrase 'locally retained Marketplace attempt' loosely implies the identifier refers to a stored attempt, but the required 0x-prefixed 64-hex format and where to obtain the value are not addressed.

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 concrete verb (sign) and resource (payer recovery request) scoped to a 'locally retained Marketplace attempt', which sets it apart from siblings like wallet_marketplace_attempts. The multi-clause qualifier and jargon ('payer recovery request') keep it from being instantly self-evident, but the purpose is derivable.

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

Usage Guidelines3/5

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

Usage is only implied: the 'locally retained Marketplace attempt' qualifier narrows when this applies, and 'never sends a payment retry' excludes one nearby behavior. No sibling is named and no explicit when-to-use/when-not guidance is given, so the agent must infer the trigger condition.

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

wallet_restore_localB

Restore the local encrypted vault with the agent-held recovery secret.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and mostly does not discharge it. It never says whether restoring overwrites or destroys an existing vault, whether a vault must be absent first, whether the operation is reversible, or what happens on a bad secret. Only the fact that the secret is agent-held is disclosed.

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?

A single front-loaded sentence with zero waste; the operation and its key input are stated immediately. No padding or redundancy.

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

Completeness2/5

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

For a state-mutating recovery operation with no annotations and no output schema, the description is too thin. It omits the precondition (that the recovery secret must already exist), the effect on any existing local vault, and any success/failure signal, all of which an agent needs to call this safely.

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 no parameters, so there are no semantics to convey; the baseline for a zero-parameter schema is a 4. Nothing in the description misleads about inputs, though it also adds nothing needed since the schema is trivially complete.

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 (Restore) and resource (the local encrypted vault) plus the mechanism (the agent-held recovery secret). The word 'local' implicitly distinguishes it from the sibling wallet_restore_relay, but the contrast is never made explicit.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no prerequisites, and no named alternatives. It does not say to use wallet_generate_recovery_secret first, nor when to prefer this over wallet_restore_relay, leaving the agent to infer routing from the names alone.

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

wallet_restore_relayB

Restore the wallet locally from client-encrypted Relay memory using the agent-held recovery secret.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNo
backupKeyNo

TDQS

B3/5.0
Behavior3/5

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

With no annotations the description carries the full burden, and it does disclose the authorization requirement (an agent-held recovery secret) and that the payload is client-encrypted Relay memory. However, it omits key traits for a mutation tool: whether existing local wallet state is overwritten, what happens on failure, and whether the operation is reversible.

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?

A single tightly written sentence that front-loads the verb and scope, with no filler.

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

Completeness2/5

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

For a two-parameter, unannotated, no-output-schema tool with 0% parameter coverage, the description leaves the parameters, failure modes, and overwrite semantics unexplained. The mechanism sentence is a start but not enough for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0% and both parameters (address, backupKey) are documented only by regex patterns. The description vaguely references a 'recovery secret' without mapping it to backupKey or explaining the address role, so it does not compensate for the missing schema descriptions.

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 (restore), resource (wallet), source (client-encrypted Relay memory) and mechanism (agent-held recovery secret), which separates it from wallet_restore_local and the inverse wallet_backup_relay. It is clear what the tool does, though it never explicitly contrasts itself with the sibling restore path.

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

Usage Guidelines2/5

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

No when-to-use guidance. The existence of a sibling wallet_restore_local and wallet_backup_relay makes the routing decision non-obvious, yet the description offers no condition for choosing Relay restore over local restore.

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. 13 tool updatesv0.1.0
    • First observedwallet_address
    • First observedwallet_backup_relay
    • First observedwallet_balance
    • First observedwallet_create
    • First observedwallet_funding_request
    • First observedwallet_generate_recovery_secret
    • First observedwallet_marketplace_attempts
    • First observedwallet_pay_x402
    • First observedwallet_prepare_voidly_seller_registration
    • First observedwallet_receive_info
    • First observedwallet_recover_marketplace
    • First observedwallet_restore_local
    • First observedwallet_restore_relay

TDQS

A3.7/5.0

Scored across 13 tools

Disambiguation4/5

Most tools target clearly distinct actions (create, balance, pay, back up, restore). Minor overlap exists between wallet_address and wallet_receive_info, and the three backup/restore variants (wallet_backup_relay, wallet_restore_local, wallet_restore_relay) are close in purpose though descriptions differentiate their sources.

Naming Consistency5/5

Every tool follows a consistent wallet_ snake_case verb_noun pattern, including longer names like wallet_prepare_voidly_seller_registration. No mixing of conventions.

Tool Count5/5

13 tools sit comfortably within the well-scoped 3-15 range for a self-custody agent wallet. Each tool maps to a distinct lifecycle step with no redundant filler.

Completeness4/5

Coverage is strong: secret generation, creation, address, funding, balance, x402 payment, backup, and both local and relay restoration are present. A generic outbound transfer tool beyond x402 pay is absent, but the constrained design is intentional and workable.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Gives AI agents a smart-contract wallet on Base (USDC) with 10 stdio tools: create wallets, send USDC payments, pay x402-protected HTTP resources, and run ERC-8183 escrow Jobs for A2A service delivery.
    10
    12 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A non-custodial USDC wallet on Base exposed as seven tools: address, balance, check, pay, earnings, report and recover. Spending limits (per transaction, per day, per counterparty, plus a destination allowlist) are enforced in code between deciding and signing, and the server runs locally over stdio so the key never leaves the machine.
    1
    Apache 2.0