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
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
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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
claude mcp add --transport http sh-agentcard-agentcard 'https://mcp.agentcard.sh/mcp'
{
"mcpServers": {
"sh-agentcard-agentcard": {
"url": "https://mcp.agentcard.sh/mcp"
}
}
} {
"servers": {
"sh-agentcard-agentcard": {
"type": "http",
"url": "https://mcp.agentcard.sh/mcp"
}
}
} [mcp_servers.sh-agentcard-agentcard] url = "https://mcp.agentcard.sh/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"sh-agentcard-agentcard": {
"type": "remote",
"url": "https://mcp.agentcard.sh/mcp",
"enabled": true
}
}
} openclaw mcp add sh-agentcard-agentcard --url 'https://mcp.agentcard.sh/mcp' --transport streamable-http
mcp_servers:
sh-agentcard-agentcard:
url: "https://mcp.agentcard.sh/mcp" {
"McpServers": {
"sh-agentcard-agentcard": {
"Transport": "http",
"Url": "https://mcp.agentcard.sh/mcp"
}
}
} assistant mcp add sh-agentcard-agentcard -t streamable-http -u 'https://mcp.agentcard.sh/mcp'
{
"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.
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
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 |
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 →
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.
| Name | Type | Req | Description |
|---|---|---|---|
| agreements_accepted | array | – | Keys 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_accepted | boolean | – | DEPRECATED — use agreements_accepted. Pass true once the user has explicitly agreed to the card issuer's cardholder terms in the conversation. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable summary / next step. |
| missingFields | array | – | Fields still needed from the user. |
| nextStep | string|null | – | Conversational step: id_document | fields | terms | face_verification | review_pending | verified | rejected. |
| reason | string|null | – | Provider reason on rejection. |
| status | string | – | "started", "verified", "rejected", or "unknown". |
| uploadUrl | string | – | Browser upload page for the ID photo (1h validity). |
| verificationUrl | string | – | Face-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.
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable result or next step. |
No examples provided.
start_support_chat ~31
Start a new support conversation and send the first message
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Your initial support message |
| Name | Type | Req | Description |
|---|---|---|---|
| conversationId | string | – | The ID of the newly created support conversation. Pass this to send_support_message or read_support_chat. |
| message | string | yes | Human-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).
| Name | Type | Req | Description |
|---|---|---|---|
| back_base64 | string | – | Base64 image bytes of the license back (optional, recommended — the barcode reads most accurately). Same rule: programmatically sourced only. |
| back_file_path | string | – | Local path to the back of the license (optional, recommended). Local/stdio connections only. |
| back_mime_type | string | – | MIME type of back_base64. Defaults to image/jpeg. |
| document_type | string | – | ONLY 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_path | string | – | Local 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_base64 | string | – | Base64 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_type | string | – | MIME type of front_base64 (image/jpeg, image/png, image/webp). Defaults to image/jpeg. |
| issuing_country | string | – | 2-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. |
| Name | Type | Req | Description |
|---|---|---|---|
| extracted | object | – | Fields read from the document (confirm with the user). |
| message | string | yes | – |
| missingFields | array | – | – |
| nextStep | string|null | – | – |
| status | string | – | processed | document_expired | upload_failed | upload_link_provided |
| unreadable | boolean | – | True 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. |
| uploadUrl | string | – | – |
| verificationUrl | string | – | – |
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.
| Name | Type | Req | Description |
|---|---|---|---|
| address_city | string | – | City of the residential address. |
| address_country_code | string | – | 2-letter ISO country code (e.g. US). |
| address_line1 | string | – | Residential street address, line 1 (e.g. 123 Main St). |
| address_line2 | string | – | Residential street address, line 2 — apartment, suite, or unit. Omit if none. |
| address_postal_code | string | – | Postal / ZIP code of the residential address. |
| address_region | string | – | 2-letter state code for US (e.g. CA). |
| agreements_accepted | array | – | Keys 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_birth | string | – | YYYY-MM-DD |
| first_name | string | – | Legal first name, exactly as printed on the ID document. |
| last_name | string | – | Legal last name, exactly as printed on the ID document. |
| phone_number | string | – | E.164 with country code, e.g. +14155551234. |
| ssn | string | – | US documents: 9-digit SSN, dashes optional. Non-US documents: the national ID / tax number printed on the ID. Forward-only — never stored. |
| terms_accepted | boolean | – | DEPRECATED — use agreements_accepted. true once the user explicitly accepted the card issuer's cardholder terms. |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
| missingFields | array | – | – |
| nextStep | string|null | – | – |
| verificationUrl | string | – | Face-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.
| Name | Type | Req | Description |
|---|---|---|---|
| phone_number | string | yes | User's phone number in international E.164 format with a country code (e.g. +1 555 123 4567, +44 7911 123456) |
| terms_accepted | boolean | yes | Must be true — the user accepted the AgentCard cardholder terms of service |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-readable confirmation that the user information was saved. |
| status | string | – | Outcome 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).
| Name | Type | Req | Description |
|---|---|---|---|
| max_dollars | number | – | Hard spend cap in dollars, total including fees. Optional; default 10, values above 25 are clamped to 25. |
| merchant | string | – | Optional merchant hint the surprise should come from, e.g. 'doordash'. Omit to let the agent pick. |
| vibe | string | – | Optional notes/vibe from the user, e.g. "make it food", "something for my desk", "they love ducks". |
| Name | Type | Req | Description |
|---|---|---|---|
| conversation_id | string | – | The conversation id to thread back as conversation_id on the next buy call to continue the SAME order. Present on a successful assistant turn. |
| message | string | yes | The 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. |
| messages | array | – | The 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… |
| status | string | – | Discriminator 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.
| Name | Type | Req | Description |
|---|---|---|---|
| approval_id | string | – | Approval 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_id | string | yes | The multi-use card ID to resize. |
| new_limit_cents | number | – | Deprecated alias for spend_limit_cents. Prefer spend_limit_cents (matches the docs and the REST API). |
| spend_limit_cents | number | – | The 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. |
| Name | Type | Req | Description |
|---|---|---|---|
| balanceCents | number | – | The remaining spendable balance in cents. |
| cardId | string | – | The card ID. |
| message | string | yes | Human-readable result. |
| spendLimitCents | number | – | The new total limit in cents. |
| status | string | – | "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.
| Name | Type | Req | Description |
|---|---|---|---|
| plan | string | – | Which plan to upgrade to. Defaults to 'basic'. |
| Name | Type | Req | Description |
|---|---|---|---|
| checkoutUrl | string | – | Stripe Checkout URL the user must open to complete payment. Present only when status is checkout_required. |
| message | string | yes | Human-readable summary of the upgrade outcome. |
| plan | string | – | Display label of the target plan, e.g. 'Basic' or 'Pro'. Present when the requested plan is known. |
| status | string | – | Discriminator 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.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | The one-time code the user received, as a string (keep any leading zeros — do not send it as a number). |
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | Human-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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountStatus | string | – | Account standing: 'active' or 'suspended'. |
| connectionClientId | string|null | – | OAuth client id of the connected app, when connectionType is oauth. |
| connectionClientName | string|null | – | Display name of the connected OAuth app (e.g. "Claude"), when known. |
| connectionOrganizationId | string|null | – | Organization id, when connectionType is organization. |
| connectionType | string | – | How this session authenticates: 'oauth' (third-party app connection), 'personal' (CLI/dashboard login), or 'organization' (a company's Agentcard integration acting for its end user). |
| string|null | – | Email of the authenticated account, or null for a phone-first account (e.g. signed up by text message). | |
| kycStatus | string|null | – | Raw stored KYC state (e.g. approved, pending, requires_input), or null if never started. |
| kycVerified | boolean | – | Whether identity verification (KYC) has passed (stored snapshot). |
| memberSince | string | – | ISO timestamp the account was created. |
| message | string | yes | Human-readable identity summary. |
| name | string|null | – | Cardholder name ("First Last"), or null before KYC info is submitted. |
| plan | string | – | Subscription plan id, e.g. 'free', 'basic', or 'pro'. |
| subscriptionStatus | string|null | – | Stripe subscription status (e.g. 'active', 'past_due'), or null on the free plan. |
| userId | string | – | AgentCard 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.
| Name | Type | Req | Description |
|---|---|---|---|
| amount_cents | number | yes | Amount to withdraw in cents (e.g. 2500 = $25.00). Range: $2.00 to $10,000.00. |
| destination_address | string | – | Crypto rail: a 0x-prefixed address on Base to receive USDC. When set, the withdrawal goes on-chain instead of to a bank account. |
| recipient_id | string | – | Bank rail: the saved bank account to pay (wrec_...). Omit to be shown the saved accounts. |
| Name | Type | Req | Description |
|---|---|---|---|
| amountUsd | string | – | Requested amount in USD. |
| message | string | yes | Human-readable result or next step. |
| withdrawalId | string | – | Reference id of the created withdrawal request. |
No examples provided.
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.