tossinvest-mcp
Read-only Toss Securities MCP server for KRX/US market data, account/order queries, and optional trading tools when enabled.
Query current prices, orderbooks, recent trades, price limits, candles, stock master data, buy warnings, exchange rates, and KR/US market calendars.
List accounts and query holdings, buying power, sellable quantity, commissions, order lists, and individual order details by accountSeq.
README notes optional trading mode can create/modify/cancel regular and conditional orders, but those tools are not in the provided schema and are disabled by default.
Enables OpenAI services to access Toss Securities Open API for stock price inquiries, order execution, and portfolio management.
tossinvest-mcp
프로그램 개요
현재 버전: 0.3.0
tossinvest-mcp는 토스증권 Open API(현재가 조회, 주문, 잔고 조회 등)를 OpenAI 서비스, Claude Desktop, Cursor 같은 MCP 지원 프로그램에서 사용할 수 있게 해주는 로컬 MCP 서버입니다.
쉽게 말해, 이 프로그램을 MCP 클라이언트에 등록하면 AI에게 다음처럼 요청할 수 있습니다.
삼성전자 현재가를 조회해줘.내 토스증권 보유 주식을 보여줘.삼성전자 1주를 주문해줘.이 프로그램은 사용자의 컴퓨터에서만 실행됩니다.
Related MCP server: tossinvest-openapi-mcp
가장 중요한 주의사항
토스증권 Open API에는 샌드박스나 모의투자 환경이 없습니다.
거래 기능을 켜면 실제 계좌에 실제 주문을 생성, 정정, 취소할 수 있습니다. 처음 사용할 때는 반드시 거래 기능을 켜지 말고 조회 기능부터 확인하세요.
기본 설정에서는 주문 생성, 정정, 취소 도구가 등록되지 않습니다.
프로그램으로 할 수 있는 기능 및 특징
거래 기능을 켜지 않아도 아래 기능을 사용할 수 있습니다.
국내/미국 주식 현재가 조회
호가 조회
최근 체결 내역 조회
캔들 차트 조회
상한가/하한가 조회
종목 기본 정보 조회
전체 종목 목록 조회
매수 유의사항 조회
종목별 투자자·프로그램·공매도·신용거래·대차거래 동향 조회
주식 랭킹 조회
시장 지표 현재가·차트·투자자 매매동향 조회
섹터 목록·상세·랭킹·소속 주식·ETF 조회
환율 조회
국내/미국 장 운영 시간 조회
계좌 목록 조회
보유 주식 조회
매수 가능 금액 조회
판매 가능 수량 조회
매매 수수료 조회
주문 목록 조회
주문 상세 조회
조건주문 목록·상세 조회
거래 기능을 켠 경우 사용할 수 있는 도구:
toss_create_order: 주문 생성toss_modify_order: 주문 정정toss_cancel_order: 주문 취소toss_create_conditional_order: 조건주문 생성toss_modify_conditional_order: 조건주문 수정toss_cancel_conditional_order: 조건주문 취소
0.3.0은 REST 도구 20개를 추가해 조회 34개·거래 6개를 제공합니다. 로컬 stdio 방식이며 WebSocket이나 원격 HTTP/SSE 서버는 제공하지 않습니다.
특징:
npx로 실행되므로 별도 프로그램 설치 과정이 짧습니다.Client ID와 Client Secret은 환경변수로 전달합니다. 이전 이름인 API Key·Secret Key 환경변수도 호환됩니다.
OAuth 토큰은 내부에서 자동 발급하고, 만료 60초 전에 갱신합니다. 같은 컴퓨터·OS 사용자·저장 경로에서는 여러 프로세스가 토큰과 주문 집계를 공유합니다.
계좌가 필요한 기능은 AI가 계좌 목록을 확인한 뒤
accountSeq를 입력합니다. 계좌 1을 자동 선택하지 않습니다.TOSSINVEST_ACCOUNT를 설정하면 해당 계좌로 고정하며, 다른 계좌를 지정한 호출은 거절합니다.일반 주문·조건주문 생성, 정정, 취소 기능은 기본적으로 꺼져 있습니다.
거래 기능을 켜면
confirmOrderAction없이 주문할 수 있습니다. 매도·시장가 차단 설정도 제거되었습니다.1회 금액 한도, 시장별 일일 금액·건수 한도, 종목 허용목록은 필요한 항목만 환경변수로 설정할 수 있습니다. (아래
거래 가드레일참고)
설치방법
아래 순서대로 진행하면 됩니다.
1. Node.js 설치 확인
터미널 또는 PowerShell을 열고 아래 명령어를 입력합니다.
node -vv20 이상이 나오면 다음 단계로 넘어가면 됩니다.
Node.js가 없거나 버전이 낮다면 Node.js 공식 사이트에서 LTS 버전을 설치한 뒤 터미널을 새로 열어 다시 확인하세요.
2. 토스증권 Open API 연결 정보 준비
토스증권 WTS에 로그인한 뒤 Open API 설정 화면으로 이동합니다.
그 화면에서 아래 값을 발급받아 둡니다.
Client IDClient Secret
이 두 값은 MCP 설정에 넣어야 합니다. 다른 사람에게 공유하지 마세요.
3. 허용 IP 등록
토스증권 Open API는 허용된 IP에서만 호출할 수 있습니다. 이 설정이 빠져 있으면 허용되지 않은 IP 주소입니다. 같은 오류가 발생합니다.
먼저 현재 컴퓨터의 공인 IP를 확인합니다. 아래 명령어를 사용하세요.
PowerShell (Windows):
(Invoke-WebRequest -UseBasicParsing https://api.ipify.org).ContentmacOS 또는 Linux 터미널:
curl https://api.ipify.org나온 IP 주소를 토스증권 WTS의 Open API 설정 화면에서 허용 IP 목록에 추가합니다.
대략적인 흐름:
토스증권 WTS에 로그인합니다.
설정 - Open API 메뉴로 이동합니다.
허용 IP 관리 영역을 찾습니다.
위에서 확인한 공인 IP를 추가합니다.
4. MCP 클라이언트에 등록
MCP 클라이언트의 설정 파일 또는 MCP Servers 설정 화면에 아래 내용을 추가합니다.
{
"mcpServers": {
"tossinvest": {
"command": "npx",
"args": ["-y", "tossinvest-mcp@0.3.0"],
"env": {
"TOSSINVEST_CLIENT_ID": "발급받은-Client-ID",
"TOSSINVEST_CLIENT_SECRET": "발급받은-Client-Secret"
}
}
}
}설정 후 MCP 클라이언트를 완전히 종료했다가 다시 실행하세요.
처음 실행할 때 npm이 지정한 버전의 tossinvest-mcp 패키지를 내려받습니다. 위 예시는 0.3.0을 고정해 실행합니다.
env 안에 연결 정보를 넣으면 별도 .env 파일은 필요하지 않습니다. 서버가 .env 파일을 자동으로 읽지는 않습니다. 다른 MCP가 이미 등록되어 있다면 기존 설정을 덮어쓰지 말고 mcpServers 안에 tossinvest 항목만 추가하세요.
5. 계좌 확인
처음에는 TOSSINVEST_ACCOUNT를 넣지 않아도 됩니다. 시세 조회에는 계좌가 필요하지 않습니다. 보유 주식이나 주문처럼 계좌가 필요한 기능에서는 AI가 계좌 목록을 확인한 뒤 accountSeq를 입력합니다.
MCP 클라이언트에서 다음처럼 요청합니다.
토스증권 계좌 목록을 조회해줘.응답의 accountSeq는 실제 계좌번호가 아니라 API에서 사용하는 계좌 순번입니다. 계좌가 하나면 AI가 선택할 수 있고, 여러 개여서 원하는 계좌를 구분하기 어려우면 사용자에게 확인하도록 도구에 안내되어 있습니다.
특정 계좌만 사용하려면 확인한 accountSeq를 TOSSINVEST_ACCOUNT에 넣습니다. 예를 들어 순번이 2인 계좌를 고정하려면 다음처럼 설정합니다.
{
"mcpServers": {
"tossinvest": {
"command": "npx",
"args": ["-y", "tossinvest-mcp@0.3.0"],
"env": {
"TOSSINVEST_CLIENT_ID": "발급받은-Client-ID",
"TOSSINVEST_CLIENT_SECRET": "발급받은-Client-Secret",
"TOSSINVEST_ACCOUNT": "2"
}
}
}
}설정하면 계좌 관련 기능을 해당 계좌로 고정하며, 다른 accountSeq를 지정한 호출은 거절합니다. 미설정 시 기본 계좌는 없고, 계좌 관련 도구마다 accountSeq가 필요합니다.
6. 조회 기능 테스트
MCP 클라이언트에서 아래처럼 요청해 봅니다.
삼성전자 현재가를 조회해줘.내 토스증권 보유 주식을 보여줘.AAPL 최근 체결 내역 10개를 조회해줘.대기 중인 주문 목록을 보여줘.거래 기능 켜기
다시 한 번 확인하세요. 토스증권 Open API에는 샌드박스가 없습니다. 거래 기능을 켜면 실제 주문이 나갈 수 있습니다.
거래 기능을 사용하려면 MCP 설정의 env에 아래 값을 추가합니다.
"TOSSINVEST_ENABLE_TRADING": "true"전체 예시:
{
"mcpServers": {
"tossinvest": {
"command": "npx",
"args": ["-y", "tossinvest-mcp@0.3.0"],
"env": {
"TOSSINVEST_CLIENT_ID": "발급받은-Client-ID",
"TOSSINVEST_CLIENT_SECRET": "발급받은-Client-Secret",
"TOSSINVEST_ACCOUNT": "2",
"TOSSINVEST_ENABLE_TRADING": "true"
}
}
}
}TOSSINVEST_ACCOUNT의 2는 예시입니다. 계좌 목록에서 확인한 순번으로 바꾸세요. 설정 후 MCP 클라이언트를 완전히 종료했다가 다시 실행합니다.
0.3.0에서는 confirmOrderAction 확인값 없이 일반 주문과 조건주문을 생성·정정·취소할 수 있습니다. 매도와 시장가도 거래 기능을 켜면 사용할 수 있습니다. 금액·건수 한도가 필요하다면 아래 설정을 함께 넣으세요.
MCP 클라이언트에서 자연어로 요청할 때는 아래처럼 구체적으로 말하는 것이 좋습니다.
토스증권에서 선택한 계좌로 삼성전자 1주를 70000원 지정가로 매수 주문해줘.이 주문을 71000원으로 정정해줘. 정정 후 새 주문 ID도 알려줘.이 주문을 취소해줘. 취소가 확인됐는지도 조회해줘.고액 주문 확인: confirmHighValueOrder
confirmHighValueOrder는 환경변수가 아니라 주문 입력값입니다. 토스가 고액 주문 확인을 요구하면 사용자가 금액을 확인하고 승인한 경우에만 true로 전달해야 합니다. AI가 오류를 우회하려고 자동으로 true로 바꾸면 안 됩니다.
이 프로그램은 고액 여부를 별도로 판정하지 않고 토스의 오류 코드·안내를 전달합니다. 아래의 시장가 버퍼는 MCP의 주문 예산용이며 토스의 고액 주문 판정 기준과는 다릅니다.
거래 가드레일
가드레일은 "AI가 실수로, 또는 너무 크게/너무 자주 주문을 넣는 것"을 줄이기 위한 안전장치입니다. 설정한 한도는 주문 API를 호출하기 전에 검사합니다. 실제 체결금액·수수료·세금·손익을 관리하는 기능은 아닙니다.
옵션은 MCP 설정의 env에 추가합니다. 금액·건수 한도와 종목 허용목록은 기본값이 없으며, 설정한 항목만 적용됩니다. 값은 모두 문자열로 적습니다. 예: "TOSSINVEST_MAX_ORDER_AMOUNT_KRW": "500000".
한눈에 보기 (요약 표)
이름 | 기본값 | 한 줄 설명 |
| 없음 | 1회 주문 금액 상한(원) |
| 없음 | 1회 주문 금액 상한(달러) |
| 없음 | 국내 일일 주문 금액 상한(원) |
| 없음 | 미국 일일 주문 금액 상한(달러) |
| 없음 | 국내 일일 생성·정정 성공 건수 상한 |
| 없음 | 미국 일일 생성·정정 성공 건수 상한 |
| 없음 | 거래 가능 종목만 지정 |
|
| 수량 시장가 주문의 예산 계산 버퍼(%) |
| OS 데이터 폴더 | 토큰과 일일 집계를 공유할 디렉터리 |
| 자동 지정 | 기존 상태 파일 경로 및 새 상태 파일명 접두사 |
옵션별 상세 설명
TOSSINVEST_MAX_ORDER_AMOUNT_KRW / TOSSINVEST_MAX_ORDER_AMOUNT_USD (기본: 없음)
주문 한 건의 금액 상한입니다. KRW는 원화, USD는 달러 기준이며 원↔달러 환산은 하지 않습니다. 예를 들어 KRW에 "500000"을 설정하면 50만 원 초과 주문을 차단합니다. 양수인 금액을 넣고, 소수점도 사용할 수 있습니다.
TOSSINVEST_DAILY_MAX_ORDER_AMOUNT_KRW / TOSSINVEST_DAILY_MAX_ORDER_AMOUNT_USD (기본: 없음)
이 MCP로 접수한 주문 예산의 일일 상한입니다. 같은 범위의 매수·매도를 합산하며, 국내·미국 금액은 따로 계산합니다. 예를 들어 20달러 매수 후 20달러 매도 주문을 하면 사용액은 40달러입니다.
시장 | 금액·건수 초기화 시각 |
국내(KRW) | 매일 KST 20:01 |
미국(USD) | 매일 KST 10:01 |
자정에는 초기화하지 않습니다. 한국 시간 고정이며 서머타임·휴장일에 따라 자동 변경하지 않습니다. 예를 들어 월요일 밤의 미국 주문과 화요일 오전 10:00의 미국 주문은 같은 구간이고, 화요일 10:01부터 새 한도를 사용합니다.
TOSSINVEST_DAILY_MAX_ORDER_COUNT_KRW / TOSSINVEST_DAILY_MAX_ORDER_COUNT_USD (기본: 없음)
계좌별·시장별 생성·정정 성공 건수 상한입니다. 국내에 "5", 미국에 "10"을 넣으면 각각 5건·10건으로 제한합니다. 정정도 성공할 때마다 1건으로 셉니다. 취소는 건수에 포함하지 않고 기존 건수를 돌려주지도 않습니다.
한쪽 시장의 한도를 소진해도 다른 시장에는 영향을 주지 않습니다. 한쪽만 설정하면 다른 시장은 건수 제한이 없습니다. 기존 합산 변수 TOSSINVEST_DAILY_MAX_ORDER_COUNT가 남아 있으면 아래 변경 사항의 호환 규칙을 확인하세요.
TOSSINVEST_ALLOWED_SYMBOLS (기본: 없음)
거래를 허용할 종목만 콤마로 나열합니다. 목록에 없는 종목의 생성·정정은 차단됩니다. 예: "005930,AAPL,VOO". 국내는 6자리 숫자 코드, 미국은 티커를 씁니다. 조회 종목을 제한하는 설정은 아닙니다.
TOSSINVEST_MARKET_ORDER_BUFFER_PCT (기본: 3)
수량 기반 시장가 주문의 예산을 계산할 때 직전 체결가(lastPrice)에 적용하는 비율입니다. 국내·미국 모두 같은 방식이며, 설정 범위는 0 이상 100 미만입니다.
주문 방식 | 한도 검사·집계 금액 |
지정가 | 수량 × 주문가격 |
금액 지정 시장가 |
|
수량 지정 시장가 매수 | 수량 × 직전 체결가 × |
수량 지정 시장가 매도 | 수량 × 직전 체결가 × |
기본 p가 3이므로 매수는 +3%, 매도는 −3%를 적용합니다. 국내 주문에 대한 토스의 상·하한가 기반 고액 판정과는 다르며, 실제 체결금액이나 접수 결과를 보장하지 않습니다. 금액 한도에 필요한 가격을 확인하지 못하면 주문을 차단하고, 금액 한도가 없으면 집계 목적만의 시세 조회는 생략합니다.
TOSSINVEST_DATA_DIR / TOSSINVEST_GUARD_STATE_PATH
보통 직접 지정할 필요는 없습니다. 기본 데이터 디렉터리는 다음과 같습니다.
macOS:
~/Library/Application Support/tossinvest-mcpWindows:
%LOCALAPPDATA%/tossinvest-mcpLinux:
$XDG_DATA_HOME/tossinvest-mcp또는~/.local/share/tossinvest-mcp
토큰과 주문 집계는 키별로 나누어 저장합니다. 새 주문 상태 파일은 guard-v4-<키 식별자>.json이며, TOSSINVEST_GUARD_STATE_PATH를 지정하면 그 경로에 .v4-<키 식별자>.json을 붙입니다.
같은 컴퓨터·OS 사용자에서 같은 키의 한도를 공유하려면 모든 MCP 프로세스에 같은 저장 경로와 같은 한도 설정을 사용하세요. 프로세스 간 잠금으로 토큰 발급과 주문 예산을 공유합니다. 다른 컴퓨터나 별도 저장 경로에서 같은 키로 토큰을 발급하면 기존 토큰과 충돌할 수 있습니다. Secret Key는 상태 파일에 저장하지 않습니다.
처음 거래를 켤 때 예시 설정
거래를 처음 켤 때는 한도를 작게 잡아 두는 것을 권장합니다. 아래는 삼성전자 주문만 허용하고 1회 30만 원·일일 100만 원·국내 생성·정정 성공 5건으로 제한한 예시입니다.
{
"mcpServers": {
"tossinvest": {
"command": "npx",
"args": ["-y", "tossinvest-mcp@0.3.0"],
"env": {
"TOSSINVEST_CLIENT_ID": "발급받은-Client-ID",
"TOSSINVEST_CLIENT_SECRET": "발급받은-Client-Secret",
"TOSSINVEST_ACCOUNT": "2",
"TOSSINVEST_ENABLE_TRADING": "true",
"TOSSINVEST_ALLOWED_SYMBOLS": "005930",
"TOSSINVEST_MAX_ORDER_AMOUNT_KRW": "300000",
"TOSSINVEST_DAILY_MAX_ORDER_AMOUNT_KRW": "1000000",
"TOSSINVEST_DAILY_MAX_ORDER_COUNT_KRW": "5"
}
}
}
}TOSSINVEST_ACCOUNT는 계좌 목록에서 확인한 순번으로 바꾸세요. 이 예시는 매도와 시장가를 차단하지 않습니다. 원하는 주문 방식은 AI에게 구체적으로 지시하세요. 두 시장을 모두 거래하려면 USD 금액·건수 한도도 각각 설정합니다.
하루 한도 계산 방식
범위: API 키·계좌·시장별로 분리하고 같은 범위의 매수·매도를 합산합니다. 토스 앱 등 다른 경로의 거래는 포함하지 않습니다.
신규 주문: 접수 전에 예산을 예약하고 접수 결과를 기록합니다. 명확한 거절이면 예약을 해제하지만, 접수 여부가 불명확하면 유지합니다.
정정: 기존 미체결 부분과 대체 주문금액의 차액을 반영합니다. 1회 금액 상한은 대체 주문 전체에 적용합니다.
취소: 실제 취소가 확인된 미체결 부분만 차감하고 체결분은 남깁니다. 차감에는 저장한 기준가격·버퍼를 사용하며 당시 시세로 다시 평가하지 않습니다.
집계 구간: 예약한 시점의 시장별 구간에 기록합니다. 응답이 초기화 이후에 도착해도 원래 구간에 반영합니다. 지난 구간의 주문을 취소해 새 구간의 사용액을 줄이지 않습니다.
조회 범위: 전체 주문을 매번 재조회하지 않고 정정·취소 대상과 미확정 작업만 확인합니다. 앱에서 한 변경·자동 만료·체결가 변동은 상시 재집계하지 않습니다.
건수와 감소 주문: 생성·정정 성공은 각 1건입니다. 일일 한도를 소진해도 취소나 사용액을 줄이는 정정은 허용합니다. 허용된 감액 정정도 성공 건수에는 추가됩니다.
조건주문: 등록·수정 구간에 SINGLE=해당 조건, OCO=큰 조건금액, OTO=두 조건 합계로 집계합니다. 1회 한도는 각 조건에 적용합니다. 나중에 발동한 자식 주문을 다시 집계하지 않으며, 미래 발동일의 금액까지 제한하는 기능은 아닙니다.
취소 확인 불가: 조건주문 취소 뒤 상세 내역이 404로 사라지면 조건별 취소·발동 여부를 추정하지 않고 예산 전액을 유지하며 경고합니다. 이미 발동한 자식 주문은 일반 주문 API로 취소해야 합니다.
요청 식별자:
clientOrderId가 없으면 자동 생성합니다. 같은 키·같은 내용의 생성 요청은 토스의 10분 멱등 기간에 중복 집계하지 않습니다. 자동 복구 재전송은 9분 이내로 제한합니다. 접수 여부가 불명확할 때 새 키로 다시 주문하지 마세요.
환경변수 설명
이름 | 필수 | 설명 |
| 예 | 토스증권 Client ID. 이전 이름 |
| 예 | 토스증권 Client Secret. 이전 이름 |
| 아니오 | 고정할 계좌 순번. 미설정 시 계좌 관련 도구마다 |
| 아니오 | 기본값은 |
| 아니오 | 기본 |
거래 가드레일과 저장 경로 관련 환경변수는 위의 거래 가드레일 표를 참고하세요. 전체 설정 예시는 .env.example에 있습니다. 일반적인 MCP 앱 연결에서는 .env 파일 대신 앱의 env 설정에 값을 넣습니다.
문제 해결
node 명령을 찾을 수 없다고 나옵니다
Node.js가 설치되어 있지 않거나 PATH에 등록되지 않은 상태입니다. Node.js 공식 사이트에서 LTS 버전을 설치한 뒤 터미널을 새로 열고 다시 시도하세요.
허용되지 않은 IP 주소입니다. 오류가 나옵니다
현재 컴퓨터의 공인 IP가 토스증권 Open API 허용 IP 목록에 등록되지 않은 상태입니다.
이 문서의 설치방법 > 3. 허용 IP 등록 단계를 다시 확인해 현재 공인 IP를 등록하세요. 집, 회사, 카페, VPN 등 네트워크가 바뀌면 공인 IP가 바뀔 수 있습니다.
MCP 클라이언트에 도구가 보이지 않습니다
설정 JSON 문법이 올바른지 확인하고, MCP 클라이언트를 완전히 종료한 뒤 다시 실행하세요. Client ID와 Client Secret이 비어 있으면 서버가 시작되지 않습니다. 이 프로그램은 로컬 stdio MCP를 등록할 수 있는 앱에서 사용합니다.
계좌 조회는 되는데 보유 주식 조회가 실패합니다
계좌 목록에서 accountSeq를 확인하고 AI에게 사용할 계좌를 알려주세요. 0.3.0은 계좌 1을 자동 선택하지 않습니다. TOSSINVEST_ACCOUNT로 계좌를 고정한 경우에는 다른 계좌를 입력할 수 없습니다.
주문 도구가 보이지 않습니다
정상입니다. 기본값으로는 주문 도구가 등록되지 않습니다. 실제 거래를 허용하려면 TOSSINVEST_ENABLE_TRADING을 true로 설정하고 MCP 클라이언트를 재시작해야 합니다.
거래 기능을 켰는데도 주문이 안 됩니다
계좌 선택, 금액·건수 한도, 종목 허용목록과 토스가 반환한 오류를 확인하세요. confirmOrderAction은 제거되었으므로 입력에서 빼야 합니다. 고액 확인 오류는 사용자 승인 후 confirmHighValueOrder로 처리합니다.
주문 정정 후 기존 orderId로 조회한 내용이 이상합니다
토스증권 주문 정정은 새 orderId를 반환합니다. 정정 응답의 새 ID를 사용하세요. 조건주문 수정도 새 conditionalOrderId를 사용합니다.
접수 여부가 불명확하거나 미확정 작업 때문에 주문이 막힙니다
타임아웃이 났다고 주문이 거절된 것은 아닙니다. 오류의 clientOrderId·대상 주문 ID로 주문 목록/상세를 확인하고, 새 키로 재주문하지 마세요. 미확정 작업이 해결되기 전에는 신규·증액을 제한하며 취소 경로는 유지합니다. 상세 조회는 응답이 확인된 정정·취소의 뒤늦은 확정을 반영할 수 있고, 생성·정정을 재전송하지 않습니다.
하루 한도를 안 넘은 것 같은데 주문이 막힙니다
일일 금액은 매수와 매도를 합산하고 미체결 예약액도 포함합니다. 정정은 성공할 때마다 1건을 더하며, 취소해도 건수는 되돌아오지 않습니다. 국내는 KST 20:01, 미국은 KST 10:01에 초기화합니다. 가격을 확인할 수 없거나 이전 기록을 보수적으로 이월한 경우에도 차단될 수 있습니다.
응답에 _guardStateWarning 또는 _budgetRetained가 붙어 있습니다
접수 응답은 받았으나 한도 기록·최종 상태 확인이 끝나지 않았거나, 취소 후 내역을 확인할 수 없어 예산을 유지했다는 뜻입니다. 새 주문으로 다시 보내지 말고 실제 주문 상태를 확인하세요. 경고가 사라졌다고 체결까지 완료됐다는 의미도 아닙니다.
상태 파일을 읽을 수 없다고 나옵니다
손상된 파일을 자동으로 사용액 0으로 초기화하지 않습니다. 모든 MCP 프로세스를 종료하고 파일을 백업한 뒤 원인을 확인하세요. 파일 삭제는 사용액을 잃게 하므로 한도를 푸는 방법으로 사용하지 마세요.
응답에 _warnings가 붙어 있습니다
폐기된 설정, 이전 환경변수 이름, 상태 이전 관련 안내입니다. 폐기 설정은 시작 로그와 해당 세션의 첫 도구 응답에도 알립니다. 안내에 따라 설정을 바꾼 뒤 재시작하세요. 비밀 값은 경고에 포함하지 않습니다.
오류 및 차단 메시지 목록
이 프로그램이 낼 수 있는 주요 메시지와 의미입니다. 주문 전 검사에서 차단된 요청은 주문 API에 전송하지 않습니다. 반면 접수 불명·접수 후 경고는 이미 전송되었을 수 있으므로 구분해야 합니다.
1) 주문 차단·입력 오류
메시지 키워드 | 의미 | 해결 방법 |
| 사용할 계좌가 없음 | 계좌 목록을 먼저 조회한 뒤 순번 입력 |
| 고정 계좌와 다른 계좌 지정 | 고정 계좌 사용 또는 설정 변경 후 재시작 |
| 허용목록 밖 종목 | 종목과 허용목록 확인 |
| 1회 금액 상한 초과 | 수량·가격·한도 확인 |
| 해당 시장의 일일 금액 상한 도달 | 사용액 확인 후 해당 시장 초기화 시각까지 대기하거나 설정 검토 |
| 해당 시장의 일일 건수 상한 도달 | 시장별 건수와 초기화 시각 확인 |
| 국내 정정에 수량 누락 |
|
| 미국 정정에 수량 입력 |
|
| 주문 방식과 가격 입력 불일치 | 시장가는 가격 제외, 지정가는 가격 확인 |
| 기준가격·통화 확인 불가 | 종목·가격 조회 상태 확인 |
| 앞선 작업의 접수·반영이 미확정 | 해당 요청 식별자로 상태 확인, 새 키로 재주문 금지 |
| 집계 파일 손상·읽기 실패 | 프로세스 종료 후 백업·원인 확인 |
2) 토스 API 오류 (응답 코드/상태)
메시지/코드 | 의미 | 해결 방법 |
| 공인 IP 미등록 | 설치 3단계대로 현재 공인 IP 등록 |
HTTP 401 / | 인증 오류 | Client ID·Client Secret과 키 활성 상태 확인. 같은 키의 별도 토큰 발급 여부 확인 |
HTTP 429 | 요청 한도 초과 | 잠시 후 재시도. 일부 요청은 서버가 제한된 횟수로 자동 재시도 |
| 계좌 정보 필요 |
|
| 고액 주문 확인 필요 | 금액 확인·사용자 승인 후 |
3) 네트워크/연결 오류
메시지 | 의미 | 해결 방법 |
| 연결 실패 | 인터넷·VPN·방화벽· |
| 응답 지연 | 주문 요청이었다면 실제 접수 여부부터 확인 |
| 토큰 발급 실패 | 연결 정보·IP·키 활성 상태 확인 |
4) 주문 접수 후 경고·접수 불명
_guardStateWarning·_budgetRetained 또는 Order acceptance unknown이 보이면 실제 접수·취소 상태를 먼저 확인하세요. 한도 예산은 보수적으로 유지됩니다. 새 요청 식별자로 같은 주문을 반복하지 마세요.
변경 사항 (0.3.0)
추가된 기능
REST 도구 20개 추가: 전체 종목, 종목별 매매동향 5종, 주식 랭킹, 시장 지표 3종, 섹터 5종, 조건주문 5종을 지원합니다. 조회 34개·거래 6개입니다.
최신 주문 입력 반영: 국내
timeInForce=OPG, 시장별 주문 조합·소수점 수량·날짜·종목 개수·페이지네이션 검증을 보완했습니다.일일 한도 개선: 계좌·시장별 금액과 건수를 분리하고 국내 KST 20:01·미국 KST 10:01에 초기화합니다. 생성·정정·취소는 저장한 산정 기준으로 차액을 반영합니다.
공유 상태·장애 복구: 프로세스 내부 토큰 발급을 공유하고, 같은 컴퓨터·OS 사용자·저장 경로의 프로세스 간 토큰·주문 예산 잠금을 추가했습니다. 주문 전 예산 예약과 접수 불명 작업의 식별자 보존·복구를 지원합니다.
수정된 동작과 호환성
변경 | 업데이트할 때 확인할 내용 |
연결 정보 이름 변경 |
|
계좌 1 자동 선택 제거 | ACCOUNT 미설정 시 계좌 관련 도구에 |
| 주문 입력에서 제거. |
매도·시장가 차단 설정 삭제 |
|
계좌 잠금 설정 통합 |
|
고액 확인 인자 유지 |
|
응답 이중 래핑 수정 |
|
시장가 산정 변경 | 호가 → 직전 체결가. 버퍼 기본 5→3%, 매수 +p%·매도 −p% |
일일 건수 상한 분리 |
|
집계 방식·파일 변경 | 시장별 초기화와 이벤트 차액 집계 사용. 기존 파일 백업 후 새 상태로 이전 |
기존 TOSSINVEST_DAILY_MAX_ORDER_COUNT는 호환용으로 읽지만 이제 국내·미국 각각의 기본 상한입니다. 기존 값이 5라면 국내 5건·미국 5건이며, 새 시장별 값이 있으면 우선합니다. 한쪽 시장을 무제한으로 쓰려면 기존 합산 변수를 제거하고 제한할 시장의 새 변수만 설정하세요.
제거된 설정은 경고 후 무시합니다. 이전 이름·폐기 설정 안내는 시작 시 stderr와 해당 세션의 첫 도구 응답 _warnings에 전달하고, 값이나 비밀정보는 출력하지 않습니다. Smithery의 기존 apiKey·secretKey 입력 필드는 유지하며 내부에서는 새 환경변수 이름을 사용합니다.
버그 수정·최적화
금액 한도가 설정된 시장에서만 가격 조회·예산 산정을 수행하도록 수정했습니다. 다른 시장의 한도 때문에 불필요하게 주문이 차단되지 않습니다.
공유 토큰 캐시가 null·빈 토큰 등 잘못된 형식이면 정상적으로 다시 발급하도록 보완했습니다. 고액 확인 오류 안내에도 사용자 승인 필요와 자동 확인값 변경 금지를 명시했습니다.
동시 요청의 토큰 중복 발급, 프로세스 간 주문 집계 덮어쓰기, 키·계좌별 집계 혼합을 수정했습니다.
십진수 금액 연산을 적용하고, 부분체결된 미국 주문 정정의 과대 추정과 멱등 재응답의 금액·건수 중복 집계를 수정했습니다.
상태 파일의 필드·금액·수량·통화를 검증합니다. 손상된 파일이나 불완전한 체결 정보를 0으로 확정하지 않습니다.
주문 응답 유실 시 요청 식별자를 보존하고, 접수 후 저장 실패 시 주문 성공 응답을 유지하면서 미확정 예산을 보수적으로 보존합니다.
불필요한 시세·전체 주문 조회, 상세 조회의 장부 쓰기 잠금, KST 날짜 포매터 재생성을 줄였습니다. 실패한 파일 교체의 임시 파일도 정리합니다.
null·비JSON·응답 본문 수신 오류에서 원래 HTTP 상태와 요청 식별자를 보존하도록 보완했습니다.
조건주문 취소의 정상
204 No Content를 지원합니다. 취소 후 상세가 404로 사라지면 예산을 환급하지 않고 유지하며 경고합니다. 상세 조회는 생성·정정을 재전송하지 않습니다.SDK를 1.32.1로 올렸습니다. 개발용 UI·mock 서버·검증 스크립트·테스트 자료는 GitHub·npm 배포 대상에서 제외했고, CI는 타입 검사·빌드·패키징을 확인합니다.
기존 상태 파일 이전
업그레이드 전에 기존 MCP 프로세스를 모두 종료하세요. 이전 guard-state.json은 백업 후 현재·전일의 검증 가능한 기록을 중복 제거해 시장별 초기 사용액·건수로 한 번 가져옵니다. 이전 파일에는 API 키 식별자가 없고 미체결 단가를 완전히 복구할 수 없어, 과거 취소 환급은 추정하지 않습니다. 손상 파일을 조용히 0으로 초기화하지 않습니다.
개발 중인 0.3.0의 v3(자정 기준) 장부가 있으면 백업 후 v4로 보수적으로 이전합니다. 첫 집계 구간의 사용액이 실제보다 클 수 있습니다. 시장을 구분할 수 없는 과거 합산 건수는 각 시장 상한에 보수적으로 적용하고, 두 시장이 각각 다음 초기화 시각을 지날 때까지 유지합니다.
구버전으로 돌아갈 때는 백업 파일과 기존 설정을 사용해야 하며 새 버전에서 추가한 거래는 구버전 파일에 반영되지 않습니다. 구·신 버전을 같은 키로 동시에 실행하지 마세요.
업데이트 방법
npm에 새 버전이 올라와도 설치본이나 실행 중인 MCP가 자동 교체되지는 않습니다.
버전 고정: 이 문서의
tossinvest-mcp@0.3.0은 해당 버전을 유지합니다. 업데이트하려면 버전을 직접 바꾸세요.최신 버전 확인 후 실행:
args를["-y", "--prefer-online", "tossinvest-mcp@latest"]로 설정하면 다음 실행 시 최신 태그를 확인하는 방식으로 사용할 수 있습니다.전역·프로젝트 설치본: 업데이트하거나 재설치해야 합니다. 단순한
npx tossinvest-mcp는 로컬 설치본·캐시·npm 설정의 영향을 받아 항상 최신이라고 보장하지 않습니다.
설정을 바꾸거나 업데이트한 뒤에는 MCP 클라이언트를 완전히 종료했다가 다시 실행하세요. 별도의 자동 업데이터는 제공하지 않습니다.
면책조항
이 프로그램은 토스증권 Open API를 MCP에서 사용할 수 있게 연결해 주는 도구입니다. 투자 자문, 투자 권유, 매매 추천, 수익 보장 서비스를 제공하지 않습니다.
이 프로그램을 사용해 조회한 정보, AI가 생성한 답변, AI가 제안한 주문 내용은 부정확하거나 지연되거나 사용자의 의도와 다를 수 있습니다. 모든 투자 판단과 주문 실행 및 프로그램 사용의 최종 책임은 사용자에게 있습니다.
거래 기능을 켜고 주문 생성, 정정, 취소 도구를 사용하는 경우 실제 계좌에 실제 주문이 전송될 수 있습니다. 주문 전 종목, 가격, 수량, 주문 유형, 계좌를 반드시 직접 확인하세요.
현재 이 프로젝트는 개발중인 프로젝트로서, 이 프로젝트의 개발자와 배포자는 이 프로그램 사용으로 발생하는 투자 손실, 주문 실수, API 장애, 데이터 오류, 클라이언트 오작동, AI 응답 오류 등에 대해 책임지지 않습니다.
라이선스
MIT License
기타
토스증권 Open API 공식 문서: 개발자 문서
README.md 파일 작성 등 일부 작업에 생성형 AI의 도움을 받았음을 밝힙니다.
Available Tools
34 toolstoss_get_accountsToss Get AccountsARead-only
List Toss Securities accounts available to the configured Open API credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds a genuine constraint — results are scoped to whatever the configured credentials can see — but says nothing about pagination, ordering, or what an empty result means when credentials have no accounts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, and the credential-scoping qualifier is the only extra detail — no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only list tool with annotations covering safety, this is nearly complete. The only real gap is the absence of an output schema combined with no mention of what an account record contains (e.g. account number, type), which an agent needs to chain into follow-up account-scoped calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing for the description to explain; baseline 4 applies. The schema correctly accepts an empty object only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
“List Toss Securities accounts” is a specific verb+resource, clearly distinct from sibling resources like holdings, orders, or prices. It doesn't explicitly name a sibling it is meant to precede or replace, but the resource is unique enough that confusion is unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase “available to the configured Open API credentials” hints at a prerequisite/discovery role, but the description never says when to call this versus sibling account-scoped tools such as toss_get_holdings or toss_get_buying_power. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_buying_powerToss Get Buying PowerARead-only
Get available buying power for an account. currency is required: KRW for Korean stocks, USD for US stocks.
| Name | Required | Description | Default |
|---|---|---|---|
| currency | Yes | Currency code: KRW (Korean stocks) or USD (US stocks) | |
| accountSeq | Yes | When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds little behavioral context beyond the currency requirement and does not explain whether buying power is real-time, includes fees, or reflects settled cash versus margin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted words. The core purpose is front-loaded, and the currency constraint follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema coverage and safety annotations, the description is largely complete. It could mention the accountSeq prerequisite from the schema or what buying power represents, but no critical information is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are fully documented in the schema. The description reiterates the currency enum meaning but adds no new detail beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get available buying power for an account.' It is clear what the tool does, but it does not explicitly differentiate itself from related sibling tools such as toss_get_holdings or toss_get_sellable_quantity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies that currency is required and maps KRW to Korean stocks and USD to US stocks. However, it does not state when to use this tool versus alternatives, nor does it mention that accountSeq may require calling toss_get_accounts first—that guidance appears only in the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_candlesToss Get CandlesARead-only
Get 1-minute or daily OHLCV candles for one KRX or US stock symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| before | No | ||
| symbol | Yes | ||
| adjusted | No | ||
| interval | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the interval granularity and the KRX/US scope, but says nothing about the 200-candle cap, how 'before' paginates, default ordering, or timezone/date semantics of the returned candles.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope qualifiers (interval options, single symbol, market coverage) are packed efficiently with zero redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should at least sketch the OHLCV return shape, but it does not. Combined with zero-coverage parameters and no pagination or adjustment notes, an agent has to guess at how to page history and what 'adjusted' changes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, yet it only explains symbol and interval. The three remaining parameters — count (1–200), before (ISO date-time cursor) and adjusted (split/dividend adjustment) — are entirely undocumented anywhere, and 'adjusted' in particular is ambiguous without explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get), a specific resource (OHLCV candles), the supported granularities (1-minute or daily) and the symbol universe (one KRX or US stock symbol). This also implicitly separates it from toss_get_market_indicator_candles, which handles indicators rather than individual stock symbols.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb and resource — an agent can infer this is the tool for charting a single symbol. There is no explicit guidance on when to prefer it over toss_get_prices or toss_get_market_indicator_candles, and no mention of prerequisites or pagination workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_commissionsToss Get CommissionsCRead-only
Get trading commission information for an account.
| Name | Required | Description | Default |
|---|---|---|---|
| accountSeq | Yes | When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a safe read-only, non-destructive, open-world operation, so the description need not repeat that. However, it adds no behavioral context about what commission data is returned, whether it is real-time or account-specific, or any auth/rate-limit constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is concise, though arguably too terse given the lack of usage and return-value context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with full schema coverage and annotations, the definition is minimally adequate. It lacks any explanation of what commission information includes or how it should be used, but no output schema exists to carry that burden instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the accountSeq parameter already includes useful guidance to call toss_get_accounts first and ask the user if ambiguous. The description adds nothing beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('trading commission information') scoped to an account. It is clear what the tool does, but it does not distinguish this from sibling account-information tools such as get_accounts or get_buying_power.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives, nor does it explain prerequisites. The only usage detail comes from the schema's accountSeq note, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_conditional_orderToss Get Conditional OrderARead-only
Fetch one conditional-orders by identifier. When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user.
| Name | Required | Description | Default |
|---|---|---|---|
| accountSeq | Yes | When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user. | |
| conditionalOrderId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond annotations: the account discovery prerequisite and the rule to ask the user when multiple accounts are ambiguous. It does not describe return format, but no output schema exists and the tool is a simple read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose followed by prerequisite and ambiguity handling. Every sentence earns its place with no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only fetch with annotations and no output schema, the description covers the key prerequisite and ambiguity handling. It could be more complete by explaining where conditionalOrderId comes from (e.g., toss_get_conditional_orders), but otherwise sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: accountSeq has a description (which merely duplicates the main description), while conditionalOrderId has no description in schema or description. The description adds no meaning for conditionalOrderId, such as where to obtain the identifier. It does not fully compensate for the undocumented parameter, so it earns a baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Fetch one conditional-orders by identifier.' The singular 'one' implicitly distinguishes it from the sibling list tool toss_get_conditional_orders, though that sibling is not named explicitly. Minor grammar issue ('one conditional-orders') does not impede understanding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear prerequisite: call toss_get_accounts first when accountSeq is required, and provides ambiguity handling by telling the agent to ask the user. This is actionable context, but it does not explicitly state when to use this tool versus toss_get_conditional_orders, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_conditional_ordersToss Get Conditional OrdersARead-only
List conditional-orders; preserve nextCursor/hasNext for pagination. OPEN regular orders ignore limit/cursor. When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| status | Yes | ||
| symbol | No | ||
| accountSeq | Yes | When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, non-destructive, open-world behavior, and the description adds real value beyond them: the pagination contract (preserve nextCursor/hasNext) and the non-obvious quirk that OPEN status causes limit/cursor to be ignored. Output shape is not described, but no output schema exists and the pagination note covers the main unknown.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the core action and the pagination contract. The accountSeq sentence duplicates the schema field description verbatim, which is mild waste, but nothing else is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With five parameters, 20% schema coverage, and no output schema, the definition covers the riskiest behaviors (pagination, OPEN-status quirk, account prerequisite) but leaves the CLOSED path, the status semantics, and the returned item shape undescribed. Adequate to call correctly, not complete enough to predict results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20%, so the description must carry more weight; it does clarify that limit/cursor are inert under OPEN status and that cursor is tied to nextCursor, which is useful. However, the status enum values (OPEN vs CLOSED) and the symbol filter are left unexplained, and the accountSeq sentence is a verbatim restatement of the schema description rather than added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb and resource ("List conditional-orders"), and the plural form distinguishes it from the singular sibling toss_get_conditional_order. It does not explicitly name that sibling, so the differentiation relies on naming conventions rather than an explicit statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete prerequisite guidance ("call toss_get_accounts first" when accountSeq is required) and an ambiguity policy ("if multiple accounts are ambiguous, ask the user"), which is genuinely actionable. It stops short of stating when to use this tool versus toss_get_orders for regular orders or toss_get_conditional_order for a single order.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_exchange_rateToss Get Exchange RateARead-only
Get KRW/USD or USD/KRW exchange rate. dateTime is optional ISO 8601.
| Name | Required | Description | Default |
|---|---|---|---|
| dateTime | No | ||
| baseCurrency | Yes | ||
| quoteCurrency | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, open-world behavior, so the safety profile is covered. The description adds only that dateTime is optional, but doesn't say what the default is (latest rate?) or whether historical dates return an error or nearest value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The purpose comes first and the parameter note second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with annotations covering safety and an enum-constrained schema, the description is largely sufficient. A brief note on the default behavior when dateTime is omitted would close the remaining gap, especially since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It does clarify that dateTime is optional and ISO 8601, which helps, but baseCurrency vs quoteCurrency direction is left ambiguous (the 'KRW/USD or USD/KRW' phrasing doesn't map clearly to the two fields).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get ... exchange rate') and names the supported pairs (KRW/USD, USD/KRW), which matches the schema enums and separates it from price/candle siblings. It does not explicitly contrast with neighbors, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: fetch a current rate, or supply dateTime for a point-in-time rate. There is no statement of when to prefer this over toss_get_prices or other market-data tools, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_holdingsToss Get HoldingsBRead-only
Get account holdings. accountSeq is optional when TOSSINVEST_ACCOUNT is configured.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | ||
| accountSeq | Yes | When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive, open-world profile, so the description only needs to add context — and it does, by disclosing that the accountSeq requirement is waived by an environment variable. However, it says nothing about what a holdings record contains or how the response is shaped, leaving the caller to guess.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource fetch, with no filler. It is efficient, though so terse that the second sentence's config caveat reads as unexplained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description is barely sufficient: it never describes the returned holdings, never explains the symbol filter, and leaves the required-vs-optional accountSeq tension for the agent to resolve against the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: accountSeq is documented in-schema while symbol has no description at all, and the description does not explain that symbol filters holdings to a single instrument. Worse, the description's 'accountSeq is optional' conflicts with the schema's required list, which the text neither explains nor resolves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get account holdings') that an agent can distinguish from siblings like toss_get_accounts or toss_get_orders. It does not explicitly name those siblings, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage guidance is conditional: accountSeq is optional when TOSSINVEST_ACCOUNT is configured. There is no statement of when to call this versus toss_get_accounts (which the schema itself points to) or what the tool is appropriate for beyond the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_kr_market_calendarToss Get KR Market CalendarBRead-only
Get Korean market calendar and session hours. date is optional YYYY-MM-DD.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds that the payload includes session hours, not just dates, but says nothing about holidays, timezone, or whether future dates are accepted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the capability, with zero filler. The second sentence is a terse fragment rather than a properly structured clause, which slightly limits readability but wastes nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-optional-param tool with no output schema, the definition is minimally adequate. It leaves the agent guessing about response shape (holiday list vs. session hour objects) and default date behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden; it does communicate that date is optional and uses YYYY-MM-DD format. It doesn't say what the default behavior is when date is missing (e.g., today) or whether the date must be a trading day.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get Korean market calendar and session hours), and the word 'Korean' implicitly separates it from the sibling toss_get_us_market_calendar. It stops short of explicitly naming the alternative, so sibling differentiation relies on inference from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus toss_get_us_market_calendar or the price/candle tools, and no mention of what happens when date is omitted. The only usage-adjacent fact is that date is optional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_market_indicator_candles시장 지표 캔들 차트 조회ARead-only
시장 지표 캔들 차트 조회. 시장 지표(국내 지수·국채)의 캔들(OHLCV) 차트 데이터를 조회합니다. 최대 200개 봉을 반환합니다.
봉은 최신순(timestamp 내림차순)으로 정렬됩니다 — 배열의 첫 요소가 가장 최근 봉, 마지막 요소가 가장 오래된 봉입니다.
지원 심볼은 그룹 상단 Market Indicators 설명의 심볼 카탈로그(8종)와 동일하며, 카탈로그에 없는 심볼은
400 unsupported-symbol 로 응답합니다. 개별 종목의 캔들은 GET /api/v1/candles 를 사용하세요.
분봉(1m)은 지수(KOSPI·KOSDAQ)만 지원합니다. 국채(KR_BOND_*)는 일봉(1d)만 지원하며, 분봉 요청 시
400 invalid-request 로 응답합니다.
Rate Limits Group: MARKET_INDICATOR_CHART
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| before | No | ||
| symbol | Yes | ||
| interval | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, open-world access. Beyond that, the description discloses the 200-bar cap, newest-first ordering with an explicit first/last element convention, two distinct 400 error codes and their triggers, and the governing rate-limit group. These are concrete behavioral traits an agent cannot infer from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core identity and return-shape facts are front-loaded, followed by symbol/interval constraints and then error behavior, which is a sensible ordering. It is slightly long, and the closing rate-limit-group line is closer to metadata than guidance, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the necessary work by describing the candle payload (OHLCV), the 200-bar ceiling, and the sort order. The remaining gap is pagination via `before` and the exact candle field names, which is a meaningful omission for a paginated time-series endpoint but not a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full parameter burden. It compensates well for `symbol` (catalog of 8, 400 on unknown) and `interval` (per-symbol constraints), and the 200-bar cap implicitly covers `count`'s maximum. However, `before` — a date-time pagination cursor — is never mentioned, and neither is the default for `count`, leaving two of four parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first two sentences state a specific verb and resource: retrieve OHLCV candle chart data for market indicators (domestic indices and government bonds). It immediately distinguishes itself from the sibling `toss_get_candles` by scoping the target to market indicators rather than individual stocks, so an agent can choose between them without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the agent: for individual stock candles, use `GET /api/v1/candles`, and for symbols outside the 8-symbol catalog, the server returns 400 `unsupported-symbol`. It also states per-symbol interval rules (1m only for KOSPI/KOSDAQ; KR_BOND_* only 1d, otherwise 400 `invalid-request`), which is exactly the kind of when-to-use/when-not guidance needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_market_indicator_investor_trading투자자별 매매대금 조회ARead-only
투자자별 매매대금 조회. KRX 시장(코스피·코스닥)의 투자자별 매매대금을 조회합니다. 개인·외국인·기관·기타법인 4개 투자자 분류의
매수·매도 거래대금을 집계 단위(interval)별 기록으로 최신순 제공하며, 기관은 7개 세부 분류(breakdown)를
함께 제공합니다.
KOSPI/KOSDAQ만 지원합니다. 그 외 심볼은 400unsupported-symbol로 응답합니다.모든 거래대금은 원화(KRW) 정수이며, 별도의 통화 필드는 제공하지 않습니다.
4개 분류(개인·외국인·기관·기타법인)의 매수 합계와 매도 합계는 시장 전체 기준으로 서로 같습니다.
foreigner는 외국인 전체 합계(등록·미등록 외국인 포함)이며,institution의buyAmount/sellAmount는breakdown7개 항목의 합과 일치합니다.당일 기록은 장 종료 전까지 갱신될 수 있는 잠정치입니다.
updatedAt으로 마지막 갱신 시각을 확인하세요.다음 페이지는 응답의
nextUntil값을until파라미터로 전달해 조회합니다.
Rate Limits Group: MARKET_INDICATOR
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| until | No | ||
| symbol | Yes | ||
| interval | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/non-destructive, and the description layers genuinely new behavior on top: amounts are KRW integers with no currency field, buy/sell totals balance at market level, foreigner is the combined registered+unregistered total, institution amounts equal the sum of the 7 sub-categories, and intraday records are provisional until market close (check updatedAt). This is unusually rich disclosure for a read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by scannable bullets, each carrying distinct information rather than restating the schema. Minor noise: breakdown is written with backticks like a parameter even though it is a response field, which can briefly mislead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns, and it does: the four investor categories, buy/sell amount fields, the 7-way institution breakdown, updatedAt freshness signal, and nextUntil paging. Combined with the symbol restriction and currency notes, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the burden, and it does for three of four parameters: interval is explained as the aggregation unit, until as the nextUntil cursor, and symbol with an explicit supported-values restriction. The count parameter (1-100) is never mentioned, leaving its default and role undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (투자자별 매매대금 조회) scoped to KRX markets only, and the body clarifies it is market-wide aggregate data broken down by the four investor classes. It is distinguishable from the stock-level sibling toss_get_stock_investor_trading by the KOSPI/KOSDAQ market framing, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage constraints (only KOSPI/KOSDAQ, otherwise 400 unsupported-symbol) and pagination mechanics (pass response nextUntil as until) plus a caveat about provisional intraday figures. However, it offers no guidance on when to pick this over toss_get_stock_investor_trading or the other market-indicator siblings, leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_market_indicator_prices시장 지표 현재가 조회ARead-only
시장 지표 현재가 조회. 시장 지표(국내 지수·국채)의 현재가를 조회합니다. 최대 200건 까지 다건 조회를 지원하며 콤마(,)로 구분합니다.
지원 심볼은 그룹 상단 Market Indicators 설명의 심볼 카탈로그(8종)를 따르며, 카탈로그에 없는 심볼은
400 unsupported-symbol 로 응답합니다.
Rate Limits Group: MARKET_INDICATOR
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral facts: a 200-symbol batch ceiling and a specific 400 `unsupported-symbol` failure mode for out-of-catalog symbols, plus the MARKET_INDICATOR rate-limit group. Return format and pagination behavior are not described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded and compact, with the symbol constraint and error behavior in the second paragraph and the rate-limit group bolded at the end. The opening sentence largely restates the title, costing a little efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only lookup with full annotation coverage and no output schema, the description covers input format, limits, error behavior, and rate limits. The only meaningful omissions are the enumerated symbol list (external reference) and any hint about the returned price fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single `symbols` property has no description, so the description must carry the load — and it does, explaining comma separation, the 200-item limit, and that values come from an 8-symbol catalog. The catalog itself is deferred to a parent group description rather than enumerated here, which leaves a small gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource: it retrieves current prices for market indicators, explicitly scoped to domestic indices and government bonds. That scope distinguishes it in practice from toss_get_prices (stocks) and toss_get_market_indicator_candles, although no sibling is named directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies concrete operational guidance: up to 200 symbols per call, comma-separated formatting, and that only the 8 symbols in the Market Indicators catalog are accepted. It does not explicitly say when to prefer this tool over toss_get_prices or the candles sibling, but the domain constraint provides clear selecting context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_orderToss Get OrderBRead-only
Fetch one orders by identifier. When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user.
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | ||
| accountSeq | Yes | When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, so the safety profile is covered. The description contributes the account-resolution prerequisite and user-clarification behavior, but says nothing about error behavior or whether a missing order returns null versus throwing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded, but sentences two and three are a copy of the accountSeq schema description, so the description's body duplicates structured data already supplied. It is compact but partly wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the essentials are present: how to resolve accountSeq and what to do when ambiguous. It is incomplete on how to source orderId and on how this differs from toss_get_conditional_order, both of which an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, and the description merely repeats the accountSeq schema text verbatim rather than adding anything. The orderId parameter — the primary identifier — is entirely undocumented in both schema and description, so there is no hint where an agent obtains a valid orderId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with cardinality ('Fetch one orders by identifier'), which implicitly distinguishes it from the sibling list tool toss_get_orders. The grammar slip ('one orders') is minor but the single-vs-list scope is only implied, never named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete prerequisite chain ('call toss_get_accounts first') and an ambiguity policy ('ask the user'), which is real operational guidance. It never says when to pick this over toss_get_orders or toss_get_conditional_order, so tool selection among siblings is still left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_orderbookToss Get OrderbookBRead-only
Get orderbook data for one KRX or US stock symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds the market scope (KRX or US) and that it operates on a single symbol, but says nothing about orderbook depth, bid/ask level counts, or real-time vs delayed data — behavior an agent would likely want.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding. It is efficient, though the terseness is close to underspecification rather than true economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no parameter descriptions and no annotation detail on data freshness, the description should say more about what an orderbook response contains and how to interpret it. As written, an agent can call it but cannot predict its output shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does partially by implying symbol is a KRX or US stock identifier, but it never states the format (e.g., KRX numeric code vs US ticker) or how the market is inferred.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get orderbook data') plus the scope ('one KRX or US stock symbol'), so an agent knows exactly what it retrieves. It does not, however, distinguish itself from adjacent siblings such as toss_get_prices or toss_get_trades, which also expose per-symbol market data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use/when-not guidance and no mention of alternatives like toss_get_prices or toss_get_trades, even though several siblings overlap in scope. The only context an agent can infer is from the resource name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_ordersToss Get OrdersARead-only
List orders; preserve nextCursor/hasNext for pagination. OPEN regular orders ignore limit/cursor. When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| limit | No | ||
| cursor | No | ||
| status | Yes | ||
| symbol | No | ||
| accountSeq | Yes | When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds important behavioral detail beyond annotations: preserve nextCursor/hasNext for pagination, OPEN regular orders ignore limit/cursor, and account selection prerequisites. It stops short of fully describing the response shape or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four compact sentences with no wasted words. It is front-loaded with the core action ('List orders') and follows with the most important operational constraints.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter read-only tool with no output schema and only 14% schema description coverage, the description covers critical pagination and account-access behavior but does not fully document most parameter semantics. An agent can call it correctly in common cases but may still need to inspect the schema for other fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is very low at 14%, so the description must compensate. It clarifies accountSeq sourcing and the conditional irrelevance of limit/cursor for OPEN orders, but leaves status values, symbol format, and from/to date semantics unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('List orders'), making the core purpose clear. However, it does not differentiate from sibling tools like toss_get_order for a single order or toss_get_conditional_orders, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational guidance: call toss_get_accounts first when accountSeq is required, select the intended account, and ask the user if ambiguous. It does not state when to use this tool instead of the single-order sibling, so alternatives are still implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_price_limitsToss Get Price LimitsBRead-only
Get upper and lower price limits for one KRX or US stock symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the KRX/US applicability scope, which is useful context, but says nothing about return format or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the resource and scope front-loaded. No waste, though it is terse to the point of omitting any param or usage detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with annotations carrying the safety profile, the definition is roughly adequate. It is missing symbol format guidance and any hint of the returned limit values, which would complete the picture for a 0%-coverage parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the single 'symbol' parameter is undocumented in structured fields. The description names the symbol concept and its KRX/US markets but gives no format or case/prefix guidance to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (upper and lower price limits) scoped to one KRX or US stock symbol. It distinguishes itself from broad price tools like toss_get_prices by naming the specialized resource, though it doesn't explicitly contrast with any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance, and no alternative is named. The only usage signal is the implied scope of 'price limits', leaving the agent to infer when this beats toss_get_prices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_pricesToss Get PricesARead-only
Get current prices for up to 200 comma-separated KRX or US stock symbols.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile and external-data nature are covered. The description adds two genuinely useful behavioral facts: the hard cap of 200 symbols per call and that symbols may span both KRX and US markets. It says nothing about response shape, currency handling, delayed vs. real-time data, or per-call rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and resource, with constraints stated inline. Nothing is padded or restated from the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input side is adequately covered for a one-parameter read tool, but with no output schema and no annotations describing return values, the description never indicates what a "price" comprises (last, bid/ask, currency, timestamp, market-open state). An agent can call it correctly but cannot predict the payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 0%, the single parameter is undocumented in structured data, so the description carries the burden — and it does: `symbols` is a comma-separated string, capped at 200, and accepts KRX or US tickers. It still doesn't show the expected ticker format (e.g., '005930' vs 'AAPL', case sensitivity, exchange suffixes), which is the main remaining ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ("Get current prices") and scopes it by market (KRX or US) and batch size (up to 200 symbols), which distinguishes it in practice from historical tools like toss_get_candles. It stops short of naming a sibling outright, so an agent must infer the split between current quotes and candles/last-trade data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word "current" implies this is the real-time/snapshot quote tool rather than the historical one, which is a usable usage cue. However, there is no explicit when-to-use/when-not statement and no alternatives (e.g., toss_get_orderbook, toss_get_price_limits) are routed to, leaving the agent to infer boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_rankings주식 랭킹 조회ARead-only
주식 랭킹 조회. 지정한 시장(marketCountry) · 기간(duration) · 기준(type)의 주식 랭킹을 조회합니다. 상위 100위까지 제공합니다.
TOP_GAINERS/TOP_LOSERS는duration=realtime을 지원하지 않습니다 (400unsupported-ranking-duration).tradingVolume/tradingAmount의 집계 기준은type이 결정합니다 —TOSS_SECURITIES_*는 토스증권 체결 기준, 그 외(MARKET_*/TOP_*)는 시장 전체 기준.price.basePrice는TOP_GAINERS/TOP_LOSERS만duration시작 시점 기준가이며, 나머지 타입은duration과 무관하게 항상 전일 기준가입니다.price.changeRate도 같은 의미를 따릅니다 (기간 등락률 vs 전일 대비 등락률).응답 항목 수는
count보다 적을 수 있습니다 (시세 조회에 실패한 종목은 제외).랭킹이 집계되지 않은 조합은 에러가 아닌 빈
rankings배열로 응답하며, 이때rankedAt은 null 입니다.
Rate Limits Group: RANKING
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| count | No | ||
| duration | Yes | ||
| marketCountry | Yes | ||
| excludeInvestmentCaution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive behavior, but the description adds substantial extra context: a documented error code for the realtime+TOP_GAINERS combination, the fact that fewer than `count` results can come back because failed quotes are excluded, empty `rankings` with null `rankedAt` instead of an error, and a rate-limit group. That's exactly the kind of failure-mode disclosure annotations don't cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A summary sentence followed by tight bullets, each carrying distinct information (unsupported combo, aggregation basis, basePrice/changeRate meaning, count shortfall, empty-result shape). No sentence restates the title and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no output schema and no schema-level parameter docs, the description is unusually complete: it covers output shape, error conditions, and the meaning of returned fields like basePrice/changeRate. The remaining gap is `excludeInvestmentCaution` and any default for `count`, both left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage the description must carry parameter meaning, and it does for `type` (grouped enum semantics), `duration` (realtime unsupported for top gainers/losers), and `count` (100 max, effective count may be lower). `excludeInvestmentCaution` is never mentioned, and `marketCountry` is only named as a filter without further elucidation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('주식 랭킹 조회') and scopes the result ('상위 100위까지 제공'), keyed to market/duration/type. It never explicitly distinguishes itself from the sibling toss_get_sector_rankings, so an agent must infer that this is per-stock ranking rather than per-sector.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete conditions: TOP_GAINERS/TOP_LOSERS reject duration=realtime with a 400 unsupported-ranking-duration, and TOSS_SECURITIES_* types use different aggregation bases than MARKET_*/TOP_* types. What's missing is routing guidance naming which sibling to use instead when the caller wants sector-level or individual price data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_sector섹터 상세 조회ARead-only
섹터 상세 조회. 섹터의 기본 정보(이름 · 계층 · 한 줄 요약)와 지정한 시장(marketCountry) 기준 기간별 등락률을 조회합니다.
기본 정보는 시장과 무관하며,
performance.changeRates만marketCountry기준입니다.changeRates는duration순서(1d→1y)로 항상 6건이며, 데이터가 없는 기간은changeRate가 null 입니다 (예: 해당 시장에 구성 종목이 없는 섹터).등락률은 소수비율입니다.
목록(
GET /api/v1/sectors)에 없는sectorId는 404sector-not-found로 응답합니다.
Rate Limits Group: SECTOR
| Name | Required | Description | Default |
|---|---|---|---|
| sectorId | Yes | ||
| marketCountry | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, it specifies behavior: changeRates always has exactly 6 entries in duration order (1d→1y), missing periods come back as null changeRate (e.g., a market with no constituents), values are decimal ratios, and unknown sectorId returns 404 `sector-not-found`. It also discloses the rate-limit group (SECTOR), giving the agent context for both error and quota handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded in one lead sentence and then bulleted, and every bullet adds real information about nulls, ordering, decimal units, or errors. The opening line repeats the title, which is minor waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description still adequately describes the return structure (basic info fields; performance.changeRates with fixed length, ordering, units, and null semantics), plus the error case and rate-limit group. An agent can call this confidently and interpret the result without more information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 0%, the description compensates by explaining that marketCountry governs only performance.changeRates while basic info is market-agnostic, and that sectorId values not present in the sector list yield a 404. It doesn't explain the sectorId pattern or the enum values, but the schema carries those constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
It names a specific verb and resource (섹터 상세 조회) and enumerates the returned content: basic info (name, hierarchy, one-line summary) plus period-based change rates. This makes it clearly distinct from siblings such as toss_list_sectors, toss_get_sector_rankings, toss_get_sector_stocks, and toss_get_sector_etfs, without the agent needing to compare schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains data scoping (basic info is market-independent; only performance.changeRates is market-specific), but it never explicitly says when to use this tool instead of the sibling list, rankings, stocks, or ETFs tools. The mention that unknown sectorId from `GET /api/v1/sectors` returns 404 only hints that sector IDs come from the list endpoint, without saying so.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_sector_etfs섹터 관련 ETF 조회ARead-only
섹터 관련 ETF 조회. 이 섹터로 분류된 ETF 전체를 지정한 시장(marketCountry) 기준으로 반환합니다 (하위 섹터 미포함).
직전 분기 시가총액이 큰 순서이며, 시가총액 정보가 없는 ETF 는 뒤에 옵니다.
심볼과 이름만 제공합니다. 시세는
GET /api/v1/prices, 종목 기본 정보는GET /api/v1/stocks를 사용하세요.상장폐지된 ETF 는 제외됩니다.
목록(
GET /api/v1/sectors)에 없는sectorId는 404sector-not-found로 응답합니다.
Rate Limits Group: SECTOR
| Name | Required | Description | Default |
|---|---|---|---|
| sectorId | Yes | ||
| marketCountry | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe read, but the description adds substantial context beyond them: sort order by prior-quarter market cap with null-market-cap ETFs appended, delisted ETFs excluded, only symbol and name returned, and a specific 404 `sector-not-found` failure mode. It even names the rate-limit group.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then uses a tight bullet list where each item carries distinct information (ordering, return shape, exclusion, error). The opening line largely restates the title, which is the only wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain the return value itself — it does, stating that only symbol and name are provided plus the ordering rule. Combined with the exclusion and error notes, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does: `marketCountry` is framed as the market filter and `sectorId` is tied to the sector listing with a documented 404 on unknown IDs. The regex pattern on sectorId is left entirely to the schema, which is a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns all ETFs classified in the given sector, filtered by marketCountry. It also pins down scope explicitly with '(하위 섹터 미포함)', which separates it from the broader sector tools without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear routing away from this tool for adjacent data needs — prices via `GET /api/v1/prices` and stock basics via `GET /api/v1/stocks` — and notes the sectorId must come from `GET /api/v1/sectors`. It does not explicitly name `toss_get_sector_stocks` as the alternative for constituent stocks, leaving that to inference from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_sector_rankings섹터 랭킹 조회ARead-only
섹터 랭킹 조회. 지정한 시장(marketCountry) · 기간(duration) · 기준(type)의 섹터 랭킹을 조회합니다. 상위 100위까지 한 번에 제공합니다.
대상은 대분류(
depth0)와 중분류(depth1) 섹터이며, 소분류(depth2)는 포함되지 않습니다.소속 종목이 너무 적거나 해당 시장·기간의 데이터가 없는 섹터는 랭킹에 나타나지 않습니다.
TOP_GAINERS는changeRate,MARKET_TRADING_AMOUNT는tradingAmount가 랭킹 기준값입니다.tradingAmount·marketCapitalization은 데이터가 없으면 null 이고,changeRate는 항상 값이 있습니다.금액은 US 도 원화(KRW) 환산값이며 통화는 각 항목의
currency로 표기됩니다.응답 항목 수는 100건보다 적을 수 있고, 데이터가 없는 조합은 에러가 아닌 빈
rankings배열로 응답합니다.
Rate Limits Group: SECTOR_RANKING
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| duration | Yes | ||
| marketCountry | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive profile, and the description goes further: it caps results at 100 and warns the count may be lower, explains that sparse sectors are filtered out, specifies nullability rules for tradingAmount/marketCapitalization versus always-present changeRate, and notes US amounts are KRW-converted. It does not describe pagination or ordering within ties, and the rate-limits group is named without any limit value, so it stops short of full behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One framing sentence followed by tight bullets, each carrying a distinct operational fact (scope, exclusion rules, ranking basis, currency handling, empty-result behavior). Nothing is repeated and the most important constraint is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description steps in and describes the response shape (a rankings array, per-item currency, per-field nullability, possible short counts). Combined with the scope and empty-result rules, an agent has enough to call it and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter meaning — and it does for the most opaque one, mapping TOP_GAINERS to changeRate and MARKET_TRADING_AMOUNT to tradingAmount. marketCountry and duration are left to their self-explanatory enum values, and the description references a `depth` field that is not actually a parameter of this tool, which is a minor mismatch.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (섹터 랭킹 조회) and immediately narrows the scope to sector rankings by market, duration and ranking basis, with top-100 coverage. The scope note on 대분류/중분류 (depth 0/1) vs 소분류 clearly separates it from stock-level siblings such as toss_get_rankings and toss_get_sector_stocks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains edge-case outcomes (a combination with no data returns an empty rankings array rather than an error) but never tells the agent when to pick this tool over sector siblings like toss_list_sectors, toss_get_sector or toss_get_rankings. Usage is implied by the scope rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_sector_stocks섹터 구성 주식 조회ARead-only
섹터 구성 주식 조회. 섹터(하위 섹터 포함)에 속한 보통주 전체를 지정한 시장(marketCountry) 기준으로 시가총액 내림차순 반환합니다.
volume·tradingAmount는 당일 누적값이며, 시세가 없는 종목은 null 입니다.금액은 US 종목도 원화(KRW) 환산값이며 통화는 각 항목의
currency로 표기됩니다.상장폐지된 종목은 제외됩니다.
목록(
GET /api/v1/sectors)에 없는sectorId는 404sector-not-found로 응답합니다.
Rate Limits Group: SECTOR
| Name | Required | Description | Default |
|---|---|---|---|
| sectorId | Yes | ||
| marketCountry | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only covering read-only/non-destructive semantics, the description still adds real behavior: intraday cumulative `volume`/`tradingAmount` with nulls when no quote exists, KRW conversion for US names with per-item `currency`, exclusion of delisted stocks, the exact 404 error code, and the rate-limit group `SECTOR`. That is well beyond what the structured fields convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence carries the core semantics, and the bullets are condensable but each is unique information (null handling, currency conversion, delisting exclusion, error behavior). No sentence simply restates a structured field.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because no output schema exists, the description must carry return-value semantics, and it does: sort order, nullability, currency fields, and exclusion rules are all covered. What remains unstated is the shape of each item (field listing) and whether results are truncated—the only real gap for an agent to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden: it identifies `marketCountry` as the market-basis filter and `sectorId` as needing to be a listed sector id. However, it does not explain what KR vs US actually selects (the listing market vs the currency) or the `sectorId` format, so the 0% coverage gap is only partly closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The definition gives a specific verb and resource plus its scope: all common stocks in a sector, sub-sectors included, filtered by `marketCountry`, sorted by market cap descending. That level of detail (common stocks only, delisted excluded) makes it distinguishable from `toss_get_sector_etfs` and `toss_list_sectors` without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It sets a clear precondition: `sectorId` must come from the sector list (`GET /api/v1/sectors`), otherwise you get 404 `sector-not-found`; this implicitly routes the agent to `toss_list_sectors` first. It never explicitly says when to prefer a sibling such as `toss_list_stocks` or `toss_get_sector_rankings`, so it falls short of full alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_sellable_quantityToss Get Sellable QuantityCRead-only
Get sellable quantity for one symbol in an account.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | ||
| accountSeq | Yes | When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the per-symbol-per-account scoping; it does not explain what 'sellable' excludes (e.g., pending sell orders, unsettled trades) or what a zero result means, which is real behavioral context for a trading API.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, appropriate for a two-parameter query. It is perhaps over-terse for the semantics it needs to convey, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should clarify what the returned quantity represents (settled vs. pending, per-account scope) and any preconditions. Instead it leaves the core domain meaning of 'sellable quantity' undefined, which matters for a brokerage read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: accountSeq is well described in the schema (call toss_get_accounts first, ask user if ambiguous), but symbol has only a regex pattern. The description restates that one symbol and one account are required without adding format, case-sensitivity, or meaning beyond the schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get sellable quantity') scoped to one symbol in an account, which is more precise than the title. It does not distinguish itself from related siblings such as toss_get_holdings or toss_get_buying_power, which also expose position/available-quantity information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus toss_get_holdings (held quantity) or toss_get_buying_power (cash available), which an agent could easily confuse with it. The only implied usage comes from the phrase 'one symbol in an account'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_stock_credit_trades신용거래 동향 조회ARead-only
신용거래 동향 조회. 국내(KR) 종목의 신용거래 동향을 일별 시계열로 조회합니다. 신용융자(marginLoan)·신용대주(stockLoan)
각각의 신규·상환·잔고 수량과 잔고 비율·공여율을 최신순으로 제공합니다.
국내(KR) 종목만 지원합니다. 다른 시장의 종목은 400
unsupported-market으로 응답합니다.자기신용과 유통금융을 합산한 값이며, 모든 수량은 주식 수(주) 정수입니다.
stockLoan(신용대주)은 주식을 빌려 매도하는 개인 신용거래입니다. 기관 간 대차거래 (GET /api/v1/stocks/{symbol}/securities-lending)와는 다른 데이터입니다.해당 일자에 융자·대주 중 한쪽 데이터만 있으면 없는 쪽 객체는 null 입니다.
다음 페이지는 응답의
nextUntil값을until파라미터로 전달해 조회합니다.
데이터 적시성: 다음 영업일 새벽에 반영됩니다(T+1). 최신 기록은 전 영업일입니다.
Rate Limits Group: STOCK_TRADING_TREND
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| until | No | ||
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/openWorld annotations: T+1 data lag with latest record being the prior business day, aggregation of 자기신용 + 유통금융, integer share units, null for a missing side on a given day, and a named rate-limit group. These are exactly the constraints an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then uses bullets for market support, aggregation/units, the stockLoan clarification, null semantics, and pagination, plus bolded freshness note. It is long but each bullet carries distinct information; only the rate-limit group line adds little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still names the returned fields (new/repayment/balance quantities, balance ratio, loan-to-collateral ratio) and the nextUntil cursor, covers error behavior and data latency. Only the `count` parameter's behavior is left unstated, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains how `until` is used for pagination via nextUntil and that `symbol` must be a KR instrument, but says nothing about `count` (its meaning or the 1-100 bounds), leaving one of three parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (daily time-series of credit trading trends for KR stocks) and enumerates the two series it returns (marginLoan, stockLoan) with their fields. It also explicitly distinguishes stockLoan from the sibling securities-lending dataset, so an agent can tell the two apart without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear applicability (KR stocks only, other markets return 400 unsupported-market) and an explicit pagination procedure via nextUntil -> until. It does not contrast against other trading-flow siblings such as investor trading, program trades, or short selling, so the when-not guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_stock_investor_trading투자자별 매매동향 조회ARead-only
투자자별 매매동향 조회. 국내(KR) 종목의 투자자별 매매동향을 일별 거래량 시계열로 조회합니다. 개인·외국인·기관·기타법인
4개 투자자 분류의 매수·매도·순매수 거래량을 최신순으로 제공하며, 기관은 7개 세부 분류(breakdown)를
함께 제공합니다. 외국인 보유 현황(foreignerHolding)과 CFD 잔고(cfd)도 일자별로 포함합니다.
국내(KR) 종목만 지원합니다. 다른 시장의 종목은 400
unsupported-market으로 응답합니다.거래량은 KRX·NXT 통합 기준이며, 모든 수량은 주식 수(주) 정수입니다. 순매수(
netBuyVolume)는 매수 − 매도로 계산되며 음수면 순매도입니다. 거래대금(금액) 축은 제공하지 않습니다.foreigner는 등록외국인 기준입니다. 시장 지표의 투자자별 매매대금 (GET /api/v1/market-indicators/{symbol}/investor-trading, 등록·미등록 합계)과 기준이 다릅니다.당일 기록은 장중 잠정치로 제공합니다. 잠정치가 제공되지 않는
individual(개인)·institution.breakdown(기관 세부)·otherCorporation(기타법인)·foreignerHolding(외국인 보유)·cfd(CFD 잔고)는 null 이며,updatedAt으로 마지막 갱신 시각을 확인할 수 있습니다.다음 페이지는 응답의
nextUntil값을until파라미터로 전달해 조회합니다.
데이터 적시성: 하나의 일자 기록은 시간에 걸쳐 완성됩니다. 투자자별 매매동향 확정치와
외국인 보유(foreignerHolding)는 해당 일자 저녁에 반영됩니다. CFD 잔고(cfd)는 다음 영업일 새벽(T+1)에
반영되며, 외국인 보유는 다음 영업일 오전에 확정치로 한 번 더 갱신될 수 있습니다.
updatedAt 은 이 모든 반영을 포함한 기록 전체의 마지막 갱신 시각입니다.
Rate Limits Group: STOCK_TRADING_TREND
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| until | No | ||
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/non-destructive, and the description goes well beyond them: pagination via nextUntil→until, intraday provisional values that are null for individual/institution breakdown/otherCorporation/foreignerHolding/cfd, per-field update timing (evening vs T+1 vs next-morning), updatedAt semantics, and the rate-limit group. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose before the bulleted constraints, and each bullet adds distinct operational value (market scope, quantity units, basis differences, null semantics, pagination). The data-timeliness paragraph is long but earns its place by explaining field-level latency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameter descriptions, the description supplies the returned fields (netBuyVolume, foreignerHolding, cfd, updatedAt, nextUntil), the unit convention (integer share counts), and the pagination mechanism. Everything an agent needs to call and interpret the result is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It explains `until` well (feed the previous response's nextUntil) and implies `symbol` is a KR code, but never documents `count` (pagination page size, max 100) or the symbol format/pattern, leaving two of three parameters under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (investor-by-investor trading trend as a daily volume time series) plus the exact scope (KR stocks only) and the four investor categories returned. It also explicitly distinguishes itself from the sibling endpoint toss_get_market_indicator_investor_trading by noting the different aggregation basis (registered foreigners only vs combined).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage boundary (KR only, other markets return 400 unsupported-market) and contrasts its basis with the market-indicators investor-trading sibling. It stops short of a full when-to-use-this-vs-that routing sentence for the broader sibling set, but the exclusions are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_stock_program_trades프로그램매매 동향 조회ARead-only
프로그램매매 동향 조회. 국내(KR) 종목의 프로그램매매 동향을 일별 거래량 시계열로 조회합니다. 차익거래(arbitrage)·
비차익거래(nonArbitrage) 각각의 매수·매도·순매수 거래량을 최신순으로 제공합니다.
국내(KR) 종목만 지원합니다. 다른 시장의 종목은 400
unsupported-market으로 응답합니다.KRX 시장 거래만 집계하며 NXT 거래는 포함하지 않습니다. 모든 수량은 주식 수(주) 정수입니다. 순매수(
netBuyVolume)는 매수 − 매도로 계산되며 음수면 순매도입니다. 거래대금(금액) 축은 제공하지 않습니다.다음 페이지는 응답의
nextUntil값을until파라미터로 전달해 조회합니다.
데이터 적시성: 당일 기록도 제공되며, 장 종료 전까지 갱신될 수 있습니다.
Rate Limits Group: STOCK_TRADING_TREND
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| until | No | ||
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations it discloses the failure mode (400 unsupported-market), the measurement universe (KRX only, NXT excluded), the unit (integer share counts), the netBuyVolume = buy − sell sign convention, the absence of a value/amount axis, and intraday refresh behavior before market close. These are exactly the traits an agent cannot infer from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A short lead sentence states the action and the time-series shape, then bullet points carry constraints and pagination, with bold labels for timeliness and rate limits. Dense but front-loaded and scannable. Minor redundancy between the first sentence and the second, which restate the daily-series framing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe returns itself, and it does: the arbitrage/nonArbitrage buckets, the netBuyVolume semantics, and the `nextUntil` continuation field are all named. Combined with the market coverage, units and refresh caveats, an agent has enough to call and page through this correctly; the undescribed `count` parameter is the only notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameters, and it only partly does. It explains `until` well as the cursor taken from the previous response's `nextUntil`, but `count` is never described (no meaning, no default, only the schema's 1–100 bounds) and `symbol` gets no format guidance beyond being a KR ticker.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource (program-trading trend lookup) and specifies the shape of the result: a daily volume time series for a KR stock, split into arbitrage and nonArbitrage buy/sell/net volumes, newest first. That scope clearly separates it from siblings like toss_get_stock_investor_trading, toss_get_stock_short_selling and toss_get_stock_credit_trades, which cover different flow dimensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit boundaries: KR-only (other markets return 400 unsupported-market), KRX trades only with NXT excluded, and no monetary axis. That is clear context for when this tool applies. It never names a sibling alternative or says what to use when the caller actually wants amount-based or NXT-inclusive data, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_stocksToss Get StocksARead-only
Get stock master data for up to 200 comma-separated KRX or US stock symbols.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds a real behavioral constraint – a 200-symbol batch cap and accepted market coverage – but says nothing about what happens with invalid symbols, partial results, or lookup failures against the external API.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the verb, resource and constraints appear in the first clause. Nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the agent has no idea what 'master data' returns (name, market, currency, lot size, trading status?), which is the main thing an agent needs before choosing this over toss_get_prices. The input side is complete, but the return side is opaque.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (the single parameter is just typed as string), so the description must carry the burden, and it does: it specifies comma-separated format, the maximum of 200 entries, and that symbols may be KRX or US. It stops short of showing a concrete example format, which would have completed the picture.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('stock master data') plus the scope boundaries (up to 200 comma-separated KRX or US symbols). It is distinguishable from most siblings, though it never contrasts itself with toss_list_stocks, which could plausibly be confused with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives operational constraints (batch cap of 200, comma-separated format, KRX/US coverage), which hints at how to use it. It offers no explicit when-to-use/when-not guidance and never names an alternative such as toss_list_stocks for enumeration, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_stock_securities_lending대차거래 동향 조회ARead-only
대차거래 동향 조회. 국내(KR) 종목의 대차거래 동향을 일별 시계열로 조회합니다. 대차 체결·상환·잔고 수량과 잔고 금액을 최신순으로 제공합니다.
국내(KR) 종목만 지원합니다. 다른 시장의 종목은 400
unsupported-market으로 응답합니다.모든 금액은 원화(KRW)이며, 별도의 통화 필드는 제공하지 않습니다.
대차거래는 기관 투자자 간 주식 대여·차입 거래입니다. 주식을 빌려 매도하는 개인 신용거래인 신용대주(
GET /api/v1/stocks/{symbol}/credit-trades의stockLoan)와는 다른 데이터입니다.다음 페이지는 응답의
nextUntil값을until파라미터로 전달해 조회합니다.
데이터 적시성: 일별 확정치는 해당 일자 저녁에 반영됩니다.
Rate Limits Group: STOCK_TRADING_TREND
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| until | No | ||
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/destructive annotations, it discloses currency semantics (all values KRW, no currency field), the exact error behavior for unsupported markets, the pagination contract, data freshness (daily finals land that evening), and the rate-limit group name. That is a lot of operationally relevant context, though it says nothing about row limits or what an empty/edge response looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose followed by tight bullets grouped by market scope, currency, disambiguation, and pagination, plus bolded freshness and rate-limit notes. Slightly repetitive in restating the trend-inquiry phrase in the first two sentences, but no bullet is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description names the returned measures and the `nextUntil` field an agent must consume to page. Combined with the market restriction, currency note, and freshness caveat, an agent has everything needed to call it and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the load; it does explain `until` as a pagination cursor fed from `nextUntil`, which is the least obvious of the three. `symbol` and `count` (1–100) are never described in prose, so those two remain documented only by JSON-Schema type/constraint metadata.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('대차거래 동향 조회') scoped to KR symbols with a daily time series, and names the exact data returned (체결·상환·잔고 수량, 잔고 금액). It also explicitly separates itself from the nearby credit-trades/stockLoan dataset, which is the most likely confusion among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit inclusion boundary (KR only) plus the failure mode for anything else (400 `unsupported-market`), and points at the alternative dataset (`GET /api/v1/stocks/{symbol}/credit-trades` → `stockLoan`) so the agent can route correctly. Pagination continuation via `nextUntil` → `until` is spelled out, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_stock_short_selling공매도 동향 조회ARead-only
공매도 동향 조회. 국내(KR) 종목의 공매도 동향을 일별 시계열로 조회합니다. 공매도 거래량·거래대금과 함께 해당 일자 전체 거래량·거래대금 대비 공매도 비중을 최신순으로 제공합니다.
국내(KR) 종목만 지원합니다. 다른 시장의 종목은 400
unsupported-market으로 응답합니다.모든 금액은 원화(KRW)이며, 별도의 통화 필드는 제공하지 않습니다.
비중(
shortSellingVolumeRate·shortSellingAmountRate)의 분모는 정규장 외 세션 (장전·장후 시간외종가, 애프터마켓)을 포함한 해당 일자 누적 거래량·거래대금입니다. 분모 데이터가 없는 날짜는 비중이 null, 분모가 0 이면0입니다.다음 페이지는 응답의
nextUntil값을until파라미터로 전달해 조회합니다.
데이터 적시성: 일별 확정치는 해당 일자 저녁에 반영됩니다.
Rate Limits Group: STOCK_TRADING_TREND
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| until | No | ||
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/openWorld annotations: documents the 400 `unsupported-market` failure mode, that all amounts are KRW with no currency field, the exact denominator definition for the ratio fields (including pre/post-market sessions), the null-vs-0 behavior when the denominator is missing or zero, and data timeliness (daily confirmed values land in the evening). This is exactly the operational context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then well-organized bullets grouped by market/currency/ratio/pagination caveats, plus bold emphasis on data timeliness. Slightly redundant in restating the title before expanding it, but no bullet is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description usefully names the response fields an agent needs (`nextUntil`, `shortSellingVolumeRate`, `shortSellingAmountRate`) and their edge-case values, and discloses the rate-limit group. The remaining gap is input-side: no default page size or `count` behavior, which matters for a paginated list endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description bears the burden. It explains `until` as a pagination cursor fed from the response's `nextUntil`, and implies `symbol` is a KR ticker, but it never describes `count` (range 1–100, no stated default) or clarifies that `until` is an exclusive/latest-first bound. Two of three parameters remain partly undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('공매도 동향을 일별 시계열로 조회') plus exactly what is returned (short-selling volume/value with ratios) and in what order (최신순). The KR-only scope further narrows it against siblings, though no sibling is named explicitly (e.g. vs. toss_get_stock_securities_lending or toss_get_stock_credit_trades, which are the closest analogous datasets).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the market restriction ('국내(KR) 종목만 지원합니다') and by the pagination recipe for follow-up calls, but there is no explicit statement of when to prefer this over sibling trading-trend tools. An agent must infer the choice from the domain vocabulary alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_stock_warningsToss Get Stock WarningsARead-only
Get buy warning flags for one KRX or US stock symbol.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description contributes the market-scope constraint (KRX or US) and that exactly one symbol is inspected, but says nothing about what the returned flags mean, their categories, or whether an empty result is possible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope constraint follows immediately after the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description is mostly sufficient to trigger a correct call, but the agent still lacks any picture of what 'buy warning flags' contains or whether they vary by market, which matters for interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only partially compensates by clarifying that the symbol is a single KRX or US ticker. It adds no format guidance beyond the schema's regex pattern (e.g., suffix conventions for Korean vs US listings), leaving the sole parameter under-documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get buy warning flags') plus the scope ('one KRX or US stock symbol'), which separates it from sibling data tools like toss_get_price_limits or toss_get_stock_short_selling. It does not name a sibling directly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'buy warning flags' implies a pre-trade risk check, but the description never states when to reach for this versus related tools (price limits, short selling, program trades) or any prerequisite conditions. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_tradesToss Get TradesBRead-only
Get recent trades for one KRX or US stock symbol. count defaults to the Toss API default and is capped at 50.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| symbol | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the useful non-schema fact that count falls back to a Toss API default. It doesn't mention latency, real-time vs delayed data, or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the main purpose front-loaded and the count caveat second. No filler, though the sentence about count could have been folded into the first for even better flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple read-only market-data tool with no output schema, so the description needn't explain return values, but it also doesn't say what a trade record includes or whether data is real-time. Adequate but with clear gaps for an agent that needs to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains count's default and cap (though the cap of 50 is already in the schema's maximum), but says nothing about the symbol parameter's expected format beyond 'KRX or US stock symbol' – no ticker pattern examples or market-specific formatting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (recent trades for one KRX or US symbol) and names the scope constraint. It doesn't explicitly distinguish itself from nearby siblings like toss_get_stock_program_trades or toss_get_candles, but the resource is specific enough to be identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus toss_get_candles, toss_get_orderbook, or the various specialized trade tools. There are no exclusions or prerequisites stated beyond the symbol scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_get_us_market_calendarToss Get US Market CalendarBRead-only
Get US market calendar and session hours. date is optional YYYY-MM-DD in US local date.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered and the description only needs to add context. It adds the useful scope note that session hours are included in the response, but a key behavior is left unspecified: with the optional date absent, it's unclear whether the tool returns today's schedule, a full-year calendar, or something else. This gap is especially relevant for a calendar tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two tight sentences with no wasted words, and the main purpose comes first. The second sentence is a clipped fragment ('date is optional...'), but it is still readable and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple read-only tool with one optional parameter and no output schema, so the description does not need to explain the response. However, the description provides nothing on what the calendar returns, such as holiday listings, half-days, or timezone format, and it omits the default behavior when no date is given. That leaves the definition barely adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema gives only type, format, and pattern, while the description supplies the two facts that matter: the date is optional and interpreted in US local time. It still does not state what omitting the date yields. That makes this modest-added-value rather than full compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it gets a US market calendar and session hours. The 'US' qualifier effectively distinguishes it from the sibling toss_get_kr_market_calendar, even though the description never names that sibling. The resource boundary is clear, but it doesn't describe what the calendar contains, such as holidays or early closes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to call this rather than toss_get_kr_market_calendar or the market-indicator tools, and no prerequisites or exclusions. The parameter is optional, yet the description never says what omitting date returns, so the agent cannot infer the usage mode either. Only the tool name itself signals the target case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_list_sectors섹터 목록 조회ARead-only
섹터 목록 조회. 토스증권 섹터 분류 전체를 계층 정보와 함께 한 번에 반환합니다.
섹터는 토스증권 자체 산업 분류로, 한 종목이 여러 섹터에 속할 수 있습니다.
depth0 = 대분류, 1 = 중분류, 2 = 소분류이며,parentSectorId로 상위 섹터를 따라가면 전체 계층을 만들 수 있습니다.정렬은
depth오름차순, 같은 depth 안에서는sectorId오름차순(숫자 기준)입니다.자주 바뀌지 않으므로 하루 한 번만 조회해 저장해 두고 쓰는 것을 권장합니다. 다른 섹터 API 의
sectorId입력값은 이 목록에서 확인합니다.
Rate Limits Group: SECTOR
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/openWorld annotations, the description discloses ordering guarantees (depth ascending, then numeric sectorId ascending), the fact that one stock can belong to multiple sectors, hierarchy reconstruction via `parentSectorId`, data volatility, and the SECTOR rate-limit group. These are behavioral traits an agent cannot infer from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One-line summary followed by four tight bullets, each covering a distinct concern (classification model, hierarchy fields, sort order, caching/consumption). Front-loaded and every line carries information the agent would otherwise have to discover empirically.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of describing the return shape — and it does, explaining the hierarchical fields, ordering, and cardinality relationship to stocks. Nothing an agent needs to call this zero-parameter tool and use its results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so the schema offers nothing to explain and the baseline is 4. The description does go further by defining the semantics of returned fields (`depth` levels 0/1/2 and `parentSectorId` traversal), which is useful context even though it strictly concerns output rather than inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (섹터 목록 조회) plus the scope: the entire Toss Securities sector classification returned with hierarchy in one call. The closing note that other sector APIs take their `sectorId` from this list distinguishes it from neighbors like toss_get_sector and toss_get_sector_stocks without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: use this list as the source of `sectorId` inputs for other sector APIs, and cache it once a day since it rarely changes. It does not explicitly name the sibling tools it complements nor state when not to call it, so it falls short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toss_list_stocks마켓별 전체 종목 조회ARead-only
마켓별 전체 종목 조회. 마켓(거래소)별 종목 리스트를 조회합니다. 종목 유니버스 구성 용도이며, 토스증권에서 거래 가능한 종목만 제공합니다.
status·securityType·commonShare 로 유니버스를 필터링할 수 있습니다.
정렬: symbol 오름차순. 필터 조건에 해당하는 종목을 페이지네이션 없이 한 번에 반환합니다.
응답 규모: 마켓당 최대 수천 건(예: NASDAQ 약 2,800건, gzip 응답 약 30KB). 일 배치로 갱신되는 저변동 데이터이므로 하루 1회 조회 후 로컬 캐싱을 권장합니다.
관련 API: 여기서 얻은 symbol 로 GET /api/v1/stocks(다건 상세 조회)를 호출해 종목명·통화·상장상태 등 상세 정보를 채울 수 있습니다.
Rate Limits Group: STOCK_ALL
| Name | Required | Description | Default |
|---|---|---|---|
| market | Yes | ||
| status | No | ||
| commonShare | No | ||
| securityType | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, non-destructive, open-world profile, and the description adds genuinely new behavior: no pagination, result size up to thousands of rows (~2,800 for NASDAQ, ~30KB gzipped), daily batch refresh with low volatility, tradable-only coverage, and the STOCK_ALL rate-limit group.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Bold-labeled sections (정렬, 응답 규모, 관련 API) with the purpose front-loaded make it skimmable, and each block carries actionable information. The only waste is the opening sentence duplicating the title before the slightly fuller restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter read-only list tool with no output schema, the description covers everything an agent needs: sort order, absence of pagination, expected response volume, caching cadence, rate-limit group, and the natural next call. Missing enum glosses are minor against this coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load; it names three of the four parameters (status, securityType, commonShare) and explains their shared semantics as universe filters, with market implied as the exchange selector. It stops short of clarifying enum value meanings (e.g., SCHEDULED vs DELISTED) or the commonShare boolean's effect, leaving some interpretation to the enum literals.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('마켓(거래소)별 종목 리스트를 조회') with explicit scope: the full universe of tradable symbols per market, no pagination. It also differentiates from the sibling toss_get_stocks by naming the follow-up call for per-symbol detail, so an agent can distinguish the two without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Restricts use to universe construction ('종목 유니버스 구성 용도') and names the alternative (GET /api/v1/stocks) with the condition that selects it (needing name, currency, listing status). It further advises a once-per-day fetch plus local caching, which tells the agent not to call this per-request.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
34 tool updates
v0.3.0- Changed
toss_get_accounts1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
toss_get_buying_power3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / accountSeq / descriptionPrevious value: -"Toss accountSeq. If omitted, TOSSINVEST_ACCOUNT is used."New value: +"When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user." - changed
Input schema / requiredPrevious value: -[ - "currency" -]New value: +[ + "accountSeq", + "currency" +]
- Changed
toss_get_candles2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / before / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
- Changed
toss_get_commissions3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / accountSeq / descriptionPrevious value: -"Toss accountSeq. If omitted, TOSSINVEST_ACCOUNT is used."New value: +"When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user." - added
Input schema / requiredAdded value: +[ + "accountSeq" +]
- Added
toss_get_conditional_order - Added
toss_get_conditional_orders - Changed
toss_get_exchange_rate2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / dateTime / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
- Changed
toss_get_holdings3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / accountSeq / descriptionPrevious value: -"Toss accountSeq. If omitted, TOSSINVEST_ACCOUNT is used."New value: +"When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user." - added
Input schema / requiredAdded value: +[ + "accountSeq" +]
- Changed
toss_get_kr_market_calendar3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / date / formatAdded value: +"date" - changed
Input schema / properties / date / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
- Added
toss_get_market_indicator_candles - Added
toss_get_market_indicator_investor_trading - Added
toss_get_market_indicator_prices - Changed
toss_get_order3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / accountSeq / descriptionPrevious value: -"Toss accountSeq. If omitted, TOSSINVEST_ACCOUNT is used."New value: +"When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user." - changed
Input schema / requiredPrevious value: -[ - "orderId" -]New value: +[ + "accountSeq", + "orderId" +]
- Changed
toss_get_orderbook1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
toss_get_orders8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / accountSeq / descriptionPrevious value: -"Toss accountSeq. If omitted, TOSSINVEST_ACCOUNT is used."New value: +"When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user." - added
Input schema / properties / cursor / minLengthAdded value: +1 - added
Input schema / properties / from / formatAdded value: +"date" - changed
Input schema / properties / from / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - added
Input schema / properties / to / formatAdded value: +"date" - changed
Input schema / properties / to / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - changed
Input schema / requiredPrevious value: -[ - "status" -]New value: +[ + "accountSeq", + "status" +]
- Changed
toss_get_price_limits1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
toss_get_prices2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / symbols / patternRemoved value: -"^[A-Za-z0-9.,-]+$"
- Added
toss_get_rankings - Added
toss_get_sector - Added
toss_get_sector_etfs - Added
toss_get_sector_rankings - Added
toss_get_sector_stocks - Changed
toss_get_sellable_quantity3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / accountSeq / descriptionPrevious value: -"Toss accountSeq. If omitted, TOSSINVEST_ACCOUNT is used."New value: +"When accountSeq is required, call toss_get_accounts first. Select the user's intended account; if multiple accounts are ambiguous, ask the user." - changed
Input schema / requiredPrevious value: -[ - "symbol" -]New value: +[ + "accountSeq", + "symbol" +]
- Added
toss_get_stock_credit_trades - Added
toss_get_stock_investor_trading - Added
toss_get_stock_program_trades - Added
toss_get_stock_securities_lending - Added
toss_get_stock_short_selling - Changed
toss_get_stock_warnings1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
toss_get_stocks2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / symbols / patternRemoved value: -"^[A-Za-z0-9.,-]+$"
- Changed
toss_get_trades1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Changed
toss_get_us_market_calendar3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / date / formatAdded value: +"date" - changed
Input schema / properties / date / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
- Added
toss_list_sectors - Added
toss_list_stocks
1 tool update
v0.2.0- Changed
toss_get_buying_power3 fields changed- added
Input schema / properties / currencyAdded value: +{ + "description": "Currency code: KRW (Korean stocks) or USD (US stocks)", + "enum": [ + "KRW", + "USD" + ], + "type": "string" +} - removed
Input schema / properties / symbolRemoved value: -{ - "pattern": "^[A-Za-z0-9.-]+$", - "type": "string" -} - added
Input schema / requiredAdded value: +[ + "currency" +]
17 tool updates
v0.1.0- First observed
toss_get_accounts - First observed
toss_get_buying_power - First observed
toss_get_candles - First observed
toss_get_commissions - First observed
toss_get_exchange_rate - First observed
toss_get_holdings - First observed
toss_get_kr_market_calendar - First observed
toss_get_order - First observed
toss_get_orderbook - First observed
toss_get_orders - First observed
toss_get_price_limits - First observed
toss_get_prices - First observed
toss_get_sellable_quantity - First observed
toss_get_stock_warnings - First observed
toss_get_stocks - First observed
toss_get_trades - First observed
toss_get_us_market_calendar
TDQS
Scored across 34 tools
Most tools target clearly distinct resource+action pairs, and the descriptions explicitly differentiate tricky neighbors (stock vs market-indicator investor trading, credit trades vs securities lending, stock vs indicator candles). A few areas still require inference: toss_get_stocks (master data), toss_get_prices (current quotes), and toss_list_stocks (universe) all operate on symbol sets and could be confused by an agent skimming names.
Every tool uses a uniform toss_verb_noun pattern with consistent snake_case (toss_get_*, toss_list_*), and singular/plural distinctions are meaningful (toss_get_order vs toss_get_orders, toss_get_conditional_order vs toss_get_conditional_orders). No style mixing or vague verbs.
34 tools is heavy and borderline for agent selection, spanning market data, sectors, indicators, and account management. Each tool maps to a real API endpoint and earns its place, but the surface is large enough to burden tool selection.
The market-data and analytics surface is thorough (candles, quotes, orderbook, trades, sectors, indicators, investor/short/credit/lending flows), and account reads are covered. However, order lifecycle is read-only: there is no tool to place, modify, or cancel an order or conditional order, which is a notable gap for a brokerage API.
Maintenance
Related MCP Connectors
Trading MCP server for AI agents, with live market data, account reads and controlled execution.
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
Open-source MCP server for Zerodha Kite Connect. Portfolio, market data, backtesting, alerts.
Multi-tenant FastMCP server for Charles Schwab brokerage data, monetized via DPYC Tollbooth
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server wrapping Toss Securities Open API, enabling stock price queries and trading for Korean and US stocks via natural language.3664 npmMIT
- AlicenseCqualityCmaintenanceSafe-by-default MCP server for the official Toss Securities Open API, providing read-only market and account data with optional order operations protected by multiple safety gates.2719 npm2MIT
- FlicenseAqualityDmaintenanceEnables MCP clients to read Toss Securities market data and account info, and optionally place real-money orders.20-
- AlicenseAqualityDmaintenanceA local MCP server that automatically generates tools from Toss Securities' official OpenAPI spec, enabling real API calls with multi-layered order safety and OAuth 2.0 authentication.361MIT