Your store, in your assistant.
EmbPay runs a remote Model Context Protocol server. Point Claude, Cursor, Copilot or any MCP client at it and ask about sales, create products and payment links, or refund an order — in plain language, against your real account.
Two minutes, one API key.
The server speaks Streamable HTTP and authenticates with a Bearer token — the same ep_live_ or ep_test_ key the REST API uses.
EmbPay runs a remote MCP server, so an assistant that speaks MCP — Claude, Cursor, Copilot and others — can read your orders, create products and checkout links, issue refunds you confirm, and check that your store is wired up correctly. It authenticates with the same API key the REST API uses.
- 1Create an API key in Settings → API keys. Use an
ep_test_key first: the assistant then sees rehearsal data only. Leave “Allow this key to move money” off unless you want refund requests, archiving and live checkout links; refunds still wait for your approval in the dashboard. - 2Add the server to your client, replacing
ep_live_YOUR_KEYwith your key. - 3Ask: “What did I sell this week?” or “Make a $49 checkout link for my consulting call.”
One command; the key is stored in Claude Code's own config, not in your repo.
claude mcp add --transport http embpay https://www.embpay.com/mcp \ --header "Authorization: Bearer ep_live_YOUR_KEY"
Endpoint https://www.embpay.com/mcp · Streamable HTTP, stateless, Bearer auth · 100 requests per minute per key · every tool, documented
Nineteen tools, three levels of care.
Read tools are free to call. Write tools create things. Tools marked “money” exist only on keys created with “Allow this key to move money” — and even then a refund never runs on the assistant's word: it produces a link you open in your dashboard and approve.
| Tool | Level | What it does |
|---|---|---|
get_account | Read | Business name, plan and limits, Stripe status, key mode, connected channels. |
list_products | Read | Catalogue with each product's hosted checkout link. |
get_product | Read | One product plus its completed-order count. |
create_product | Write | New product with a shareable checkout link; respects plan limits. |
update_product | Write | Name, price, description, image or tags. Store-synced products are read-only. |
archive_product | Money key only | Take a product off sale (kept for order history). Needs a money-enabled key. |
list_orders | Read | EmbPay and WooCommerce orders, newest first, filterable by status, email, product, date. |
get_order | Read | One order with items, discounts, tax and licence key. |
refund_order | Money key only | Requests a refund and returns an approval link; the money moves only after you approve it in the dashboard. Needs a money-enabled key. |
list_customers | Read | Buyers grouped by email with order count and lifetime spend. |
get_sales_summary | Read | Revenue, refunds, failed payments and top products for a window, with the previous period. |
create_checkout | Money key only | A 24-hour payment link for ad-hoc line items (invoices, quotes). Live links need a money-enabled key; test links always work. |
get_checkout | Read | Whether a checkout session has been paid. |
list_coupons | Read | Discount codes with usage and status. |
create_coupon | Write | Percentage or fixed-amount code with optional cap and expiry. |
deactivate_coupon | Money key only | Stop a code being accepted. Needs a money-enabled key. |
list_abandoned_carts | Read | Buyers who left checkout, with recovery-email history. |
list_events | Read | The event log: checkout.completed, payment_failed, refunded, dispute. |
list_webhook_endpoints | Read | Where events are pushed and how deliveries are doing. |
Money is always an integer in the currency's smallest unit (2500 = $25.00). A test key sees only rehearsal orders; a live key sees and moves real money. The server also publishes a embpay://docs/conventions resource with these rules.
Things you can just ask.
“How did this week compare to last?”
get_sales_summary — revenue, refunds, failed payments, top products, both periods.
“Make a $49 link for a strategy call with Sam.”
create_checkout with Sam's email — a 24-hour hosted payment page comes back.
“Add a Notion-templates product at €19.”
create_product — returns the checkout link to share straight away.
“Refund order #… — they bought twice.”
refund_order sends you an approval link; the refund runs when you click Approve in your dashboard.
“Is my WooCommerce store still connected?”
get_account and list_webhook_endpoints — last delivery, failures, store host.
“Who are my top ten customers?”
list_customers — grouped by email with lifetime spend.
The usual ones.
- What is MCP?
- The Model Context Protocol is an open standard that lets an AI assistant call tools on a server. EmbPay hosts one, so the assistant you already use can work with your store without you pasting data into a chat.
- Is it safe to give an assistant my API key?
- The key is stored by your MCP client, never in the chat. A key cannot refund, archive or create live payment links unless you ticked “Allow this key to move money” when creating it, and a refund request only produces a link you open in your dashboard and approve yourself. Start with an ep_test_ key, which only ever sees rehearsal data. Every call is rate-limited and logged like any API request.
- Does it work with claude.ai on the web?
- Web connectors require OAuth, which this server does not offer yet. Claude Code, Claude Desktop (via mcp-remote), Cursor, VS Code and any client that sends a Bearer header work today.
- Which plan do I need?
- API keys are on the Pro plan ($29/month). The MCP server uses the same key as the REST API.
Prefer webhooks or Zapier-style automation? See receiving webhooks.