model context protocol

OneCheckout MCP for Mac

Let an AI agent, or your coding assistant, complete real checkouts. Buy a product, start a subscription, sign up for a paid plan, pay an invoice, add a card, all without the buyer's raw card number ever entering the agent's context, the chat, the logs, or OneText's servers.

What is an MCP?

An MCP (Model Context Protocol server) is a plug-in that an AI agent installs to gain new tools and capabilities. The OneCheckout MCP is the plug-in your agent installs and uses to make online purchases. Paste the install prompt into your agent's environment and it wires up our tools automatically.

01

Quick start

Paste this one prompt into any MCP-capable agent or coding assistant. It fetches the hosted server, follows the setup instructions it returns, and gives you a tour of the tools. There are no API keys to configure.

Prefer one-click setup or the raw endpoint? See Connect the MCP server.

02

When to use it

Use OneCheckout for any online task that requires entering a credit card. If the goal needs a card typed into a web page, this is the tool. If it doesn't involve a card, you don't need OneCheckout.

Buy ecommerce products

One-off purchases with size / color / quantity.

Start subscriptions & trials

Recurring plans with renewal terms reviewed first.

Sign up for SaaS / API plans

Paid developer plans, then store the key safely.

Add or update a card

Save a payment method on a merchant account.

Pay invoices

One-off checkout pages and outstanding balances.

Conditional purchases

“Buy if it drops under $X” while authorized.

03

Security model

The raw card number never reaches the agent's context, the chat transcript, the logs, or OneText's servers. This holds even when the user declines a OneText account.

Where the card actually lives

StageWhere it livesAgent sees
CaptureTyped into a local widget → OS KeychainNothing
TokenizePiped on-device to Spreedly via local shell toolsA non-sensitive spreedlyCardToken
Vault (optional)Address + token saved to OneText after consentConfirmation only
FillEncrypted from Keychain into the merchant page, decrypted in-pageNothing

The irreversible-action boundary

Keep the flow moving on your own: dismiss banners, click Continue, move page to page. Get exactly one explicit user confirmation immediately before the single irreversible action (placing an order, charging a card, starting a paid plan, or saving a card).

“Ready to place it: black jacket, size M, qty 1, standard shipping, $126.42 total. Reply yes and I'll submit.”

Hard rules · never do these

  1. 1.Never ask the user for their card number.
  2. 2.Never accept a card number pasted into the chat.
  3. 3.Never type a card number yourself.
  4. 4.Never put a card number, CVV, code, or auth token into feedback or any log.
  5. 5.Always capture with card_collect and fill with card_enter — even when the user declines OneText.

04

Prerequisites

OneCheckout runs the sensitive parts locally on the user's machine. Before any card work, the environment must have:

  • A supported OS with an OS Keychain (macOS security)
  • Local shell tools: security, openssl, jq
  • A browser automation driver to drive the merchant site

Verify these with environment_prepare as the very first call. It touches no card, account, or personal data.

05

The end-to-end flow

Every tool returns an instruction telling you what to do next. You drive the browser yourself between tool calls.

flow
environment_prepare    → verify local tooling is present
        │
card_task_start        → get the step-by-step plan for THIS task + open the site
        │
        ├─ (OneText account path — optional but recommended)
        │     auth_start        → text the user a code; relay the consent message
        │     auth_complete     → verify code; get authToken + details on file
        │     card_collect      → (only if no card on file) capture + tokenize a card
        │     user_details_save → vault address + card token for next time
        │
card_enter             → securely fill the card from the Keychain into the form
        │
[ONE confirmation]     → user OKs the single irreversible action
        │
place the order        → submit on the site
        │
feedback_send          → notes along the way + a final summary

06

Tool reference

All tools are namespaced mcp__onetext__* (shown here by short name). Several take an empty parameters: {} object. Pass it anyway; it's required.

environment_prepare

Verify the local environment. Call this first.

When

Once, at the very start of any card task; also when diagnosing local setup issues.

Input

input
{ "parameters": {} }

Returns

Confirmation that security, openssl, jq, and the browser driver are present — or an instruction to install what's missing.

card dataNo card or account data.
card_task_start

Start the task and get the full step-by-step plan.

When

Immediately after environment_prepare.

Input

input
{
  "parameters": {
    "task": "Buy one black size-M hoodie, standard shipping; stop for approval before placing the order.",
    "url": "https://example-store.com/products/hoodie"
  }
}

Returns

The complete ordered plan for this task, including which tool to call at each step.

card dataNo card or account data.
auth_start

Begin OneText auth by texting the user a verification code.

When

When the user wants a OneText account to vault details. Skippable if they decline.

Input

input
{ "parameters": { "phone": "+14155551212" } }

Returns

A consent message to relay to the user. Sends are rate-limited per phone and per IP.

card dataNo card data — phone-based 2FA only.
auth_complete

Verify the code and return what's already on file.

When

After auth_start, once the user gives you the code.

Input

input
{ "parameters": { "phone": "+14155551212", "code": "123456" } }

Returns

A short-lived authToken, the details already on file, and which fields are missing. Never returns raw card numbers.

card dataNo card data. Never log the code or authToken.
card_collect

Capture a new card on-device and tokenize it.

When

When no usable card is on file, a card failed, or on the declined-OneText path.

Input

input
{ "parameters": {} }

Returns

A non-sensitive spreedlyCardToken. The user types the card into a local widget → Keychain → tokenized to Spreedly.

card dataYes, but only on-device. Only the token comes back to you.
user_details_save

Vault billing / shipping details and the card token.

When

After card_collect (and auth_complete), with consent. Optional convenience.

Input

input
{
  "authToken": "<token from auth_complete>",
  "parameters": {
    "spreedlyCardToken": "<token from card_collect>",
    "billingAddress": {
      "name": { "firstName": "Jane", "lastName": "Buyer" },
      "address": {
        "street": "123 Market St",
        "city": "San Francisco",
        "state": "CA",
        "postcode": "94105",
        "country": "US"
      }
    }
  }
}

Returns

Confirmation the details / card were vaulted. Send only the fields auth_complete said are missing.

card dataVaults only the Spreedly token and address — never the raw card.
card_enter

Securely fill the card into the merchant form.

When

At the point the card field must be filled — after payment fields are visible.

Input

input
{ "parameters": {} }

Returns

The step-by-step secure fill procedure. Card is encrypted from the Keychain to a throwaway keypair inside the merchant page, then filled in-page.

card dataPlaintext only lives in the Keychain and the page's memory. Independent of OneText auth.
feedback_send

Tell OneText how the MCP is doing — as you go.

When

Throughout every run: when a step works, breaks, confuses you, or seems slow.

Input

input
{ "parameters": { "feedback": "..." } }

Returns

Confirmation the note was recorded. Freeform text up to 5000 chars.

card dataNever include a card number, CVV, code, or auth token.

07

Playbooks

Ready-to-go flows. Each shows the tool sequence, a real user request, and the single approval prompt. Between tool calls you also drive the browser.

First-time purchase with a new card

Buy this jacket in black, size medium, ship to my address. Stop before placing the order.

sequence
environment_prepare({ "parameters": {} })
card_task_start({ "parameters": {
  "task": "Buy 1 black jacket, size M, standard shipping",
  "url": "https://example.com/products/jacket"
}})
// → select black / M / qty 1 → add to cart → checkout
auth_start({ "parameters": { "phone": "+14155551212" } })
auth_complete({ "parameters": { "phone": "+14155551212", "code": "482913" } })
card_collect({ "parameters": {} })              // capture on-device
user_details_save({ "authToken": "<token>", "parameters": { "spreedlyCardToken": "<token>" } })
card_enter({ "parameters": {} })                // fill card in-page
// ONE confirmation ↓ then submit
feedback_send({ "parameters": { "feedback": "Jacket purchase; new-card flow clean." } })

approvalReady: black jacket, size M, qty 1, standard shipping, $126.42 total. Reply yes and I'll submit.

Returning buyer with a card on file (fast path)

Pay my outstanding invoice on billing.example.com.

sequence
environment_prepare({ "parameters": {} })
card_task_start({ "parameters": {
  "task": "Pay the outstanding invoice",
  "url": "https://billing.example.com/invoices"
}})
auth_start({ "parameters": { "phone": "+14155551212" } })
auth_complete({ "parameters": { "phone": "+14155551212", "code": "716244" } })  // → card ON FILE
// skip card_collect + user_details_save
card_enter({ "parameters": {} })
// ONE confirmation ↓ then submit

approvalInvoice #4471 for Example Co, $128.40 due today. Reply yes and I'll pay it with the saved card.

Guest checkout / user declines OneText

Just buy the $30 gift card — I don't want an account.

sequence
environment_prepare({ "parameters": {} })
card_task_start({ "parameters": {
  "task": "Buy the $30 gift card as a one-off, no account",
  "url": "https://shop.example.com/gift-cards"
}})
// → add to cart → guest checkout → fill shipping/contact
// SKIP auth_start / auth_complete / user_details_save
card_collect({ "parameters": {} })   // still capture on-device
card_enter({ "parameters": {} })      // still fill securely in-page
// ONE confirmation ↓ then submit

approvalPlace the $30 gift-card order? Reply yes.

Paid SaaS / API plan signup

Sign us up for the $49/mo developer plan, then add the API key to the app config.

sequence
card_task_start({ "parameters": {
  "task": "Sign up for the Pro API plan billed monthly; stop before confirming payment.",
  "url": "https://api-vendor.example/pricing"
}})
// stop for email/SMS OTP, CAPTCHA, SSO, or identity checks
// review plan, billing cycle, trial terms, renewal date, total due today
// after signup, store any API key in the project's secret manager — never in chat

approvalReady to start the $49/mo developer plan (renews monthly). Reply yes and I'll confirm payment.

08

Prompt library

Copy-and-paste starting points for real work, grouped by who they serve. Each is a natural-language prompt to hand your agent once the MCP is installed. They follow the same rules as the playbooks: the agent pauses for any verification or identity step, reviews the total and any renewal terms, and gets one explicit approval before an irreversible paid action.

Developers

Integrate LLMs

Connect through OpenRouter or add individual keys for every AI model directly into your environment vars.

Build Your Stack

Assemble the right SaaS and API tools like Supabase, AWS, Algolia, and more with credentials and user accounts integrated into your codebase and GitHub.

Founders

Register Phone Numbers and Send Texts

Get below-market rates for 1:1 and blast texting across SMS, MMS, and RCS, powered by OneText, or provision an iMessage sender through AgentPhone.

Incorporate & Launch

Launch your business end to end. Incorporate with Stripe Atlas, register a domain, and publish a website.

Accept Payments and Set Up a Corp Card

Start accepting payments with Stripe or PayPal and issue a corporate card for your team's spend.

Scale with Ads

Generate ad creative with Canva and launch campaigns across Meta, LinkedIn, and AppLovin.

Buy Swag

Design your team's swag and print it on demand, shipped straight to your door.

Buyers

Upgrade and Downgrade Services

Cancel under-used SaaS, manage free trials, and move plans up or down as your needs change.

Hunt for Deals

Snipe drops or wait for a price to hit your target across tickets, shopping, and resale sites.

Deliveries & Personal Shopping

Keep the groceries stocked and train your own AI stylist for effortless personal shopping.

Platforms

Give Users an Instant-Buy Button

Call OneCheckout on demand to let your users buy whatever they need, without leaving your product.

Build Your Plane in the Sky

Build agents that add new capabilities just-in-time, provisioning tools and services the moment they're needed.

09

Handling checkout failures

When a submit fails, don't guess. Inspect the page and classify. Every report should include the final status, the exact visible merchant error, the likely category, and the next recommended recovery.

invalid / declined cardCVV / expiry / card-field issueaddress / ZIP mismatchauthentication / 3DS / wallet code requiredinventory / merchant-validation issueautomation / browser limitationunknown

Declined card

“Failed: the merchant says ‘Your card was declined.’ Looks like a processor decline, not automation. Best next step: capture a fresh card and retry.”

OTP required

“Blocked: checkout sent a Shop Pay code to your phone. Send me the code and I'll enter it, or I can try the saved-card path.”

No visible error

“Failed: the submit returned to the payment form with no explicit error. Likely card validation / unknown. Best next step: retry once, then a fresh card if it repeats.”

10

Quick reference

GoalTool(s)
Prepare the machine for checkoutenvironment_prepare
Start a payment/order task + get the plancard_task_start
Authenticate the user by phoneauth_start, auth_complete
Collect a new card securelycard_collect
Save billing/shipping/card tokenuser_details_save
Fill the card into the merchant pagecard_enter
Send tooling/product feedbackfeedback_send

11

FAQ

What is an MCP?
An MCP is an installable plug-in that allows an AI agent to talk to a separate service. The OneCheckout MCP allows Mac-based AI agents to make purchases. If you paste the install prompt into your agent's environment it will set up our tools and capabilities.
What's the difference between the MCP and API?
The MCP allows agents to transact using a card saved into a secure desktop keychain. The API allows callers to ask our service to execute transactions on behalf of their users. We're building our API for platforms or consumer agents that want to let any user buy from any site.
Is it actually safe to give an AI agent my credit card?
No agent, AI model, or LLM ever sees your card details. The OneCheckout MCP keeps your card data in a local encrypted Keychain and optionally, securely tokenized in the OneText vault. Our architecture guides the AI agent to checkout and finds the card form, then uses deterministic code to securely pass your card details to the site.
Can I use any card? Do I get my points and rewards?
Yes. The MCP supports any valid U.S. credit or debit card. Transactions go through your real funding instrument, so you'll still earn your points, cashback, and rewards, and you retain all your dispute rights.
Where is my card number stored?
Your card's sensitive details live in your device's OS Keychain and, briefly, the merchant page's own memory during the fill. We never have access to your CVV/CVC security code, and it's never placed in the agent's context, the chat, the clipboard, or a log. You can also opt in to vault and tokenize your card server-side with OneText for when your device isn't available.
Can my agent buy something without asking me?
Only if you ask it to. We support human-not-present use cases like subscriptions, “buy when the price drops to X,” and multi-step “buy my flights and then get me a hotel + outing” transactions. You have to specifically authorize the MCP to allow this behavior. Otherwise, your agent will ask for confirmation each time.
What happens if my agent buys the wrong thing?
Ask the MCP to initiate a return, refund request, or dispute. Since it's your card, the process is completely normal. You can also ask the MCP to speed it along and contact the merchant if needed.
What does it cost?
There's no charge to use the MCP. Transactions run over your card with no added surcharge. Platform and API pricing will be announced soon.
What sites does it work on?
We haven't been able to stump it yet. It's worked everywhere we've tried. If you find a site we can't handle, please submit feedback through the MCP's feedback tool.
How is this different from giving my agent a virtual card?
Virtual cards are hacks. Instead of layering card on card or provisioning a special card just for your agent, we let you use your existing card. But if you do want to issue or provision a custom card, we can help with that too.
Do I need a OneText account?
No. You can just use the MCP and keep your card stored securely and exclusively on your own device. Declining OneText only skips account creation and server-side vaulting. You're welcome to vault with our parent OneText's server-side offerings, but you're free to decline.
Can I use a business card, or my users' cards?
Business cards work out of the box as long as you have access to them. For letting your own users pay with their cards, our forthcoming platform API is built explicitly for that use case.
Which devices, agents, and coding tools does it work with?
Right now you need a Mac to run the MCP. You can use Claude Code, Codex, OpenClaw, Hermes, or any MCP-capable runtime.
Can I keep my transactions private?
For MCP transactions, yes. By default, the MCP asks your agent to share feedback. Simply ask your agent to NOT do so and we won't know anything about your orders. Of course, even if you do share feedback, your card details remain encrypted on your device and securely tokenized in our vault. API purchases run on our server-side platform which does log transactions.
Can I share feedback?
Absolutely. Use the built in and on-by-default feedback method to tell us about your AI buying experience, report problems or request changes. Your input goes directly to our mostly-human dev team. You can also use our Gallery API to share successful orders. They just might show up in our home page feed.
What about UCP, x402, & KYA?
There are a lot of protocols! It's an exciting time for bots to be buying. But we're strongly opinionated that the right approach is to build universal-first. Each protocol is great, as long as the seller and buyer support it. We're building OneCheckout to work everywhere with the cards and checkout forms the web already has. Our intention is to layer in UCP data when helpful, to allow card to stablecoin for x402 and to implement the best new agentic tokens into a single wrapper. None of that matters if your users can't buy from normal card field sites, so that's where we've started. Watch this space. Oh and don't get us started on standards.
How does OneCheckout make money?
In some cases, we might recommend products or services where we can get you a great deal. For example, if you ask for texting we'll point you toward OneText, our parent company. We'll also charge for our forthcoming platform API.
Who's behind OneCheckout?
OneCheckout is a brainchild of OneText, the AI shopping, text-to-buy, and payments company. We're backed by Y Combinator, Coatue, Khosla, Lobster Capital, Pioneer Fund, Helium-3, and Good Friends. You can learn more about us on TechCrunch.
What's a spreedlyCardToken?
A non-sensitive token produced when the card is tokenized to Spreedly on-device. It stands in for the card in user_details_save. It is not the card number and can't be used to read it.
How many times does the agent confirm with the user?
Once, right before the single irreversible action. Everything else the agent does autonomously.
Can the agent speed things up by asking the user to paste their card?
No. That violates the hard rules and defeats the security model. Always use card_collect / card_enter so the card is filled securely and never touches the chat.

Ready to let your agent check out?

Connect the MCP server, or reach out with questions.