Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

sh.agentcard/agentcard

REMOTE · MCP.AGENTCARD.SH · SCANNED SEP 21

Prepaid virtual cards for AI agents: one-time cards, spend caps, human approvals.

Available components

+1 this week 90 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security89
Transport & Reachability100
Schema Quality & AI Usability69
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 10304 tokens (~177/item across 58 items; 58 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management98
  • Stability check failed: schema churn in the 30 days we've observed: 1 tool removals, 0 breaking changes, 0 auth/transport breaks, 8 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety96
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 6 of 7 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_preset" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Partial
  • An AI judge read all 59 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the sh.agentcard/agentcard MCP server?

sh.agentcard/agentcard is a hosted endpoint at https://mcp.agentcard.sh/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.agentcard.sh

# add to Claude Code
claude mcp add --transport http sh-agentcard-agentcard 'https://mcp.agentcard.sh/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "sh-agentcard-agentcard": {
      "url": "https://mcp.agentcard.sh/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "sh-agentcard-agentcard": {
      "type": "http",
      "url": "https://mcp.agentcard.sh/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.sh-agentcard-agentcard]
url = "https://mcp.agentcard.sh/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "sh-agentcard-agentcard": {
      "type": "remote",
      "url": "https://mcp.agentcard.sh/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add sh-agentcard-agentcard --url 'https://mcp.agentcard.sh/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  sh-agentcard-agentcard:
    url: "https://mcp.agentcard.sh/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "sh-agentcard-agentcard": {
      "Transport": "http",
      "Url": "https://mcp.agentcard.sh/mcp"
    }
  }
}
# add to Vellum
assistant mcp add sh-agentcard-agentcard -t streamable-http -u 'https://mcp.agentcard.sh/mcp'
// mcp.json
{
  "mcpServers": {
    "sh-agentcard-agentcard": {
      "type": "http",
      "url": "https://mcp.agentcard.sh/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 17 Sept 26 +1
    • A breaking change shipped without a version bump: still 1.0.0 security
    • Tool “allow_card_merchant” rewrote its description, which is the text the model reads security
    • Tool “create_card” rewrote its description, which is the text the model reads security
    • Tool “delete_preset” rewrote its description, which is the text the model reads security
    • Tool “get_card_preset” rewrote its description, which is the text the model reads security
    • Tool “get_wallet_link” rewrote its description, which is the text the model reads security
    • Tool “list_cards” rewrote its description, which is the text the model reads security
    • Tool “set_card_preset” rewrote its description, which is the text the model reads security
    • Tool “submit_kyc_document” rewrote its description, which is the text the model reads security
    • “get_card_preset” made “card_id” required, so existing callers break functional
    • “set_card_preset” made “card_id” required, so existing callers break functional
    • “save_preset” added an optional parameter “categories” cosmetic
    • “save_preset” added an optional parameter “currencies” cosmetic
    • “save_preset” added an optional parameter “mode” cosmetic
    • “add_funds” reworded the description of “payment_method” cosmetic
    • “allow_card_merchant” reworded the description of “card_id” cosmetic
    • “create_card” reworded the description of “preset” cosmetic
    • “get_card_preset” reworded the description of “card_id” cosmetic
    • “set_card_preset” reworded the description of “card_id” cosmetic
    • “allow_card_merchant” dropped the optional parameter “scope” cosmetic
    • “get_card_preset” dropped the optional parameter “for_app” cosmetic
    • “save_preset” dropped the optional parameter “only_categories” cosmetic
    • “save_preset” dropped the optional parameter “only_currencies” cosmetic
    • “save_preset” dropped the optional parameter “watch_categories” cosmetic
    • “save_preset” dropped the optional parameter “watch_currencies” cosmetic
    • “set_card_preset” dropped the optional parameter “for_app” cosmetic
  • 11 Sept 26 0
    • New tool “name_card” functional
    • New tool “recommend_card” functional
  • 10 Sept 26 0
    • Schema quality: 8585 → 10204 functional
    • Destructive annotations: 6 of 7 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_preset" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. functional
    • New tool “allow_card_merchant” functional
    • New tool “delete_preset” functional
    • New tool “get_card_preset” functional
    • New tool “list_presets” functional
    • New tool “save_preset” functional
    • New tool “set_card_preset” functional
    • “create_card” added an optional parameter “pending_card_id” cosmetic
    • “create_card” added an optional parameter “preset” cosmetic
    • “create_card” added an optional parameter “purchase_key” cosmetic
    • “create_card” reworded the description of “scope_preset” cosmetic
  • 8 Sept 26 0
    • Tool “create_card” rewrote its description, which is the text the model reads security
    • Tool “get_wallet_link” rewrote its description, which is the text the model reads security
    • Tool “list_cards” rewrote its description, which is the text the model reads security
    • “get_wallet_link” added an optional parameter “purpose” cosmetic
    • “create_card” reworded the description of “restart_setup” cosmetic
    • “create_card” reworded the description of “source” cosmetic
  • 27 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90.

  • 26 Aug 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 24 Aug 26 +1
    • A breaking change shipped without a version bump: still 1.0.0 security
    • Tool “add_card” was removed security
    • Tool “create_card” rewrote its description, which is the text the model reads security
    • Tool “get_instructions” rewrote its description, which is the text the model reads security
    • Tool “get_wallet_link” rewrote its description, which is the text the model reads security
    • Tool “list_added_cards” rewrote its description, which is the text the model reads security
    • Tool “remove_added_card” rewrote its description, which is the text the model reads security
    • “close_card” added an optional parameter “approval_id” cosmetic
    • “create_card” added an optional parameter “restart_setup” cosmetic
    • “create_card” reworded the description of “connected_card_id” cosmetic
    • “create_card” reworded the description of “source” cosmetic
  • 15 Aug 26 0
    • Tool “get_wallet_link” rewrote its description, which is the text the model reads security
    • “get_wallet_link” added an optional parameter “amount_cents” cosmetic
    • “get_wallet_link” added an optional parameter “merchant” cosmetic
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Probed https://mcp.agentcard.sh/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.agentcard.sh CN=WE1,O=Google Trust Services,C=US 26 Jul 2026 24 Oct 2026 ECDSA 256 ECDSA-SHA256 c7c62f1e2c602fc60e2e1649875e2365
SANs: mcp.agentcard.sh
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.agentcard.sh. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
sh. present 55297 8 Verified
agentcard.sh. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://mcp.agentcard.sh/.well-known/oauth-protected-resource/mcp"

Bearer resource_metadata="https://mcp.agentcard.sh/.well-known/oauth-protected-resource/mcp"

Protected resource metadata

Document https://mcp.agentcard.sh/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://mcp.agentcard.sh/mcp
Authorisation server https://mcp.agentcard.sh/

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.agentcard.sh/mcp Verified 200
http (plaintext) http://mcp.agentcard.sh/mcp HTTPS enforced 301 https://mcp.agentcard.sh/mcp
MCP tools · 58 exposed · ~10,270 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
start_kyc ~260

Begin (or resume) identity verification. Verification is CONVERSATIONAL: it starts with a photo of the user's government ID — the backend reads the printed details automatically and the user confirms every value. Only fields the ID does not carry are asked (like the SSN for US documents, or the national ID number for non-US ones); occupation/income questions are never asked. The only browser step is a short face scan at the end. Relay each step to the user as ONE SHORT message (one or two sentences — the current ask only, never the whole flow, never an unrequested link). Returns the next step, ID-photo upload options, and (for legacy hosted-flow accounts) a hosted verification URL instead.

NameTypeReqDescription
agreements_acceptedarrayKeys of the User Agreements the user explicitly accepted, one by one (the full required set from the agreements list — e.g. e_sign, account_opening_privacy, card_terms, accuracy, non_solicitation). O…
terms_acceptedbooleanDEPRECATED — use agreements_accepted. Pass true once the user has explicitly agreed to the card issuer's cardholder terms in the conversation.
NameTypeReqDescription
messagestringyesHuman-readable summary / next step.
missingFieldsarrayFields still needed from the user.
nextStepstring|nullConversational step: id_document | fields | terms | face_verification | review_pending | verified | rejected.
reasonstring|nullProvider reason on rejection.
statusstring"started", "verified", "rejected", or "unknown".
uploadUrlstringBrowser upload page for the ID photo (1h validity).
verificationUrlstringFace-scan page (conversational flow) or hosted verification URL (legacy flow), 48h validity.

No examples provided.

start_phone_verification ~126

Send (or re-send) the user's one-time funding verification code (the provider verifies the phone on the user's Agentcard identity, valid 60 days). add_funds already sends this code automatically when verification is needed — call this tool only to RE-send when the code never arrived (any unexpired code still works; sends are rate-limited). Returns the masked destination (text or email) and whether a code was sent; if the phone is already verified it says so and you go straight to add_funds. After the user reads back the code, call verify_phone.

Input schema present but exposes no named parameters.

NameTypeReqDescription
messagestringyesHuman-readable result or next step.

No examples provided.

start_support_chat ~31

Start a new support conversation and send the first message

NameTypeReqDescription
messagestringyesYour initial support message
NameTypeReqDescription
conversationIdstringThe ID of the newly created support conversation. Pass this to send_support_message or read_support_chat.
messagestringyesHuman-readable summary confirming the conversation was started.

No examples provided.

submit_kyc_document ~527

Submit the user's ID photo for identity verification. Ways in: (a) image data you hold programmatically (e.g. the user sent the photo in this chat and your platform exposes its bytes) — pass front_base64 (and back_base64 for a license back; its barcode reads most accurately); (b) local (stdio) mode — pass file_path/back_file_path and the file is read from disk; (c) neither — you get a secure upload link to hand the user. Do NOT ask the user what kind of document it is or where it was issued — the type and country are detected automatically from the photo; only relay a question if the result says the type could not be determined. Returns the fields read off the document — SHOW THEM TO THE USER for confirmation before continuing — plus whatever is still missing. If the result says NO identity details could be read, the image did not read as an ID at all: never insist to the user that it was their ID. Supported: JPEG/PNG/WebP up to 12MB (convert HEIC or HEIF photos first).

NameTypeReqDescription
back_base64stringBase64 image bytes of the license back (optional, recommended — the barcode reads most accurately). Same rule: programmatically sourced only.
back_file_pathstringLocal path to the back of the license (optional, recommended). Local/stdio connections only.
back_mime_typestringMIME type of back_base64. Defaults to image/jpeg.
document_typestringONLY pass this when the user themselves said what the document is ("here's my license") — otherwise omit it; the type is detected from the photo. Never ask up front.
file_pathstringLocal path to the ID photo (front of license, or passport photo page). Local/stdio connections only — remote connections without image data receive an upload link instead.
front_base64stringBase64 image bytes of the ID front (or passport photo page). ONLY pass base64 you received programmatically from your platform (e.g. an injected chat attachment) — never type or reconstruct image byt…
front_mime_typestringMIME type of front_base64 (image/jpeg, image/png, image/webp). Defaults to image/jpeg.
issuing_countrystring2-letter ISO country that issued the document (e.g. US, AR). ONLY when the user volunteered it — otherwise omit; it is detected from the photo. Never ask up front.
NameTypeReqDescription
extractedobjectFields read from the document (confirm with the user).
messagestringyes
missingFieldsarray
nextStepstring|null
statusstringprocessed | document_expired | upload_failed | upload_link_provided
unreadablebooleanTrue when the image was received but NO identity fields could be read from it — it did not read as an ID; never assert to the user that it was one.
uploadUrlstring
verificationUrlstring

No examples provided.

submit_kyc_fields ~452

Submit identity fields for verification: the ones the ID photo didn't carry (listed by missingFields — the tax/ID number always has to be asked since IDs don't print it; call it "SSN" only for US documents and "national ID number" otherwise), corrections to extracted values the user flagged, and the User Agreements acceptance (agreements_accepted, after presenting each agreement verbatim). That number is forwarded directly to the verification provider and never stored by Agentcard. NEVER ask about occupation, income, spending volume, or account purpose — those are filled automatically and must not be asked.

NameTypeReqDescription
address_citystringCity of the residential address.
address_country_codestring2-letter ISO country code (e.g. US).
address_line1stringResidential street address, line 1 (e.g. 123 Main St).
address_line2stringResidential street address, line 2 — apartment, suite, or unit. Omit if none.
address_postal_codestringPostal / ZIP code of the residential address.
address_regionstring2-letter state code for US (e.g. CA).
agreements_acceptedarrayKeys of the User Agreements the user explicitly accepted, one by one — the FULL required set from the agreements list in the previous step's result. Only pass after presenting each agreement verbatim…
date_of_birthstringYYYY-MM-DD
first_namestringLegal first name, exactly as printed on the ID document.
last_namestringLegal last name, exactly as printed on the ID document.
phone_numberstringE.164 with country code, e.g. +14155551234.
ssnstringUS documents: 9-digit SSN, dashes optional. Non-US documents: the national ID / tax number printed on the ID. Forward-only — never stored.
terms_acceptedbooleanDEPRECATED — use agreements_accepted. true once the user explicitly accepted the card issuer's cardholder terms.
NameTypeReqDescription
messagestringyes
missingFieldsarray
nextStepstring|null
verificationUrlstringFace-scan link, present once everything is collected.

No examples provided.

submit_user_info ~182

Submit the user's phone number and terms acceptance for a virtual card. Call this after create_card returns user_info_required. Do NOT ask the user for occupation, income, or account purpose — those are never asked. Identity fields (name, date of birth, SSN / national ID, address) belong to the KYC flow: create_card tells you whether it runs conversationally (start_kyc → ID photo → face scan) or via a hosted verification_url. After phone + terms are saved, retry create_card.

NameTypeReqDescription
phone_numberstringyesUser's phone number in international E.164 format with a country code (e.g. +1 555 123 4567, +44 7911 123456)
terms_acceptedbooleanyesMust be true — the user accepted the AgentCard cardholder terms of service
NameTypeReqDescription
messagestringyesHuman-readable confirmation that the user information was saved.
statusstringOutcome of the submission: 'saved' when the user information was stored successfully.

No examples provided.

surprise_me ~257

Buy the user something totally unexpected and very silly/stupid-fun under a small dollar cap (default $10, hard max $25). Great when the user cannot decide what to order (from DoorDash etc.) or just wants a fun surprise. It kicks off a shopping conversation that FIRST brainstorms deliberately stupid ideas, picks ONE genuinely unexpected item, builds the cart, and shows the item + exact total. It NEVER checks out by itself: the reply includes a conversation_id — relay the user's explicit confirmation ("yes, place it") through the `buy` tool on that SAME conversation_id, exactly like a normal order. Each surprise_me call starts a fresh surprise; use `buy` for all follow-ups (answers, tweaks, the confirmation).

NameTypeReqDescription
max_dollarsnumberHard spend cap in dollars, total including fees. Optional; default 10, values above 25 are clamped to 25.
merchantstringOptional merchant hint the surprise should come from, e.g. 'doordash'. Omit to let the agent pick.
vibestringOptional notes/vibe from the user, e.g. "make it food", "something for my desk", "they love ducks".
NameTypeReqDescription
conversation_idstringThe conversation id to thread back as conversation_id on the next buy call to continue the SAME order. Present on a successful assistant turn.
messagestringyesThe assistant's conversational turn (it may ask for the delivery address, show the cart + total, confirm, or report a placed order), or an error explanation.
messagesarrayThe same turn split into ordered messages for multi-bubble surfaces (each narration segment, then the final reply/confirmation). `message` is the same content consolidated; clients that show one bubb…
statusstringDiscriminator for the outcome. 'assistant_turn' when the buy loop replied; 'conversation_start_failed' or 'request_failed' on errors.

No examples provided.

update_card_limit ~218

Change a multi-use card's total spending limit. Raising it reserves the extra amount from the user's cash balance (top up with add_funds if short); lowering it frees the difference, but the new limit can never go below what the card has already spent. Single-use cards cannot be resized.

NameTypeReqDescription
approval_idstringApproval id from a prior approval_required response, once the user has approved. Only for cards created through ANOTHER app: first call without it (the user is emailed an approve link), then retry wi…
card_idstringyesThe multi-use card ID to resize.
new_limit_centsnumberDeprecated alias for spend_limit_cents. Prefer spend_limit_cents (matches the docs and the REST API).
spend_limit_centsnumberThe new TOTAL spending limit in cents (minimum 100). This is the lifetime cap, not a delta: a card that spent $20 of a $50 limit, resized to 8000, can spend $60 more.
NameTypeReqDescription
balanceCentsnumberThe remaining spendable balance in cents.
cardIdstringThe card ID.
messagestringyesHuman-readable result.
spendLimitCentsnumberThe new total limit in cents.
statusstring"updated" on success; an error discriminator otherwise (e.g. "limit_below_spent", "insufficient_collateral").

No examples provided.

upgrade_plan ~154

Start a paid-plan upgrade. Choose the target plan: 'basic' ($15/mo — 15 cards/month, up to $500 per card) or 'pro' ($100/mo — 50 cards/month, up to $1,000 per card). Defaults to 'basic' if omitted. Returns a Stripe Checkout URL the user must open in their browser to complete payment. After they finish checkout, the plan updates automatically; verify with get_plan. Use only when the user explicitly wants to upgrade. To cancel a paid plan instead, the gated tool cancel_plan also exists; call it by name even though it isn't in the tools list.

NameTypeReqDescription
planstringWhich plan to upgrade to. Defaults to 'basic'.
NameTypeReqDescription
checkoutUrlstringStripe Checkout URL the user must open to complete payment. Present only when status is checkout_required.
messagestringyesHuman-readable summary of the upgrade outcome.
planstringDisplay label of the target plan, e.g. 'Basic' or 'Pro'. Present when the requested plan is known.
statusstringDiscriminator for the outcome branch.

No examples provided.

verify_phone ~108

Check the one-time code the user received from start_phone_verification. On success the balance is unlocked for funding (the verification stays fresh for 60 days) — call add_funds next. A wrong or expired code returns a recoverable status so you can ask the user to re-check it, or call start_phone_verification to resend.

NameTypeReqDescription
codestringyesThe one-time code the user received, as a string (keep any leading zeros — do not send it as a number).
NameTypeReqDescription
messagestringyesHuman-readable result or next step.

No examples provided.

whoami ~123

Show who you are operating as: the authenticated AgentCard account's email, user id, name, plan, KYC + account status, member-since date, and how this session is connected (personal login vs a third-party OAuth app connection, with the app name). Call this when the user asks "who am I" / "which account is this", or before money-moving actions when you need to confirm the account. Read-only. KYC shown here is the stored snapshot — use get_kyc_status when you need the live, provider-checked state.

Input schema present but exposes no named parameters.

NameTypeReqDescription
accountStatusstringAccount standing: 'active' or 'suspended'.
connectionClientIdstring|nullOAuth client id of the connected app, when connectionType is oauth.
connectionClientNamestring|nullDisplay name of the connected OAuth app (e.g. "Claude"), when known.
connectionOrganizationIdstring|nullOrganization id, when connectionType is organization.
connectionTypestringHow this session authenticates: 'oauth' (third-party app connection), 'personal' (CLI/dashboard login), or 'organization' (a company's Agentcard integration acting for its end user).
emailstring|nullEmail of the authenticated account, or null for a phone-first account (e.g. signed up by text message).
kycStatusstring|nullRaw stored KYC state (e.g. approved, pending, requires_input), or null if never started.
kycVerifiedbooleanWhether identity verification (KYC) has passed (stored snapshot).
memberSincestringISO timestamp the account was created.
messagestringyesHuman-readable identity summary.
namestring|nullCardholder name ("First Last"), or null before KYC info is submitted.
planstringSubscription plan id, e.g. 'free', 'basic', or 'pro'.
subscriptionStatusstring|nullStripe subscription status (e.g. 'active', 'past_due'), or null on the free plan.
userIdstringAgentCard user id of the authenticated account.

No examples provided.

withdraw ~220

Withdraw cash from the user's balance, either to their saved bank account or to a crypto address on Base (USDC). Transfers are processed manually by the Agentcard team, usually within 1-3 business days; the user is emailed when it's sent. For a bank withdrawal, if the user has no saved bank account yet, call create_withdrawal_recipient first. For a crypto withdrawal, pass destination_address (a 0x Base address). ALWAYS confirm the amount and destination with the user before calling this.

NameTypeReqDescription
amount_centsnumberyesAmount to withdraw in cents (e.g. 2500 = $25.00). Range: $2.00 to $10,000.00.
destination_addressstringCrypto rail: a 0x-prefixed address on Base to receive USDC. When set, the withdrawal goes on-chain instead of to a bank account.
recipient_idstringBank rail: the saved bank account to pay (wrec_...). Omit to be shown the saved accounts.
NameTypeReqDescription
amountUsdstringRequested amount in USD.
messagestringyesHuman-readable result or next step.
withdrawalIdstringReference id of the created withdrawal request.

No examples provided.

Common questions

What is the sh.agentcard/agentcard MCP server?

sh.agentcard/agentcard is an MCP server listed in the public MCP registry as sh.agentcard/agentcard. Prepaid virtual cards for AI agents: one-time cards, spend caps, human approvals. This page covers its hosted endpoint (https://mcp.agentcard.sh/mcp).

Is the sh.agentcard/agentcard MCP server safe to use?

sh.agentcard/agentcard scores 90 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the sh.agentcard/agentcard MCP server expose?

sh.agentcard/agentcard exposes 58 tools: buy, surprise_me, get_instructions, whoami, list_cards, and 53 more. Their descriptions and schemas cost roughly 10,270 tokens of context every time the server is loaded.

Does the sh.agentcard/agentcard MCP server require authentication?

Yes. sh.agentcard/agentcard asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the sh.agentcard/agentcard MCP server still maintained?

sh.agentcard/agentcard is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.