About mcp-safrapay
mcp-safrapay is an MCP server for Safrapay, the acquirer run by Banco Safra, covering credit cards, Pix, boleto, split rules and chargebacks. It targets mid-to-large Brazilian merchants. The project is at 0.1.0-alpha.1, and its authentication flow and endpoints still need validation against a sandbox.
Key features
- 01Credit card pre-authorization, capture, cancel and refund
- 02Pix and boleto charge creation
- 03Split rule configuration and settlement reports
- 043-D Secure authentication, card tokenization and installment simulation
- 05Chargeback details, recurring billing and payment links
Use cases
- 01Accepting credit card and Pix payments from a merchant back office
- 02Configuring splits and retrieving settlement reports for reconciliation
- 03Reviewing chargeback details and managing recurring subscriptions
MCP support
The server exposes 22 tools that wrap Safrapay gateway, portal and reconciliation operations for MCP clients.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @codespar/mcp-safrapaySAFRAPAY_CLIENT_IDSafrapay merchant CNPJ (sent as merchantCredential header on auth)SAFRAPAY_CLIENT_SECRETSecretSafrapay MerchantToken used to compute the BCRYPT Authorization header on authSAFRAPAY_MERCHANT_IDSafrapay merchant id (used in request bodies where applicable)SAFRAPAY_ENVEnvironment: 'sandbox' or 'production'. Defaults to sandbox.Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
22Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| card | object | Yes | Card data. Prefer card_token from tokenize_card over raw PAN. |
| card.brand | string | No | |
| card.number | string | No | PAN; never log |
| card.card_token | string | No | Token from tokenize_card |
| card.holder_name | string | No | |
| card.security_code | string | No | |
| card.expiration_year | string | No | |
| card.expiration_month | string | No | |
| amount | number | Yes | Amount in cents |
| preauth | boolean | No | true = pre-authorization only; false = auth + capture |
| currency | string | No | ISO-4217 currency code (default BRL) |
| customer | object | Yes | Customer identity |
| customer.name | string | Yes | |
| customer.email | string | No | |
| customer.phone | string | No | |
| customer.customer_id | string | No | |
| customer.document_type | enum | Yes | CPF | CNPJ |
| customer.document_number | string | Yes | |
| order_id | string | Yes | Merchant-side order identifier |
| installments | number | No | Number of installments (1 = à vista) |
| soft_descriptor | string | No | Statement descriptor |
Details
From the project README@codespar/mcp-safrapay
MCP server for Safrapay — Banco Safra's acquirer. B2B-banking crossover focused on mid-to-large BR merchants and private-banking clientele.
Safrapay's API surface is operated on Aditum's payment platform (documented at safrapay-docs.aditum.com.br). The gateway, portal, reconciliation, and webhook products are split across separate base hosts.
Status: 0.1.0-alpha.1. The endpoint paths here were derived from the Aditum-hosted Safrapay developer docs (publicly reachable). Auth flow (BCRYPT + CNPJ on gateway, JWT Bearer thereafter) is best-effort: the BCRYPT hash input format is not fully specified in public docs and very likely requires a sandbox account to finalize. Treat all tools as scaffolding until validated against a live sandbox merchant.
Tools (22)
| Tool | Purpose |
|---|---|
authorize_payment | Authorize a credit-card payment on Safrapay. |
capture_payment | Capture a previously authorized (pre-auth) payment. |
cancel_payment | Cancel (void) an authorized-but-uncaptured payment. |
refund_payment | Refund a captured payment. |
create_pix | Create a Pix charge. |
create_boleto | Create a boleto charge. |
get_payment | Retrieve a charge by Safrapay chargeId. |
tokenize_card | Tokenize a card for PCI-safe reuse. |
create_split_rule | Configure split distribution for an existing charge. |
get_statement | Retrieve the digital statement (extrato). |
list_transactions | List charges with optional filters. |
delete_card_token | Revoke a stored card token. |
search_by_merchant_order | Look up charges by the merchant-side order identifier (the order_id supplied at creation). |
query_chargeback | Retrieve chargeback (contestacao) detail for a charge: reason code, acquirer deadline, dispute amount, evid... |
query_installments | Simulate an installment plan for a given amount. |
authenticate_3ds | Kick off 3-D Secure authentication before authorize_payment. |
create_recurrence | Create a recurring-billing subscription. |
get_recurrence | Retrieve a recurrence by id: schedule, next-charge date, charge history, status. |
cancel_recurrence | Cancel an active recurrence. |
get_settlement_report | Retrieve a settlement (liquidacao) report from the reconciliation host. |
create_payment_link | Create a hosted-checkout payment link. |
register_webhook | Bulk-register webhook subscriptions on the Safrapay webhook product. |
Install
npm install @codespar/mcp-safrapay@alpha
Environment
SAFRAPAY_CLIENT_ID="..." # Merchant CNPJ (sent as merchantCredential)
SAFRAPAY_CLIENT_SECRET="..." # MerchantToken (used to compute BCRYPT)
SAFRAPAY_MERCHANT_ID="..." # Safrapay merchant id (body field where required)
SAFRAPAY_ENV="sandbox" # 'sandbox' (default) or 'production'
Base URLs
Safrapay splits its API into four products hosted on distinct domains:
| Product | Sandbox | Production |
|---|---|---|
| Gateway (payments) | https://payment-dev.aditum.com.br | https://payment.aditum.com.br |
| Portal (management) | https://portal-dev.aditum.com.br | https://portal-api.aditum.com.br |
| Reconciliation | https://reconciliation-dev.aditum.com.br | https://reconciliation-api.aditum.com.br |
| Webhook | https://webhook-dev.aditum.com.br | https://webhook.aditum.com.br |
Authentication
Gateway uses a two-step bootstrap:
POST {gateway}/v2/merchant/authwith headersAuthorization: <BCRYPT(CNPJ+MerchantToken)>andmerchantCredential: <CNPJ>to exchange for a JWT access token.- Subsequent calls send
Authorization: Bearer <jwt>.
The server caches the JWT in memory until 60 s before expiry. The BCRYPT input concatenation is an informed guess; refine once you have a sandbox account.
Run
# stdio (default)
npx @codespar/mcp-safrapay
# HTTP
MCP_HTTP=true MCP_PORT=3000 npx @codespar/mcp-safrapay
Endpoint map (used by tools)
| Tool | Method | Path (under gateway, unless noted) |
|---|---|---|
authorize_payment | POST | /v2/charge/authorization or /v2/charge/preauthorization |
capture_payment | PUT | /v2/charge/capture/{chargeId} |
cancel_payment | PUT | /v2/charge/cancelation/{chargeId} |
refund_payment | PUT | /v2/charge/cancelation/{chargeId} (partial amount) |
create_pix | POST | /v2/charge/pix |
create_boleto | POST | /v2/charge/boleto |
get_payment | GET | /v2/charge/{chargeId} |
tokenize_card | POST | /v2/card (or /v2/temporary/card) |
create_split_rule | PUT | /v2/charge/split/{chargeId} |
get_statement | GET | /v2/Account/Movement/Extract |
list_transactions | GET | /v2/charges |
register_webhook | POST | {webhook}/v1/webhook/bulk |
Enterprise
Need governance, budget limits, and audit trails for agent payments? CodeSpar Enterprise adds policy engine, payment routing, and compliance templates on top of these MCP servers.
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.