Skip to main content
Glama

Upbit MCP Server (TypeScript)

Fast MCP server for interacting with Upbit. Provides public market data tools and optional private trading tools.

Requirements

  • Node.js 18+

  • pnpm 8+

Related MCP server: MCP Bitpanda Server

Install

pnpm install

Environment

Copy and edit .env:

cp .env.example .env

.env.example:

UPBIT_SERVER_URL=https://api.upbit.com UPBIT_ACCESS_KEY= UPBIT_SECRET_KEY= UPBIT_ENABLE_TRADING=false

Private tools require UPBIT_ACCESS_KEY, UPBIT_SECRET_KEY, and UPBIT_ENABLE_TRADING=true.

Security & permissions

  • Keep your UPBIT_SECRET_KEY private and IP-allowlist your server in Upbit.

  • Set UPBIT_ENABLE_TRADING=true only when you intend to place/cancel orders or create withdrawals/deposit addresses.

  • Upbit permission mapping (high-level):

Where to get Upbit API keys

Before you begin, you need to get your Upbit API keys:

  1. Create an account on Upbit if you don't already have one

  2. Go to the Upbit Developer Center

  3. Create a new API key

  4. Make sure to set appropriate permissions (read, trade, withdraw as needed)

  5. Store your API keys(UPBIT_ACCESS_KEY, UPBIT_SECRET_KEY) in the .env file (see Installation section) set UPBIT_ENABLE_TRADING=true to enable private tools.

Build & Run

pnpm run build pnpm run start

For easier testing use this (in project root):

pnpm run build npx @modelcontextprotocol/inspector node dist/index.js

If installed globally or via npx, you can also run the bin:

mcp-upbit-server

Runs over stdio for MCP clients.

Tools

Public:

  • GET_TICKER — latest ticker for a market. Params: { "market": "KRW-BTC" }

  • GET_ORDERBOOK — orderbook snapshot. Params: { "market": "KRW-BTC" }

  • GET_TRADES — recent trades. Params: { "market": "KRW-BTC" }

Private (requires env and enable flag):

  • GET_ACCOUNTS

  • GET_ORDERS{ market?, state?, page?, limit? }

  • GET_ORDER{ uuid? , identifier? }

  • CREATE_ORDER{ market, side, ord_type, volume?, price? }

  • CANCEL_ORDER{ uuid }

  • LIST_WITHDRAWAL_ADDRESSES

  • CREATE_WITHDRAWAL{ currency, amount, address, net_type, secondary_address? , transaction_type? }

  • GET_WITHDRAWAL{ uuid }

  • LIST_WITHDRAWALS{ currency?, state?, page?, limit? }

  • CANCEL_WITHDRAWAL{ uuid }

  • GET_DEPOSIT_CHANCE{ currency, net_type? }

  • CREATE_DEPOSIT_ADDRESS{ currency, net_type }

  • GET_DEPOSIT_ADDRESS{ currency, net_type }

  • LIST_DEPOSIT_ADDRESSES

  • GET_DEPOSIT{ uuid }

  • LIST_DEPOSITS{ currency?, state?, page?, limit? }

All tool outputs are JSON strings for easy display.

Examples

// CREATE_ORDER (market buy 10,000 KRW) { "name": "CREATE_ORDER", "arguments": { "market": "KRW-BTC", "side": "bid", "ord_type": "price", "price": "10000" } }
// CREATE_ORDER (limit sell with post_only) { "name": "CREATE_ORDER", "arguments": { "market": "KRW-BTC", "side": "ask", "ord_type": "limit", "volume": "0.01", "price": "100000000", "time_in_force": "post_only", "identifier": "my-unique-id-001" } }
// LIST_WITHDRAWALS (page 1, 50 items) { "name": "LIST_WITHDRAWALS", "arguments": { "page": 1, "limit": 50 } }
// GET_DEPOSIT_CHANCE { "name": "GET_DEPOSIT_CHANCE", "arguments": { "currency": "BTC" } }

License

MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/IQAIcom/mcp-upbit'

If you have feedback or need assistance with the MCP directory API, please join our Discord server