# BlindPay [Health: Active]

**Category:** 💰 Finance & Fintech  
**Repository:** https://github.com/blindpaylabs/blindpay-mcp  
**GitHub Stars:** 9  
**npm Downloads (last month):** 2519  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/blindpay

## Description
Official BlindPay MCP server: stablecoin payouts, payins, quotes and receivers for global payments.

## Tools
Capabilities this server exposes over MCP:

- **GetV1InstancesOnboardingBusinessDetails** — Retrieve Business Details
- **GetV1InstancesOnboardingBusinessProfile** — Retrieve Business Profile
- **GetV1InstancesOnboardingOwnershipDocuments** — Retrieve Business Documents
- **GetV1InstancesById** — Returns the instance your API key or connection is bound to. Check `type` before moving money: `development` simulates settlement and moves no real funds, `production` moves real funds. `onboarding_step` is `completed` once the instance can transact.
- **PutV1InstancesById** — Update Instance
- **GetV1InstancesMembers** — Retrieve Instance Members
- **PutV1InstancesMembersByUserId** — Update Instance Member Role
- **DeleteV1InstancesMembersByUserId** — Delete Member from Instance
- **GetV1InstancesRfi** — Returns the open (pending) RFI for this instance, or null if the instance has no pending RFI.
- **PostV1InstancesRfi** — Submit a flat response object for the open instance RFI. Standalone: submitting does not change any instance or onboarding status. Returns `{ success: false, reason }` when no pending RFI exists, callers should refetch the RFI state instead of retrying.
- **PostV1EInstancesTos** — Returns a URL where the end customer accepts BlindPay's terms of service. A person must open it in a browser and accept; it cannot be accepted through the API. After acceptance the browser is sent to redirect_url with tos_id as a query parameter, and a tos.accept webhook fires. Pass that tos_id (to_...) to Create Customer. idempotency_key is any unique string and cannot be reused.
- **GetV1InstancesCustomersLimitIncrease** — Retrieve Limit Increase Requests
- **PostV1InstancesCustomersLimitIncrease** — Request Limit Increase
- **GetV1InstancesCustomers** — Retrieve Customers
- **PostV1InstancesCustomers** — Creates a customer and starts KYC (individuals) or KYB (businesses). Send the tos_id the customer received after accepting terms of service (see Initiate Terms of Service). Required fields depend on type and kyc_type. Individual, standard: first_name, last_name, date_of_birth, tax_id, address_line_1, city, state_province_region, postal_code, country, id_doc_country, id_doc_type, id_doc_front_file and selfie_file. Business, standard: legal_name, formation_date, tax_id, website, the same address fields, at least one entry in owners, incorporation_doc_file, proof_of_ownership_doc_file, proof_of_address_doc_type and proof_of_address_doc_file. kyc_type light is not available, and businesses only support standard. US state_province_region is a two-letter code. File fields are HTTPS URLs that BlindPay downloads, so they must be publicly fetchable; data: URIs are rejected. The customer starts with kyc_status verifying. Development instances approve it automatically.
- **GetV1InstancesCustomersById** — Retrieve Customer
- **PutV1InstancesCustomersById** — Update Customer
- **DeleteV1InstancesCustomersById** — Delete Customer
- **GetV1InstancesLimitsCustomersById** — Retrieve Customer Limits
- **GetV1InstancesCustomersRfi** — Returns the open (pending) RFI for this customer, or null if the customer has no pending RFI.
- **PostV1InstancesCustomersRfi** — Submit a flat response object for the open RFI. On success flips kyc_status back to verifying. Returns `{ success: false, reason }` when no pending RFI exists, callers should refetch the RFI state instead of retrying.
- **PostV1InstancesCustomersBankAccountsPlaid** — Create Plaid Link
- **GetV1InstancesCustomersBankAccounts** — Retrieve Bank Accounts
- **PostV1InstancesCustomersBankAccounts** — Adds a payout destination for a customer. Required fields depend on type (the rail): call Bank Details (GET /v1/available/bank-details) with the rail first for the exact field list and validation. For ach and wire: business_industry (a NAICS code from GET /v1/available/naics) is required when account_class is business, phone_number is required when country is BR, CN, CO, HK, MY, MX, PH, UG or UY, and tax_id is required when country is AR, BY, BR, CL, CN, CO, CR, EC, GT, HN, JP, KZ, KR, MX, PK, PE, PH, RU, TH or UY. A US state_province_region is a two-letter code. ach, wire and rtp are not available for light KYC customers.
- **GetV1InstancesCustomersBankAccountsById** — Retrieve Bank Account
- **DeleteV1InstancesCustomersBankAccountsById** — Remove Bank Account
- **GetV1InstancesCustomersVirtualAccounts** — Retrieve Virtual Accounts
- **PostV1InstancesCustomersVirtualAccounts** — Creates a virtual account that automatically converts inbound USD deposits (ACH, wire, RTP) into stablecoins sent to the linked wallet. Fees on these automated payins depend on the deposit amount: deposits below $100.00 accrue the BlindPay fee to your billing cycle (charged at the end of the month via the payin's `billing_fee_amount`), while deposits of $100.00 or more are charged at the time of the transaction (deducted from the delivered amount via `transaction_fee_amount`). Every deposit is processed regardless of size and always delivers at least $0.01 on-chain; a partner fee (optional `partner_fee_id`) is collected only from what remains after that.
- **GetV1InstancesCustomersVirtualAccountsById** — Retrieve Virtual Account
- **PutV1InstancesCustomersVirtualAccountsById** — Update Virtual Account
- **GetV1InstancesCustomersBlockchainWalletsSignMessage** — Retrieve Blockchain Wallet Message
- **GetV1InstancesCustomersBlockchainWallets** — Retrieve Blockchain Wallets
- **PostV1InstancesCustomersBlockchainWallets** — Add Blockchain Wallet
- **GetV1InstancesCustomersBlockchainWalletsById** — Retrieve Blockchain Wallet
- **DeleteV1InstancesCustomersBlockchainWalletsById** — Remove Blockchain Wallet
- **PatchV1InstancesCustomersBlockchainWalletsById** — Declares whether the customer holds the private keys of this wallet. Only works while is_self_custody is null; once saved it cannot be changed.
- **GetV1InstancesCustomersBankAccountsOfframpWallets** — Get Offramp Wallets
- **PostV1InstancesCustomersBankAccountsOfframpWallets** — Create Offramp Wallet
- **GetInstancesCustomersBankAccountsOfframpWalletsById** — Get Offramp Wallet
- **PostV1InstancesQuotes** — Prices a payout. Send exactly one of bank_account_id or payable_id. request_amount is in cents (1000 means 10.00) and currency_type says whether it is what the sender pays or what the receiver gets. The quote expires 5 minutes after creation (expires_at is epoch milliseconds) and is single-use: execute it with Create Payout on EVM Chains for BlindPay-managed wallets on any network, Solana included, or with the Solana or Stellar payout endpoints for self-custodied wallets.
- **PostV1InstancesQuotesFx** — Get FX Rate
- **GetV1InstancesPayoutsById** — Retrieve Payout
- **GetV1InstancesPayouts** — Retrieve Payouts
- **PostV1InstancesPayoutsStellarAuthorize** — Authorize Token Stellar
- **PostV1InstancesPayoutsStellar** — Create Payout on Stellar
- **PostV1InstancesPayoutsSolana** — Create Payout on Solana
- **PostV1InstancesPayoutsEvm** — Executes a payout quote. Despite the name, this is the endpoint for payouts funded from a BlindPay-managed wallet on any network, Solana included; self-custodied EVM wallets must approve the token first. Execute before the quote expires (5 minutes). Send an Idempotency-Key header so a retry cannot create a second payout. On development instances the payout completes on its own; request_amount 66600 makes it fail and 77700 makes it refunded.
- **PostV1InstancesPayoutsDocuments** — Submit a compliance document for a payout. SWIFT payouts waiting for documents require it and the submission resumes the compliance review; the optional payment description is written to the SWIFT memo. Other rails (wire, ACH, RTP, Pix and so on) may attach an optional document while the payout is processing or completed. It is stored for compliance without changing the payout status or tracking, the description is ignored, and submitting again replaces the previous document.
- **PostV1InstancesPayinQuotes** — Prices a payin from a local payment method into a stablecoin wallet. Send one of wallet_id (BlindPay-managed wallet) or blockchain_wallet_id. Do not send a network: the wallet decides where the tokens are delivered. request_amount is in cents; the minimum depends on the currency (1000, which is 10.00, for USD and BRL) and OTC quotes have a higher minimum. funding_bank_account_id is required when payment_method is ach_pull. The quote expires 5 minutes after creation, or 10 seconds for OTC quotes; create the payin with Create Payin before then.
- **PostV1InstancesPayinQuotesFx** — Get FX Rate
- **GetV1InstancesPayinsById** — Retrieve Payin
- **GetV1InstancesPayins** — Retrieve Payins
- **PostV1InstancesPayinsEvm** — Creates a payin from a payin quote and returns the instructions the payer uses to send funds (for example a Pix code or bank details). Create it before the payin quote expires. Send an Idempotency-Key header so a retry cannot create a second payin. On development instances the payin completes on its own about 30 seconds after creation; request_amount 66600 makes it fail and 77700 makes it refunded.
- **PostV1InstancesPayinsCardPayment** — Submit Card Payment
- **GetV1InstancesCustomersWallets** — Retrieve Wallets
- **PostV1InstancesCustomersWallets** — Create Wallet
- **GetV1InstancesCustomersWalletsById** — Retrieve Wallet
- **DeleteV1InstancesCustomersWalletsById** — Remove Wallet
- **GetV1InstancesCustomersWalletsBalance** — Returns the balance of a BlindPay-managed wallet for USDC, USDT and USDB. Unlike quote and payout amounts, these values are whole tokens, not cents: amount 10.5 means 10.5 USDC. total_amount is amount plus earning_amount from yield.
- **GetV1InstancesCustomersWalletsDeposits** — Incoming stablecoin deposits to a managed wallet, newest first.
- **PostV1InstancesCustomersWalletsYieldEnable** — Turns yield on for the wallet. Returns the wallet, not the yield object: read yield_status here and use Retrieve Wallet Yield for positions. Idle balance is swept into the vault within the hour.
- **PostV1InstancesCustomersWalletsYieldDisable** — Turns yield off for the wallet. Returns the wallet, not the yield object. The wallet moves to disabling, the vault position is redeemed back to the wallet and any accrued fee is collected, then yield_status settles to disabled and a wallet.update webhook fires.
- **GetV1InstancesCustomersWalletsYieldHistory** — Retrieve Wallet Yield History
- **GetV1InstancesCustomersWalletsYieldTransactions** — Retrieve Wallet Yield Transactions
- **GetV1InstancesCustomersWalletsYield** — Retrieve Wallet Yield
- **PostV1InstancesTransferQuotes** — Create Transfer Quote
- **GetV1InstancesTransfersById** — Retrieve Transfer
- **GetV1InstancesTransfers** — Retrieve Transfers
- **PostV1InstancesTransfers** — Create Transfer
- **GetV1InstancesPayables** — List Payables
- **PostV1InstancesPayables** — Create Payable
- **GetV1InstancesPayablesById** — Retrieve Payable
- **DeleteV1InstancesPayablesById** — Delete Payable
- **GetV1InstancesWebhookEndpoints** — Retrieve Webhooks
- **PostV1InstancesWebhookEndpoints** — Registers an HTTPS endpoint that receives the listed events. Event names and payload schemas are in the webhooks section of this API reference (and in the MCP resource blindpay://webhooks/events). Deliveries are signed with Svix; read the signing secret with Retrieve Webhook Secret and verify every delivery.
- **DeleteV1InstancesWebhookEndpointsById** — Remove Webhook
- **GetV1InstancesWebhookEndpointsSecret** — Retrieve Webhook Secret
- **GetV1InstancesWebhookEndpointsPortalAccess** — Retrieve Webhook Portal Access
- **GetV1InstancesBillingFees** — Get all fees for an instance, sorted by payment method (fiat first, then blockchain)
- **GetV1InstancesPartnerFees** — Retrieve Partner Fees
- **PostV1InstancesPartnerFees** — Add Partner Fee
- **GetV1InstancesPartnerFeesById** — Retrieve Partner Fee
- **DeleteV1InstancesPartnerFeesById** — Remove Partner Fee
- **PostV1Presign** — Presign File URL
- **GetV1AvailableBankDetails** — Returns the fields a bank account needs for a payout rail, so a recipient form can collect and validate them before calling create bank account. Each field has a `label`, the request body `key` to send it under, a validation `regex`, and, where the value comes from a fixed list (banks, countries, account types), the allowed `items`. Get valid `rail` values from `GET /v1/available/rails`. Public: no API key required.
- **GetV1AvailableRails** — Lists every payout rail BlindPay supports (ACH, domestic wire, RTP, PIX, SPEI, SEPA, SWIFT, and more) as `{ label, value, country }`. Pass `value` as the `rail` query parameter of `GET /v1/available/bank-details`, and as the `type` when creating a bank account. `country` is an ISO 3166-1 alpha-2 flag hint for display, not a statement of coverage. Public: no API key required.
- **GetV1AvailableNaics** — NAICS list
- **GetV1AvailableSwiftBySwift** — Swift code bank details
- **PostV1InstancesMintUsdbSolana** — Mint USDB on Solana
- **PostV1InstancesPrepareDelegateSolana** — Prepares a delegation transaction for Solana token transfers. You can either provide a `quote_id` (recommended) to automatically use the correct token amount and address from the quote, or manually provide `owner_address`, `token_address`, and `amount`.
- **PostV1InstancesCreateAssetTrustline** — Create Asset Trustline
- **PostV1InstancesMintUsdbStellar** — Mint USDB on Stellar

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "blindpay": {
    "command": "npx",
    "args": ["-y","@blindpay/mcp"],
    "env": {
      "BLINDPAY_API_KEY": "",
      "BLINDPAY_INSTANCE_ID": "",
      "BLINDPAY_MCP_PROFILE": ""
    }
  }
}
```

**Requires environment variables:** `BLINDPAY_API_KEY`, `BLINDPAY_INSTANCE_ID`, `BLINDPAY_MCP_PROFILE` — the values above are empty placeholders; fill in real credentials before running (see the repository for what each one is for).

## Documentation

## What BlindPay does

BlindPay exposes BlindPay’s stablecoin payment infrastructure through the Model Context Protocol. The available operations cover instance and onboarding data, members and roles, compliance requests, customers, payout destinations, and virtual accounts.

Customer creation starts KYC for individuals or KYB for businesses. The required fields depend on the customer type and verification configuration. Businesses use standard KYB, while individual records can use the supported standard flow. Customers begin in a verifying state; development instances approve them automatically.

Virtual accounts accept inbound USD deposits through ACH, wire, or RTP and convert those deposits into stablecoins delivered to a linked wallet. The API also supports Plaid Link creation and bank-account destinations for customers.

## How it works

The hosted endpoint is `https://mcp.blindpay.com/mcp` and uses Streamable HTTP. Authentication uses OAuth 2.1 with PKCE: the client opens a browser, the user signs in to BlindPay, and the connection is scoped to the selected instance and role.

The local package runs with `npx -y @blindpay/mcp` over stdio. Local authentication uses a BlindPay API key and an instance ID. The server provides a full tool profile by default. Setting `BLINDPAY_MCP_PROFILE=readonly` limits exposure to GET operations, including status, balances, and history, and removes tools for actions such as signing wallet messages and managing webhook access.

## Setup and configuration

For a local connection, create a BlindPay account, create a development instance, generate an API key in the dashboard, and copy the instance ID from the dashboard URL. Node.js and npm are required.

A local client configuration needs:

- `BLINDPAY_API_KEY`: the BlindPay API key.
- `BLINDPAY_INSTANCE_ID`: the instance selected for API operations.
- `BLINDPAY_MCP_PROFILE`: optional profile selection; use `readonly` for GET-only tools.

The remote connection does not require an API key. Clients can point to the hosted URL and complete BlindPay sign-in. Local execution can also run in Docker with the same API key and instance ID environment variables.

## Tools and capabilities

The tool set includes operations to:

- Retrieve and update instance details, business profiles, ownership documents, members, and member roles.
- Check the bound instance, its onboarding state, and whether it is a development or production environment.
- Retrieve and submit pending instance-level or customer-level requests for information.
- Start terms-of-service acceptance and use the returned terms identifier during customer creation.
- Create, retrieve, update, and delete individual or business customers.
- Retrieve customer limits and request limit increases.
- Create Plaid Link sessions and manage customer bank accounts.
- Create and manage virtual accounts that convert eligible USD deposits into stablecoins.

Customer bank-account fields vary by payment rail and country. Some rails require additional tax, phone, business-industry, or regional information. File fields used for customer verification must be publicly fetchable HTTPS URLs.

## Limitations and notes

Check the bound instance before moving money. Development instances simulate settlement and do not move real funds; production instances process real funds. A customer’s onboarding or KYC state determines which bank-account rails are available.

Terms of service must be accepted by a person in a browser. The API creates an acceptance URL but cannot complete the acceptance itself. After acceptance, the redirect includes a `tos_id`, and a `tos.accept` webhook is emitted.

Submitting an RFI response is only valid when a pending RFI exists. If none exists, the operation returns a failure result and the caller should retrieve the RFI state again instead of retrying.

Virtual-account fees depend on deposit size. Deposits below $100 accrue the BlindPay fee to the billing cycle, while deposits of $100 or more deduct the transaction fee from the delivered amount. Deposits are processed regardless of size and deliver at least $0.01 on-chain; an optional partner fee is taken only from the remaining amount.

_Full upstream README: https://allmcps.com/mcp/blindpay/readme_

