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

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

Available components

0 this week 90 Trust /100

Last scanned (4 hours ago)

Scores higher than 98% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Finance and Payments

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 Usability68
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 9985 tokens (~181/item across 55 items; 55 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 Management100
  • No destabilizing schema changes in the last 30 days.Pass
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
  • 5 of 6 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 56 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
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.

  • 31 Oct 26 0
    • Tool “add_funds” rewrote its description, which is the text the model reads security
    • “add_funds” reworded the description of “payment_method” cosmetic
  • 24 Oct 26 +1
    • Stability: fail → pass ▲ security
    • Tool “buy_list_merchants” 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
    • “get_wallet_link” reworded the description of “purpose” cosmetic
  • 21 Oct 26 0
    • Tool “buy_list_merchants” rewrote its description, which is the text the model reads security
    • “buy_list_merchants” added an optional parameter “cursor” cosmetic
    • “buy_list_merchants” added an optional parameter “kind” cosmetic
    • “buy_list_merchants” added an optional parameter “query” cosmetic
  • 8 Oct 26 0
    • Tool “get_card_details” rewrote its description, which is the text the model reads security
  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 25 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 24 Sept 26 0
    • Stability: pass → fail ▼ security
    • A breaking change shipped without a version bump: still 1.0.0 ▼ security
    • Tool “create_withdrawal_recipient” was removed ▼ security
    • Tool “list_withdrawal_recipients” was removed ▼ security
    • Tool “withdraw” was removed ▼ security
  • 23 Sept 26 0
    • Stability: fail → pass ▲ security
    • Tool “get_plan” rewrote its description, which is the text the model reads security
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 5 Nov 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 23 Sept 2026 23 Dec 2026 ECDSA 256 ECDSA-SHA256 2772b3a9b5a9d0ec13770e52ed51b488
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 34349 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 · 55 exposed · ~9,951 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
add_funds ~324

Generate a secure checkout link the user opens to add cash to their own balance (the money that funds new cards) via Apple Pay, Google Pay, or a bank transfer (ACH or wire from a US bank account), in USD. Calling this tool moves NO money and initiates NO transfer: it only prepares a single-use hosted payment page — the exact equivalent of the user clicking 'Add funds' in the dashboard. The user personally reviews, authorizes, and completes (or abandons) the payment in their own browser with their own payment method; you never see or handle payment credentials. If a one-time phone verification is needed first, this tool automatically sends the user a code and tells you where it went: ask the user for the code, call verify_phone with it, then call add_funds again.

NameTypeReqDescription
amount_centsnumberyesAmount to add in cents (e.g. 5000 = $50.00). Typical range: $20.00 to $10,000.00 (2000 to 1000000 cents); the exact range depends on the active funding provider and is returned by the API when the am…
payment_methodstring–Payment method: apple_pay or google_pay for an instant wallet checkout (ask which one their device has; apple_pay when unknown), or ach / wire when the user wants to pay by bank transfer from their U…
NameTypeReqDescription
amountUsdstring–Amount of the created checkout in USD.
checkoutUrlstring–Single-use payment link to hand the user verbatim (present when a checkout was created).
messagestringyesHuman-readable result or next step.

No examples provided.

allow_card_merchant ~92

Remember a merchant on a card so the next matching charge is allowed even when the card's category or merchant rules would otherwise deny it. One tool call — does not replace the rest of the preset.

NameTypeReqDescription
card_idstring–Card id (from list_cards).
patternstringyesMerchant name pattern to remember, e.g. "STARBUCKS" or "ODD CAFE".
NameTypeReqDescription
messagestringyes–
messagesarray–Card scope: where the remember is enforced.
needsNewCardboolean–Card scope: true when the card keeps a network category allowlist the remember cannot widen.
patternstring––
policyVersionnumber––
presetobject|null––
scopestring––
summarystring––

No examples provided.

approve_request ~195

Resolve a pending approval request (approve or deny) once the USER has decided. Use this after get_card_details or create_card returns a 202 requiring approval, or for a row from list_pending_approvals. For card_details and transaction, approval automatically completes the follow-up action and returns the result. For cross_app actions (asks from another app: close/pause/resume a card, change a limit, view details), approval records the user's consent and the REQUESTING app completes the action from its side when it retries with the approval id.

NameTypeReqDescription
actionstringyesThe original action type from the approval prompt (list_pending_approvals rows carry it as action).
approval_idstringyesThe approval request ID
decisionstringyesWhether to approve or deny the request
resource_idstringyesCard ID (for card_details and cross_app actions) or approval ID (for transaction)
NameTypeReqDescription
actionstring–The original action type from the approval prompt: 'card_details' or 'transaction'.
cardobject–The card resource returned by the approved follow-up action, when applicable.
decisionstring–The decision that was applied: 'approved' or 'denied'.
messagestringyesHuman-readable summary of the approval outcome and any follow-up action.
statusstring–Outcome of the request: 'denied', 'card_details', 'card_created', 'resolved' (cross_app approvals: consent recorded, the requesting app completes the action), 'personal_surface_only' (company-connect…

No examples provided.

buy ~521

Shop and check out, in natural language, across the merchants the user has linked (DoorDash, etc.). Pass the whole ask as `request` — e.g. "order a caesar salad from Zuni on DoorDash" — and this tool runs the shopping flow for you. It is CONVERSATIONAL: this tool RETURNS a `conversation_id`; pass that SAME `conversation_id` back on every follow-up (your reply to a question, "add a coke", "yes, check out") so it continues the SAME order. Omit it (or set new_order=true) only to start a fresh order. It will ask for the delivery address and have you confirm the cart and total. CHECKOUT (which charges a one-time card) happens ONLY after the user explicitly confirms in a later message — relay the confirmation through `request` ("yes, place the order") on the SAME conversation_id. RELAY REPLIES VERBATIM: when the user answers a question from this tool ("yes", "the 16 oz one", "use my other card"), pass their reply through `request` as-is on the same conversation_id — do NOT rewrite it into a fresh full order command; a rewritten command reads as a NEW ask and the confirmation never lands. NEVER use new_order (or drop the conversation_id) to recover from an error or a refused checkout — that discards the cart and any pending confirmation. Stay on the same conversation_id and follow the error's instruction instead; new_order is ONLY for the user starting an unrelated order. If it hands out a merchant login link (hosted connect), just reply on the SAME conversation_id once the user finishes (e.g. "done — I logged in") and it verifies the link itself. Logins started here have no pending_id, so the buy_connect / buy_connect_status pair does not apply to them. Call get_instructions FIRST for the current usage guide before your first buy.

NameTypeReqDescription
conversation_idstring–The conversation_id returned by a previous buy call. Pass it to continue the SAME order (keeps the cart + confirmation). Omit to start a new order.
new_orderboolean–Start a fresh shopping conversation instead of continuing the current one. Use when beginning an unrelated order (ignores any conversation_id).
requeststringyesThe natural-language ask or follow-up, e.g. "order a caesar salad from Zuni on DoorDash", "deliver to 123 Main St", or "yes, place the order".
NameTypeReqDescription
conversation_idstring–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.
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.
messagesarray–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…
statusstring–Discriminator for the outcome. 'assistant_turn' when the buy loop replied; 'conversation_start_failed' or 'request_failed' on errors.

No examples provided.

buy_connect ~166

Connect a merchant for shopping. For merchants that need a real login (e.g. DoorDash) this opens a secure hosted browser session and returns a URL the user opens to log in; after they finish, call buy_connect_status with the pending_id to confirm. Merchants that need no login (e.g. Agentcard Flights) come back ready immediately. Use this instead of buy_link_merchant for hosted-login merchants. This tool pairs only with buy_connect_status and only tracks logins it started itself; a login link handed out by the conversational `buy` tool has no pending_id and is verified inside that same buy conversation (the user replies there, e.g. "done — I logged in").

NameTypeReqDescription
merchantstringyesmerchant slug (e.g. doordash)
NameTypeReqDescription
loginUrlstring–URL the user must open to log in to the merchant. Absent for auto-link merchants.
merchantstring–The merchant slug, present when an auto-link merchant needs no login.
messagestringyesHuman-readable next step.
pendingIdstring–Session id to pass to buy_connect_status. Absent for auto-link merchants.
statusstring–Outcome: 'pending' (hosted login started), 'ready'/'linked' (auto-link merchant — no login needed), or 'error'.

No examples provided.

buy_connect_status ~145

Check the status of a hosted merchant login started with buy_connect. Returns linking (still in progress — call again in a few seconds), linked (success — the merchant is ready to shop), expired, or error. Pass the merchant and the pending_id from buy_connect. ONLY for logins started by the buy_connect tool: a login link handed out by the conversational `buy` tool has no pending_id — for those, reply to the same `buy` conversation ("done — I logged in") instead of calling this.

NameTypeReqDescription
merchantstringyesmerchant slug (e.g. doordash)
pending_idstringyesThe pending_id returned by buy_connect.
NameTypeReqDescription
cart_carried_overboolean–True when a cart built anonymously before linking was moved onto the linked account — re-show it (buy_view_cart) and re-confirm the total before checkout.
merchantstring–The merchant slug, present when linked.
messagestringyesHuman-readable status / next step.
statusstring–Connect state: 'linking', 'linked', 'expired', or 'error'.

No examples provided.

buy_list_merchants ~207

List where Agentcard shops. With no arguments: the merchants that use an account (DoorDash, flights, the retail stores) and whether this user has linked each, plus how many online stores Agentcard buys from with no account. To check one store, pass `query` with its name or domain (Nike, nordstrom.com): the search covers both kinds. An online store needs no link: ask buy for the product and name the store.

NameTypeReqDescription
cursorstring–The `next_cursor` an earlier call returned. Pass the same `query` and `kind` with it.
kindstring–Which merchants to list: `direct` (merchants that use an account), `catalog` (online stores with no account) or `all`. Without it, `direct`, or `all` with a `query`.
querystring–A store's name or domain, e.g. 'Nike' or 'nordstrom.com'.
NameTypeReqDescription
countnumber–Number of merchants returned on this page.
countsobject–How many merchants of each kind match the query, across every page.
merchantsarray–The merchants on this page: `direct` ones with this user's link status, then `catalog` online stores.
messagestringyesHuman-readable merchant list (or an error / empty note).
next_cursorstring|null–Pass as `cursor`, with the same `query` and `kind`, for the next page; `null` on the last page.
statusstring–Outcome: 'ok', 'empty', or 'error'.

No examples provided.

buy_unlink_merchant ~57

Disconnect a merchant — drops the saved session + link. The user must re-link (e.g. hosted connect) before shopping it again.

NameTypeReqDescription
merchantstringyesMerchant slug to disconnect (e.g. doordash).
NameTypeReqDescription
merchantstring–The merchant slug that was unlinked (or attempted).
messagestringyesHuman-readable unlink outcome.
statusstring–Outcome: 'unlinked', 'not_linked', or 'error'.

No examples provided.

check_kyc_document ~50

Check the conversational verification state — use after the user uploads their ID via the browser upload link (or any time you need to re-orient). Returns the current step and the fields still missing.

Input schema present but exposes no named parameters.

NameTypeReqDescription
messagestringyes–
missingFieldsarray––
nextStepstring|null––
uploadUrlstring––
verificationUrlstring––

No examples provided.

close_card ~196

Permanently close a virtual card. This is irreversible — the card cannot be reopened. Safe to call on an already-closed card (idempotent). The user's rewards card (the card their tokenback redeems onto) is close-protected: closing it returns its balance to the wallet but retires the card number the user may have on file at AI labs, so it requires confirm_rewards_card — set it ONLY after the user explicitly confirms they want the rewards card closed.

NameTypeReqDescription
approval_idstring–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_idstringyesThe card ID to close
confirm_rewards_cardboolean–Required to close the rewards card. Only set after the user explicitly confirms; never set it preemptively.
NameTypeReqDescription
approvalIdstring–Present when status is approval_required: pass it back as approval_id after the user approves.
cardIdstring–The ID of the card that was closed.
messagestringyesHuman-readable confirmation that the card was closed.
statusstring–Outcome discriminator; always "closed" on success.

No examples provided.

create_card ~1,014

The one card tool: get the user a virtual debit card for a purchase. Cards are live and charged for real when used. For a FIRST-TIME user it starts by putting the user's OWN card in their Agentcard vault (any Visa, Mastercard, Amex, or Discover from any country, no identity verification (KYC), no balance funding): the call returns a secure link (vault_started); send it to the user (they type the card once and lock it with their passkey or master password; Agentcard never sees the number). A vaulted card pays through the buy tool, where the user approves each purchase on their device with their passkey or master password; it never becomes a card number you type, so after vault_started (or vault_ready, when a card is already in the vault) use buy for purchases instead of calling create_card again. If the user specifically needs a card NUMBER, that is an Agentcard funded from their cash balance, which requires KYC the first time: only after the user agrees, call create_card with source "issued". Established users: the saved default decides (get_settings default_payment: their chosen added card, or the wallet balance); with no saved default, an active ADDED card wins, otherwise the cash balance. Per-call overrides: connected_card_id issues against a specific added card, source "issued" forces the cash balance, restart_setup mints a fresh vault link. If the balance is short on the issued path, top up with add_funds. Connections through a company OAuth client have NO card count or amount limits; only first-party personal accounts have per-plan caps. Call get_plan for the limits in effect.

NameTypeReqDescription
amount_centsnumberyesCard funding amount in CENTS, not dollars (minimum 100). 100 = $1.00 and 2500 = $25.00 — a value like 25 would be $0.25. Company-governed connections have no maximum; personal accounts are capped by…
connected_card_idstring–Multi-card: issue against a SPECIFIC added card (an id from the user's added cards, see list_added_cards) instead of the newest active one. Omit for the default.
expires_atstring–Optional hard expiry for a multi-use card (ISO-8601 with timezone, e.g. "2027-01-01T00:00:00Z"). Must be in the future, at most 365 days out. The card closes automatically when it passes.
funds_sourcestring–Where the card funds come from. OMIT unless instructed: the server applies the right default (company-connected accounts use the company wallet automatically when the company enables it). company_flo…
pending_card_idstring–Only when retrying an approval_pending purchase whose preset has since changed: the cardId from that earlier answer, together with purchase_key. The older approval link is retired once the replacemen…
preset––Preset for this card: a template name (ai_labs, weekday_meals, cli_only, daily), comma-separated templates, a saved preset name/id, inline JSON privileges, or { name?, privileges }. Adds restrictions…
purchase_keystring–The purchaseKey from the same approval_pending answer as pending_card_id; the pair proves the retry is for that purchase.
restart_setupboolean–Set true ONLY when the user lost or never received a vault link, it expired (about 15 minutes), or they want to add ANOTHER card. Never needed on the first call or for normal retries. amount_cents is…
scope_presetstring–Silent alias for preset 'ai_labs': a multi-use card restricted to AI-lab merchants (OpenAI, Anthropic, Gemini); charges anywhere else are declined at authorization. AI cards earn boosted tokenback on…
sourcestring–Force the card to be funded from the user's cash balance (the issued path: KYC + wallet funding) even when they have an added or vaulted card or would otherwise be offered the vault. Use it only afte…
typestring–Card behavior. 'single_use' (default) closes after its first approved charge — right for one-off purchases. 'multi_use' stays open across charges until its total limit is spent — right for subscripti…
NameTypeReqDescription
approvalIdstring–The approval request ID to pass to approve_request. Present only when status is "approval_required".
approvalUrlstring–The passkey approval link to send to the user. Present only when status is "approval_pending".
attachUrlstring–The secure link the user opens to finish an older add-card enrollment. Present only when status is "attach_started".
balanceCentsnumber–Card balance in cents. Present only when status is "created".
balanceDollarsstring–Card balance formatted as USD dollars, e.g. "12.50". Present only when status is "created".
cardIdstring–The new card ID. Present only when status is "created".
cardStatusstring–Card status, e.g. "active". Present only when status is "created".
expiresAtstring–When the link expires (ISO 8601). Present when status is "vault_started" or "attach_started".
expirystring–Card expiry (MM/YY). Present only when status is "created".
last4string–Last four digits of the new card. Present only when status is "created".
maxAmountCentsnumber–The issuing rail's per-card ceiling in cents. Present when status is "limit_reached" because the amount exceeded that ceiling; retry with amount_cents at most this value.
messagestringyesHuman-readable result or guidance for the next step.
missingFieldsarray–What is missing when status is "user_info_required" (e.g. "termsAccepted", "consent").
pendingCardIdstring–The parked card awaiting the passkey. Present only when status is "approval_pending"; pass it back as pending_card_id on the retry, with purchaseKey as purchase_key.
presetobject|null–Preset summary for the new card, or null when unrestricted. Present when status is "created".
purchaseKeystring–The purchase's key. Present only when status is "approval_pending"; pass it back as purchase_key with pending_card_id.
reasonstring–On "issuing_suggested" (legacy servers only; current servers route every first-time user to the vault instead): why the card could not be added. On "kyc_required": why the previous identity-verificat…
sourcestring–"connected" when the card was created against the user's added card. Absent for wallet-funded cards.
statusstring–Outcome discriminator: "created" (card issued), "vault_started" (first-time setup: send vaultUrl to the user; once their card is in the vault, purchases go through buy, not create_card), "vault_ready…
vaultCardsnumber–How many cards the user already holds in their vault. Present only when status is "vault_ready".
vaultUrlstring–The secure link the user opens to put their card in their vault. Present only when status is "vault_started".

No examples provided.

delete_preset ~79

Delete a preset you saved (from save_preset). Refuses built-in template names — there's nothing to delete there. Cards already issued keep whatever rules they have; this only retires the name for future use. Refused while a card still inherits the name as a standing default.

NameTypeReqDescription
namestringyesThe saved preset name to delete.
NameTypeReqDescription
deletedboolean––
messagestringyes–

No examples provided.

get_balance ~61

The user's cash balance: the money that funds new cards. Provisions the balance account on first use. Users add cash with Apple Pay or Google Pay in USD; funds are held as USDC. (Their wallet, meaning the cards themselves, is list_cards.)

Input schema present but exposes no named parameters.

NameTypeReqDescription
balanceUsdstring–Spendable cash balance in USD (string decimal).
confirmingUsdstring–Deposit clearing on-chain, not yet spendable (present only mid-deposit).
messagestringyesHuman-readable balance summary.
statusstring–Balance account status.

No examples provided.

get_card_balance ~63

The live balance of ONE virtual card (the user's overall cash balance is get_balance). Prefer this over get_card_details when you only need to verify available funds: it is faster and does not expose sensitive card credentials.

NameTypeReqDescription
card_idstringyesThe card ID
NameTypeReqDescription
balanceCentsnumber–Available balance in cents.
balanceDollarsstring–Available balance formatted as USD dollars, e.g. "12.50".
cachedboolean–Whether the balance was served from a short-lived cache rather than fetched live.
messagestringyesHuman-readable balance summary.

No examples provided.

get_card_details ~152

Get decrypted PAN, CVV, expiry, and current balance for a specific card. Use this only when you need to fill in a payment form; prefer get_card_balance if you only need the balance. May require human approval before returning credentials. If approval is required, prompt the user and then call approve_request. Agentcard never stores an issued card's number or CVV; each call fetches them again.

NameTypeReqDescription
approval_idstring–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_idstringyesThe card ID
NameTypeReqDescription
approvalIdstring–The approval request ID to pass to approve_request. Present only when status is "approval_required".
balanceCentsnumber–Card balance in cents. Present only when status is "details".
balanceDollarsstring–Card balance formatted as USD dollars, e.g. "12.50". Present only when status is "details".
cardIdstring–The card ID.
cardStatusstring–Card status, e.g. "active" or "closed". Present only when status is "details".
expirystring–Card expiry (MM/YY). Present only when status is "details".
last4string–Last four digits of the card number. Present only when status is "details".
messagestringyesHuman-readable card details (or an approval-required prompt).
statusstring–Outcome discriminator: "details" when credentials were returned, "approval_required" when human approval is needed first, "not_accessible" when the card exists outside this connection's scope, "polic…

No examples provided.

get_card_preset ~64

Read a card's preset (spend limits, rate limits, allowed categories/merchants, time windows, and surfaces) as a plain-English summary. A card without a preset is unrestricted.

NameTypeReqDescription
card_idstringyesThe card id (from list_cards).
NameTypeReqDescription
cardIdstring––
messagestringyes–
presetobject|null–Preset summary, or null when unrestricted.

No examples provided.

get_instructions ~46

Call this FIRST; returns the latest usage guide for shopping with `buy` AND for operating the Agentcard account tools (cards, funding, your own card, KYC, support).

Input schema present but exposes no named parameters.

NameTypeReqDescription
messagestringyesThe latest buy usage guide / instructions text.

No examples provided.

get_kyc_status ~63

Check the user's identity verification (KYC) status. Returns whether they are verified and, if not, the current state plus the conversational next step. Use this to poll after the user does the face scan, or any time create_card reports kyc_required.

Input schema present but exposes no named parameters.

NameTypeReqDescription
messagestringyesHuman-readable status / next step.
missingFieldsarray––
nextStepstring|null–Conversational next step when the flow is in progress.
reasonstring|null–Failure reason from the verification provider when one exists.
statusstring|null–Raw KYC state: "verified", "pending", "requires_input", "duplicate_identity", "canceled", or null if never started.
verificationUrlstring––
verifiedboolean–True when identity verification has passed.

No examples provided.

get_plan ~121

Show the user's current subscription plan, card limits, and this month's usage. Call this before create_card when you need the per-card amount cap or remaining monthly quota, and ALWAYS before creating a multi-use card: multi-use cards are a paid-plan feature, so maxActiveMultiUseCards is 0 on Free and the mint is refused. Also call it whenever the user asks about their plan, limits, billing, or upgrading. To cancel a paid plan, the gated tool cancel_plan also exists; call it by name even though it isn't in the tools list.

Input schema present but exposes no named parameters.

NameTypeReqDescription
activeMultiUseCardsnumber–How many multi-use cards the user currently holds open (they hold their limit as collateral for their whole life, so closing one frees a slot).
cancelAtPeriodEndboolean–Whether the subscription cancels at the end of the current billing period.
cardsRemainingnumber|null–Cards remaining this month; null means unlimited.
cardsThisMonthnumber–Number of cards created this month.
currentPeriodEndstring|null–ISO date the current billing period ends, or null.
maxActiveMultiUseCardsnumber|null–How many multi-use cards may be open at once. 0 means multi-use cards need a paid plan and create_card with type "multi_use" will be refused; null means unlimited (company-governed).
maxCardAmountCentsnumber|null–The per-card cap in effect, in cents: the tighter of the plan cap and the issuing rail's own ceiling; null means no per-card cap at all.
maxCardAmountDollarsstring|null–The per-card cap in effect, formatted as USD dollars, e.g. "500.00"; null means no per-card cap.
maxCardsPerMonthnumber|null–Max cards allowed per month; null means unlimited (connections through a company OAuth client or organization have no card limits).
maxLifetimeOrdersnumber|null–Lifetime free-order quota; null means unlimited (paid plans).
messagestringyesHuman-readable plan + usage summary.
ordersPlacednumber–Orders placed (counts toward the free-order quota on Free).
planstring–Raw plan id, e.g. 'free', 'basic', or 'pro'.
planMaxCardAmountCentsnumber|null–The personal plan's per-card cap, in cents; null for company-governed connections (no plan cap).
planNamestring–Display label of the plan, e.g. "Basic ($15/mo)".
railMaxCardAmountCentsnumber|null–The issuing rail's own per-card ceiling for cards funded from the cash balance (source "issued"), in cents, when the rail this account mints on has one; enforced when such a card is created, not on p…
subscriptionStatusstring|null–Stripe subscription status (e.g. 'active', 'past_due'), or null on Free / when unavailable.

No examples provided.

get_rewards ~89

Show the user's tokenback: balance, lifetime earned, and recent activity. Tokenback pays tokens (1 token = 1¢ of credit value) on settled card spend. AI cards (create_card scope_preset: 'ai_labs') earn a boosted rate on AI-lab purchases, and companies can route a share of their earnings to their users as tokenback. Redeem with redeem_rewards.

Input schema present but exposes no named parameters.

NameTypeReqDescription
balanceTokensnumber–Current token balance (1 token = 1 cent).
lifetimeEarnedTokensnumber–Tokens earned all-time.
messagestringyesHuman-readable summary.
minRedeemTokensnumber–Minimum tokens per redemption.
redeemedTokensnumber–Tokens redeemed all-time.

No examples provided.

get_settings ~116

View the user's notification preferences (which email alerts they receive), their default payment source (which card or balance agents charge — check it before picking a funding source for them), their default delivery address (the wallet-level shipping address to use when buying physical goods for them — check it before asking them to dictate an address), and authorization settings (whether viewing card details or making transactions requires explicit approval). Authorization settings are read-only here; change the rest with the gated tool update_settings, calling it by name even though it isn't in the tools list.

Input schema present but exposes no named parameters.

NameTypeReqDescription
authorizationobject–Authorization (approval) settings — read-only.
default_paymentobject|null–The wallet-level default payment source: { source: 'balance' } or { source: 'connected', connected_card_id }. null = auto (an active added card wins, else the balance).
delivery_addressobject|null–The wallet-level default delivery address (street/city/state/zip + optional address2/phone/name), or null when unset.
messagestringyesHuman-readable settings summary.
notificationsobject–Email notification preferences.

No examples provided.

get_wallet_link ~321

The user's hosted wallet, as one shareable URL. Opens their Agentcard wallet in the browser: every card in one place, apply for an Agentcard card (identity verification runs right in the page). Mint it whenever the user needs a browser step (seeing cards, finishing verification when in-chat photos fail) and send them the URL. To ADD the user's own card, pass purpose "add_card": the link then opens their Agentcard vault card form directly (any card, typed once, locked with their passkey or master password, never seen by Agentcard) and works on personal logins too. Pass merchant + amount_cents to open the wallet ON the payment-approval sheet (the user picks a card and approves that exact charge) instead of the card list. Short-lived: how long it works is in expiresIn (the exact moment is in expiresAt). Say expiresIn to the user, never a date, a clock time or a time zone, and mint a fresh one when it expires. The wallet link only works for app connections (OAuth).

NameTypeReqDescription
amount_centsinteger–Amount in cents. When present, the link opens on the payment-approval sheet for this charge.
merchantstring–Merchant name shown on the payment-approval sheet (with amount_cents).
purposestring–"wallet" (default) opens the hosted wallet. "add_card" opens the vault card form so the user can put their own card on file; single-use, for as long as expiresIn says.
NameTypeReqDescription
expiresAtstring–ISO time the link stops working.
expiresInstring–How long the link works from now, in words ("about 24 hours"), from expiresAt. Say this to the user, never expiresAt.
kindstring–purpose add_card only: how the vault link signs the user in. "connected" = a one-time code to their own phone or email; "handoff" = directly; "open" = passkey setup or passkey sign-in.
messagestringyesReady-to-send sentence containing the URL.
sandboxboolean–True when the connection is in test mode.
urlstring–The hosted wallet URL to share with the user.

No examples provided.

link_account ~237

Link or merge another Agentcard account that belongs to the same person. Use when the user says they already have an account under a DIFFERENT email or phone number — most often after identity verification (KYC) is rejected as a duplicate, which means that person already verified on another account. Two steps: (1) call with { type, identifier } to send a one-time code to that email/phone; (2) call again with the { ticket, code } to verify. If the identifier belongs to a different account, the two accounts are MERGED (the identity-verified account survives and gains the other's email/phone, so both sign in to one account); if no account has it, it is simply added to the current account.

NameTypeReqDescription
codestring–Step 2: the one-time code the user received.
identifierstring–Step 1: the email address or phone number of the other account to verify.
ticketstring–Step 2: the ticket returned by step 1.
typestring–Step 1: which kind of identifier the OTHER account uses.
NameTypeReqDescription
messagestringyesHuman-readable result or next step.

No examples provided.

list_added_cards ~107

List the user's ADDED cards (their own Visa/Mastercard cards enrolled via create_card's add-card flow — the funding source that charges their own card), with ids, brand, last4, expiry, and status. The row marked isDefault is what create_card charges when no connected_card_id is given — the user's chosen default card (set with update_settings default_payment), falling back to the newest active one. Not the same as list_cards (the virtual cards Agentcard issues).

Input schema present but exposes no named parameters.

NameTypeReqDescription
attachedCardsarray–Added-card enrollments, newest first. The row with isDefault true is the default for new cards; none is marked when the default payment is the wallet balance.
countnumber–Number of non-revoked added cards.
messagestringyesHuman-readable list (or an empty-state note).

No examples provided.

list_cards ~161

The user's wallet: every live card they hold, with IDs, last four digits, expiry, balance, and status, plus `vaultCards`: the user's OWN cards stored in their Agentcard vault (display fields only; a vaulted card pays through buy with an approval on the user's device (their passkey or master password) and never exposes a number). Start here to find available cards; if none are returned, call create_card. When the shared wallet is enabled, `wallet` lists every card across all connected apps and companies, each tagged with its source (kind personal/company, the issuing app, and the company where applicable); cards created by another app or company are read-only from this session: get_card_details and close_card will not work on them.

Input schema present but exposes no named parameters.

NameTypeReqDescription
cardsarray–The user's own virtual cards.
connectedAccountsarray–Read-only cards issued and managed by an organization the user is linked to.
countnumber–Total number of cards across the user's own cards and any connected-account cards.
messagestringyesHuman-readable list of cards (or an empty-state message).
vaultCardsarray–The user's own cards stored in their Agentcard vault. Display fields only; they pay through buy with an approval on the user's device (their passkey or master password) and never expose a card number.
walletarray–One-wallet view (present when the shared wallet is enabled): every LIVE card across personal and company sources, each tagged with its provenance. Closed cards are excluded; transactions carry histor…

No examples provided.

list_connections ~59

List the third-party apps the user has connected to their Agentcard account via OAuth (e.g. Kilo), including when each was connected and whether it is still active. Read-only. To revoke an app, call revoke_connection with its clientId.

Input schema present but exposes no named parameters.

NameTypeReqDescription
connectionsarray–The third-party apps connected to the user's account via OAuth.
countnumber–Number of connected apps.
messagestringyesHuman-readable summary of the connected apps.
statusstring–Result status: "no_connections" when none are connected, otherwise "ok".

No examples provided.

list_payment_methods ~90

List the saved payment methods (used only to pay for flight bookings, not for cards or adding funds). Returns each method with its id, brand, last 4 digits, and expiry, and marks the default one. Use setup_payment_method to add a new one. The gated tools set_default_payment_method and remove_payment_method also exist; call them by name even though they aren't in the tools list.

Input schema present but exposes no named parameters.

NameTypeReqDescription
countnumber–Number of saved payment methods.
defaultIdstring–The id of the payment method marked as default, if any.
messagestringyesHuman-readable summary of the saved payment methods.
paymentMethodsarray–The saved payment methods.
statusstring–Whether any payment methods are saved.

No examples provided.

list_pending_approvals ~102

List the user's PENDING approval requests: asks from connected apps (create a card, view full card details, close/pause/resume a card, change a limit) waiting on the user's decision. Surface each one to the user and let THEM decide; after the user answers, resolve with approve_request. NEVER approve or deny on your own — an approval is the user's consent, not yours. Personal sessions only; company-connected sessions have no personal inbox.

Input schema present but exposes no named parameters.

NameTypeReqDescription
approvalsarray–Pending, unexpired approval requests, newest first. Each is waiting on the user's decision.
countnumber–Number of pending approvals.
messagestringyesHuman-readable list of pending approvals (or an empty-state note).
statusstring–Present only when the list is unavailable: "personal_surface_only" for company-connected sessions.

No examples provided.

list_presets ~52

List every preset you can use by name: the built-in templates (ai_labs, weekday_meals, cli_only, daily) plus any you've saved yourself, each with a plain-English summary of its rules.

Input schema present but exposes no named parameters.

NameTypeReqDescription
messagestringyes–
presetsarray––

No examples provided.

list_transactions ~182

Transactions with amount, merchant, status, and timestamps. Pass card_id for one card's transactions; OMIT it for every card in the account (newest first, each row tagged with its card). Use limit and status to filter. The gated views list_all_transactions and list_transactions_by_payment_method also exist; call them by name even though they aren't in the tools list.

NameTypeReqDescription
card_idstring–A card ID for that card's transactions; omit for all cards in the account.
limitnumber–Max number of transactions to return (default 20)
offsetnumber–Skip this many (all-cards view pagination; ignored for a single card).
statusstring–Filter by transaction status (e.g. PENDING, SETTLED, DECLINED, REVERSED, EXPIRED, REFUNDED)
NameTypeReqDescription
countnumber–Number of transactions returned.
messagestringyesHuman-readable list of transactions (or a "no transactions" note).
transactionsarray–The transactions for the card, newest first.

No examples provided.

manage_subscription ~341

Manage a recurring meal/grocery SUBSCRIPTION (e.g. Locale) — NOT a one-time purchase, and no payment is taken (the subscription auto-bills the card on file at the merchant). action: 'menu_search' (browse the recurring menu; items flagged inPlan are covered by the plan), 'get_skip_dates' (list skipped/paused deliveries), 'skip'/'unskip' (one upcoming delivery date), 'set_skip_dates' (replace the full skip set; [] resumes all), 'update_setting' (change a setting). Locale settings: subscription_size (meals, e.g. 8), calorie_preference (low_calorie|both|moderate), diets (array), longevity_allergens (array), ingredient_allergies (array), default_window ('9am - 6pm'|'3pm - 7pm'|'9am - 12pm'), delivery_instructions (text). Link the merchant first.

NameTypeReqDescription
actionstringyesthe management action
datestring–skip/unskip: one ISO delivery date (YYYY-MM-DD)
datesarray–set_skip_dates: FULL set of ISO dates to skip ([] resumes all)
limitnumber–menu_search: max items
merchantstringyesmerchant slug (e.g. locale)
querystring–menu_search: term over the recurring menu (e.g. 'salmon'); '' lists everything
settingstring–update_setting: the setting key (see description)
value––update_setting: the new value (number, string, or array of strings)
NameTypeReqDescription
messagestringyesHuman-readable result or next step.

No examples provided.

name_card ~212

Tell the vault which card product one of the user's own stored cards is (e.g. "Chase Sapphire Preferred", "Amex Gold"), so smart purchases can rank it. Takes a vault card id (a `vaultCards` row from list_cards) and the product name as the user says it; the closest match is saved and echoed back. Confirm with the user when the match is not obviously right. Pass clear_product to forget the name, or smart_excluded to keep a card out of the ranking without removing it.

NameTypeReqDescription
card_idstringyesThe vault card id (from list_cards → vaultCards).
clear_productboolean–true = forget the product name. Do not combine with product.
productstring–The card product as the user says it, e.g. "Chase Sapphire Preferred" or "Amex Gold". Four characters minimum.
smart_excludedboolean–true = leave this card out of smart purchases; false = include it again.
NameTypeReqDescription
matchesarray–On no_match or an ambiguous name: the closest products found, to offer the user.
messagestringyesWhat was saved.
product_keystring|null–The saved product key.
product_namestring|null–The saved product name.
statusstringyes"named" | "cleared" | "updated" | "no_match" | "ambiguous" (several products match; nothing saved, ask the user) | "noop".

No examples provided.

pause_card ~140

Pause a multi-use card: temporarily blocks ALL new charges (reversible — use resume_card to unblock). Right for "stop this subscription for now" or a card the user suspects is compromised but is not sure. Only multi-use cards can be paused; single-use cards close after one charge and cannot be paused.

NameTypeReqDescription
approval_idstring–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_idstringyesThe card ID to pause (from list_cards or create_card).
NameTypeReqDescription
cardIdstring–The card ID.
messagestringyesHuman-readable result.
statusstring–"paused" on success; an error discriminator otherwise (e.g. "not_multi_use", "card_not_updatable").

No examples provided.

read_support_chat ~29

Read the message history of a support conversation

NameTypeReqDescription
conversation_idstringyesThe conversation ID
NameTypeReqDescription
countnumber–Number of messages returned.
messagestringyesHuman-readable rendering of the conversation history.
messagesarray–The messages in the conversation, oldest first.
statusstring–Outcome of the read: 'empty' when there are no messages yet, 'ok' when messages were returned.

No examples provided.

recommend_card ~200

Ask the vault which of the user's own stored cards earns the most for a purchase (smart purchases). Pass the merchant name, its website when you know it, and the amount. Returns the card id to use as card_id at checkout, the reason in plain words, and the runners-up. null when smart purchases is off for this account, no stored card has been named yet (see name_card), or nothing could be said; then pay as you would have. Never a card number.

NameTypeReqDescription
amount_centsnumber–Order total in cents, when known.
currencystring–ISO currency code, default usd. Non-USD purchases account for foreign transaction fees.
merchantstringyesThe merchant as the user would see it, e.g. "DoorDash".
merchant_urlstring–The merchant's website or checkout origin, e.g. https://www.doordash.com. Improves the category match.
NameTypeReqDescription
alternativesarray–Other stored cards with their estimated value in cents and reason.
card_idstring|null–The vault card to pay with (pass as card_id at checkout), or null.
categorystring|null–The spend category the merchant resolved to.
messagestringyesHuman-readable pick and reason.
reasonstring|null–Why, in one or two sentences the user can be told verbatim.

No examples provided.

redeem_code ~133

Redeem a promo code that adds money to the user's cash balance. Each code works once per user; the credit lands in the balance and becomes spendable within a minute or two. Some codes hold the money until the user verifies their identity — the claim still locks the code to this user instantly, and the credit lands automatically once KYC is approved (start_kyc begins verification). The gated tool list_codes shows the user's code history; call it by name even though it isn't in the tools list.

NameTypeReqDescription
codestringyesThe promo code exactly as the user provided it (case and dashes are forgiven).
NameTypeReqDescription
messagestringyesHuman-readable result or next step.

No examples provided.

redeem_rewards ~117

Redeem tokenback: the tokens' cash value (1 token = 1¢) lands on the user's rewards card as spending power. The rewards card is permanent and locked to AI-lab merchants (OpenAI, Anthropic, Gemini) — created on first redemption, topped up after. Check get_rewards first for the balance and the minimum. Ask the user before redeeming.

NameTypeReqDescription
tokensnumberyesHow many tokens to redeem (1 token = 1 cent, so 500 tokens = $5.00 of wallet credit).
NameTypeReqDescription
amountCentsnumber–Wallet credit in cents. Present when status is "redeemed".
deliveredCardIdstring–Rewards card the value landed on, when delivery completed inline. Absent = the value sits as wallet credit (it reaches the rewards card within a few minutes when delivery is enabled).
deliveredCardLast4string–Last 4 digits of the rewards card, when delivered inline.
messagestringyesHuman-readable result.
redemptionIdstring–The redemption ID. Present when status is "redeemed".
statusstring–"redeemed" on success; an error discriminator otherwise (e.g. "below_minimum", "insufficient_tokens", "redemption_in_progress").

No examples provided.

remove_added_card ~103

Remove (unenroll) one of the user's added cards. Irreversible for that enrollment: any virtual cards created against it are closed first, then the card is unenrolled at the network. ALWAYS confirm with the user before calling. Get ids from list_added_cards. The user can add the same card again later (create_card with restart_setup: true).

NameTypeReqDescription
attached_card_idstringyesThe id of the added card to remove (from list_added_cards).
NameTypeReqDescription
closedCardsnumber–How many virtual cards created against it were closed.
idstring–The id of the removed card.
messagestringyesHuman-readable confirmation or guidance.
statusstring–"revoked" on success.

No examples provided.

resume_card ~89

Resume a paused multi-use card so it accepts charges again. The inverse of pause_card.

NameTypeReqDescription
approval_idstring–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_idstringyesThe paused card ID to resume.
NameTypeReqDescription
cardIdstring–The card ID.
messagestringyesHuman-readable result.
statusstring–"active" on success; an error discriminator otherwise (e.g. "card_not_paused").

No examples provided.

revoke_connection ~73

Revoke a third-party app's access to the user's Agentcard account. Disconnects the app and invalidates its OAuth tokens; it must reconnect via OAuth to regain access. Pass the clientId shown by list_connections.

NameTypeReqDescription
client_idstringyesThe OAuth client ID of the app to revoke (from list_connections).
NameTypeReqDescription
clientIdstring–The client ID that was revoked.
messagestringyesHuman-readable outcome.
revokednumber–Number of OAuth tokens that were revoked.
statusstring–Result status: "revoked" when tokens were invalidated, "not_connected" when the app had no active access.

No examples provided.

save_preset ~644

Save your own preset — a named set of rules (spend caps, category/merchant/place/currency/day/hour/program restrictions) you can reuse by name in set_card_preset or create_card. Saving under a name you already used adds a new version: cards already using the old one keep it, new ones get the update. Pick a name other than the built-ins (ai_labs, weekday_meals, cli_only, daily). Pass either the rule fields below or a raw `privileges` array.

NameTypeReqDescription
categoriesstring–Comma-separated spend categories to allow, e.g. "meals,groceries" (meals, groceries, travel, software, ai, wellness, retail).
currenciesstring–Comma-separated purchase currencies to allow: ISO 4217 codes or common names, e.g. "usd,eur" or "dollars,euros,pounds,yen". In strict mode a purchase in another currency is refused at checkout and a…
modestring–What the preset does when a purchase breaks any of its rules: "strict" refuses it (the default), "watch" lets it through and tells the user once.
namestringyesA name for this preset, e.g. "meals-only".
only_daysstring–Comma-separated days to allow, e.g. "mon,tue,wed" or "weekdays"/"weekends".
only_fromstring–Comma-separated callers to allow, e.g. "cli,mcp" (cli, mcp, api, browser).
only_hoursstring–An hour range to allow, e.g. "9-17" (24-hour clock; defaults to UTC without timezone).
only_instring–Comma-separated places to allow charges from: a country ("US", "Canada"), a region ("europe", "eu", "north-america", "latin-america", "apac"), or a US state ("California", "US-CA"). A region expands…
only_merchantsstring–Comma-separated merchant name patterns to allow, e.g. "openai,anthropic".
per_daynumber–Spend cap per rolling 24 hours, in US dollars.
per_monthnumber–Spend cap per rolling 30 days, in US dollars.
per_weeknumber–Spend cap per rolling 7 days, in US dollars.
privilegesarray–Advanced: raw privilege objects instead of the rule fields above.
timezonestring–IANA timezone for only_days/only_hours (default UTC), e.g. "America/Los_Angeles". Always shown in summaries.
totalnumber–Lifetime spend cap, in US dollars.
NameTypeReqDescription
messagestringyes–
presetobject|null––

No examples provided.

send_support_message ~38

Send a message in an existing support conversation

NameTypeReqDescription
conversation_idstringyesThe conversation ID
messagestringyesYour message
NameTypeReqDescription
conversationIdstring–The ID of the conversation the message was sent to.
messagestringyesHuman-readable confirmation that the message was sent.

No examples provided.

set_card_preset ~184

Update a card's preset. Pass a template name (ai_labs, weekday_meals, cli_only, daily), a saved preset name (from list_presets), a comma-separated template list, or inline JSON / { name, privileges }. Pass null or "" to clear the card's preset (Agentcard-side checks stop; any limit already on the card network stays). Edits create a new version. The response reports what was applied on Agentcard vs what was updated on the card's spend limit, and whether the change needs a new card.

NameTypeReqDescription
card_idstringyesThe card id (from list_cards).
preset–yesTemplate name (ai_labs, weekday_meals, cli_only, daily), comma-separated templates, inline JSON privileges, or { name?, privileges }. Pass null or "" with card_id to clear that card's preset.
NameTypeReqDescription
agentcardOnlyarray––
messagestringyes–
messagesarray––
needsNewCardboolean––
policyIdstring––
policyVersionnumber––
presetobject|null––
pushedarray––
summarystring––

No examples provided.

setup_payment_method ~78

Save a payment method used ONLY to pay for flight bookings (the fare is charged to it via a hold at booking; no virtual card is created for flights). It does NOT fund cards or the cash balance — cards are funded from the balance (see add_funds). Returns a secure checkout URL the user must open to save their card details.

Input schema present but exposes no named parameters.

NameTypeReqDescription
checkoutUrlstring–Secure Stripe checkout URL the user must open to save their payment method.
messagestringyesHuman-readable summary of the result.
stripeSessionIdstring–Identifier of the Stripe Checkout session created for the setup.

No examples provided.

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_acceptedarray–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_acceptedboolean–DEPRECATED — 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.
missingFieldsarray–Fields still needed from the user.
nextStepstring|null–Conversational step: id_document | fields | terms | face_verification | review_pending | verified | rejected.
reasonstring|null–Provider reason on rejection.
statusstring–"started", "verified", "rejected", or "unknown".
uploadUrlstring–Browser upload page for the ID photo (1h validity).
verificationUrlstring–Face-scan page (conversational flow) or hosted verification page (legacy flow). The link opens for at least 24 hours; call start_kyc again for a fresh one.

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.

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'
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 55 tools: buy, surprise_me, get_instructions, whoami, list_cards, and 50 more. Their descriptions and schemas cost roughly 9,951 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 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.