HTTP Mode (hosted)
NPX Mode (local)
npx. Works offline and keeps credentials off HTTP.Prerequisites
Before you begin, make sure you have:- An Atoa SDK Token — follow the Getting Started guide to generate one
HTTP Mode (Recommended)
Connect any MCP-compatible client directly to Atoa’s hosted MCP server — no local installation required. Endpoint:https://mcp.atoa.me/mcp
Pass your SDK token and target environment as request headers on every connection:
AI Assistant Configuration
Most AI clients support HTTP-mode MCP connections natively. Use these configs to point your assistant directly at the Atoa MCP server.- Claude Code
- Cursor
- VS Code

X-Atoa-Env from sandbox to production (and swap your token) when you go live.
Connecting Programmatically (MCP SDK)
For web applications and backend services, use the MCP SDK’sStreamableHTTPClientTransport:
Rate Limits
The HTTP endpoint enforces rate limiting on a per-token basis. Requests that exceed the allowed rate will receive a 429 Too Many Requests response. If this happens, back off and retry after a short delay using an exponential backoff strategy.NPX Mode (Local)
Run the Atoa MCP server locally vianpx. Use this when you prefer not to send auth headers over HTTP, need to work offline, or your AI client does not support HTTP-mode MCP connections.
Requires Node.js 18+ and npm 9+ (node --version to check).
Quick Setup
The fastest way to get started is the interactive wizard:Manual Configuration
Add the following to your AI client’s MCP configuration file:- Claude Desktop
- Cursor
- VS Code
- Gemini CLI
claude_desktop_config.json:- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json

env object keeps your token out of the process
argument list, which is more secure than using --auth-token CLI flags.env block:
ATOA_ENV from sandbox to production (and swap your token) when you go live.
Once configured, restart your AI client and ask:
get_stores and return your store list.
Available Tools
Browse the 29 tools below, organized into 8 categories. Click any category to expand.Payments (5 tools)
Payments (5 tools)
get_stores
process_payment
cancel_payment
get_payment_status
get_transactions
Customers (5 tools)
Customers (5 tools)
create_customer
email or phoneNumberlist_customers
get_customer
update_customer
delete_customer
Payment Methods (3 tools)
Payment Methods (3 tools)
list_payment_methods
get_payment_method
delete_payment_method
Card on File (3 tools)
Card on File (3 tools)
charge_saved_card
AUTHORIZED, not COMPLETEDcapture_payment
MANUAL_CAPTURE)cancel_card_payment
Refunds (3 tools)
Refunds (3 tools)
get_refund_payments
initiate_refund
COMPLETED payment (full or partial)cancel_refund
INITIATED refund — production onlyWebhooks (3 tools)
Webhooks (3 tools)
list_merchant_webhooks
create_webhook
delete_webhook
Bank Feeds (6 tools)
Bank Feeds (6 tools)
initiate_ais_auth
fetch_all_accounts
fetch_account_details
fetch_account_balance
fetch_account_transactions
revoke_account_access
Institutions (1 tool)
Institutions (1 tool)
get_institutions
[email protected] to check which features are active on your account.Core Workflows
Create a Payment
Create a Payment
- Call
get_storesto resolve your default store - Call
process_paymentwithamount: 25, currency: "GBP" - Return a
paymentLinkandqrCodeUrlyou share with the customer - The customer opens the link or scans the QR code to pay via their bank app
amount must be a positive number with no more than 2 decimal places (e.g.,
25.99 ✅ — 25.999 ❌). Currency defaults to "GBP".get_payment_status and returns one of:Save a Customer's Card and Charge It Later
Save a Customer's Card and Charge It Later
process_payment with savePaymentMethod: true and atoaCustomerId: "cust_abc123". After the customer completes the payment, their card is stored.atoaCustomerId is required when savePaymentMethod is true. The
customer must exist first — create them with create_customer if needed.list_payment_methods and returns the saved cards with masked numbers.Step 3 — Charge the saved cardcharge_saved_card with:capture_payment with the paymentRequestId from step 3.Refund a Payment
Refund a Payment
initiate_refund. Key constraints:- Payment must be in
COMPLETEDstatus — pending, expired, or cancelled payments cannot be refunded - Partial refunds are supported —
amountmust be ≤ the original payment amount - The refund goes through as
INITIATED→PENDING→COMPLETED(orFAILED) - To cancel an
INITIATEDrefund before it processes, usecancel_refund— production only
initiate_refund with
refundNotes: "FAILURE TEST". Use this to test your error-handling paths —
cancel_refund is not available in sandbox.Register a Webhook
Register a Webhook
create_webhook with:Troubleshooting
'Merchant not found' or 401 error
'Merchant not found' or 401 error
- Get a fresh token from the Atoa Dashboard
- HTTP mode: confirm the
Authorizationheader isBearer YOUR_TOKEN(with a space afterBearer) and theX-Atoa-Envheader matches your token type (sandboxorproduction) - NPX mode: confirm
ATOA_AUTH_TOKENandATOA_ENVare set correctly in theenvblock of your config - Sandbox tokens and production tokens are not interchangeable — ensure you are using the right one for each environment
Tools not appearing in my AI assistant
Tools not appearing in my AI assistant
- Restart your AI client after updating the config file — most clients load MCP config only on startup
- Verify the config file path and key name match your client (see the config tabs above)
- NPX mode: check Node.js version —
node --versionmust be 18+ - NPX mode: run the server manually to see errors:
npx @atoapayments/mcp
fetch_all_accounts returns empty or errors after initiate_ais_auth
fetch_all_accounts returns empty or errors after initiate_ais_auth
initiate_ais_auth:- Share the
authorizationUrlwith the user - Wait for them to approve access in their banking app
- Only then call
fetch_all_accountswith the returnedaccountAuthId
initiate_refund fails with 'payment not eligible'
initiate_refund fails with 'payment not eligible'
COMPLETED status. Check the payment
status first with get_payment_status. You cannot refund a PENDING,
EXPIRED, CANCELLED, or FAILED payment.'cancel_refund' fails in sandbox
'cancel_refund' fails in sandbox
cancel_refund only works in production. To test refund
cancellation paths in sandbox, call initiate_refund with refundNotes: "FAILURE TEST" to simulate a failure instead.Tool returns 403 'capability not enabled'
Tool returns 403 'capability not enabled'
- Card-on-file tools (
charge_saved_card,capture_payment,cancel_card_payment) require card payments - AIS / Bank Feed tools require AIS bank feed access
- Tips on
process_paymentrequire tipping to be enabled
[email protected] to check which capabilities are active or to enable additional features.Store not found
Store not found
get_stores tool only returns active stores. If a store is disabled
in your Atoa Dashboard, it won’t
appear. Enable the store in the dashboard and retry.Connection timeout or unreachable
Connection timeout or unreachable
https://mcp.atoa.me:- Check your internet connection
- Verify no firewall rules are blocking outbound HTTPS (port 443)
- Check Atoa Status for service incidents
Too many requests (429)
Too many requests (429)
429 response:- Wait briefly before retrying the request
- Space out sequential tool calls
- If you consistently hit rate limits for a production use case, contact
[email protected]
Need Help?
Contact our team at[email protected] or use chat support on the Dashboard.