loading…
Search for a command to run...
loading…
Serve Indodax Public market data: server time, pairs, ticker, all tickers, summaries, order book, trades, OHLC, and price increments. Private account data: acco
Serve Indodax Public market data: server time, pairs, ticker, all tickers, summaries, order book, trades, OHLC, and price increments. Private account data: account info, balances, transactions, and trade history. Spot trading: buy, sell, cancel, cancel by client order ID, cancel all, and deadman countdown. Funding: withdrawal fee lookup.
Professional command-line interface and Model Context Protocol (MCP) server for the Indodax cryptocurrency exchange.
This project is now a fully-featured MCP server, allowing AI agents (like ChatGPT, Claude, and Glama) to interact with Indodax.
👉 Read the MCP Full Feature Guide & Setup
Unofficial Rust CLI for Indodax. Use it to inspect markets, manage account data, place spot orders, stream live WebSocket events, run paper trading and price alerts, and expose the same command surface to agents through MCP.
Rust CLI WebSocket MCP License
-o json.~/.config/indodax/config.toml.Install from source:
git clone https://github.com/ibidathoillah/indodax-cli.git
cd indodax-cli
cargo install --path .
Install from crates.io:
cargo install indodax-cli
Install from npm:
npm install -g indodax-cli
On Android/Termux, npm install -g indodax-cli downloads the Android release binary when available. If the release asset is missing, it falls back to a local cargo build, so cargo still needs to be installed in Termux for that fallback path.
Run with Docker:
docker run --rm ibidathoillah/indodax-cli --help
docker run --rm -v ~/.config/indodax:/root/.config/indodax ibidathoillah/indodax-cli balance
Run from the checkout:
cargo build
./target/debug/indodax --help
Market data does not require credentials:
indodax server-time
indodax ticker btc/idr
indodax orderbook btc/idr --count 10
indodax pairs
indodax ohlc --pair btc/idr
indodax -o json ticker btc/idr
Configure private API credentials:
indodax auth set --api-key YOUR_API_KEY --api-secret YOUR_API_SECRET
indodax auth test
indodax auth show
Or use environment variables:
export INDODAX_API_KEY=your_api_key
export INDODAX_API_SECRET=your_api_secret
Credential priority:
--api-key and --api-secretINDODAX_API_KEY and INDODAX_API_SECRET~/.config/indodax/config.tomlGlobal options:
indodax [OPTIONS] <COMMAND>
Options:
-o, --output <table|json> Output format [default: table]
--api-key <API_KEY> API key override
--api-secret <API_SECRET> API secret override
--api-secret-stdin Read API secret from stdin
-v, --verbose Enable verbose logs
--yes, --force Skip confirmation prompts
indodax server-time
indodax pairs
indodax ticker btc/idr
indodax ticker-all
indodax summaries
indodax orderbook btc/idr --count 10
indodax trades btc/idr
indodax ohlc --pair btc/idr --interval 60
indodax history btc/idr --timeframe 15 --from 1779158061 --to 1779454161
indodax webdata btc/idr
indodax chat-history
indodax pairs-v2
indodax search-v2
indodax terminal-trade usdt/idr
indodax terminal-market usdt/idr
indodax terminal-categories
indodax onramp-config usdt/idr
indodax news btc
indodax price-increments
indodax account-info
indodax balance
indodax transactions
indodax trades-history btc/idr --limit 5
indodax order buy --pair btc/idr --idr 100000 --price 1000000000
indodax order buy --pair btc/idr --idr 100000 --order-type market
indodax order sell --pair btc/idr --amount 0.001 --price 1000000000
indodax order cancel --order-id 123456 --pair btc/idr --order-type buy
indodax order cancel-by-client-id --client-order-id CLIENT_ID
indodax --yes order cancel-all --pair btc/idr
indodax order countdown --pair btc/idr --countdown-time 60000
indodax withdrawal fee --asset btc
indodax withdraw --asset btc --volume 0.001 --address bc1... --network BTC
indodax withdrawal serve-callback --port 8080
For withdrawals, Indodax may require a callback URL. Configure it with:
indodax auth set --callback-url https://yourdomain.com/callback
Public streams:
indodax ws ticker btc/idr
indodax ws trades btc/idr
indodax ws book btc/idr
indodax ws summary
Private stream:
indodax ws orders
indodax alert add -p btc/idr --above 150000000
indodax alert add -p btc/idr --below 50000000
indodax alert add -p btc/idr --percent-up 5
indodax alert add -p btc/idr --percent-down 10
indodax alert list
indodax alert list --history
indodax alert cancel -i 1
indodax alert cancel --all
indodax alert check
indodax alert watch -p btc/idr
indodax alert triggered
Alerts are stored in ~/.config/indodax/alerts.json.
indodax paper init
indodax paper init --idr 50000000 --btc 0.5
indodax paper balance
indodax paper buy -p btc/idr -i 1000000
indodax paper buy -p btc/idr -a 0.1 -r 500000000
indodax paper sell -p btc/idr -a 0.05 -r 1000000000
indodax paper orders --pair btc/idr
indodax paper cancel -i 1
indodax paper cancel-all
indodax paper fill -i 1
indodax paper fill -i 2 --price 110000000
indodax paper fill --all
indodax paper check-fills -p '{"btc/idr": 95000000, "eth/idr": 12000000}'
indodax paper topup -c usdt -a 50000
indodax paper history
indodax paper status
indodax paper reset
Paper trading mirrors the live order interface for safer strategy testing.
indodax shell
indodax mcp
indodax mcp -s all
indodax mcp -s all --allow-dangerous
indodax mcp -s market,trade,paper
Service groups:
| Group | Tools | Auth Required | Dangerous |
|---|---|---|---|
market |
Server time, ticker, pairs, orderbook, trades, OHLC, price increments, WS snapshots | No | No |
account |
Balance, trade history, transactions, account info, open orders, order history, get order | Yes | No |
trade |
Buy, sell, cancel, cancel all orders | Yes | Yes |
funding |
Withdraw fees, withdraw crypto, deposit address | Yes | Yes |
paper |
Paper trading init, balance, buy, sell, orders, cancel, fill, history, status | No | No |
auth |
Show config, test credentials, set credentials | Varies | No |
alert |
Add, list, cancel, check price alerts | No | No |
By default, trade and funding MCP tools require acknowledged: true. Use --allow-dangerous only for controlled local automation.
The server exposes read-only resources that MCP clients can inspect:
| Resource URI | Description |
|---|---|
config://current |
Current API configuration status |
pairs://list |
All available trading pairs from the API |
paper://state |
Current paper trading state (balances, orders count) |
Pre-built prompt templates for common workflows:
| Prompt | Arguments | Description |
|---|---|---|
create_order |
side, pair, price, amount, idr |
Generate buy/sell order with safety checks |
check_portfolio |
(none) | Account balance and open orders overview |
analyze_market |
pair |
Market analysis with ticker, order book, and trades |
This server is optimized for deployment on Glama.
glama.json defines the required environment variables for the build spec.Dockerfile builds only the CLI, MCP, and callback-server features, installs the indodax-cli binary, and also exposes an indodax alias for clients that use the shorter command name.INDODAX_API_KEY and INDODAX_API_SECRET in the Glama admin panel.Use this Glama build spec:
{
"baseImage": "debian:trixie-slim",
"buildSteps": [
"apt-get update && apt-get install -y --no-install-recommends ca-certificates curl git pkg-config build-essential && rm -rf /var/lib/apt/lists/*",
"curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y",
". $HOME/.cargo/env && cargo build --release --features cli,mcp,server",
"cp target/release/indodax-cli /usr/local/bin/indodax-cli && ln -s /usr/local/bin/indodax-cli /usr/local/bin/indodax"
],
"cmdArguments": [
"mcp-proxy",
"--",
"indodax-cli",
"mcp"
],
"nodeVersion": "26",
"pythonVersion": "3.14"
}
If Glama fails while loading Docker metadata, such as ECONNRESET during load metadata for docker.io/library/debian:trixie-slim, retry the build. That failure happens before this project is cloned or compiled.
Example configuration for manual setup:
{
"mcpServers": {
"indodax": {
"command": "indodax",
"args": ["mcp", "-s", "all"]
}
}
}
Table mode is the default:
indodax ticker btc/idr
JSON mode is intended for scripting and automation:
indodax -o json ticker btc/idr
Error responses in JSON mode use structured envelopes:
{
"error": true,
"message": "Invalid trading pair: xxx_idr",
"error_type": "invalid_pair",
"retryable": false
}
The repository includes live API smoke tests:
./scripts/e2e_minimal.sh --public
./scripts/e2e_minimal.sh --private
./scripts/e2e_minimal.sh --ws
./scripts/e2e_websocket_mock.sh
Environment knobs:
INDODAX_BIN=./target/debug/indodax
Latest local verification:
cargo test: 296 passed
./scripts/e2e_minimal.sh --public: passed
./scripts/e2e_minimal.sh --private: skipped private checks (credentials unavailable)
./scripts/e2e_minimal.sh --ws: passed
wss://ws3.indodax.com/ws/wss://pws.indodax.com/ws/This project is inspired by the Kraken CLI architecture and built with modern Rust:
clap for derive-based CLI parsingtokio for async runtimetokio-tungstenite for WebSocket streamsreqwest for REST API callsserde for serialization and deserializationcomfy-table for terminal tablesrmcp for Model Context Protocol supportEvery release should pass:
cargo testCoverage is maintained across auth, client, config, errors, commands, mcp, and output modules.
0600 permissions when using indodax auth set.cargo fmt
cargo test
cargo build
Contributions are welcome:
If you use multiple exchanges, check out these related CLI tools built with the same architecture:
MIT
This project is unofficial and is not affiliated with or endorsed by Indodax. Cryptocurrency trading is risky; review commands carefully before using write-capable API keys.
Run in your terminal:
claude mcp add indodax -- npx Security
Low riskAutomated heuristic from public metadata — not a security guarantee.