toss-cli
토스증권 Open API를 위한 CLI 겸 MCP 서버입니다. 국내(KRX)·미국 주식의 시세·호가·캔들·시장정보를 조회하고, 계좌와 보유 주식을 확인하며, 주문 생성·정정·취소까지 터미널이나 AI 에이전트에서 바로 할 수 있습니다.
⚠️ 실거래 계좌에 연결됩니다. 주문 명령은 실제 돈으로 진짜 주문을 넣습니다. 매매 전 안전을 꼭 읽어보세요.
기능
- 📈 시세 — 현재가(다건), 호가, 최근 체결, 상/하한가, OHLCV 캔들
- 🏷️ 종목 정보 — 종목 마스터(종목명·시장·통화·상장상태)와 매수 유의사항/VI
- 🌐 시장 정보 — KRW↔USD 환율, 국내·미국 장 운영 시간
- 💼 계좌 — 계좌 목록, 보유 주식, 매수 가능 금액, 판매 가능 수량, 수수료
- 🧾 주문 — 생성 / 정정 / 취소 / 목록 / 상세 (국내·미국, 지정가·시장가, 수량·금액 기반)
- 🤖 MCP 서버 — 모든 조회·매매 기능을 Claude, Cursor, Windsurf 등에서 쓸 수 있는 툴로 제공
- 🔐 OAuth2 — 액세스 토큰 자동 발급·캐싱 (클라이언트당 토큰 1개, 만료 직전까지 재사용)
- 🧰 모든 명령에서 JSON 또는 table 출력 지원
설치
npm install -g @2oolkit/toss-cli
설치 없이 바로 실행:
npx @2oolkit/toss-cli market price 005930
Node.js 20 이상이 필요합니다.
빠른 시작
-
토스증권 WTS에서 설정 → Open API 메뉴로 들어가 client_id와 client_secret을 발급받습니다.
-
CLI를 설정합니다:
toss-cli config init
크리덴셜을 ~/.toss-cli/config.json(권한 0600)에 저장하고 계좌를 자동 선택합니다.
-
바로 조회:
toss-cli market price 005930,AAPL
toss-cli account holdings
toss-cli order list --status OPEN
설정
설정값은 ~/.toss-cli/config.json을 먼저 읽고, 없으면 환경변수로 폴백합니다:
clientId | TOSS_CLIENT_ID | OAuth2 client_id |
clientSecret | TOSS_CLIENT_SECRET | OAuth2 client_secret |
accountSeq | TOSS_ACCOUNT_SEQ | 계좌/주문 명령의 기본 계좌 |
baseUrl | TOSS_API_BASE_URL | API base URL 오버라이드(기본: 운영) |
toss-cli config set --client-id tsck_live_xxx --client-secret tssk_live_yyy
toss-cli config set --account 1
toss-cli config list
toss-cli config path
toss-cli config logout
toss-cli config logout --keep-credentials
권장: 시크릿을 CLI 인자로 넘기는 config set --client-secret <값>보다 config init(에코 없는 숨김 프롬프트)이나 환경변수를 쓰세요. 인자로 넘긴 시크릿은 셸 히스토리와 프로세스 목록(ps)에 노출될 수 있습니다.
OAuth2 액세스 토큰은 ~/.toss-cli/token.json에 캐시되어 만료 직전까지 재사용됩니다. 토스는 클라이언트당 유효한 토큰이 1개(재발급 시 이전 토큰 즉시 무효화)이므로, 이 캐싱이 동시 세션이 서로의 토큰을 무효화하는 것을 막아줍니다.
명령어
모든 명령은 -o, --output <json|table>(기본 table)을 지원합니다. 계좌/주문 명령은 -a, --account <accountSeq>로 기본 계좌를 덮어쓸 수 있습니다.
시세 (market)
toss-cli market price 005930,AAPL
toss-cli market orderbook 005930
toss-cli market trades 005930 -n 20
toss-cli market price-limits 005930
toss-cli market candles 005930 -i 1d -n 100
toss-cli market candles 005930 -i 1d --adjusted --before 2026-06-01T00:00:00+09:00
종목 정보 (stock)
toss-cli stock info 005930,AAPL
toss-cli stock warnings 005930
시장 정보 (info)
toss-cli info exchange-rate --base USD --quote KRW
toss-cli info calendar --market KR
toss-cli info calendar --market US --date 2026-06-22
계좌 (account)
toss-cli account list
toss-cli account holdings
toss-cli account holdings -s 005930
toss-cli account buying-power -c KRW
toss-cli account sellable 005930
toss-cli account commissions
주문 (order)
toss-cli order create 005930 --side BUY --type LIMIT --quantity 10 --price 70000
toss-cli order create 005930 --side SELL --type MARKET --quantity 5
toss-cli order create AAPL --side BUY --type MARKET --amount 100.5
toss-cli order modify <orderId> --type LIMIT --quantity 10 --price 71000
toss-cli order cancel <orderId>
toss-cli order list --status OPEN
toss-cli order list --status CLOSED --limit 50
toss-cli order get <orderId>
요청 전송 전에 클라이언트에서 검증하는 규칙:
--quantity / --amount 중 정확히 하나만.
--price는 LIMIT에서 필수, MARKET에서는 금지.
--amount는 --type MARKET(미국 전용)을 요구하고 --price를 금지합니다.
- 1억원 이상 주문은
--confirm-high-value가 필요합니다.
MCP 서버
toss-cli는 모든 기능을 툴로 제공하는 MCP 서버(toss-mcp)를 함께 배포합니다.
Claude Desktop / Cursor / Windsurf (JSON)
MCP 클라이언트 설정에 추가:
{
"mcpServers": {
"toss": {
"command": "npx",
"args": ["-y", "-p", "@2oolkit/toss-cli", "toss-mcp"],
"env": {
"TOSS_CLIENT_ID": "tsck_live_xxx",
"TOSS_CLIENT_SECRET": "tssk_live_yyy",
"TOSS_ACCOUNT_SEQ": "1"
}
}
}
}
Codex CLI (TOML)
~/.codex/config.toml에 추가:
[mcp_servers.toss]
command = "npx"
args = ["-y", "-p", "@2oolkit/toss-cli", "toss-mcp"]
[mcp_servers.toss.env]
TOSS_CLIENT_ID = "tsck_live_xxx"
TOSS_CLIENT_SECRET = "tssk_live_yyy"
TOSS_ACCOUNT_SEQ = "1"
참고: 패키지에 bin이 2개(toss-cli, toss-mcp)라, npx로 MCP 서버를 띄울 땐 반드시 -p로 패키지를 지정해야 합니다 (npx -y -p @2oolkit/toss-cli toss-mcp). -p 없이 npx @2oolkit/toss-cli toss-mcp로 쓰면 CLI가 실행되며 unknown command 'toss-mcp' 에러가 납니다.
이미 toss-cli config init을 실행했다면(또는 ~/.toss-cli/config.json이 있으면) 위의 env 블록은 생략 가능합니다 — 서버가 해당 파일에서 크리덴셜을 읽습니다.
툴 목록: get_prices, get_orderbook, get_trades, get_price_limits, get_candles, get_stocks, get_stock_warnings, get_exchange_rate, get_market_calendar, get_accounts, get_holdings, get_buying_power, get_sellable_quantity, get_commissions, list_orders, get_order, create_order, modify_order, cancel_order.
에러 & Rate Limit
에러에는 API의 code, 메시지, requestId(CS 문의 시 첨부 권장)가 담깁니다. 자주 보는 코드: invalid-token / expired-token(재인증), account-header-required(계좌 설정), insufficient-buying-power, order-hours-closed, price-out-of-range, confirm-high-value-required.
API는 클라이언트 × API 그룹 단위로 초당 요청 수(TPS)를 제한합니다. 429를 받으면 Retry-After 헤더만큼 대기 후 백오프하세요. 남은 허용량은 X-RateLimit-* 응답 헤더로 확인할 수 있습니다.
안전
- 크리덴셜과 캐시 토큰은
0600 권한으로 저장되며 config list 출력에서 마스킹됩니다.
order create / modify / cancel(CLI)과 create_order / modify_order / cancel_order(MCP)는 실거래 계좌에 작동합니다. 종목·방향·수량·가격을 꼭 재확인하세요.
--confirm-high-value 가드는 1억원 이상 주문에 대한 API 보호 장치를 그대로 반영합니다.
- 더 이상 쓰지 않을 때는
toss-cli config logout으로 저장된 크리덴셜과 토큰을 삭제할 수 있습니다.
개발
npm install
npm run build
npm run lint
npm test
npm run test:coverage
라이선스
MIT