MCP Hub
Back to servers

buda-mcp

Buda.com market data: prices, order books, trades, and volume for crypto markets in CLP, COP, PEN.

Registry
Updated
Apr 11, 2026

Quick Install

npx -y @guiie/buda-mcp

buda-mcp

npm version License: MIT Node.js >=18

MCP server for Buda.com — the leading cryptocurrency exchange in Chile, Colombia, and Peru. Gives any MCP-compatible AI assistant live access to market data, order books, trade history, spreads, and (when credentials are provided) full private account tools including order management, withdrawals, deposits, and Lightning Network payments.


Quick Start

npx @guiie/buda-mcp

Or install permanently:

npm install -g @guiie/buda-mcp
buda-mcp

Install in your MCP client

Claude Code

claude mcp add buda-mcp -- npx -y @guiie/buda-mcp

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "buda-mcp": {
      "command": "npx",
      "args": ["-y", "@guiie/buda-mcp"]
    }
  }
}

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "buda-mcp": {
      "command": "npx",
      "args": ["-y", "@guiie/buda-mcp"]
    }
  }
}

Tools

Public tools (no credentials required)

get_market_summary ⭐ Start here

One-call summary: last price, bid/ask, spread %, 24h volume, price change, and liquidity_rating (high / medium / low). Best first tool when a user asks about any specific market.

ParameterTypeRequiredDescription
market_idstringYesMarket ID (e.g. BTC-CLP).

get_markets

List all 26 trading pairs on Buda.com, or get details for a specific market (fees, minimum order size, discount tiers).

ParameterTypeRequiredDescription
market_idstringNoMarket ID (e.g. BTC-CLP). Omit to list all markets.

get_ticker

Current snapshot: last price, best bid/ask, 24h volume, and price change over 24h and 7d.

ParameterTypeRequiredDescription
market_idstringYesMarket ID (e.g. BTC-CLP, ETH-COP).

get_orderbook

Current order book: sorted bids and asks as {price, amount} objects.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.
limitnumberNoMax price levels per side (default: all).

get_trades

Recent trade history as typed objects: {timestamp_ms, amount, price, direction}.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.
limitnumberNoNumber of trades (default 50, max 100).
timestampnumberNoUnix seconds — returns trades older than this (pagination).

get_market_volume

24h and 7-day transacted volume by side (bid = buys, ask = sells).

ParameterTypeRequiredDescription
market_idstringYesMarket ID.

get_spread

Bid/ask spread: absolute value and percentage of the ask price.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.

compare_markets

Side-by-side ticker data for all pairs of a given base currency across all quote currencies.

ParameterTypeRequiredDescription
base_currencystringYesBase currency (e.g. BTC, ETH).

get_price_history

OHLCV candles aggregated from raw trade history (Buda has no native candlestick endpoint). Supports 5m, 15m, 30m, 1h, 4h, 1d periods.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.
periodstringNo5m / 15m / 30m / 1h / 4h / 1d (default 1h).
limitnumberNoRaw trades to fetch before aggregation (default 100, max 1000).

get_arbitrage_opportunities

Detects cross-country price discrepancies for an asset across Buda's CLP, COP, and PEN markets, normalized to USDC.

ParameterTypeRequiredDescription
base_currencystringYese.g. BTC.
threshold_pctnumberNoMinimum discrepancy to report (default 0.5).

simulate_order

Simulates a buy or sell order using live ticker data — no order is ever placed. Returns estimated_fill_price, fee_amount, total_cost, slippage_vs_mid_pct. All responses include simulation: true.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.
sidebuy | sellYesOrder side.
amountnumberYesOrder size in base currency.
pricenumberNoOmit for market order simulation.

calculate_position_size

Kelly-style position sizing from capital, risk %, entry, and stop-loss. Fully client-side — no API call.

ParameterTypeRequiredDescription
market_idstringYesMarket ID (for context).
capitalnumberYesTotal capital to size from.
risk_pctnumberYes% of capital to risk (0.1–10).
entry_pricenumberYesEntry price.
stop_loss_pricenumberYesStop-loss price.

get_market_sentiment

Composite sentiment score (−100 to +100) from three components: 24h price variation (40%), volume vs 7-day average (35%), spread vs market-type baseline (25%). Returns score, label, component_breakdown, and a disclaimer.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.

get_technical_indicators

RSI (14), MACD (12/26/9), Bollinger Bands (20, 2σ), SMA 20, SMA 50 — computed server-side from Buda trade history (no external libraries). Returns signal interpretations and a structured warning if fewer than 20 candles are available. Includes disclaimer.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.
periodstringNo1h / 4h / 1d (default 1h).
limitnumberNoRaw trades to fetch (500–1000).

get_real_quotation

Returns a real-time quotation for a given order amount and direction, showing exact fill price, fee, and balance changes without placing an order.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.
typeBid | AskYesOrder side.
amountnumberYesOrder size in base currency.
limit_pricenumberNoLimit price for limit quotations.

get_available_banks

Lists available banks for fiat deposits/withdrawals in a given currency's country.

ParameterTypeRequiredDescription
currencystringYesFiat currency code (e.g. CLP, COP, PEN).

Authenticated tools

Available only when BUDA_API_KEY and BUDA_API_SECRET environment variables are set. See Authentication mode below.

Warning: Authenticated instances must be run locally only. Never expose a server with API credentials to the internet.

get_account_info

Returns the authenticated account profile: email, name, and monthly transacted amount.


get_balances

All currency balances: total, available, frozen, and pending withdrawal — as floats with _currency fields.

Example prompts:

  • "What's my BTC balance on Buda?"
  • "Show all my balances"

get_balance

Balance for a single currency.

ParameterTypeRequiredDescription
currencystringYesCurrency code (e.g. BTC, CLP).

get_orders

Orders for a given market, filterable by state.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.
statestringNopending, active, traded, canceled, canceled_and_traded.
pernumberNoResults per page (default 20, max 300).
pagenumberNoPage number (default 1).

get_order

Returns a single order by its numeric ID.

ParameterTypeRequiredDescription
order_idnumberYesNumeric order ID.

get_order_by_client_id

Returns an order by the client-assigned string ID set at placement.

ParameterTypeRequiredDescription
client_idstringYesClient ID string.

place_order

Place a limit or market order. Supports optional time-in-force flags and stop orders.

Requires confirmation_token="CONFIRM" — prevents accidental execution.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.
typeBid | AskYesOrder side.
price_typelimit | marketYesOrder type.
amountnumberYesOrder size in base currency.
limit_pricenumberNoRequired for limit orders.
iocbooleanNoImmediate-or-cancel. Mutually exclusive with fok, post_only, gtd_timestamp.
fokbooleanNoFill-or-kill. Mutually exclusive with other TIF flags.
post_onlybooleanNoRejected if it would execute as taker. Mutually exclusive with other TIF flags.
gtd_timestampstringNoGood-till-date (ISO 8601). Mutually exclusive with other TIF flags.
stop_pricenumberNoStop trigger price. Must be paired with stop_type.
stop_type>= | <=NoStop trigger direction. Must be paired with stop_price.
confirmation_tokenstringYesMust equal "CONFIRM" to execute.

cancel_order

Cancel an open order by numeric ID.

Requires confirmation_token="CONFIRM".

ParameterTypeRequiredDescription
order_idnumberYesNumeric order ID.
confirmation_tokenstringYesMust equal "CONFIRM" to cancel.

cancel_order_by_client_id

Cancel an open order by its client-assigned string ID.

Requires confirmation_token="CONFIRM".

ParameterTypeRequiredDescription
client_idstringYesClient ID string.
confirmation_tokenstringYesMust equal "CONFIRM" to cancel.

cancel_all_orders

Cancel all open orders in a specific market or across all markets.

Requires confirmation_token="CONFIRM".

ParameterTypeRequiredDescription
market_idstringYesMarket ID (e.g. BTC-CLP) or "*" to cancel all markets.
confirmation_tokenstringYesMust equal "CONFIRM" to cancel.

place_batch_orders

Place up to 20 orders sequentially. All orders are pre-validated before any API call — a validation failure aborts with zero orders placed. Partial API failures do not roll back placed orders; a warning field surfaces this.

Requires confirmation_token="CONFIRM".

ParameterTypeRequiredDescription
ordersarrayYesArray of 1–20 order objects (market_id, type, price_type, amount, optional limit_price).
confirmation_tokenstringYesMust equal "CONFIRM" to execute.

get_network_fees

Returns withdrawal fee information for a currency.

ParameterTypeRequiredDescription
currencystringYesCurrency code (e.g. BTC, ETH).

get_deposit_history

Deposit history for a currency, filterable by state with pagination.

ParameterTypeRequiredDescription
currencystringYesCurrency code.
statestringNopending_info, pending, confirmed, anulled, retained.
pernumberNoResults per page (default 20, max 300).
pagenumberNoPage number (default 1).

create_fiat_deposit

Record a fiat deposit. Calling twice creates duplicate records — the confirmation guard is critical.

Requires confirmation_token="CONFIRM".

ParameterTypeRequiredDescription
currencystringYesFiat currency code (e.g. CLP, COP, PEN).
amountnumberYesDeposit amount.
bankstringNoBank name or identifier.
confirmation_tokenstringYesMust equal "CONFIRM" to execute.

get_withdrawal_history

Withdrawal history for a currency, filterable by state with pagination.

ParameterTypeRequiredDescription
currencystringYesCurrency code.
statestringNopending_signature, pending, confirmed, rejected, anulled.
pernumberNoResults per page (default 20, max 300).
pagenumberNoPage number (default 1).

create_withdrawal

Create a crypto or fiat withdrawal. Exactly one of address (crypto) or bank_account_id (fiat) must be provided.

Requires confirmation_token="CONFIRM".

ParameterTypeRequiredDescription
currencystringYesCurrency code (e.g. BTC, CLP).
amountnumberYesWithdrawal amount.
addressstringNoDestination crypto address. Mutually exclusive with bank_account_id.
networkstringNoBlockchain network (e.g. bitcoin, ethereum).
bank_account_idnumberNoFiat bank account ID. Mutually exclusive with address.
confirmation_tokenstringYesMust equal "CONFIRM" to execute.

list_receive_addresses

Lists all receive addresses for a currency.

ParameterTypeRequiredDescription
currencystringYesCurrency code (e.g. BTC).

get_receive_address

Returns the current active receive address for a currency.

ParameterTypeRequiredDescription
currencystringYesCurrency code.

create_receive_address

Generate a new receive address for a crypto currency. Not idempotent — each call creates a distinct address.

Requires confirmation_token="CONFIRM".

ParameterTypeRequiredDescription
currencystringYesCrypto currency code (e.g. BTC, ETH).
confirmation_tokenstringYesMust equal "CONFIRM" to generate a new address.

list_remittances

Lists remittances on the account with pagination.

ParameterTypeRequiredDescription
pernumberNoResults per page (default 20, max 300).
pagenumberNoPage number (default 1).

get_remittance

Returns a single remittance by ID.

ParameterTypeRequiredDescription
idnumberYesRemittance ID.

quote_remittance

Request a remittance quote for a given recipient and amount. Not idempotent — each call creates a new remittance record.

Requires confirmation_token="CONFIRM".

ParameterTypeRequiredDescription
currencystringYesCurrency code.
amountnumberYesAmount to remit.
recipient_idnumberYesRemittance recipient ID.
confirmation_tokenstringYesMust equal "CONFIRM" to create the quote.

accept_remittance_quote

Accept a remittance quote to execute the transfer.

Requires confirmation_token="CONFIRM".

ParameterTypeRequiredDescription
idnumberYesRemittance ID to accept.
confirmation_tokenstringYesMust equal "CONFIRM" to execute.

list_remittance_recipients

Lists saved remittance recipients with pagination.

ParameterTypeRequiredDescription
pernumberNoResults per page.
pagenumberNoPage number.

get_remittance_recipient

Returns a single remittance recipient by ID.

ParameterTypeRequiredDescription
idnumberYesRecipient ID.

lightning_withdrawal

Pay a Bitcoin Lightning Network BOLT-11 invoice from the LN-BTC reserve. Funds leave immediately on success.

Requires confirmation_token="CONFIRM".

ParameterTypeRequiredDescription
invoicestringYesBOLT-11 invoice string (starts with lnbc, lntb, etc.).
confirmation_tokenstringYesMust equal "CONFIRM" to execute.

create_lightning_invoice

Create a Bitcoin Lightning Network receive invoice. No confirmation required — no funds leave the account.

ParameterTypeRequiredDescription
amount_satoshisnumberYesInvoice amount in satoshis.
descriptionstringNoPayment description (max 140 characters).
expiry_secondsnumberNoInvoice expiry in seconds (60–86400, default 3600).

schedule_cancel_all

Arms an in-memory dead man's switch: if not renewed within ttl_seconds, all open orders for the market are automatically cancelled.

Requires confirmation_token="CONFIRM".

Warning: Timer state is lost on server restart. Use only on locally-run instances — never Railway or hosted deployments.

ParameterTypeRequiredDescription
market_idstringYesMarket ID to cancel orders for.
ttl_secondsnumberYesSeconds before auto-cancel fires (10–300).
confirmation_tokenstringYesMust equal "CONFIRM" to arm.

renew_cancel_timer

Resets the dead man's switch TTL for a market. No confirmation required.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.

disarm_cancel_timer

Disarms the dead man's switch without cancelling any orders. Safe to call with no active timer.

ParameterTypeRequiredDescription
market_idstringYesMarket ID.

MCP Resources

In addition to tools, the server exposes MCP Resources that clients can read directly:

URIDescription
buda://marketsJSON list of all Buda.com markets
buda://ticker/{market}JSON ticker for a specific market (e.g. buda://ticker/BTC-CLP)
buda://summary/{market}Full market summary with liquidity rating (e.g. buda://summary/BTC-CLP)

Authentication mode

The server defaults to public-only mode — no API key needed, no breaking changes for existing users.

To enable authenticated tools, set environment variables before running:

BUDA_API_KEY=your_api_key BUDA_API_SECRET=your_api_secret npx @guiie/buda-mcp

Or in Claude Desktop config:

{
  "mcpServers": {
    "buda-mcp": {
      "command": "npx",
      "args": ["-y", "@guiie/buda-mcp"],
      "env": {
        "BUDA_API_KEY": "your_api_key",
        "BUDA_API_SECRET": "your_api_secret"
      }
    }
  }
}

Authentication uses HMAC-SHA384 signing per the Buda API docs. Keys are never logged.

Security: Never expose an authenticated instance on a public server. Always run locally when using API credentials.


Markets covered

QuoteCountrySample pairs
CLPChileBTC-CLP, ETH-CLP, SOL-CLP
COPColombiaBTC-COP, ETH-COP, SOL-COP
PENPeruBTC-PEN, ETH-PEN
USDCUSD-peggedBTC-USDC, USDT-USDC
BTCCrossETH-BTC, LTC-BTC, BCH-BTC

Build from source

git clone https://github.com/gtorreal/buda-mcp.git
cd buda-mcp
npm install
npm run build
node dist/index.js        # stdio (for MCP clients)
node dist/http.js         # HTTP on port 3000 (for Railway / hosted)

Run tests:

npm run test:unit        # 138 unit tests, no network required
npm run test:integration # live API tests (skips if unreachable)
npm test                 # both

HTTP / Railway deployment

The dist/http.js entrypoint runs an Express server with:

  • POST /mcp — Streamable HTTP MCP transport
  • GET /mcp — SSE streaming transport
  • GET /health — health check ({ status, version, auth_mode })
  • GET /.well-known/mcp/server-card.json — Smithery-compatible static tool manifest

Environment variables

VariableRequiredDescription
PORTNoHTTP listen port (default: 3000)
MCP_AUTH_TOKENYes, when credentials are setBearer token that all /mcp requests must include (Authorization: Bearer <token>). If BUDA_API_KEY/BUDA_API_SECRET are set but this is absent, the server refuses to start.
MCP_RATE_LIMITNoMax requests per IP per minute on /mcp (default: 120)
BUDA_API_KEYNoBuda.com API key — enables auth-gated tools
BUDA_API_SECRETNoBuda.com API secret — required together with BUDA_API_KEY

Security: Never expose the HTTP server publicly without setting MCP_AUTH_TOKEN. The server will exit at startup if credentials are present but the token is missing.


Project structure

src/
  client.ts                   BudaClient (HTTP + HMAC auth + 429 retry)
  cache.ts                    In-memory TTL cache with in-flight deduplication
  types.ts                    TypeScript types for Buda API responses
  validation.ts               validateMarketId(), validateCurrency(), validateCryptoAddress()
  utils.ts                    flattenAmount(), aggregateTradesToCandles(), getLiquidityRating()
  version.ts                  Single source of truth for version string
  index.ts                    stdio MCP server entrypoint
  http.ts                     HTTP/SSE MCP server entrypoint
  tools/
    markets.ts                get_markets
    ticker.ts                 get_ticker
    orderbook.ts              get_orderbook
    trades.ts                 get_trades
    volume.ts                 get_market_volume
    spread.ts                 get_spread
    compare_markets.ts        compare_markets
    price_history.ts          get_price_history
    arbitrage.ts              get_arbitrage_opportunities
    market_summary.ts         get_market_summary
    simulate_order.ts         simulate_order
    calculate_position_size.ts calculate_position_size
    market_sentiment.ts       get_market_sentiment
    technical_indicators.ts   get_technical_indicators
    banks.ts                  get_available_banks
    quotation.ts              get_real_quotation
    account.ts                get_account_info (auth)
    balance.ts                get_balance (auth)
    balances.ts               get_balances (auth)
    orders.ts                 get_orders (auth)
    order_lookup.ts           get_order, get_order_by_client_id (auth)
    place_order.ts            place_order (auth)
    cancel_order.ts           cancel_order (auth)
    cancel_all_orders.ts      cancel_all_orders (auth)
    cancel_order_by_client_id.ts  cancel_order_by_client_id (auth)
    batch_orders.ts           place_batch_orders (auth)
    fees.ts                   get_network_fees (auth)
    deposits.ts               get_deposit_history, create_fiat_deposit (auth)
    withdrawals.ts            get_withdrawal_history, create_withdrawal (auth)
    receive_addresses.ts      list/get/create_receive_address (auth)
    remittances.ts            list/get/quote/accept remittances (auth)
    remittance_recipients.ts  list/get remittance recipients (auth)
    lightning.ts              lightning_withdrawal, create_lightning_invoice (auth)
    dead_mans_switch.ts       schedule_cancel_all, renew/disarm_cancel_timer (auth)
marketplace/
  cursor-mcp.json             Cursor MCP config example
  claude-listing.md           Claude registry listing
  openapi.yaml                OpenAPI spec (GPT Actions / HTTP wrapper)
  gemini-tools.json           Gemini function declarations

License

MIT — Buda.com API docs

Reviews

No reviews yet

Sign in to write a review