LATAM fiat ramps on Stellar for AI agents: live quotes, sandbox orders, PIX/SPEI simulation, docs
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Drop-in SDK + React components to add fiat on/off-ramps to any app in Latin America, built for the Stellar Brazil Ramps and Regional Kits sub-lane.
For AI agents:
BRL in and out, proven on Stellar Testnet (Etherfuse sandbox):
signAndSubmit signed and submitted it
(burn tx),
and the PIX payout processed provider-side. The widget ships the full
Sell flow with in-widget signing and automatic tx_too_late recovery.One provider interface, two real ramp backends (plus a mock for instant dev):
| Provider | Rails | Networks | Role in the kit |
|---|---|---|---|
| Etherfuse | BRL (PIX) + MXN (SPEI) | Stellar (native), Solana, Base, Polygon | Stellar-native settlement: automatic trustlines, sponsored onboarding via claimable balances |
| Manteca | In: BRL (PIX), ARS, MXN, CLP Β· Out: those + COP, PEN, GTQ, CRC, BOB, PUSD, PHP | Stellar, EVM chains, Tron | Broadest LATAM payout coverage β 11 countries β behind the same interface. Verified live: BRLβPIXβUSDC delivered on Stellar Testnet |
MockProvider | any | Stellar | Instant local dev + integration tests, realistic order lifecycle |
Swapping providers is one line (new MantecaProvider({ apiKey }),
new MockProvider()), or let the router pick per country and compare live
quotes:
@ramp-kit/core β framework-agnostic TypeScript SDK
RampProvider interface: listAssets β getQuote β createOrder β getOrdercreated β awaiting_deposit β awaiting_signature β processing β settled | failed | cancelledEtherfuseProvider (incl. registerWallet, listBankAccounts,
sandbox simulateFiatReceived), MantecaProvider, MockProviderRampRouter: provider selection per country/currency + live quote comparisongetAccountState (trustline/reserve checks),
getPendingBalances / claimPendingBalances (sponsored-onramp claims),
signAndSubmit (handles tx_too_late β regenerate), parseAssetIdentifier@ramp-kit/react β <RampWidget /> embeddable stepper flow (live quote
countdown, PIX/SPEI deposit instructions, status tracking), useQuote
(auto-refresh on expiry), useOrder (polls until terminal state)@ramp-kit/server β zero-dependency production backend: API-key proxy
with a strict endpoint allowlist, plus webhook receivers with HMAC-SHA256
signature verification (RFC 8785 canonicalization for Etherfuse)apps/demo β full BRLΒ·PIX / MXNΒ·SPEI onramp on Stellar Testnet:
built-in test wallet, live Horizon balance panel, one-click claimapps/second-app β the same widget dropped into a different app
(the sub-lane's "works in a second app" criterion)Manteca has the broadest LATAM fiat rails; Etherfuse is Stellar-native with
sponsored wallet onboarding. Both settle USDC on Stellar (Manteca added
Stellar support recently β verified live by this kit), which makes real
multi-anchor comparison possible on the same corridor:
RampRouter.compareQuotes fans one request out to both and returns live
rates sorted (verified: 100 BRL β 19.49 USDC Etherfuse vs 19.23 USDC Manteca).
They still expose completely different mental models (quote/order vs.
multi-stage synthetics + price locks) β the kit hides that behind one
interface, which is exactly the pain an app integrating ramps in the region
hits first.
| Etherfuse | Manteca | Kit exposes | |
|---|---|---|---|
| Pricing | quote (2 min expiry) | price lock (expireAt) | RampQuote.expiresAt + auto-refresh |
| Execution | order | ramp synthetic (stages) | RampOrder.status (one lifecycle) |
| Deposit info | CLABE / PIX charge on order | details.depositAddress | DepositInstructions |
| Stellar | trustlines, claimable balances, tx expiry | β | stellar.ts helpers |
Zero-setup path: pick "Mock provider" and walk the full flow immediately.
Real sandbox path (Stellar Testnet):
api_sand⦠key into the demo and connect Freighter (your
own wallet signs everything β or generate a throwaway test wallet; the
provider registration happens automatically). Run an onramp: quote β
order β simulate the incoming PIX β watch it settle on Stellar Testnet β
claim the delivered claimable balance with one click. Then flip to
Sell to go the other way: USDC β BRL with in-wallet signing, both
transactions linked to Stellar Expert for public verification.Manteca sandbox (https://sandbox.manteca.dev/crypto/v2) requires credentials
from the Manteca team; the adapter is implemented from their public docs and
ships with the same normalized lifecycle.
Note on API keys: a provider key identifies your business (its KYB, fees and settlement accounts) β there is one per app, held server-side, and end users never see it. They are customers under it, identified by
customerId. The demo asks you to paste a key only because whoever opens it is playing the role of the integrating developer.
You get partner keys from Etherfuse and/or Manteca once. Your users just click buy β they never see a key or an API.
Runnable in examples/backend-integration β
verified end to end against the real sandboxes with an empty client key:
quote β order β deposit β settled, while privileged endpoints (user
onboarding, company config, accounting) return 403 through the proxy.
The one piece that stays yours: onboarding each user with the provider
(KYC) to get their customerId. That's inherent to operating a ramp β from
quote onward the kit handles it.
The demo ships ready to deploy β a serverless proxy at api/[...path].ts
(auto-detected by Vercel at the repo root):
armandocodecr/latam-ramp-kit../ Β· Framework Preset: Other, with three
overrides in Build & Development Settings:
pnpm installpnpm -r buildapps/demo/distWhat the deployed demo does:
/api/<provider>/*, the function forwards it to the provider with the
same endpoint allowlist @ramp-kit/server enforces. The deployment holds
no credentials and stores nothing.GET /ramp/assets requires blockchain, currency and wallet β the kit
fills sensible defaults.createOrder registers (idempotent) and retries
on "Wallet not found". claimOwnership: true under a KYB-approved org
marks wallets compliant with no per-wallet KYC.depositBankName: "PIX" with an empty CLABE β the
kit maps this to a PIX DepositInstructions automatically.claimPendingBalances builds trustline + claim in one
transaction.The kit ships first-class AI support β both for understanding it and for operating it. An AI agent has already driven the full flow through these tools: quoted 50 BRL β USDC, created the sandbox order, simulated the PIX payment and watched it settle on Stellar Testnet.
@ramp-kit/mcp β MCP server published on
npm and listed in the
official MCP Registry
as io.github.armandocodecr/ramp-kit. Nine tools: built-in documentation
(get_documentation with 6 topics), provider discovery, live quotes,
multi-provider comparison, sandbox orders, deposit simulation
(sandbox-only by design) and Stellar wallet inspection. Works
credential-free with the mock provider.
Or in any MCP client's mcpServers config:
skills/ramp-kit β agent skill (Claude Code, Cursor, and any agent supported by the skills CLI): teaches the agent what the kit solves, the integration flow, sandbox setup, verified troubleshooting and the production checklist.
Together they cover both halves: the skill gives an agent the knowledge to guide an integration; the MCP server gives it hands to actually quote, order and verify against the sandbox. This pairs naturally with Stellar's agentic-payments direction (x402/MPP): a ramp that AI agents can understand and operate end-to-end.
The code is production-ready; what remains is provider onboarding. Ready today:
environment: "sandbox" | "production" on every
provider flips base URLs; stellarConfigFor("production") returns mainnet
Horizon + network passphrase. No hardcoded issuers anywhere: assets are
always discovered via the provider, so mainnet identifiers flow through
automatically.@ramp-kit/server ships createRampServer:
the API key lives in your backend, the browser only reaches an allowlisted
ramp surface (quote/order/status), and the sandbox simulation endpoint is
hard-blocked in production.createEtherfuseWebhookHandler verifies
X-Signature (HMAC-SHA256 over RFC 8785-canonicalized JSON, constant-time
compare), acks 2xx immediately, and dispatches typed events.
verifyMantecaSignature covers Manteca's shared-secret HMAC.claimPendingBalances,
signAndSubmit), so Freighter/hardware wallets plug in directly. The
demo's localStorage keypair is a sandbox convenience, not the pattern.simulateFiatReceived throws in
production; deposits are detected from the real SPEI/PIX transfer.External steps (with the provider, not in code):
api_prod_β¦ key. Register real bank accounts (real
CLABE/RFC) and confirm BRL/PIX production availability (live in
sandbox; listed as upcoming for production).md-api-key, per-country permissions (BRL/PIX), and webhook secret;
confirm their signature header name during onboarding.@ramp-kit/server behind HTTPS, register the webhook URL via
POST /ramp/webhook, and store the one-time secret.Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/ramp-kit)<a href="https://allmcps.com/mcp/ramp-kit"><img src="https://allmcps.com/api/badge/ramp-kit?style=directory" alt="Ramp Kit on AllMCPs" /></a>