FiatDock MCP Server

Non-custodial USDC <-> bank for AI agents: free quotes, $0.05 per session via x402, 1% commission itemised; own funds only (PT + EU/EEA, not UK), 18+.

Documentation

fiatdock-mcp

Move value between USDC and a bank account from any AI agent — non-custodially (conversion, KYC and custody are handled by Transak, a licensed provider; FiatDock never touches funds).

npx -y fiatdock-mcp        # that's it — 4 MCP tools over stdio
# optional env: AGENT_PRIVATE_KEY=0x... auto-pays the $0.05 x402 fee for paid tools
ToolCostWhat it does
get_quotefreeLive rate + all fees itemised (incl. the 1% service commission)
create_offramp_session$0.05 USDC via x402Agent's USDC → owner's own bank account; returns a one-time checkoutUrl
create_onramp_session$0.05 USDC via x402Owner's own fiat → USDC to the agent's wallet (address locked)
get_order_statusfreeTrack an order by partnerOrderId
  • Remote endpoint (no install): https://fiatdock.com/mcp — Streamable HTTP, stateless, CORS-enabled. Paid tools return the x402 402 challenge there (remote can't sign payments).
  • Official MCP Registry: com.fiatdock/fiatdock-mcp
  • No MCP? GET https://fiatdock.com/tools.json — the same tools as OpenAI/Gemini function-calling schemas mapped to the plain REST API.
  • Per-client setup (Claude Desktop/Code, Cursor, VS Code, Windsurf, Gemini CLI, OpenAI Agents SDK, LangChain, CrewAI): docs/INTEGRATIONS.md · runnable examples: docs/examples/

Compliance (binding): users must be 18+, in Portugal or Transak-supported EU/EEA countries (not available in the UK or restricted countries). Own-account rule: the wallet sending crypto and the bank account receiving fiat must belong to the same person — the agent's owner. No third-party funds, no aggregation, no person-to-person transfers. Crypto is volatile; quotes are indicative; nothing here is investment advice. Terms · Privacy · Risk warning

Environment

VariableRequiredPurpose
FIATDOCK_URLno (default https://fiatdock.com)FiatDock API base URL
AGENT_PRIVATE_KEYonly for paid toolsAgent wallet key used to auto-pay the $0.05 x402 fee. Without it, free tools still work and paid tools return the 402 challenge. Use a dedicated low-balance wallet; never your main key.

Claude Desktop / Cursor / Windsurf / Gemini CLI

All four read the same mcpServers shape (file: claude_desktop_config.json, ~/.cursor/mcp.json, ~/.codeium/windsurf/mcp_config.json, ~/.gemini/settings.json):

{
  "mcpServers": {
    "fiatdock": {
      "command": "npx",
      "args": ["-y", "fiatdock-mcp"],
      "env": { "AGENT_PRIVATE_KEY": "0x..." }
    }
  }
}

Claude Code

claude mcp add fiatdock -e AGENT_PRIVATE_KEY=0x... -- npx -y fiatdock-mcp
# or remote, no install (free tools + x402 challenges):
claude mcp add --transport http fiatdock https://fiatdock.com/mcp

VS Code (Copilot agent mode)

.vscode/mcp.json:

{
  "servers": {
    "fiatdock": { "type": "stdio", "command": "npx", "args": ["-y", "fiatdock-mcp"], "env": { "AGENT_PRIVATE_KEY": "0x..." } }
  }
}

OpenAI Agents SDK / LangChain / CrewAI

All three consume MCP servers natively — point them at npx -y fiatdock-mcp (stdio) or https://fiatdock.com/mcp (Streamable HTTP):

# OpenAI Agents SDK
from agents.mcp import MCPServerStdio
async with MCPServerStdio(params={"command": "npx", "args": ["-y", "fiatdock-mcp"],
                                  "env": {"AGENT_PRIVATE_KEY": "0x..."}}) as fiatdock: ...

# LangChain (langchain-mcp-adapters)
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({"fiatdock": {"transport": "streamable_http", "url": "https://fiatdock.com/mcp"}})

# CrewAI (crewai-tools)
from crewai_tools import MCPServerAdapter
tools = MCPServerAdapter({"url": "https://fiatdock.com/mcp", "transport": "streamable-http"})

How a typical off-ramp flows

  1. get_quote (free) — agent checks the rate and the full fee breakdown.
  2. create_offramp_session — pays $0.05 in USDC automatically via x402, receives checkoutUrl + partnerOrderId.
  3. The agent forwards checkoutUrl to its human owner (valid ~5 minutes, single use). KYC happens once, ever, at the provider.
  4. get_order_status (or a signed callback) confirms COMPLETED.

Security

Found a vulnerability? Please report it privately to [email protected] — see SECURITY.md. Never open a public issue for security reports.

License

MIT