digital-goods-mcp
Let AI agents sell software and courses worldwide with sales tax handled — one server aggregating eight Merchant-of-Record platforms: Paddle, Lemon Squeezy…
What it can do
- Create Checkout: Create a hosted CHECKOUT LINK for a digital product / software / course through a merchant-of-record platform (the MoR is the seller and remits global sales tax / VAT). Returns checko
- Query Order: Get the status of an order / transaction created through the merchant-of-record platform. order_id = Paddle transaction_id (txn_...), Lemon Squeezy order id (numeric), Polar order id (UUI
- Issue Refund: Refund an order through the merchant-of-record platform. Capability differs by provider: Paddle = FULL refund only (POST /adjustments; pending_approval on production) — do NOT pass amoun
What data it sees
Do you need an account
No: the server works without sign-in
Let AI agents sell software and courses worldwide with sales tax handled — one server aggregating eight Merchant-of-Record platforms: Paddle, Lemon Squeezy, Polar, Whop, Creem, Dodo Payments, FastSpring and 2Checkout. Create checkouts, query orders, refunds, subscriptions. Stateless: bring your own key, it never holds funds or stores data.
How to connect
How to connect digital-goods-mcp to Claude
The server address to paste into Claude settings:
https://digital-goods-mcp--wishpool.run.tools
- Open Claude (claude.ai or the desktop app).
- Go to Settings → Connectors.
- Click Add custom connector.
- Paste the server address copied below into Remote MCP server URL and click Add.
- In a chat, click + → Connectors and switch the new connector on.
Custom connectors are available on Free, Pro, Max, Team and Enterprise plans (Free is limited to one). On Team and Enterprise an organization Owner adds the connector first under Organization settings → Connectors.
Authorization
After you click Add, a sign-in window for the service opens. Sign in with your own account and approve access. Claude never sees your password.
How to connect digital-goods-mcp to ChatGPT
The server address to paste into ChatGPT settings:
https://digital-goods-mcp--wishpool.run.tools
- Open ChatGPT in a browser (chatgpt.com). A Plus, Pro, Business, Enterprise or Edu plan is required.
- Turn on developer mode once: Settings → Apps → Advanced settings → Developer mode.
- Open Settings → Connectors and click Create.
- Fill in the form: Name (anything), Description (one line about what the service does), MCP server URL (copy it below).
- Under Authentication choose OAuth if the service requires sign-in, otherwise None. Click Create.
- In a new chat open + → Apps/Connectors and enable the connector.
OpenAI has renamed this section before (Connectors → Apps/Plugins). If the label differs, search settings for "developer mode". On Business/Enterprise workspaces an admin must allow custom connectors first.
Authorization
On first use ChatGPT opens the service's sign-in window. Sign in and approve access.
How to connect digital-goods-mcp to Cursor
The server address to paste into Cursor settings:
https://digital-goods-mcp--wishpool.run.tools
Fastest: click Open in Cursor below and confirm the prompt.
Manually:
- In Cursor open Settings → Cursor Settings → MCP and click Add new global MCP server.
- Paste the JSON copied below into
~/.cursor/mcp.json(per project:.cursor/mcp.jsonin the repo root). - Save the file. The server appears in the MCP list; authorize it there if asked.
Authorization
If the service needs sign-in, an authorize button appears next to the server in the MCP list.
Server tool list (5)
Raw names from tools/list. Only developers need these.
| create_checkout | Create a hosted CHECKOUT LINK for a digital product / software / course through a merchant-of-record platform (the MoR is the seller and remits global sales tax / VAT). Returns checkout_url for the buyer to pay. One primitive across eight providers — pick with provider. item = the catalog id on that platform: Paddle price_id (pri_...), Lemon Squeezy variant_id (numeric, also needs store_id), Polar product_id (UUID), Whop plan_id (plan_...), Creem product_id (prod_...), Dodo product_id (pdt_...), FastSpring product path (also needs store_id = your storefront), 2Checkout catalog product code. Optional amount (major currency unit) is a custom price on Lemon Squeezy and drives the owner policy gate everywhere. Money flows buyer -> MoR -> merchant; this server never touches funds. Capabilities differ per provider (see per-field notes and INSTRUCTIONS). Credential headers (set once in your MCP client, per-request, never stored): x-mor-provider (paddle | lemonsqueezy | polar | whop | creem | dodo | fastspring | twocheckout; or pass the provider argument) + x-mor-key (that platform's API key: Paddle pdl_..., Lemon Squeezy API key, Polar polar_oat_..., Whop key, Creem creem_test_..., Dodo key, FastSpring "username:password" for HTTP Basic, 2Checkout "MERCHANT_CODE:SECRET_KEY") + x-mor-env (sandbox/test = default no real money; prod/live = real money & real tax). Owner-policy headers x-agentpay-max-amount / x-agentpay-approval-above / x-agentpay-allowed-tools also apply. |
| query_order | Get the status of an order / transaction created through the merchant-of-record platform. order_id = Paddle transaction_id (txn_...), Lemon Squeezy order id (numeric), Polar order id (UUID), Whop payment/receipt id, Creem checkout id (ch_...), Dodo payment_id (pay_...), or FastSpring order id. Returns a UNIFIED status enum [PAID | PENDING | FAILED | REFUNDED | PARTIALLY_REFUNDED | CANCELED | PAST_DUE | UNKNOWN(raw)] plus raw_status and a raw passthrough of the provider payload. Credential headers (set once in your MCP client, per-request, never stored): x-mor-provider (paddle | lemonsqueezy | polar | whop | creem | dodo | fastspring | twocheckout; or pass the provider argument) + x-mor-key (that platform's API key: Paddle pdl_..., Lemon Squeezy API key, Polar polar_oat_..., Whop key, Creem creem_test_..., Dodo key, FastSpring "username:password" for HTTP Basic, 2Checkout "MERCHANT_CODE:SECRET_KEY") + x-mor-env (sandbox/test = default no real money; prod/live = real money & real tax). Owner-policy headers x-agentpay-max-amount / x-agentpay-approval-above / x-agentpay-allowed-tools also apply. |
| issue_refund | Refund an order through the merchant-of-record platform. Capability differs by provider: Paddle = FULL refund only (POST /adjustments; pending_approval on production) — do NOT pass amount. Lemon Squeezy = pass amount (major unit) for partial, or omit for full. Polar = amount is REQUIRED (no full shortcut) plus a reason enum. Dodo = FULL only (POST /refunds) — do NOT pass amount. FastSpring = FULL only (POST /orders/{id}/refunds) — do NOT pass amount. 2Checkout = partial (pass amount) or full (omit amount) via POST /orders/{RefNo}/refund/. Whop = NOT supported (dashboard-only). Creem = NOT supported (no public refund endpoint). order_id is the same id used by query_order. The owner policy gate applies to amount when given. Credential headers (set once in your MCP client, per-request, never stored): x-mor-provider (paddle | lemonsqueezy | polar | whop | creem | dodo | fastspring | twocheckout; or pass the provider argument) + x-mor-key (that platform's API key: Paddle pdl_..., Lemon Squeezy API key, Polar polar_oat_..., Whop key, Creem creem_test_..., Dodo key, FastSpring "username:password" for HTTP Basic, 2Checkout "MERCHANT_CODE:SECRET_KEY") + x-mor-env (sandbox/test = default no real money; prod/live = real money & real tax). Owner-policy headers x-agentpay-max-amount / x-agentpay-approval-above / x-agentpay-allowed-tools also apply. |
| query_subscription | Get the status of a subscription on the merchant-of-record platform. subscription_id = Paddle sub_..., Lemon Squeezy subscription id (numeric), Polar subscription id (UUID), Whop membership id (mem_...), Creem subscription id (sub_...), Dodo subscription id (sub_...), or FastSpring subscription id. Returns a UNIFIED status enum [ACTIVE | TRIALING | PAST_DUE | PAUSED | CANCELED | EXPIRED | UNKNOWN(raw)] plus raw_status and a raw passthrough. Credential headers (set once in your MCP client, per-request, never stored): x-mor-provider (paddle | lemonsqueezy | polar | whop | creem | dodo | fastspring | twocheckout; or pass the provider argument) + x-mor-key (that platform's API key: Paddle pdl_..., Lemon Squeezy API key, Polar polar_oat_..., Whop key, Creem creem_test_..., Dodo key, FastSpring "username:password" for HTTP Basic, 2Checkout "MERCHANT_CODE:SECRET_KEY") + x-mor-env (sandbox/test = default no real money; prod/live = real money & real tax). Owner-policy headers x-agentpay-max-amount / x-agentpay-approval-above / x-agentpay-allowed-tools also apply. |
| cancel_subscription | Cancel a subscription on the merchant-of-record platform. Behaviour differs: Paddle = cancel immediately or at next_billing_period (set immediately). Dodo = same (immediately -> cancelled now, else at period end). Creem = same (immediately -> now, else scheduled to period end). Lemon Squeezy / FastSpring = always cancel at the END of the current period (access continues; immediate not offered by the API). Polar / Whop = Polar revokes IMMEDIATELY, Whop cancels at period end. Returns the unified subscription status. Credential headers (set once in your MCP client, per-request, never stored): x-mor-provider (paddle | lemonsqueezy | polar | whop | creem | dodo | fastspring | twocheckout; or pass the provider argument) + x-mor-key (that platform's API key: Paddle pdl_..., Lemon Squeezy API key, Polar polar_oat_..., Whop key, Creem creem_test_..., Dodo key, FastSpring "username:password" for HTTP Basic, 2Checkout "MERCHANT_CODE:SECRET_KEY") + x-mor-env (sandbox/test = default no real money; prod/live = real money & real tax). Owner-policy headers x-agentpay-max-amount / x-agentpay-approval-above / x-agentpay-allowed-tools also apply. |