kiwoom-mcp-server
This read-only MCP server exposes Kiwoom Securities' REST API, enabling natural language queries for Korean stock market data and account information.
Market Data
search_stock: Search for stocks by name or 6-digit code across KOSPI/KOSDAQ (including ETFs/ETNs)get_stock_price: Current price, change rate, volume, and key indicatorsget_stock_chart: Candlestick data — daily, weekly, monthly, or minute-level (up to 200 bars, adjusted prices)get_orderbook: 10-level bid/ask prices and quantitiesget_market_index: KOSPI/KOSDAQ composite and sector indicesget_ranking: Top stocks by rise rate, fall rate, trading volume, or trading valueget_investor_trend: Individual/foreign/institutional net buying trends with daily breakdownget_etf_info: Tracking index, tax type, and current priceget_short_selling: Daily short volume, ratio, and average priceget_foreign_holding: Daily foreign ownership, holding ratio, and limit exhaustion rate
Watchlist (read-only)
get_watchlist_groups: List HTS-saved watchlist groupsget_watchlist: Stocks within a specific group with names, prices, and market info
Themes
get_theme_groups: Theme groups with change rates, stock counts, 10-day returns, and key stocks; searchable by stock codeget_theme_stocks: Constituent stocks of a specific theme with prices and returns
Account (read-only)
get_account_balance: Available cash, total valuation, total profit/loss, and estimated assetsget_account_holdings: Per-stock quantity, average cost, current price, valuation, P&L, return rate, and portfolio weightget_transactions: Buy/sell history filtered by date range or specific stockget_pending_orders: Unfilled orders with order number, type, status, quantity, and priceget_trading_journal: Per-stock buy/sell averages, quantities, realized P&L, and total daily P&Lcalc_isa_tax_status(optional): Compute net profit vs. tax-free limit (₩2M general / ₩4M low-income), including a full-liquidation scenario
Utility
ping: Health check to verify server connectivity (no API key required)
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@kiwoom-mcp-servercheck my account holdings"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
kiwoom-mcp-server
한국어 · English
키움증권 REST API를 조회 전용(read-only) 으로 노출하는 MCP 서버입니다. Claude Desktop / Claude Code에서 자연어로 국내 주식 시세·차트·호가·지수·순위·수급과 내 계좌의 잔고·보유 종목·거래내역을 조회할 수 있고, ISA 계좌라면 비과세 한도 대비 손익통산 현황까지 계산해 줍니다.
⚠️ 보안 경고
기본 실행은 로컬 stdio입니다. 원격에서 써야 한다면 반드시 인증이 내장된 HTTP 모드(원격 연결 참조)로만 노출하고, 인증 없는 상태(
--no-auth)로는 절대 외부 네트워크에 열지 마세요.
.env의 AppKey/AppSecret은 실계좌 조회 권한입니다. 절대 커밋하지 마세요 (.gitignore에 이미 등록되어 있습니다).주문(매수/매도/정정/취소) 기능은 설계상 제외되어 있습니다. 이 서버가 계좌를 변경하는 일은 없습니다.
제공 Tool
시장 데이터 (계좌와 무관, 앱키만 있으면 사용 가능):
Tool | 설명 | 키움 TR |
| 종목명→코드 검색 (코스피/코스닥, ETF/ETN 포함) + 투자유의 표시 | ka10099 |
| 현재가/등락률/거래량/기본지표 + 업종·상장일·투자유의 | ka10001, ka10099 |
| 여러 종목(최대 30개) 일괄 시세 — 현재가·등락률·거래량·거래대금·시가총액 | ka10095, ka10099 |
| 일/주/월/년/분/틱봉 캔들 차트 (수정주가 반영) | ka10079~83, ka10094 |
| 일별 거래·수급 — 종가·거래대금 + 개인/기관/외국인 순매수·프로그램·신용비율, 또는 장전/장중/장후 거래 분포 | ka10086, ka10015 |
| 10단계 매도/매수 호가·잔량 (통합 기준) | ka10007 |
| 시장 전체 호가잔량 상위 / 잔량 급증 / 잔량비율 급증 (정규장 중) | ka10020~22 |
| 코스피/코스닥 종합·업종 지수 | ka20003 |
| 업종 지수 현재가 상세 (등락 구성·52주 고저·시간대별 추이) | ka20001 |
| 업종 구성 종목 시세 (현재가·등락률·거래량·고저가) | ka20002 |
| 업종 지수 일/주/월/년/분/틱봉 캔들 차트 | ka20004~08, ka20019 |
| 업종별 투자자 순매수 — 시장 전체 업종의 개인/외국인/기관계 + 증권·투신·연기금·사모 | ka10051 |
| 상승률/하락률/거래량/거래대금 상위 + 시가대비 등락률(체결강도 포함) + 신용비율 상위 | ka10027/30/32, ka10028, ka10033 |
| 기관·외국인이 동시에 같은 방향으로 순매매한 종목 + 주체별 추정 평균단가 | ka10062 |
| PER·PBR·ROE 고저 순위 (시장 전체 밸류에이션 스크리닝) | ka10026 |
| 매물대집중 종목 — 특정 가격대에 거래가 몰린 종목과 그 구간 | ka10025 |
| 신고가/신저가/상한가/하한가/급등/급락/거래량급증/거래량갱신(직전 N일 최대 돌파) 특이 종목 | ka10016/17/19/23/24 |
| 당일 VI(변동성완화장치) 발동 종목 (발동가·괴리율·시각) | ka10054 |
| 동시호가 예상체결 순위 (개장 전 08:30 | ka10029 |
| 개인/외국인/기관 순매수 동향 (기간 합계 + 일별) | ka10059, ka10061 |
| 기관·외국인 추정평균단가 + 일별·기간누적 순매수 | ka10045 |
| 외국인·기관 순매매 상위 종목 / N일 연속 순매수 현황 | ka90009, ka10131 |
| 투자자 12주체(개인·외국인·기관계·금융투자·보험·투신·은행·연기금등·사모펀드·기타금융·국가·기타법인)별 순매수 상위 종목 — 직전 완료 거래일 기준 | ka10066 |
| 장중 주체별 순매수/순매도 상위 종목 — 외국인·기관계·보험·투신·연기금등·기타법인 (실시간 잠정치) | ka10063, ka10065 |
| 종목별 거래원(증권사) 매수/매도 상위 5 + 외국계 창구 표시, 전 거래원 50개사 누적 순위( | ka10002, ka10102, ka10037, ka10038, ka10053 |
| ETF 추적지수·과세유형·시세·NAV/괴리율 | ka40002, ka10001, ka40009 |
| ETF 기간별 수익률 vs 비교지수(직접 고르는 국내 지수 — 추적지수와 자동으로 맞춰지지 않음) + 일별 NAV·괴리율·추적오차 추이, 일자별 외국인·기관 순매수 | ka40001, ka40003, ka40008 |
| 상장 ETF 전 종목 스크리너 — 괴리율(고평가/저평가)·등락률·거래량·추적오차 정렬 + 과세유형·운용사·추적지수 필터 | ka40004 |
| 종목별 일자별 공매도 추이 (공매도량·비중·평균가) | ka10014 |
| 대차거래 추이 (체결·상환·증감·잔고) — 종목별/시장 전체 + 대차잔고 상위 종목 순위 | ka10068, ka20068, ka90012 |
| 신용융자·대주 잔고 추이 (신규·상환·잔고·공여율·잔고율) | ka10013 |
| 외국인 보유(한도) 동향 — 종목별 추이, 또는 시장 전체 순위(한도소진율 증가 / 기간 누적 순매매 / 3일 연속 순매매) | ka10008, ka10036, ka10034, ka10035 |
| 프로그램 매매 상위(당일·날짜 지정) + 추이 (일자별/시간대별/종목별, 코스피/코스닥) + 종목 시간대별·차익거래 잔고 | ka90003, ka90004, ka90010, ka90005, ka90013, ka90008, ka90006 |
| 시간외 단일가 (16:00~18:00) — 종목별 5단 호가·시세 또는 등락률 순위 | ka10087, ka10098 |
| 체결강도 추이 (매수÷매도 체결량×100, 100이 균형) — 일별 60거래일 / 시간별 60분 | ka10046, ka10047 |
| KRX 금현물 시세 (금 1Kg / 미니금 100g) — 일별추이 + 기관·개인 순매수, 또는 당일 틱 체결 | ka50012, ka50010 |
관심종목 (영웅문 HTS에 저장한 관심 그룹, 읽기 전용):
Tool | 설명 | 키움 TR |
| HTS 관심종목 그룹 목록 (그룹코드+그룹명) | ka01300 |
| 그룹 내 종목 목록 (종목명·전일종가·시장·투자유의 보강) | ka01301, ka10099 |
키움 REST API에는 관심종목 편집(추가/삭제) TR이 없어 조회만 가능합니다.
테마:
Tool | 설명 | 키움 TR |
| 테마 그룹 목록 (등락률·종목수·기간수익률·주요종목; 종목별 편입 테마 검색) | ka90001 |
| 특정 테마의 구성종목과 시세 (현재가·등락률·거래량·기간수익률) | ka90002 |
계좌 (앱키에 귀속된 계좌 기준):
Tool | 설명 | 키움 TR |
| 예수금 + 총평가금액/총평가손익/추정예탁자산 + 당일/당월/누적 손익, | kt00001, kt00018, kt00004, kt00008 |
| 보유 종목별 수량/평균단가/현재가/평가손익 | kt00018 |
| 계좌 당일 현황 — 매매대금·수수료·세금·입출금 + D+2 추정 (실전 전용) | kt00017 |
| 일별 추정예탁자산 추이 + 기간 수익률/평가손익/입출금 요약 (기본 30일, 모의투자 미지원) | kt00002, kt00016 |
| 기간별 거래내역 (체결일·단가·정산금액, 모의투자 미지원) | kt00015 |
| 미체결 주문 (주문번호·구분·상태·주문/미체결수량·주문가격) | ka10075 |
| 체결 내역 (주문번호·구분·상태·주문/체결 수량·가격·수수료+세금, side/종목/주문번호 필터) | ka10076 |
| 당일매매일지 (종목별 매수/매도 평균가·수량·실현손익, 총손익) | ka10170 |
| ISA 손익통산 순이익의 비과세 한도 대비 현황 (확정 + 전량매도 시나리오, kt00015 의존이라 모의투자 미지원) | kt00015, ka10074, kt00018 |
그 외 ping(연결 확인, 앱키 불필요). 모든 응답은 [모의투자]/[실전투자] 접두어로
어느 서버가 답했는지 표시합니다. search_stock 첫 호출은 종목 마스터(~4,300종목)를
내려받아 몇 초 걸리며 이후 12시간 캐시됩니다.
거래소 기준 — KRX + 넥스트레이드(NXT) 통합
v0.31.0부터 시세·랭킹 tool은 통합(SOR) 기준으로 조회합니다. KRX와 넥스트레이드(NXT) 체결을 합산한 값이며, NXT 거래가능 종목(약 606개, 대형주 다수)은 KRX만 볼 때보다 거래량이 크게 늘어납니다 — 삼성전자 실측(2026-08-03 정규장) KRX 19.2M / NXT 15.5M / 통합 34.7M. KRX만 표시하는 HTS·포털 화면과 숫자가 다르면 대개 이 차이입니다.
예외는 get_after_hours(시간외 단일가) 하나입니다 — 통합 조회가 불가능하며 NXT 거래가능
종목은 애초에 이 TR에서 조회되지 않습니다. 거래원(get_broker_activity)은 v0.47.0에서 통합으로
넘어왔습니다 — 그전까지 KRX 값을 내보내 상위 5의 순위가 실제와 달랐습니다(삼성전자 매수 1위가
KRX 기준 KB증권 / 통합 기준 미래에셋). 호가는 v0.37.0에서 통합으로 넘어왔습니다 —
ka10004 대신 ka10007(시세표성정보)을 쓰며, 삼성전자 실측(2026-08-04 정규장) 매수1 잔량이
KRX 18,421 / NXT 17,081 / 통합 36,319이었습니다.
calc_isa_tax_status 사용 메모
집계 시작일:
.env의ISA_OPENED_ON(계좌 개설일)이 기본값, 호출 시from_date로 오버라이드 가능.배당·분배금이 거래내역에서 자동 감지되지 않으면
dividends_received인자로 수동 입력.종목 과세유형(과세대상 vs 국내주식형)은 자동 분류입니다 — ETF는 키움이 주는
etftxon_type(ka40002)으로 확정하고(조회 실패 시 종목명 휴리스틱으로 폴백), 개별주식 등 그 밖에는 종목명 기반으로 추정합니다. 틀린 경우overrides: [{stock_code, tax_type}]로 수정. 결과는 참고용 — 실제 과세는 증권사 정산 기준.
Related MCP server: kiwoom-mcp
요구 사항
Node.js 22 이상 — Node 20이 2026-04-30에 EOL이 되면서 바닥을 올렸습니다 (
process.loadEnvFile은 20.12부터 있으므로 코드가 요구하는 최소치는 그보다 낮습니다)키움증권 REST API 앱키 — 키움 Open API 포털에서 앱 등록 후 발급
모의투자(VIRTUAL)와 실전투자(REAL)는 각각 별도로 발급받은 앱키를 사용하며, 발급받은 키 종류와
KIWOOM_MODE가 일치해야 합니다.계좌는 앱키에 귀속되므로 계좌번호 입력은 필요 없습니다.
설치
npm에 배포되어 있으므로 클론 없이 npx로 바로 실행할 수 있습니다 — 아래
"Claude Desktop 연결" / "Claude Code 연결"의 npx 설정을 그대로 쓰면 됩니다. 이 경우
앱키는 .env 파일 대신 클라이언트 설정의 env 블록으로 전달합니다(예제는 각
연결 섹션 참고).
소스에서 직접 빌드하거나 코드를 수정하려면:
git clone <이 저장소 URL> # 또는 소스 복사
cd kiwoom-mcp-server
npm install
cp .env.example .env # 아래 표를 참고해 값 입력
npm run build # dist/ 생성
npm test # 단위 테스트 (네트워크 불필요)환경 변수 (.env)
변수 | 필수 | 설명 |
| ✅ | 키움 REST API 앱키 |
| ✅ | 키움 REST API 앱 시크릿 |
|
| |
|
| |
|
| |
| ISA 계좌 개설일 | |
|
| |
| HTTP 모드 ✅ | HTTP 모드에서 모든 |
| HTTP 모드 포트 (기본값 | |
| HTTP 모드 바인드 주소 (기본값 | |
|
| |
| HTTP 모드에서 외부에 광고할 기준 URL (예: |
기본값은 일반(비-ISA) 계좌 기준입니다 — 별도 설정이 없으면 시장·계좌 조회 tool만
노출됩니다. ISA 계좌를 연결해 비과세 한도 tool을 쓰려면 ISA_ENABLED=true로 켜고
ISA_TYPE/ISA_OPENED_ON을 채우세요. 끄면 calc_isa_tax_status가 등록되지 않고
나머지 tool은 모두 그대로 동작합니다.
.env는 프로젝트 루트에서 먼저 찾기 때문에 (Claude Desktop처럼) 임의의 작업
디렉터리에서 실행돼도 동작합니다.
Claude Desktop 연결
설정 파일 위치:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
npx (배포판) — 클론 없이 실행. 앱키는 env 블록으로 전달:
{
"mcpServers": {
"kiwoom": {
"command": "npx",
"args": ["-y", "kiwoom-mcp-server"],
"env": {
"KIWOOM_APP_KEY": "…",
"KIWOOM_APP_SECRET": "…",
"KIWOOM_MODE": "REAL"
}
}
}
}소스 빌드 — dist/index.js 직접 실행. 앱키는 프로젝트 루트 .env 사용:
{
"mcpServers": {
"kiwoom": {
"command": "/opt/homebrew/bin/node",
"args": ["/절대/경로/kiwoom-mcp-server/dist/index.js"]
}
}
}
command에는 실행 파일의 절대 경로를 쓰는 편이 가장 안전합니다 (which node,which npx로 확인). GUI 앱은 셸 PATH를 상속받지 않으므로"node"/"npx"라고만 쓰면 서버가 조용히 뜨지 않을 수 있습니다 — 가장 흔한 실패 원인입니다.
저장 후 Claude Desktop을 완전히 종료(macOS는 ⌘Q)했다가 다시 실행하면 tool이
보입니다. npm run build로 다시 빌드한 뒤에도 완전 종료 후 재실행해야
변경이 반영됩니다.
Claude Code 연결
npx (배포판) — 앱키는 -e 플래그로 전달:
claude mcp add kiwoom \
-e KIWOOM_APP_KEY=… -e KIWOOM_APP_SECRET=… -e KIWOOM_MODE=REAL \
-- npx -y kiwoom-mcp-server소스 빌드 — 프로젝트 루트 .env 사용:
claude mcp add kiwoom -- node /절대/경로/kiwoom-mcp-server/dist/index.js원격 연결 (HTTP 모드) — claude.ai 웹/모바일
claude.ai(웹/모바일)의 커스텀 커넥터는 로컬 stdio 서버에 직접 붙을 수 없고, 공개
HTTPS로 접근 가능한 Streamable HTTP MCP 서버가 필요합니다. --http 플래그(또는
MCP_TRANSPORT=http)로 이 서버를 HTTP 모드로 띄울 수 있습니다:
MCP_AUTH_TOKEN="$(openssl rand -hex 32)" npx -y kiwoom-mcp-server --http --port 8000
# 엔드포인트: http://127.0.0.1:8000/mcp · 헬스체크: /healthz인증이 기본 필수입니다.
MCP_AUTH_TOKEN이 없으면 기동을 거부합니다 — 모든/mcp요청에Authorization: Bearer <토큰>헤더가 있어야 합니다. 인증 없이 열려면--no-auth를 명시해야 하며, 계좌 조회 도구가 그대로 노출되므로 신뢰할 수 있는 네트워크나 모의투자(KIWOOM_MODE=VIRTUAL)에서만 사용하세요.기본 바인드는
127.0.0.1입니다 — 터널을 앞에 두는 구성을 전제합니다. 컨테이너/서버에 직접 노출하려면--host 0.0.0.0을 명시하세요.공개 HTTPS URL은 Cloudflare Tunnel 등으로 만듭니다:
cloudflared tunnel --url http://localhost:8000(임시 URL — 상시 운영은 named tunnel 권장).OAuth 메타데이터에 실리는 주소는 요청의
Host와X-Forwarded-Proto에서 추론합니다. Cloudflare Tunnel처럼 그 헤더를 붙여 주는 프록시라면 그대로 두면 되지만, 직접 세운 nginx/Caddy가X-Forwarded-Proto를 넘기지 않으면 issuer가http://로 광고되어 claude.ai가 연결을 거부합니다. 그럴 때MCP_PUBLIC_URL=https://<도메인>으로 고정하세요.claude.ai 등록: Settings → Connectors → Add custom connector에
https://<도메인>/mcp를 입력합니다 (고급 설정의 OAuth 필드는 비워둡니다). 연결 시 브라우저에 승인 페이지가 뜨고,MCP_AUTH_TOKEN값을 접속 암호로 입력하면 완료됩니다 — 서버가 MCP 인증 스펙(OAuth 2.0 + PKCE, 동적 클라이언트 등록)을 내장하고 있어 별도 헤더 설정이 필요 없습니다. 등록한 커넥터는 웹/모바일/데스크톱에서 공용입니다. 헤더를 지정할 수 있는 클라이언트(예: Claude Code--header)는 기존처럼Authorization: Bearer <MCP_AUTH_TOKEN>정적 헤더로도 접속할 수 있습니다. OAuth 토큰은 작업 디렉터리의.oauth-state.json(0600)에 저장되어 서버를 재시작해도 연결이 유지됩니다.⚠️ 키움 API 호출은 이 서버가 실행되는 곳에서 나갑니다. REAL 모드는 키움 지정단말기 인증(8050)이 IP에 묶이므로, 등록된 IP가 아닌 곳(클라우드 등)에서 실행하면 인증 오류가 날 수 있습니다. 원격 노출은 모의투자로 먼저 검증하세요.
기존 stdio 동작(Claude Desktop/Code 연결)은 인자 없이 실행하면 그대로입니다 — 단, .env나
환경변수에 MCP_TRANSPORT=http가 있으면 예외입니다. .env는 전송 방식을 고르기 전에 읽히므로
인자 없이 실행해도 HTTP 경로를 타고, MCP_AUTH_TOKEN이 없으면 아예 기동을 거부합니다.
MCP_TRANSPORT 값과 무관하게 stdio로 강제하려면 **--stdio**를 넘기세요.
동작 확인
MCP 클라이언트 없이 stdio로 직접 확인할 수 있습니다:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"t","version":"0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"ping","arguments":{}}}' \
| node dist/index.jsping은 .env 없이도 응답합니다. 시세·계좌 tool은 앱키가 있어야 합니다.
문제 해결
증상 | 확인할 것 |
Desktop에 tool이 안 보임 |
|
|
|
| 앱키 종류(모의/실전)와 |
| 키움 레이트리밋(TR당 약 1초 1회). 서버가 자동 재시도한 뒤에도 초과한 경우이니 잠시 후 다시 시도 |
예수금과 D+2 추정예수금이 다름 | 미결제(D+2 정산) 매매가 있으면 정상입니다 |
개발
npm run dev # tsx로 소스 직접 실행
npm run check # 버전 5곳 동기화 · 카운트 · README 2종 tool 문서화 · server.ts 등록 누락
npm run check:write # 위 카운트를 실제 값으로 고쳐 씀 (버전은 안 건드림)
npm run typecheck # tsc --noEmit -p tsconfig.test.json (src + tests)
npm test # vitest
npm run build # tsc → dist/네 가지 모두 CI(.github/workflows/ci.yml, Node 22·24)에서 돌고, 거기에
npm audit --omit=dev --audit-level=high가 한 단계 더 붙습니다. 타입체크가
tsconfig.test.json을 쓰는 이유는 빌드용 tsconfig.json의 rootDir가 src라
테스트를 거기 넣으면 dist/ 레이아웃이 바뀌기 때문입니다 — 빌드는 그대로
tsconfig.json을 씁니다.
구조: src/kiwoom/(인증·HTTP·TR 계층) → src/tools/(MCP tool, 포맷터 분리) →
src/isa/(과세유형 분류·실현손익 재구성·손익통산). 상세 규칙과 검증된 API
계약은 CLAUDE.md 참고.
라이선스
Available Tools
49 toolsget_account_balance계좌 잔고 조회A
view=summary(기본)는 계좌의 예수금(주문가능/출금가능 포함)과 총매입금액, 총평가금액, 총평가손익, 추정예탁자산, 당일/당월/누적 투자손익입니다 (키움 kt00001 + kt00018 + kt00004). view=settlement은 다음 결제일에 결제될 체결의 건별 명세입니다 (kt00008) — summary의 D+1/D+2 추정예수금이 왜 그 값인지를 종목·수량·수수료·제세금으로 쪼개 보여줍니다. 지난 결제 내역 전체는 get_transactions(kt00015), 보유 종목별 잔고는 get_account_holdings를 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | summary=잔고·손익 요약(기본), settlement=익일 결제 예정 건별 명세 | summary |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the underlying Kiwoom API calls (kt00001, kt00018, kt00004, kt00008) and explains how settlement view breaks down summary estimates. It does not mention rate limits or authentication, but for a read-only account query, the disclosed behavior is sufficiently transparent.
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 dense but every sentence serves a purpose: it defines the default view, lists its contents, explains the settlement view with a rationale, and names alternative tools. Content is front-loaded with the default view first, and the structure is logical and easy to scan.
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?
Given the tool's simplicity (one parameter, no output schema), the description fully covers the possible return content for both views and provides context for when to use sibling tools. It is complete and self-contained, leaving no major gaps for an AI agent to select and invoke the tool 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?
Although schema coverage is 100%, the description adds substantial semantic depth beyond the schema by detailing exactly what each view includes (e.g., 예수금, 총평가금액, 손익, D+1/D+2 estimates, fees, taxes). This exceeds the baseline for high schema coverage and significantly enhances parameter understanding.
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 clearly states that this tool retrieves account balance data with two views: summary (예수금, 평가금액, 손익 등) and settlement (다음 결제일의 건별 명세). It uses specific verbs and enumerates the exact contents, distinguishing it from sibling tools like get_transactions and get_account_holdings.
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 explains when to use each view (summary for overall balance/profit-loss, settlement for upcoming settlement details) and explicitly directs users to get_transactions for past settlement history and get_account_holdings for per-stock balances, providing clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_holdings보유 종목 조회A
계좌의 보유 종목 목록을 조회합니다 — 종목별 수량, 평균단가, 현재가, 평가금액, 평가손익, 수익률, 보유비중 (키움 kt00018). 인자가 필요 없습니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the operation is a retrieve (조회), lists output fields, and notes that no arguments are required. However, it does not explicitly state that it is read-only, mention error conditions, or authentication requirements. Adequate for a simple getter but lacks depth.
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, well-structured sentence. The main action is front-loaded ('조회합니다'), and the detailed field list is appended logically. No wasted words or redundancy with 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?
For a tool with no parameters and no output schema, the description is fully complete. It enumerates the exact return fields, identifies the data source (키움 kt00018), and confirms no arguments are needed. No additional context is required for an agent to invoke 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?
The tool has zero parameters, and the description explicitly states '인자가 필요 없습니다' (no arguments needed). This goes beyond the baseline for zero-parameter tools, providing clear confirmation and eliminating any ambiguity about invocation.
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 clearly states the tool retrieves the account's holdings list and enumerates the specific fields returned (quantity, average price, current price, valuation amount, profit/loss, return rate, weight). This distinguishes it from sibling tools like get_account_balance, which focus on balance rather than held 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?
The description implies usage when holdings are needed but provides no explicit alternative guidance or when-not-to-use conditions. It does not compare with other account-related tools, leaving the agent to infer from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_today계좌 당일 현황 조회A
오늘 하루 계좌에 무슨 일이 있었는지를 한 장으로 조회합니다 (키움 kt00017) — 매도·매수 금액, 수수료·세금, 입출금·입출고, D+2 추정예수금·평가금액, 신용/대출 잔액. 종목별 실현손익은 get_trading_journal, 현재 보유 종목은 get_account_holdings, 예수금·총평가 요약은 get_account_balance를 쓰세요 — 당일 현금 흐름을 보는 것은 이 tool뿐입니다. 모의투자에서는 제공되지 않습니다(RC9000).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the tool's scope (daily cash flow at a glance), lists the specific data fields returned, and highlights a major limitation (unavailable in simulated trading). It doesn't explicitly state the return format or that it's a read-only call, but for a no-parameter query tool, the provided behavioral context is strong.
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 three sentences with dense but purposeful content. It leads with the primary purpose, then enumerates contents, provides sibling comparisons, states exclusivity, and closes with a limitation. Each sentence earns its place, though the listing of comma-separated metrics makes it slightly heavy. Still, it's efficient and well-structured.
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 no-parameter, no-output-schema tool, the description covers the essential context: what data is returned, which sibling tools to use for other needs, and a key environment restriction (paper trading). It could have described the display format or the meaning of D+2, but the information provided is sufficient for an agent to decide when to invoke this 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?
The tool has zero parameters, so the schema coverage is trivially 100%. The description correctly avoids inventing parameters and instead focuses on the query's fixed scope, which is the appropriate semantic content. Per the rubric, 0 params earns a baseline of 4, and the description supports this by explaining what the single-page view includes.
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 clearly states the tool 'inquires about what happened in the account today at a glance' and enumerates specific content (sell/buy amounts, fees/taxes, deposits/withdrawals, D+2 estimates, credit/loan balances). It explicitly distinguishes this tool from siblings by naming get_trading_journal, get_account_holdings, and get_account_balance for related but different queries, making the purpose unambiguous.
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 explicit when-to-use guidance by stating that per-stock realized P&L should use get_trading_journal, current holdings get_account_holdings, and summary balances get_account_balance, then notes 'this is the only tool for viewing daily cash flow.' It also provides a critical exclusion: not available in simulated trading (RC9000).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_trend계좌 자산·수익률 추이 조회A
일별 추정예탁자산(예수금·대용금 포함) 추이와 기간 수익률·평가손익·입출금 요약을 조회합니다 (키움 kt00002 + kt00016). "내 계좌가 지난 한 달간 어떻게 변했나" 같은 질문에 사용하세요 (기본 30일, 최대 90일). 모의투자에서는 지원되지 않는 조회입니다.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | 조회 기간(일) — 오늘부터 거슬러 계산 (2~90, 기본 30) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description effectively discloses that the tool retrieves daily estimated data combining two sources, includes specific financial metrics, and has a usage limit (max 90 days). It does not mention side effects, authentication needs, or data freshness, but the read-only nature is implied and consistent with the tool's purpose.
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 very concise, consisting of two sentences that front-load the main purpose, then provide a usage example and limitation. No unnecessary words or repetition. It earns its place with clean structure.
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?
Given the tool has one well-documented parameter, no output schema, and no annotations, the description is complete: it explains what data is returned, the period range, and an important exclusion (simulated trading). No critical information 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?
Schema coverage is 100% for the single parameter 'days', with the schema already providing description and constraints. The description adds minimal extra value by repeating the default and max values and giving a usage example. Baseline 3 is appropriate as the description does not significantly augment the schema.
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 clearly states the verb '조회' (retrieve) and the resource '계좌 자산·수익률 추이' (account asset/return trends), detailing specific components like daily estimated deposit assets and period returns. It distinguishes from siblings by mentioning it's not supported for simulated trading and by specifying the data sources (키움 kt00002 + kt00016).
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 provides a typical query example ('내 계좌가 지난 한 달간 어떻게 변했나'), default (30 days) and maximum (90 days) period, and explicitly states it is not supported for simulated trading. However, it does not explicitly compare with sibling tools or give when-not-to-use advice beyond the simulation restriction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_after_hours시간외 단일가 조회A
장 종료 후 시간외 단일가 매매(16:00~18:00 KST) 정보를 조회합니다 (키움 ka10087/ka10098). stock_code를 지정하면 해당 종목의 시간외 단일가 시세와 5단 호가를, 생략하면 시장 전체 등락률 순위를 보여줍니다. 대비·등락률은 전일이 아니라 당일 종가 기준입니다. 순위는 sort(up_rate 상승률 기본/up_amount 상승폭/down_rate 하락률/down_amount 하락폭/unchanged 보합), market(all 기본/kospi/kosdaq), min_volume(거래량 하한)으로 조절합니다. 정규장 호가는 get_orderbook을 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 종목 수 — 순위 조회에서만 사용 (기본값 20, 최대 50) | |
| sort | No | 정렬 기준 — 순위 조회에서만 사용 (기본값: up_rate) | |
| market | No | 시장 구분 — 순위 조회에서만 사용 (기본값: all) | |
| min_volume | No | 시간외 거래량 하한(주) — 순위 조회에서만 사용 (기본값: all) | |
| stock_code | No | 6자리 종목코드 (생략 시 시장 전체 시간외 단일가 등락률 순위) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that comparison/base is today's closing price (not previous day), and that sort, market, min_volume only affect ranking mode. No contradictions. Lacks details on rate limits or auth but adequate for a read-only 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?
Single paragraph but well-structured: time frame, source, two modes, base price, ranking controls, sibling reference. No redundant sentences. Could split into bullet points for clarity, but currently concise enough.
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, but description adequately covers return data: quote, 5-step order book, ranking. Explains all 5 parameters and their behavior in each mode. For a read-only tool with 5 params, it is complete and self-contained.
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 100%, baseline 3. Description adds significant meaning: explains stock_code toggles mode, clarifies sort options (up_rate, up_amount, etc.), market, min_volume. Provides context of KST time and source codes. Adds value beyond schema.
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 clearly states it retrieves after-hours single price trading info (16:00-18:00 KST). It distinguishes two modes: with stock_code returns quote and 5-step order book; without returns market-wide ranking. It differentiates from sibling get_orderbook for regular hours.
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?
Explicitly specifies when to use (after-hours) and when not to (regular hours use get_orderbook). Explains the two different behaviors based on stock_code parameter presence, guiding the agent on when to provide or omit it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_broker_activity거래원 동향 조회A
증권사 창구별 매매 동향을 조회합니다 (키움 ka10002/ka10102/ka10037/ka10038/ka10053). stock_code를 주면 그 종목의 당일 거래원 상위 5개사(매수/매도)이고, 외국계 창구에는 🌐를 붙입니다. 같은 종목을 view=broker_rank로 부르면 전 거래원 50개사의 누적 순위를 순매수/순매도로 갈라 보고, view=dropout이면 당일 상위에서 빠진 창구와 그 시각을 봅니다(누가 언제 발을 뺐는지). stock_code를 생략하면 시장 전체에서 외국계 창구 순매매가 큰 종목 순위입니다 (direction: net_buy 기본/net_sell/all, days: 1·5·10일 누적). 둘 다 창구 기준이라 투자자 주체별 순매수와는 다릅니다 — 외국인 순매수 자체는 get_investor_trend나 get_foreign_intraday를 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 개수 — 시장 전체 순위는 종목 수(기본 20), view=broker_rank는 거래원 수(기본 100 = 50개사 전부). 최대 100 | |
| days | No | 누적 기간(거래일) — 시장 전체 순위에서만 사용 (기본값 1) | |
| sort | No | 정렬 기준 — amount(순매매 금액, 기본)/quantity(순매매 수량) | |
| view | No | stock_code를 줬을 때의 표 종류 — top5(당일 상위 5개사, 기본)/broker_rank(전 거래원 50개사 누적 순위)/dropout(당일 상위에서 이탈한 창구와 그 시각) | |
| market | No | 시장 구분 — 시장 전체 순위에서만 사용 (기본값 all) | |
| direction | No | 순매매 방향 — 시장 전체 순위에서는 net_buy(기본)/net_sell/all(종목코드 순, 순위 아님), view=broker_rank에서는 볼 거래원 집합 net_buy(순매수한 곳)/net_sell(순매도한 곳)/all(전체, 기본) | |
| stock_code | No | 조회할 6자리 종목코드 — 주면 종목별 거래원, 생략하면 시장 전체 외국계 창구 순위 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden and does so richly: it explains the two modes (stock_code present vs absent), the different return shapes for each view (top 5 brokers, cumulative 50-broker ranking, dropped brokers with times), the 🌐 flag for foreign brokers, and how direction/days parameters affect the result. It also explicitly warns that the data is broker-based, not investor-based, preventing misuse. This is thorough 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?
The description is a single dense paragraph, but every sentence adds value. It front-loads the core purpose and uses formatting (bold, line breaks implied) to highlight key terms. It could be better structured with bullet points for the three views, but given the complexity of the behavior, the length is justified and there is no fluff.
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?
Given the tool's complexity (two modes, multiple views, optional parameters), the description covers the most important behavior and result types. It doesn't list exact output fields (e.g., whether it returns arrays of objects with specific fields), but the absence of an output schema means the description should compensate; it does so sufficiently for an agent to understand what data to expect, though more detail on the return structure would make it fully complete.
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?
Although the schema documents all parameters with descriptions (100% coverage), the description adds crucial semantic context beyond them: stock_code presence switches the entire result mode, top means different things depending on view (number of stocks vs number of brokers), direction has different defaults/effects in market-wide vs broker_rank modes, and days only applies to market-wide mode. This adds meaning that the schema alone does not convey.
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 precisely states the tool's purpose: querying securities firm window trading trends ('증권사 창구별 매매 동향을 조회합니다'), and immediately differentiates it from investor-trend tools by emphasizing '창구 기준' (broker-based). It also distinguishes between the two modes (with/without stock_code) and mentions specific view types (top5, broker_rank, dropout), making it clear what the tool does and how it differs from 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?
Explicit guidance is provided: use view=top5 for daily top 5, broker_rank for cumulative ranking across all 50 brokers, dropout for brokers that fell off the top. It also explains when to omit stock_code for market-wide foreign broker rankings, and even names alternatives (get_investor_trend, get_foreign_intraday) for foreign net buying by investor type, plus the key distinction that this tool is broker-based. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_credit_trend신용융자·대주 잔고 추이 조회A
특정 종목의 신용융자(빚내서 산 물량) 또는 대주(빌려서 판 물량) 신규·상환·잔고 추이를 조회합니다 (키움 ka10013). 신용잔고가 쌓이면 하락 시 반대매매 압력이, 대주 잔고가 쌓이면 하락 베팅이 늘었다는 신호입니다. 기관·외국인의 대차거래 잔고는 get_stock_lending, 공매도 체결량 추이는 get_short_selling을 쓰세요 — 개인 신용거래를 보는 것은 이 tool뿐입니다.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 표시할 행 수 (기본 15, 최대 60; 최신순) | |
| base_date | No | 조회 기준일 yyyyMMdd (기본: 오늘). 이 날짜부터 과거로 거슬러 조회합니다 | |
| stock_code | Yes | 조회할 6자리 종목코드 | |
| credit_type | No | loan=신용융자(기본, 빚내서 매수) / short=대주(빌려서 매도) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It clearly identifies the operation as a read-only inquiry ('조회합니다') and provides domain context about the data's significance. However, it does not disclose potential response structure, pagination, or any side effects. The interpretation guidance adds value beyond a basic read-only declaration, but the lack of explicit safety/behavioral details keeps it from a 5.
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 compact, using three sentences to cover purpose, interpretation, and alternatives. Every sentence adds value: the first states the core function, the second provides market interpretation, and the third distinguishes it from sibling tools. No fluff or repetition.
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?
Given 4 parameters with full schema coverage and no output schema, the description sufficiently explains what the tool does and when to use it. It also includes interpretation guidance that aids the agent in reasoning about results. However, it does not mention output format or pagination (though count parameter mentions 'latest first'), but this is not critical for a data-retrieval tool. The absence of annotations is compensated by the description's clarity.
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%, so the baseline is 3. The description does not add much beyond the schema for parameters; it mentions credit_type (loan/short) by defining the terms, but the schema already describes each parameter clearly. The interpretation context indirectly helps understand what parameters mean, but no new parameter-specific details are added.
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 clearly states the tool's function: retrieving new, repayment, and balance trends for credit loans (borrowed money to buy) or short borrowing (borrowed to sell) for a specific stock. It uses a specific verb (조회합니다/retrieves) and distinct resource (신용융자·대주 잔고 추이). It also differentiates from sibling tools by explicitly naming get_stock_lending and get_short_selling as alternatives for other 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 description provides clear usage guidance: it states that this tool is for individual credit transactions, while get_stock_lending covers institutional/foreign securities lending and get_short_selling covers short selling volume. It also explains interpretation context (credit balance signals forced-selling pressure, short balance signals bearish bets), helping the agent decide when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_daily_trading일별 거래·수급 상세 조회A
종목의 일자별 거래를 한 번의 호출로 조회합니다 (키움 ka10086/ka10015). view=flow(기본)는 종가·등락률·거래량·거래대금과 함께 개인/기관/외국인 순매수, 프로그램, 신용비율을 한 행에 묶어 줍니다 — '이 종목을 최근 누가 사고팔았나'를 볼 때 첫 번째로 쓰는 tool입니다. view=session은 같은 일자별로 장전/장중/장후 거래 분포를 보여줍니다. 가격 캔들만 필요하면 get_stock_chart, 투자자 주체를 증권·투신·연기금까지 세분해 보려면 get_investor_trend, 외국인 보유비중 추이는 get_foreign_holding을 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | view=flow의 순매수 단위 (기본값: quantity=주). 외국인 열은 항상 주 | |
| view | No | flow 가격+투자자 수급(기본) / session 장전·장중·장후 거래 분포 | |
| count | No | 표시할 거래일 수 (기본값 20, 최대 60) | |
| base_date | No | 조회 기준일 — 이 날짜부터 과거로 조회 (기본값: 오늘) | |
| stock_code | Yes | 6자리 종목코드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the default view (flow), what fields are included (closing price, change rate, volume, trading amount, net buys, program, credit ratio), and that session view shows pre/intra/after-hours distribution. It also references underlying API codes. It doesn't discuss rate limits or output format but provides substantial behavioral context beyond the schema.
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 dense but efficient; every sentence serves a purpose: stating the action, explaining the default view, framing when to use it, describing the alternate view, and listing alternatives. It's front-loaded with the core functionality and has zero fluff.
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 description covers purpose, usage, both views, and alternatives thoroughly. It doesn't describe the output structure, but there's no output schema given, so this is a minor gap. It does mention '한 행에 묶어' (bundled in one row) giving some hint. For a complex tool with two distinct modes, this is reasonably complete.
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 already covers 100% of parameters with descriptions, but the description enriches meaning by explaining the semantic difference between view=flow and view=session, clarifying the unit default (quantity), and giving practical context for count (default 20, max 60). This adds value beyond the schema's field descriptions.
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 clearly states the tool retrieves daily trading data for a stock in one call (종목의 일자별 거래를 한 번의 호출로 조회합니다). It names the two views (flow and session) and their content. It explicitly differentiates from sibling tools by pointing to get_stock_chart, get_investor_trend, and get_foreign_holding for other needs.
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 explicit when-to-use guidance: '이 종목을 최근 누가 사고팔았나'를 볼 때 첫 번째로 쓰는 tool입니다 (first tool to use when checking who bought/sold). It also lists three alternative tools with their specific use cases, making the decision boundary clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_equal_net_trade기관·외국인 동시 순매매 조회A
기관과 외국인이 같은 방향으로 동시에 순매매한 종목 순위를 조회합니다 (키움 ka10062). 두 주체의 방향이 겹치는 종목과 각각의 추정 평균단가를 함께 주는 건 이 tool뿐입니다 — 현재가와 평단을 비교하면 누가 물려 있고 누가 이익 구간인지 볼 수 있습니다. direction: net_buy(동시 순매수, 기본)/net_sell(동시 순매도). 주체별로 따로 보려면 get_net_buy_rank(마감 후 12주체)나 get_investor_trend(종목별)를 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 종목 수 (기본값 20, 최대 50) | |
| sort | No | 정렬 기준 — amount(순매매 금액, 기본)/quantity(순매매 수량) | |
| market | No | 시장 구분 (기본값: all) | |
| direction | No | net_buy(동시 순매수, 기본)/net_sell(동시 순매도) | |
| start_date | No | 누적 시작일 yyyyMMdd (기본값: 7일 전) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the unique feature of estimated average cost per entity and explains a use case (comparing current price vs average to spot trapped/profitable investors). It also mentions the underlying API code (키움 ka10062), adding context. However, it does not discuss output details or data freshness, keeping it from a 5.
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 three sentences, each earning its place: first states core function, second differentiates and adds interpretive value, third explains a parameter and points to alternatives. Front-loaded with key information, no redundancy or fluff.
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 tool has 5 parameters, 100% schema coverage, but no output schema. The description explains the purpose, unique average-price feature, and usage direction, but does not clarify the return structure (e.g., columns, order, pagination) or data update timing. Given no output schema, the description should provide more on what the response contains, leaving a clear 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?
The schema already documents all 5 parameters with descriptions and defaults (100% coverage). The description adds marginal value by explaining the direction parameter in the context of the tool's core concept, but it largely repeats what the schema states. 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?
The description begins with a specific verb '조회' and resource: ranking of stocks where institutions and foreigners net-trade in the same direction. It also explicitly distinguishes itself as the only tool providing estimated average prices per entity, setting it apart from sibling tools like get_net_buy_rank and get_investor_trend.
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 provides clear when-to-use guidance: use this when you need simultaneous same-direction trades and average prices. It explicitly names alternatives for different needs: '주체별로 따로 보려면 get_net_buy_rank(마감 후 12주체)나 get_investor_trend(종목별)를 쓰세요' and highlights the unique value proposition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_etf_infoETF 정보 조회A
ETF의 추적지수, 과세유형, 현재 시세, NAV·괴리율을 조회합니다 (키움 ka40002+ka10001+ka40009). 종목코드를 모르면 search_stock으로 먼저 찾으세요.
| Name | Required | Description | Default |
|---|---|---|---|
| stock_code | Yes | 6자리 ETF 종목코드 (예: 069500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It mentions internal API codes (ka40002, etc.) but does not explicitly state read-only behavior, authentication needs, or rate limits. Adequate but lacks explicit safety characteristics.
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 sentences: first states the action and APIs used, second gives a usage tip. Front-loaded with essential information, no redundant words.
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, but the description lists the returned fields (tracking index, tax type, price, NAV, discrepancy). Could be improved by specifying output format or structure, but overall sufficient for a simple one-parameter 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 100% with pattern and example. The description adds the practical tip about using search_stock but does not add new semantic meaning beyond the schema. 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?
The description clearly states the tool queries ETF information including tracking index, tax type, current price, NAV, and discrepancy. It distinguishes itself from siblings like get_etf_returns by specifying multiple data sources and mentions using search_stock for unknown codes.
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?
Explicitly advises using search_stock first if the stock code is unknown, providing a clear alternative. Does not differentiate from get_etf_returns or other ETF-related tools, but the context of 'ETF info' implies its scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_etf_rankETF 전체시세 스크리너 (시장 전체)A
상장 ETF 전 종목(약 1,150개)을 한 번에 훑어 괴리율·등락률·거래량·추적오차로 정렬합니다 (키움 ka40004). 'NAV보다 비싸게 거래되는 ETF', '거래량 많은 ETF', '추적오차가 큰 ETF'처럼 종목을 아직 고르지 않은 상태에서 찾을 때 쓰세요. 종목을 이미 정했다면 get_etf_info(추적지수·과세유형·NAV)나 get_etf_returns(기간 수익률)가 낫고, ETF가 아닌 일반 주식 스크리닝은 get_valuation_rank·get_ranking을 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 종목 수 (기본값 20, 최대 50) | |
| sort | No | 정렬 기준 (기본값 volume). premium=괴리율 높은 순(고평가), discount=괴리율 낮은 순(저평가), gainers/losers=등락률, tracking_error=추적오차율 큰 순 | |
| manager | No | 운용사 브랜드 (종목명 앞 접두어 부분일치, 예: "KODEX", "TIGER", "RISE", "ACE") | |
| tax_type | No | 과세유형 필터 (기본값 all). tax_free=비과세(국내주식형), holding_period=보유기간과세, reit=배당소득세(부동산), overseas=배당소득세(해외). 좁힐수록 조회도 빨라집니다 | |
| index_name | No | 추적지수명 부분일치 (예: "KOSPI200", "S&P 500"). 지수명이 채워진 종목은 전체의 약 1/4입니다 | |
| min_volume | No | 최소 거래량(주) (기본값 0). 거래정지 종목의 극단적인 괴리율을 걸러낼 때 씁니다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It discloses the data source (키움 ka40004), the ~1,150 universe size, performance implication ('좁힐수록 조회도 빨라집니다' via tax_type filter), and a caveat that index_name matches only ~1/4 of tickers. Lacks explicit statement about safety/read-only nature or pagination, but adds meaningful behavioral context given zero 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?
Description is two dense sentences that pack purpose, scope, examples, and alternatives. Slightly verbose with the Korean phrasing but every clause earns its place. Could be tightened but is efficiently front-loaded with the core purpose.
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?
Well-completed for a screening tool with 6 params at 100% schema coverage and no output schema. Variables like sort enums and filters are well-explained in schema; description resolves the key decision of when to use it vs siblings. Missing return-format clarification but acceptable given the task type.
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 100% with detailed param descriptions. The description adds practical context beyond schema: tax_type performance hint, min_volume filtering rationale (거래정지 종목 극단적 괴리율 제거), manager prefix-partial-match semantics, and index_name 1/4 coverage caveat. This enriches the enum and integer params with domain knowledge.
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?
Specific verb '스크리너' + resource '상장 ETF 전 종목(약 1,150개)' + sort dimensions (괴리율·등락률·거래량·추적오차). Clearly distinguishes from ETFs-only tools (get_etf_info, get_etf_returns) and general stock screeners (get_valuation_rank, get_ranking) by stating it's for when '종목을 아직 고르지 않은 상태에서'.
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?
Explicitly states when to use ('종목을 아직 고르지 않은 상태에서 찾을 때'), and names concrete alternatives with when NOT to use (get_etf_info, get_etf_returns, get_valuation_rank, get_ranking). Even gives use case examples like 'NAV보다 비싸게 거래되는 ETF', '거래량 많은 ETF'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_etf_returnsETF 수익률·NAV 추이 조회A
ETF의 성과를 세 각도로 조회합니다 (키움 ka40001/ka40003/ka40008). view=period(기본)는 기간별(1주/1개월/6개월/1년) 수익률을 비교지수 수익률과 나란히 보여줍니다 — 이 비교지수는 benchmark_index_code로 직접 고르는 국내 지수이고 ETF의 추적지수와 자동으로 맞춰지지 않습니다(지정하지 않으면 201 KOSPI200이 그대로 들어갑니다). 코드는 get_market_index의 '코드' 값(001 코스피 종합, 101 코스닥 종합 등)이라 해외지수(나스닥100·S&P500 등)를 추종하는 ETF는 비교 지수를 맞출 수 없습니다 — 그때는 ETF 수익률만 읽고 지수 비교는 제공되지 않는다고 답하세요(추종 성과는 view=daily의 추적오차율). view=daily는 일별 NAV와 괴리율·추적오차 추이입니다 — 'ETF가 제값에 거래되고 있나', '지수를 잘 따라가고 있나'를 물을 때 씁니다(get_etf_info는 최신 1점만 보여줍니다). view=investor는 일자별 외국인·기관 순매수량입니다(period는 기간 합계라 해상도가 다릅니다). 종목코드를 모르면 search_stock으로 먼저 찾으세요.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | view=daily/investor의 표시 일수 (기본값 20, 최대 30) | |
| view | No | 조회 종류 (기본값: period) | |
| stock_code | Yes | 6자리 ETF 종목코드 (예: 069500) | |
| benchmark_index_code | No | 비교할 지수 코드 3자리 (기본값 201 KOSPI200 — get_market_index의 '코드' 값). view=period 전용이며 ETF의 추적지수와 자동으로 맞춰지지 않습니다 — 국내 지수 코드만 받습니다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses the critical limitation that benchmark_index_code only accepts domestic indices and does not auto-match the ETF's tracked index, that overseas ETFs therefore lack index comparison, and that investor data has different resolution (period sums vs daily). Also notes the default KOSPI200 behavior. This is exceptional transparency for a tool with no structured 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?
The description is a single dense paragraph, but every clause carries information. It is front-loaded with the core purpose and then branches into each view. Slightly long but justified given the tool's complexity (three modes, cross-tool dependencies, edge cases). Could be broken into bullets, but the flow is logical 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?
For a tool with three view modes, a cross-referenced index code, and multiple parameter dependencies, the description covers every practical need: defaults, alternatives, limitations, and fallback instructions for overseas ETFs. Combined with 100% schema coverage and no output schema (so no return format needed), an agent has everything required 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?
Even though schema_description_coverage is 100%, the description adds substantial meaning: it maps each view to concrete use cases, explains benchmark_index_code's origin from get_market_index and its non-automatic behavior, and clarifies the tracking-error context in daily view. This goes far beyond the schema's field definitions, which are already detailed but less operational.
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 ('조회'), a clear resource (ETF 성과), and enumerates three distinct angles (period, daily, investor) with concrete data types. It also explicitly differentiates from get_etf_info by noting that tool only shows the latest point, so an agent can distinguish sibling purposes.
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?
Provides explicit when-to-use guidance: period for benchmark-relative returns, daily for NAV/tracking-error questions, investor for flow data. Names the alternative get_etf_info and the prerequisite search_stock for unknown codes. Leaves nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_execution_strength체결강도 추이 조회A
종목의 체결강도(매수 체결량 ÷ 매도 체결량 × 100) 추이를 조회합니다 (키움 ka10046/ka10047). 100이 균형이며, 그보다 높으면 매수세가 우세합니다. view=daily(기본)는 최근 60거래일, view=intraday는 최근 60분(1분 간격) 흐름을 보여주고 5/20/60 이동평균이 함께 옵니다. '이 종목에 매수세가 붙고 있나'를 볼 때 씁니다. 정규장 호가는 get_orderbook, 투자자 주체별 수급은 get_investor_trend를 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | daily 일별 최근 60거래일(기본) / intraday 시간별 최근 60분 | |
| count | No | 표시할 행 수 (기본값 30, 최대 60) | |
| stock_code | Yes | 6자리 종목코드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains the metric, return content (trend data with moving averages for intraday), and data source. However, it does not explicitly state read-only nature or limitations like data freshness, but overall behavior is well-disclosed.
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?
Concise 5-6 sentences with no fluff. Front-loaded purpose, then metric, then view options, then usage context and alternatives. Every sentence contributes value.
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?
Given 3 params with 100% schema coverage and no output schema, description covers metric, views, and alternatives adequately. Could mention return format briefly, but not essential for basic usage.
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 100%, baseline 3. Description adds value by explaining view options' specific behavior (daily: 60 trading days, intraday: 60 minutes with moving averages) and defaults. Enhances understanding beyond schema descriptions.
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 clearly states the tool retrieves execution strength trend (buy/sell volume ratio) for a stock, explains the metric and interpretation, and distinguishes from sibling tools (get_orderbook, get_investor_trend) with specific alternatives.
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 explicitly states when to use (checking if buying pressure is increasing) and when not to use (orderbook or investor trends), including alternative tools. Also explains the two view options (daily vs intraday) with their specific time ranges and features.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_expected_execution예상체결 순위 조회 (동시호가)A
예상체결가 기준 순위를 조회합니다 (키움 ka10029). 예상체결가는 '지금 체결된다면 이 값'이라 동시호가(개장 전 08:3009:00, 마감 전 15:2015:30)에 오늘의 시초가·종가 방향을 미리 볼 때 특히 유용합니다. 키움이 예상체결을 산출하지 않는 시간대에는 빈 결과가 돌아옵니다(오류가 아닙니다). 실제로 체결된 결과의 등락률·거래량 순위는 get_ranking, 신고가·상한가·급등 같은 특이 종목은 get_market_movers, 시간외 단일가는 get_after_hours를 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 종목 수 (기본값 15, 최대 50) | |
| sort | No | 정렬 기준 — rise 예상 상승률(기본) / fall 예상 하락률 / volume 예상 체결량 | |
| market | No | 시장 구분 (기본값: all) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It goes beyond a simple read-only expectation by detailing that empty results are a normal state during non-calculation times and not an error. This is valuable contextual information that helps the agent correctly interpret responses.
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 uses three sentences, each earning its place: the first states the core function, the second explains the concept and optimal usage timing, and the third covers empty-result behavior and alternative tools. It is compact and well-structured without 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?
For a read-only ranking tool without an output schema, the description sufficiently covers necessary context. It explains the special timing contexts, empty-result behavior, and points to sibling tools for related but distinct queries. Given the tool's simplicity and the rich schema, no further explanation is needed.
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?
All three parameters (top, sort, market) have descriptions within the input schema, giving 100% schema description coverage. The tool description itself adds no parameter-specific semantics beyond what the schema already provides, so the baseline score 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 clearly states the tool's function: '예상체결가 기준 순위를 조회합니다' (queries ranking based on expected execution price). It explicitly names the underlying source (키움 ka10029) and distinguishes itself from sibling tools by mentioning specific alternatives like get_ranking and get_after_hours.
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 explains when the tool is useful (during simultaneous auction phases before open and close), warns when results will be empty (outside Kiwoom's calculated times), and names three alternative tools for different use cases (get_ranking, get_market_movers, get_after_hours). This provides clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_foreign_holding외국인 보유 추이 조회A
외국인 보유(한도) 동향을 조회합니다 (키움 ka10008/ka10036/ka10034/ka10035). stock_code를 주면 그 종목의 일자별 추이 — 종가·거래량·외국인 순변동수량·보유주식수·보유비중·한도소진률. stock_code 없이 rank를 주면 시장 전체 순위입니다: limit_surge(한도소진율이 가장 많이 오른 종목)/period_net(기간 누적 순매매 상위)/streak(3일 연속 같은 방향으로 순매매한 종목 — 누적 크기가 아니라 방향의 지속성을 볼 때). 이 tool은 전부 외국인 보유·한도 계열이라, 투자자 매매 기준인 get_net_buy_rank·get_investor_trend·get_foreign_intraday와는 데이터 소스가 다릅니다(같은 종목에서 부호가 반대일 수 있음).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | rank 모드에서 표시할 종목 수 (기본 20, 최대 100) | |
| days | No | 기준 기간(거래일) — limit_surge는 1/5/10/20 (기본 5), period_net은 1/3/5/10/20/60/120 (기본 20). streak는 3일 고정이라 이 값을 받지 않습니다 | |
| rank | No | 시장 전체 순위 종류 — limit_surge(한도소진율 증가 상위)/period_net(기간 누적 순매매 상위)/streak(3일 연속 같은 방향 순매매). stock_code를 생략할 때 씁니다 | |
| limit | No | 종목 추이 모드에서 표시할 일수 (기본 15, 최대 50; 최신순) | |
| market | No | 시장 구분 — rank 모드에서만 사용 (기본값 all) | |
| direction | No | period_net·streak 방향 — net_sell(순매도, 기본)/net_buy(순매수) | |
| stock_code | No | 조회할 6자리 종목코드 — 주면 종목 추이 모드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses both operational modes, the output fields (close, volume, foreign net change, owned shares, ratio, limit exhaustion), and the important caveat that the data source differs from investor-trade tools and signs may be reversed. This goes well beyond a basic statement of function.
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 concise despite covering two modes and ranking subtypes. It front-loads the primary purpose, uses bold for key distinctions, and each sentence adds essential information without fluff. It is appropriately sized for the tool's complexity.
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?
Given the tool's complexity (7 optional parameters, two modes, no output schema or annotations), the description covers the main use cases, mode selection, and data source caveats. It doesn't specify the exact ranking output format (e.g., whether it includes stock names/codes), but the description is sufficiently complete for an agent to select and invoke the tool 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 coverage is 100% and parameter descriptions are already detailed, but the description adds critical semantic context: how stock_code and rank interact, which day values apply to which rank mode (limit_surge: 1/5/10/20; period_net: 1/3/5/10/20/60/120; streak: fixed 3 days), and that market/direction apply only in rank mode. This meaningfully exceeds what the schema alone provides.
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?
Clearly states the tool queries foreign ownership/limit trends with two distinct modes: per-stock daily trend and market-wide rankings. The description distinguishes it from sibling tools (get_net_buy_rank, get_investor_trend, get_foreign_intraday) by noting the different data source, so it's specific and well-differentiated.
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?
Explicitly explains when to use stock_code (per-stock trend) vs rank (market-wide rankings) and details each rank type (limit_surge, period_net, streak) with their specific criteria. It also states the tool should be used for foreign ownership/limit data and not as a substitute for investor-trade-based tools, providing explicit exclusions and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_foreign_intraday장중 주체별 순매수 상위 (실시간)A
정규장 중 어떤 주체가 지금 사고 있는 종목을 전 종목에서 뽑습니다 (키움 ka10063/ka10065). '오늘 외국인이 뭘 담고 있나', '장중 연기금 순매수 상위'처럼 실시간 수급을 볼 때 쓰세요. investor로 외국인(기본)·기관계·보험·투신·연기금등·기타법인을 고릅니다 — 개인·금융투자는 거래소가 장중에 공개하지 않아 조회할 수 없습니다. 값은 1,000주 단위 잠정치라 마감 후 확정치와 다릅니다(부호가 반대일 수도 있음) — 마감된 거래일 기준은 get_net_buy_rank, 종목을 이미 정했다면 get_investor_trend를 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 종목 수 (기본값 20, 최대 50) | |
| unit | No | 정렬·표시 단위 (기본값 amount=백만원) — **investor=foreign에서만 유효**, 나머지 주체는 수량만 옵니다 | |
| market | No | 시장 (기본값 all=전체). foreign은 키움이 코드 순으로 주므로 서버가 정렬합니다 | |
| investor | No | 투자자 주체 — foreign(외국인, 기본)/institution(기관계)/insurance(보험)/trust(투신)/pension(연기금등)/other_corp(기타법인). foreign만 금액·현재가까지 나옵니다 | |
| direction | No | buy=순매수 상위(기본), sell=순매도 상위 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the transparency burden. It discloses that values are provisional in 1,000-share units, may differ from final values after market close, and can even have reversed signs. It also explains why certain investor types are not queryable, adding critical behavioral context.
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 front-loaded with the core purpose, followed by usage guidance, caveats, and alternatives. Every segment earns its place, using bold and em-dashes to emphasize key points without redundancy. Despite its length, it remains efficient for the complexity involved.
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?
Given the tool's complexity (5 parameters, 4 enums, no output schema), the description is complete enough for correct invocation. It covers the real-time scope, investor limitations, provisional value behavior, and explicit tool alternatives, ensuring an agent can decide when to use it and what to expect.
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?
Although schema coverage is 100%, the description adds significant meaning beyond the schema: it clarifies that the unit parameter is only valid for the foreign investor, that the market parameter results in server-side sorting, and that investors like individuals and financial investment are not supported. These details are not present in the schema property descriptions.
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 clearly states the tool extracts stocks that a specific investor is currently buying during regular market hours ('어떤 주체가 지금 사고 있는 종목') and identifies the resource ('전 종목에서'). It also distinguishes from siblings by explicitly mentioning alternatives (get_net_buy_rank for settled days, get_investor_trend for specific 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 provides explicit usage guidance: '실시간 수급을 볼 때 쓰세요' (use when viewing real-time supply/demand), and clearly contrasts with post-market and single-stock alternatives. It also states the exchange limitation: individual and financial investment investor types are unavailable during market hours.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gold_priceKRX 금현물 시세 조회A
KRX 금시장(금현물) 시세를 조회합니다 (키움 ka50010/ka50012). instrument: 1kg(금 99.99_1Kg, 기본)/100g(미니금 99.99_100g) — 상장 종목은 이 둘뿐입니다. mode: daily(일별추이 + 기관·개인 순매수, 기본)/ticks(당일 틱 체결 + 체결강도·최우선호가). 금 실물 가격(g당 원)을 볼 때 쓰며, 금 ETF·ETN은 종목이므로 get_stock_price를 쓰세요. 종목코드는 입력하지 않습니다 — 금현물에는 종목 마스터가 없어 search_stock으로 찾을 수 없습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | daily=일별추이(기본), ticks=당일 틱 체결 | |
| rows | No | 표시할 행 수 (기본값 20, 최대 30) | |
| base_date | No | 일별추이 기준일 yyyyMMdd — daily 모드에서만 사용 (기본값: 오늘) | |
| instrument | No | 금현물 종목 (기본값 1kg) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses mode-specific content (daily includes institutional/individual net buying, ticks includes execution strength and best bid-ask), the only two listed instruments, default values, and the lack of a stock master. However, it does not describe the return format or mention any error conditions, which keeps it from being a 5.
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 three sentences, front-loaded with the purpose, followed by parameter explanations and a usage caveat. Every sentence earns its place with no fluff or 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?
Given no annotations and no output schema, the description covers the core behavior, parameter semantics, and usage boundaries well. It explains what daily and ticks modes return at a high level. The only minor gaps are the lack of explicit return shape and whether rows applies to both modes, but overall it is sufficiently complete for the tool's complexity.
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 100%, so the baseline is 3. The description adds meaningful context by explaining the two instruments (1kg vs 100g mini), detailing what daily and ticks modes include, and explicitly clarifying that base_date is daily-only and that no stock code is needed. This goes beyond the schema's bare enum values.
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 clearly states the tool queries KRX gold spot prices with a specific verb and resource. It distinguishes from siblings by explicitly directing gold ETFs/ETNs to get_stock_price and noting that search_stock cannot find gold spot instruments due to the absence of a stock master.
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 provides explicit when-to-use guidance: use for physical gold price (KRW per gram), and for gold ETFs/ETNs use get_stock_price instead. It also warns that stock codes cannot be entered and search_stock is not applicable, preventing common misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_institution_trend기관·외국인 추정평균단가 조회A
특정 종목을 기관·외국인이 대략 얼마에 담았는지(추정평균단가)와 일별·기간누적 순매수를 조회합니다 (키움 ka10045). 현재가와 추정단가를 비교하면 두 주체의 평가손익 구간을 가늠할 수 있습니다. 투자자 주체를 더 잘게(개인·금융투자·보험·투신·연기금 등) 보려면 get_investor_trend를, 외국인 보유주식수·한도소진률 추이는 get_foreign_holding을 쓰세요 — 단가를 주는 것은 이 tool뿐입니다.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 표시할 행 수 (기본 15, 최대 60; 최신순) | |
| to_date | No | 조회 종료일 yyyyMMdd (기본: 오늘) | |
| from_date | No | 조회 시작일 yyyyMMdd (기본: 30일 전). 누적 순매수의 기산점이 됩니다 | |
| stock_code | Yes | 조회할 6자리 종목코드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the estimated nature of the price (추정평균단가), the distinction between daily and cumulative net buying, and how to interpret the results. However, it doesn't mention any rate limits, data latency, or output format details, so it falls short of a 5.
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 compact three-sentence structure that front-loads the purpose and uses each sentence for differentiation or interpretation guidance, with 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?
Despite no output schema, the description adequately conveys what data is returned (estimated average price and daily/cumulative net buying), and how to use it. It also provides alternatives and the API code, but could specify response structure more explicitly for full completeness.
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%, so baseline is 3. The description doesn't add meaning beyond the schema for parameters; it repeats the concept of cumulative net buying but doesn't specify parameter syntax or constraints beyond what the schema already lays out.
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 clearly states it retrieves estimated average buy prices for institutions/foreigners and daily/period cumulative net buying for a specific stock. It explicitly differentiates from sibling tools by noting get_investor_trend for finer investor breakdown and get_foreign_holding for foreign share holdings, and asserts this tool is the only one providing unit price.
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 provides explicit when-to-use and when-not-to-use guidance: use get_investor_trend for finer investor categories, get_foreign_holding for foreign ownership shares/limit ratio, and this tool when average unit price is needed. Also gives a practical interpretation context (comparing current price vs estimated price to assess profit/loss).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_investor_rank외국인·기관 순매매 상위 / 연속매매 현황A
외국인과 기관이 많이 사고판 종목을 조회합니다 (키움 ka90009/ka10131). view: daily(일자별 순매수·순매도 상위, 기본) / streak(N일 연속 순매수 상위). "오늘 외국인이 뭘 샀나", "외국인이 며칠째 사는 종목" 질문에 사용하세요. daily는 market all/kospi/kosdaq, streak는 kospi/kosdaq만 지원합니다. 여기서 말하는 순매수·연속은 매매 기준입니다 — 외국인 보유주식수·한도소진률 기준의 연속 순매매는 get_foreign_holding(rank=streak)이고 데이터 소스가 달라 같은 종목에서 부호가 반대일 수 있습니다. 연기금·투신처럼 12주체를 고르려면 get_net_buy_rank를 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | view=daily의 조회 일자 (기본값: 최근 거래일) | |
| days | No | view=streak의 집계 기간(일) (기본값 5) | |
| unit | No | 금액/수량 기준 (기본값: amount) | |
| view | No | daily=일자별 상위 (기본), streak=연속 순매수 | |
| limit | No | 표시할 종목 수 (기본값 10, 최대 30) | |
| market | No | 시장 구분 (기본값: daily=all, streak=kospi) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It explains that the data is based on trading (매매 기준) and notes potential sign differences from get_foreign_holding, but it does not describe the output format or any side effects. Still, it effectively communicates the data semantics and default behaviors.
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 dense yet well-structured, using semicolons to separate ideas. Each sentence adds essential information without redundancy, making it efficient and easy to parse.
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?
Given the lack of an output schema, the description does not explicitly state what the return data looks like, but it covers key contextual aspects like view-specific market support and differentiation from sibling tools. It is sufficiently complete for practical usage, though a mention of the output structure would improve 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 coverage is 100%, so baseline is 3. The description adds value by specifying which market values are valid for daily vs. streak views and clarifying that days applies only to streak. This goes beyond the schema's basic parameter descriptions.
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 clearly states the tool's function: querying stocks heavily bought/sold by foreigners and institutions, with explicit daily and streak views. It also distinguishes itself from related tools like get_foreign_holding and get_net_buy_rank, making its purpose unambiguous.
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 provides explicit guidance on when to use this tool versus alternatives, such as using get_net_buy_rank for 12-entity selection and get_foreign_holding for holding-based criteria. It also clarifies the valid market options for each view, enabling correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_investor_trend투자자별 매매동향 조회A
종목의 개인/외국인/기관 순매수 동향을 조회합니다 (키움 ka10059+ka10061). 기간 합계와 최근 거래일별 내역을 함께 보여줍니다. unit: amount(금액, 백만원, 기본)/quantity(수량, 주). 같은 일자에 종가·거래량·프로그램·신용비율까지 한 행으로 묶어 보려면 get_daily_trading(view=flow), 기관·외국인이 담은 추정평균단가는 get_institution_trend, 주체를 정해 종목을 찾을 때는 get_net_buy_rank를 쓰세요. 종목코드를 모르면 search_stock으로 먼저 찾으세요.
| Name | Required | Description | Default |
|---|---|---|---|
| unit | No | 단위 (기본값: amount=백만원) | |
| to_date | No | 합계 기간 종료일 (기본값: 오늘) | |
| from_date | No | 합계 기간 시작일 (기본값: 30일 전) | |
| stock_code | Yes | 6자리 종목코드 (예: 005930) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns both period totals and recent daily records, and mentions the 'unit' parameter. However, it does not explicitly confirm read-only behavior, mention rate limits, or describe error handling or data freshness. While not contradictory, it lacks deeper behavioral context for a query tool beyond its basic function.
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 paragraph but densely packed with useful information: purpose, output content, unit explanation, alternative tools, and fallback for unknown code. Each sentence serves a distinct purpose, and there is no fluff. The structure is logical and front-loaded with the core purpose, making it easy to scan.
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?
Given the tool's complexity (4 parameters, no output schema, no annotations), the description is quite complete. It explains output (period totals and daily records), unit choices, and provides clear usage guidance. However, since there is no output schema, it could have elaborated on the exact fields returned (e.g., columns for each investor type), but it covers the essential functionality well.
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 schema already provides clear descriptions for all parameters (e.g., unit default, date formats). The description adds minimal extra meaning, such as clarifying that 'unit' values are amount (million won, default) and quantity. Since the schema is already comprehensive, the description is adequate but does not significantly enhance parameter understanding.
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 clearly states the tool's purpose: to query net buying trends by investor type (individual/foreign/institution) for a stock, and differentiates it from sibling tools by explicitly naming alternatives (get_daily_trading, get_institution_trend, get_net_buy_rank). The verb '조회' (query) and resource '종목' (stock) are specific, and it includes API codes for precision.
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 provides explicit guidance on when to use this tool versus alternatives, including specific cases: 'get_daily_trading(view=flow)' for daily trading details with close/volume/program/credit, 'get_institution_trend' for estimated average cost, and 'get_net_buy_rank' for finding stocks by market participant. It also directs users to 'search_stock' if the stock code is unknown. This is exemplary differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_index시장 지수 조회A
코스피/코스닥 종합지수와 업종별 지수를 조회합니다 (키움 ka20003). 첫 행이 시장 종합지수, 이후는 업종 지수입니다. 각 행의 '코드'는 get_sector_price / get_sector_stocks의 sector_code로 사용할 수 있습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | 시장 구분 (기본값: kospi) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses the source, output structure, and cross-references. While it doesn't mention auth or rate limits, for a read operation this is sufficient and adds value beyond a basic description.
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 sentences with zero waste. The first sentence states the purpose, the second adds structural detail and cross-reference. Information is front-loaded and every sentence earns its place.
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?
Given no output schema, the description provides essential context about the output format (first row composite, then sectors) and how to use the results. It is complete enough for a simple market index tool, though it omits pagination or limits which are likely unnecessary.
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 input schema has one parameter (market) with enum and description, achieving 100% coverage. The description does not add additional meaning beyond what the schema already provides, 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?
The description clearly states it retrieves KOSPI/KOSDAQ composite and sector indices, referencing the source code ka20003. It also explains the output structure (first row composite, subsequent sector indices) and how the code field links to other tools, which distinguishes it from siblings like get_sector_price.
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 provides context on when to use the tool (for market and sector indices) and hints at a workflow by noting that the code can be used with get_sector_price/get_sector_stocks. It does not explicitly state when not to use or compare with alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_movers시장 특이 종목 조회A
시장 특이 종목을 조회합니다 (키움 ka10016/ka10017/ka10019/ka10023/ka10024). signal: new_high(신고가)/new_low(신저가)/upper_limit(상한가)/lower_limit(하한가)/surge(급등)/plunge(급락)/volume_surge(거래량급증)/volume_renew(거래량갱신). market: all(전체, 기본)/kospi/kosdaq. 신고/신저는 days(5/10/20/60/250일, 기본 5일) 기준, 급등/급락과 거래량급증은 전일 대비입니다 (거래량급증은 급증량 순, 5천주 이상). volume_renew는 직전 cycle거래일(5/10/20/60/120, 기본 20) 중 최대 거래량을 오늘 갱신한 종목으로, 전일 하루만 보는 volume_surge보다 긴 호흡의 거래량 돌파를 찾을 때 씁니다.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 종목 수 (기본값 20, 최대 50) | |
| days | No | 신고/신저 기준 기간(일) — new_high/new_low에서만 사용 (기본값 5) | |
| cycle | No | 거래량갱신 비교 기간(거래일) — volume_renew에서만 사용 (기본값 20) | |
| market | No | 시장 구분 (기본값: all) | |
| signal | Yes | 특이 신호 종류 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure and does so well: it states that surge/plunge and volume_surge are based on '전일 대비' (previous-day comparison), that volume_surge is ordered by surge volume with a 5,000-share minimum, and that volume_renew means today's volume exceeds the max of the prior cycle. This significantly exceeds a minimal 'get movers' statement, though it omits output structure and any rate-limit or auth details.
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 dense but each clause carries useful information, and the main purpose is front-loaded. It uses semicolon-separated enumerations and parenthetical annotations to pack signal definitions, market options, defaults, and comparative rules into a compact space. Slightly long, but every sentence earns its place given the tool's complexity.
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?
Given the tool has 5 parameters, no output schema, and no annotations, the description is remarkably complete: it defines all eight signals, all market values, all relevant time windows, defaults, exceptions, and ordering/threshold behavior. The only omission is return-format details, but the absence of an output schema lowers the burden in that area, and the operational semantics are fully covered.
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?
Although the schema already covers 100% of parameters with enums and Korean descriptions, the description adds substantial semantics beyond it: it clarifies that days is only used for new_high/new_low, cycle only for volume_renew, and it explains the comparative logic and thresholds for volume_surge. This is a strong enrichment over the schema, not mere repetition.
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 opens with a specific verb+resource statement ('시장 특이 종목을 조회합니다') and enumerates all eight signal types (new_high, new_low, upper_limit, etc.) with Korean labels. This clearly defines the tool's scope and distinguishes it from broader sibling tools like get_ranking or get_vi_stocks by specifying exact signal semantics.
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 explicit when-to-use guidance for parameter combinations: days only applies to new_high/new_low, cycle only applies to volume_renew, and it explicitly contrasts volume_renew ('longer-term volume breakout') with volume_surge ('previous day only'). However, it does not explicitly compare this tool with sibling market-scanning tools such as get_ranking or get_vi_stocks, so cross-tool guidance is implied rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_net_buy_rank투자자 주체별 순매수 상위 (시장 전체)A
시장 전 종목을 훑어 투자자 주체별 순매수 상위를 뽑습니다 (키움 ka10066). '연기금이 어제 뭘 담았나', '투신 순매도 상위', '사모펀드가 산 코스닥 종목'처럼 주체를 정하고 종목을 찾을 때 쓰세요. 개인·외국인·기관계 외에 금융투자·보험·투신·은행· 연기금등·사모펀드·기타금융·국가·기타법인까지 12주체를 고를 수 있습니다. 종목을 이미 정했다면 get_investor_trend(종목 1개의 주체별 시계열)가 낫고, 외국인·기관만 빠르게 보려면 get_investor_rank(상위 25종목)가 가볍습니다. market(kospi 또는 kosdaq)은 필수이고 전체 시장을 한 번에 보는 옵션은 없습니다. 수치는 직전 완료 거래일 기준이며, 장중 실시간은 get_foreign_intraday(외국인 한정)를 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 종목 수 (기본값 20, 최대 50) | |
| side | No | net=순매수(기본), buy=매수 총량, sell=매도 총량 | |
| unit | No | 단위 (기본값: amount=백만원) | |
| market | Yes | 시장 (필수). 키움이 종목코드 순으로만 주기 때문에 전 종목을 받아 서버가 정렬합니다 — 코스피 약 1,320종목, 코스닥 약 1,820종목이라 조회에 15~20초 걸립니다 | |
| subject | Yes | 투자자 주체. individual=개인, foreign=외국인, institution=기관계, financial_inv=금융투자, insurance=보험, trust=투신, bank=은행, pension=연기금등, private_fund=사모펀드, etc_finance=기타금융, nation=국가, etc_corp=기타법인 | |
| direction | No | top=큰 순(기본), bottom=작은 순. side=net에서 bottom이 순매도 상위입니다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the burden. It mentions performance (15-20 seconds) and clarifies that market is required, plus explains side=net bottom as net sell. Does not discuss data freshness or potential errors, but adequate for a data retrieval 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?
Description is informative but slightly verbose due to multiple alternative tool references and repeated mentions. However, it remains organized and each sentence adds value; no 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?
No output schema is provided, yet the description does not explain the return structure (e.g., list of stocks with net buy amounts). It mentions '순매수 상위' but lacks explicit field details. Given the tool is a ranking query, users might need to infer the output format. Performance note is helpful, but return format clarification would improve completeness.
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?
Every parameter is described with enum values and Korean translations (e.g., subject: individual=개인, foreign=외국인). The market parameter includes additional context about query cost. Schema coverage is 100% and description adds meaningful context beyond the enum names.
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?
Clearly states it ranks net buy by investor type and market, distinguishing from siblings like get_investor_trend and get_investor_rank by specific use cases.
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?
Explicitly states when to use (searching stocks by investor type) and when not to use (already have a stock -> get_investor_trend; only foreign/institution -> get_investor_rank; real-time foreign -> get_foreign_intraday). Provides clear alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderbook호가 조회A
종목의 10단계 매도/매수 호가와 잔량을 KRX+넥스트레이드(NXT) 통합 기준으로 조회합니다 (키움 ka10007). 지금 어느 가격에 대기 물량이 얼마나 쌓였는지, 매수·매도 어느 쪽이 두꺼운지 볼 때 씁니다. 호가는 체결이 아니라 대기 주문이므로, 실제 체결 쪽 힘은 get_execution_strength(체결강도)를 보세요 — 계좌의 체결 내역은 get_order_executions이고, 여러 종목의 현재가를 한 번에 볼 때가 get_stock_quotes입니다. 종목코드를 모르면 search_stock으로 먼저 찾으세요.
| Name | Required | Description | Default |
|---|---|---|---|
| stock_code | Yes | 6자리 종목코드 (예: 005930) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels: it clarifies that the order book represents pending orders, not executions, which prevents a common misinterpretation. It also specifies the 10-level depth, the KRX+NXT integrated scope, and the source message ID (ka10007), providing rich behavioral context beyond the schema.
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 three dense sentences with no filler. The core functionality is front-loaded, and every sentence earns its place: what it returns, when to use it, and which alternatives to consider. It is concise yet highly informative.
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 single-parameter tool, the description covers the returned content (10 levels, quantities), the integrated market scope, the intended use case, and differentiates from all relevant siblings. No output schema is needed because the description adequately explains what the agent should expect.
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 schema already provides 100% coverage with a pattern and example for stock_code, so baseline is 3. The description adds practical guidance by telling the agent to use search_stock to find the code first, thereby adding value beyond the schema.
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 names the exact resource: 10-level bid/ask prices and quantities on an integrated KRX+NXT basis. It also distinguishes itself from related tools like get_execution_strength, get_order_executions, and get_stock_quotes, making its purpose uniquely clear.
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 explicitly states when to use the tool (to see waiting volume at each price and whether bid/ask side is thicker) and explicitly directs to alternatives for execution strength, account executions, and multiple current prices. It also advises using search_stock if the code is unknown, giving complete usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderbook_rank호가잔량 순위 조회 (시장 전체)A
시장 전체에서 호가 잔량이 두껍거나 급증한 종목을 조회합니다 (키움 ka10020/ka10021/ka10022). view=balance(기본)는 총매수/매도 잔량과 순매수 잔량 상위, view=surge는 최근 N분간 잔량 수량이 급증한 종목, view=ratio_surge는 매수/매도 잔량 비율이 급격히 기운 종목입니다. 정규장(09:00~15:30) 중에만 산출되며 그 밖의 시간에는 비어 있거나 잔량이 0으로 옵니다. 특정 종목 하나의 10단 호가는 get_orderbook, 체결 쪽 힘은 get_execution_strength를 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 종목 수 (기본값 15, 최대 50) | |
| side | No | view=surge/ratio_surge에서 볼 방향 (기본값: buy=매수잔량) | |
| sort | No | view=balance의 정렬 기준 (기본값: net_buy=순매수잔량순) | |
| view | No | balance 잔량 상위(기본) / surge 잔량 수량 급증 / ratio_surge 잔량 비율 급증 | |
| market | No | 시장 구분 (기본값: kospi). 전체 조회는 없습니다 | |
| minutes | No | view=surge/ratio_surge의 비교 구간(분) (기본값 30, 최대 120) | |
| min_volume | No | view=surge/ratio_surge의 최소 거래량 필터 (기본값: 10000주) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that data is only available during regular market hours and may return empty or zero volumes otherwise, and explains the three view modes. It does not detail return field structure, but covers key behavioral traits.
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 concise sentences, front-loaded with the core purpose, followed by view modes, market hours, and alternatives. Every sentence provides useful information without 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?
Despite having no output schema and no annotations, the description covers purpose, view semantics, timing constraints, and sibling alternatives. It does not specify the exact return fields, but the agent has enough contextual information to select and invoke the tool 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?
The input schema already has 100% parameter description coverage, so the baseline is 3. The description adds only marginal extra semantics, such as the balance view including total buy/sell and net buy, but most parameter meanings are already in the schema. It does not substantially add syntax or formatting details.
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 clearly states the tool retrieves stocks with thick or surging order book volumes across the entire market. It explicitly distinguishes from siblings by pointing to get_orderbook for individual stock order books and get_execution_strength for execution strength.
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 provides explicit when-to-use guidance, including the specific alternatives: '특정 종목 하나의 10단 호가는 get_orderbook, 체결 쪽 힘은 get_execution_strength를 쓰세요.' It also notes that the tool only computes during regular market hours, helping agents decide when it is useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_executions체결 내역 조회A
계좌의 최근 체결(실제로 체결된 주문) 내역을 조회합니다 — 지난 일자의 체결은 나오지 않습니다. 주문번호, 종목, 매수/매도 구분, 주문상태, 주문/체결 수량, 주문/체결 가격, 당일 수수료·세금, 주문시각 (키움 ka10076). stock_code·side·order_no로 좁힐 수 있습니다. 기간 파라미터가 없어 조회 범위는 키움이 정합니다 (모의 실측 2026-08-19: 6일 전 체결이 0행). 과거 일자의 체결 기록은 get_transactions에 남지만 그쪽 일자는 결제일(D+2) 기준이라 최근 2거래일 체결분은 아직 없습니다 — 그래서 '어제 체결가'처럼 지난 일자를 물으면 이 tool을 부르지 마세요. 결제가 끝난 뒤 get_transactions에서 보이므로 그전에는 조회되지 않는다고 답하면 됩니다. 아직 체결되지 않은 주문은 get_pending_orders, 당일 종목별 집계는 get_trading_journal입니다. 조회 전용이며 주문 실행 기능은 제공하지 않습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | 매매 구분 — all(기본, 전체) | sell(매도) | buy(매수) | |
| order_no | No | 특정 주문번호만 조회할 때의 주문번호 | |
| stock_code | No | 특정 종목만 조회할 때의 6자리 종목코드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so thoroughly. It discloses that the date range is determined by Kiwoom, that there is no date parameter, that observed behavior shows 6-day-old executions return zero rows, and that settlement is D+2. It also states the tool is read-only and does not execute orders.
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 dense but every clause earns its place, and the most important constraint — recent-only, no past dates — is front-loaded. The bolded warnings and alternative routing are structured so an agent can quickly extract the critical behavioral rule before reading supporting details.
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 tool with no output schema and no annotations, the description is remarkably complete: it covers the returned fields, the filtering parameters, the date-range limitation, settlement timing, sibling alternatives, and the read-only nature. Nothing an agent needs to decide whether to call this tool 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?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds that stock_code, side, and order_no can narrow the results, but this is already implied by the schema and adds no new semantic detail beyond grouping the filters together.
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 retrieves the account's recent execution history, explicitly clarifying that past-date executions are not included. It also distinguishes itself from get_transactions, get_pending_orders, and get_trading_journal, so an agent can tell them apart without opening 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 gives explicit when-to-use and when-not-to-use guidance: it says not to call this tool for past dates like 'yesterday's execution price', and directs the agent to get_transactions after settlement. It also names get_pending_orders for unfilled orders and get_trading_journal for daily per-stock aggregation, leaving no ambiguity about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pending_orders미체결 주문 조회A
계좌의 미체결(아직 체결되지 않은) 주문 목록을 조회합니다 — 주문번호, 종목, 매수/매도 구분, 주문상태, 주문수량, 미체결수량, 주문가격, 현재가 (키움 ka10075). stock_code로 특정 종목만 필터링할 수 있습니다. 조회 전용이며 주문 실행 기능은 제공하지 않습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| stock_code | No | 특정 종목만 조회할 때의 6자리 종목코드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the read-only nature and lists returned fields. It does not cover rate limits or authentication, but the read-only behavior is sufficient for this type of 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 is concise, front-loaded with purpose, and includes only relevant details: fields returned, filter option, and read-only nature. Every sentence adds value.
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 tool with one optional parameter and no output schema, the description is fairly complete. It explains input, output fields, and behavior. However, it lacks details on response format or pagination.
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 100% for the single parameter stock_code. The description reiterates the same information as the schema's description, adding no extra meaning. 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 clearly states the tool retrieves pending order lists from an account, listing specific fields (order number, stock, buy/sell type, etc.) and explicitly mentions it is read-only and does not execute orders. This distinguishes it from siblings like get_account_balance or get_transactions.
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 the tool is read-only with no order execution, and mentions optional filtering by stock_code. It gives clear context but does not explicitly compare to alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_program_trading프로그램 매매 조회A
프로그램 매매 상위 종목과 추이를 조회합니다 (키움 ka90003/ka90004/ka90010/ka90005/ka90013/ka90008/ka90006). view: top(당일 순매수/순매도 상위 종목, 기본) / date_rank(지정한 날짜의 순매수/순매도 상위 종목 — top과 달리 과거 날짜를 볼 수 있고 매수·매도 금액과 '거래비중'(그 종목 거래에서 프로그램이 차지한 비율)까지 나옵니다. 당일 순위는 top이 서버 집계라 더 정확합니다) / market_daily(시장 전체 일자별 추이) / market_intraday(당일 시간대별 누적 추이) / stock_daily(특정 종목의 일자별 추이 — stock_code 필수) / stock_intraday(특정 종목의 시간대별 누적 추이 — stock_code 필수, 초 단위이며 순매수 '수량'까지 나옵니다. 최근 거래일만 제공되어 base_date가 적용되지 않습니다) / arbitrage_balance(차익거래 잔고 추이 — 매매가 아니라 미청산 보유 물량이라 다른 view로는 알 수 없습니다). 한 종목의 프로그램 수급이 장중 언제 뒤집혔는지를 보려면 stock_intraday, 날짜별 흐름은 stock_daily입니다. direction은 top·date_rank에, unit은 view=top에만, market은 top·date_rank·market_daily·market_intraday에만 적용됩니다 (종목 단위 view와 arbitrage_balance에는 적용되지 않습니다). market: kospi(기본)/kosdaq — 전체(all) 옵션이 없습니다. 추이 금액 단위는 백만원입니다.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 종목/행 수 (기본값 20, 최대 50) — view=date_rank는 순위를 조회 범위 안에서 매기므로 20로 제한됩니다 | |
| unit | No | view=top의 금액/수량 기준 (기본값: amount) | |
| view | No | 조회 종류 (기본값: top) | |
| market | No | 시장 구분 (기본값: kospi) — 종목 단위 view와 arbitrage_balance에는 적용되지 않습니다. date_rank는 전체(all) 조회를 제공하지 않는 TR이라 시장을 하나 골라야 합니다 | |
| base_date | No | 추이 조회 기준일 — 이 날짜부터 과거로 조회 (기본값: 오늘/최근일). view=stock_intraday에는 적용되지 않습니다 | |
| direction | No | view=top / date_rank의 순매수/순매도 (기본값: net_buy) | |
| stock_code | No | view=stock_daily / stock_intraday 전용 — 조회할 6자리 종목코드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so excellently. It discloses that date_rank allows past dates with extra fields, stock_intraday only provides the most recent trading day and ignores base_date, amounts are in million won, and market has no 'all' option. It also notes arbitrage_balance represents unclosed positions, not trades, which is critical behavioral context.
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 long but every clause carries unique information—view definitions, constraints, units, and exceptions. It is front-loaded with the primary purpose and logically organized from view enumeration to parameter applicability. There is no redundancy or 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 indicates key output dimensions for several views (e.g., date_rank includes amount and trade weight; stock_intraday includes quantity) and sets expectations about accuracy and date limitations. However, views like market_daily and market_intraday are only described as '추이' without specifying output fields, leaving a slight gap for a complex multi-view 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 100%, so the baseline is 3. However, the description adds significant inter-parameter constraints: 'direction은 top·date_rank에, unit은 view=top에만, market은 top·date_rank·market_daily·market_intraday에만 적용됩니다 (종목 단위 view와 arbitrage_balance에는 적용되지 않습니다).' This goes beyond per-parameter schema definitions and clarifies combinations, which is highly valuable.
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 opens with '프로그램 매매 상위 종목과 추이를 조회합니다', clearly stating the tool retrieves program trading top stocks and trends. It then enumerates seven distinct views, differentiating the resource and scope. This is specific and distinguishes it from sibling tools like get_institution_trend or get_foreign_intraday.
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?
Provides explicit when-to-use guidance: '한 종목의 프로그램 수급이 장중 언제 뒤집혔는지를 보려면 stock_intraday, 날짜별 흐름은 stock_daily입니다.' It also clarifies accuracy trade-offs ('당일 순위는 top이 서버 집계라 더 정확합니다') and parameter applicability exclusions. This is exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ranking시장 순위 조회A
당일 시장 순위를 조회합니다 (키움 ka10027/ka10030/ka10032/ka10028/ka10033). type: rise(상승률)/fall(하락률)/volume(거래량)/value(거래대금)/open_rise(시가대비 상승률)/open_fall(시가대비 하락률)/credit_ratio(신용비율). market: all(전체, 기본)/kospi/kosdaq. rise·fall은 전일 종가 기준이고 open_rise·open_fall은 오늘 시가 기준이라, 갭으로 뜬 뒤 밀렸는지 장중에 밀어올렸는지를 가릅니다(체결강도 컬럼 포함). 시가대비 두 종류는 시장 전 종목을 훑어야 해서 market이 kospi 또는 kosdaq여야 하고, min_volume(거래량 하한, 기본 1만주)으로 모수를 좁힙니다. credit_ratio는 신용융자 잔고비율이 높은 종목으로, 반대매매 압력이 쌓인 곳을 찾을 때 씁니다 — 특정 종목의 신용잔고 시계열은 get_credit_trend를 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 종목 수 (기본값 20, 최대 50) | |
| type | Yes | 순위 종류 | |
| market | No | 시장 구분 (기본값: all — open_rise/open_fall은 all을 지원하지 않습니다) | |
| min_volume | No | 거래량 하한 — open_rise/open_fall/credit_ratio에서 사용. 0010=1만주(기본)/0050=5만주/0100=10만주/0500=50만주 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and explains the behavioral differences between rise/fall and open_rise/open_fall (previous close vs today's open), the market scanning requirement, and the inclusion of an execution strength column for open-based types. It does not disclose auth requirements or rate limits, but for a query tool this is minor.
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 dense but every sentence contributes: it front-loads the purpose, then details types, constraints, and use cases. It could be slightly more concise (e.g., removing internal API codes ka10027...), but the structure is logical and not 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?
The description covers parameter semantics, constraints, and use cases thoroughly for a 4-parameter tool. However, without an output schema, it only hints at return values (e.g., execution strength column for open types) and does not describe the complete result structure or pagination, leaving some completeness 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?
The input schema covers all parameters, but the description adds meaning beyond it: it explains the semantic distinction between rise/fall and open_rise/open_fall, why market is restricted for open-based types, and the purpose of min_volume and credit_ratio. This goes well beyond the schema's descriptive text.
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 clearly states the tool retrieves daily market rankings ('당일 시장 순위를 조회합니다') and enumerates the ranking types (rise, fall, volume, value, open_rise, open_fall, credit_ratio), making the purpose specific. It distinguishes from siblings by mentioning get_credit_trend for a different use case, though it does not explicitly contrast with other ranking tools like get_valuation_rank.
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 provides explicit conditions for when certain types are valid: open_rise/open_fall require market to be kospi or kosdaq and min_volume to narrow the population, and credit_ratio is for finding forced-sell pressure, with get_credit_trend explicitly named as the alternative for a specific stock's credit balance time series. This gives clear usage guidance, though it does not cover all possible alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sector_chart업종 지수 차트 조회 (일/주/월/년/분/틱봉)A
업종(섹터) 지수의 캔들 차트를 조회합니다 (키움 ka20004~ka20008/ka20019). period: day(일봉, 기본)/week(주봉)/month(월봉)/year(년봉)/minute(분봉)/tick(틱봉). sector_code는 get_market_index의 업종 코드이거나 업종명입니다 (001 코스피 종합, 002 코스피 대형주, 101 코스닥 종합, 201 KOSPI200 등).
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 캔들 개수 (기본값 30, 최대 200) | |
| period | No | 봉 주기 (기본값: day) | |
| tick_scope | No | period=tick일 때 캔들당 틱 수 (기본값: 30) | |
| sector_code | Yes | 업종 코드 3자리(예: 001 코스피 종합, 101 코스닥 종합) 또는 업종명(예: 증권, 반도체). 이름이 여러 시장에 있으면 후보 코드를 알려 주는 에러가 돌아옵니다 | |
| minute_scope | No | period=minute일 때 분 단위 (기본값: 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses a behavioral trait: ambiguous sector names return errors with candidate codes, and it references the underlying Kiwoom API codes (ka20004~ka20008/ka20019). It does not cover rate limits or auth, but the disclosed ambiguity handling adds meaningful transparency.
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 two concise sentences that front-load the main purpose and embed essential period and sector code details without any fluff. Every sentence earns its place, and it is efficiently structured for quick parsing.
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 description covers the tool's purpose, period options, and sector code semantics, which is sufficient given the detailed schema. It does not describe the return format, but the tool is a chart retrieval and the schema covers all parameters, so the context is mostly complete. Minor gap: no explicit description of the output structure.
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 100%, so the baseline is 3. The description adds Korean translations for period values (e.g., '일봉', '주봉') and clarifies that sector_code can be a name or code, but these are largely redundant with the schema. The cross-reference to get_market_index provides modest added value, but not enough to score higher.
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 clearly states it retrieves candle charts for sector indices, with a specific verb ('조회합니다' = retrieves) and resource ('업종 지수의 캔들 차트'). It lists period options and sector code formats, distinguishing it from sibling tools like get_sector_price or get_stock_chart.
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 provides clear context: use this tool for sector index charts, and it cross-references get_market_index for sector code sourcing. It does not explicitly mention alternatives or when not to use it, which keeps it a step below a perfect 5, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sector_flow업종별 투자자 순매수 조회A
시장 전체 업종의 투자자 주체별 순매수를 한 번에 조회합니다 (키움 ka10051). '오늘 돈이 어느 섹터로 갔나'를 볼 때 쓰는 tool로, 업종마다 개인/외국인/기관계와 증권·투신·연기금·사모 순매수를 지수 등락률과 함께 보여줍니다. 종목 단위 수급은 get_investor_trend, 종목별 순매수 상위는 get_investor_rank, 특정 업종의 지수 상세와 구성 종목은 get_sector_price / get_sector_stocks를 쓰세요.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 업종 수 (기본값 15, 최대 40) | |
| sort | No | 정렬 기준 (기본값: foreign=외국인 순매수 상위) | |
| unit | No | 순매수 단위 (기본값: amount=백만원, quantity=천주) | |
| market | No | 시장 구분 (기본값: kospi) | |
| base_date | No | 조회 기준일 (기본값: 최근 거래일) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the tool returns aggregated sector data including investor-type breakdowns and index change. It also notes it fetches all sectors at once. While it doesn't mention auth or rate limits, the read-only nature is clear, and it adds context about the API key (키움 ka10051) and return contents.
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 sentences, front-loaded with the core action, then a concise usage guide. Every sentence earns its place with no fluff or repetition.
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, but description explains what is returned (per-sector net buys by investor type, index change). Combined with detailed parameter schema and explicit sibling differentiation, the tool is well-contextualized. Minor gaps like pagination or error handling, but sufficient for typical use.
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%, so baseline 3. The description adds minimal parameter-specific meaning beyond the schema, only implicitly framing the tool's purpose. No extra semantics for top, sort, unit, market, or base_date beyond what schema already provides.
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?
Description clearly states it retrieves net purchases by investor type for all sectors at once ('시장 전체 업종의 투자자 주체별 순매수를 한 번에 조회합니다'), with specific verb+resource. It also distinguishes from siblings by naming alternatives like get_investor_trend and get_sector_price.
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?
Provides explicit when-to-use context ('오늘 돈이 어느 섹터로 갔나') and directly names alternatives for other use cases: stock-level use get_investor_trend, top stocks use get_investor_rank, sector details use get_sector_price/get_sector_stocks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sector_price업종 현재가 조회A
업종(섹터) 지수의 현재가 상세를 조회합니다 (키움 ka20001) — 지수·시/고/저가·거래량·상승/하락 종목수·52주 고저·시간대별 추이. sector_code는 get_market_index가 보여주는 업종 코드이며(001 코스피 종합, 002 코스피 대형주, 101 코스닥 종합, 201 KOSPI200 등) '증권'처럼 업종명을 그대로 넣어도 됩니다.
| Name | Required | Description | Default |
|---|---|---|---|
| sector_code | Yes | 업종 코드 3자리(예: 001 코스피 종합, 101 코스닥 종합) 또는 업종명(예: 증권, 반도체). 이름이 여러 시장에 있으면 후보 코드를 알려 주는 에러가 돌아옵니다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It adds behavioral context by naming the Kiwoom API (ka20001) and enumerating the returned data fields, but it does not disclose output format, pagination, rate limits, or explicitly confirm read-only nature (though '조회' implies it). This is adequate but not rich.
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 two sentences, front-loaded with the primary purpose and data fields, followed by parameter guidance. Every clause contributes essential information, and the formatting is clean and scannable. No wasted words.
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?
Given the absence of an output schema, the description enumerates the key return components (index, open/high/low, volume, rising/falling counts, 52-week high/low, time-series trends), which gives a good sense of the response. It also fully covers the single parameter. It lacks explicit differentiation from nearby siblings, but the detailed field list helps. Overall, it is quite complete for a simple query 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 100% and the schema already describes sector_code with examples and error behavior. The description adds value by referencing get_market_index as the code source and reinforcing that sector names are acceptable. This goes beyond the schema's details, so a score above baseline is warranted.
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 clearly states the tool retrieves current price details of a sector index, listing specific data fields (index, open/high/low, volume, etc.). It distinguishes itself from sibling tools like get_sector_stocks or get_sector_chart by focusing on '현재가 상세' (current price details) and referencing a specific backend API. The verb '조회합니다' unambiguously indicates a read operation.
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 provides clear context for when to use the tool: to get detailed current price information for a sector index. It also tells users how to obtain the sector_code via get_market_index and that sector names are accepted. However, it does not explicitly exclude alternatives or state when not to use this tool, so it falls short of a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sector_stocks업종별 종목 시세 조회A
특정 업종(KRX 표준 분류)에 속한 종목들의 시세를 조회합니다 (키움 ka20002). 종목코드순 정렬이며 첫 페이지(최대 100종목)만 가져옵니다. sector_code는 get_market_index의 업종 코드이거나 업종명이며 테마명은 받지 않습니다 — 사용자가 '테마'라고 물었으면 get_theme_groups로 코드를 찾아 get_theme_stocks를 쓰세요('반도체'처럼 이름이 겹칩니다).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 표시할 종목 수 (기본값 30, 최대 100) | |
| sector_code | Yes | 업종 코드 3자리(예: 001 코스피 종합, 101 코스닥 종합) 또는 업종명(예: 증권, 반도체). 이름이 여러 시장에 있으면 후보 코드를 알려 주는 에러가 돌아옵니다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It discloses sorting, first-page-only behavior, the 100-stock limit, and the ambiguity error behavior. It stops short of specifying the returning data shape or authentication/rate constraints, so it is strong but not maximal.
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 one packed paragraph but has almost no filler: the first sentence states the main purpose, the second covers ordering and pagination, and the final sentence handles disambiguation and alternative tools. Every sentence provides actionable value.
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 tool selection, the description is complete enough: it tells the agent what to pass, how to resolve the only meaningful input ambiguity, and what behavior to expect. It does not declare the exact return fields in the absence of an output schema, which keeps it from scoring a 5.
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 schema already covers both parameters well (100% coverage), so this is above baseline. The description adds extra semantic context such as that sector_code can be either a 3-digit industry code or an industry name, cannot be a theme name, and that ambiguous names will produce an error. This improves over raw schema.
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 clearly states the tool '조회' retrieves quotes for stocks belonging to a specific KRX sector, identifies the underlying operation (ka20002), and even differentiates from theme-based lookups by stating theme names are not accepted. This unmistakably distinguishes it from get_theme_stocks and other sector-related 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?
It gives explicit routing guidance: if the user asked about '테마', use get_theme_groups then get_theme_stocks; otherwise get_sector_stocks is applicable. It also defines that sector_code can be obtained from get_market_index, and warns about overlapping names like '반도체'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_short_selling공매도 추이 조회A
특정 종목의 일자별 공매도 추이를 조회합니다 — 종가, 등락률, 거래량, 공매도량, 공매도비중, 공매도평균가 (키움 ka10014). 기본 조회 기간은 최근 30일이며 from_date/to_date로 변경할 수 있습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| to_date | No | 조회 종료일 (기본값: 오늘) | |
| from_date | No | 조회 시작일 (기본값: 30일 전) | |
| stock_code | Yes | 조회할 6자리 종목코드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It reveals the tool reads historical short selling data and lists the returned fields, but does not mention rate limits, error conditions, data range limits, or confirm it is non-destructive. The source reference (키움 ka10014) adds credibility but not behavioral detail.
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 concise sentences with front-loaded purpose and data details. No redundant words; each sentence adds essential information. The structure is optimal for quick parsing.
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?
Given 3 parameters and no output schema, the description adequately covers the tool's purpose and data fields. It mentions default period and date customization. However, it does not specify output format (list vs. single record), pagination, or any constraints on date range length, leaving some gaps for a time-series 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 100% with parameter descriptions, so baseline is 3. The description adds value by explaining the default date range (30 days) and that the tool returns multiple data points per date, which enriches understanding beyond raw 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?
The description clearly states the tool inquires daily short selling trends for a specific stock, listing specific data fields (closing price, fluctuation rate, volume, short selling volume, ratio, average price). This distinguishes it from siblings like get_stock_lending and get_investor_trend, which cover different 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 description gives no explicit guidance on when to use this tool vs. alternatives (e.g., get_stock_lending). It only mentions the default 30-day period and that dates can be customized, but does not state prerequisites, limitations, or exclusion cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_chart주식 차트 조회 (일/주/월/년/분/틱봉)A
종목의 캔들 차트 데이터를 조회합니다 (키움 ka10079~ka10083/ka10094, 수정주가 반영). period: day(일봉, 기본)/week(주봉)/month(월봉)/year(년봉)/minute(분봉)/tick(틱봉). 분봉은 minute_scope로 분 단위를, 틱봉은 tick_scope로 캔들당 틱 수를 지정합니다. 종목코드를 모르면 search_stock으로 먼저 찾으세요.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | 캔들 개수 (기본값 30, 최대 200) | |
| period | No | 봉 주기 (기본값: day) | |
| stock_code | Yes | 6자리 종목코드 (예: 005930) | |
| tick_scope | No | period=tick일 때 캔들당 틱 수 (기본값: 30) | |
| minute_scope | No | period=minute일 때 분 단위 (기본값: 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the use of adjusted prices (수정주가 반영) and references Kiwoom API codes, adding behavioral context. It does not contradict any annotations (none provided) and is consistent with a read-only operation.
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 concise, using one key sentence plus additional detail in the following sentences. It packs important information without redundancy, though the second sentence could be better structured for readability.
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?
Given no output schema, the description should ideally mention the response format (e.g., OHLCV data). It covers input parameters well but lacks details on what the returned data looks like, leaving the agent slightly uncertain about the output.
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 100%, but the description adds significant value by explaining the period enum values in Korean, clarifying default values for period, minute_scope, and tick_scope, and showing the relationship between period and the sub-parameters. This goes beyond the schema's enum lists.
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 clearly states the tool retrieves candlestick chart data for a stock, specifies the resource (캔들 차트 데이터) and verb (조회), and differentiates from sibling tools like search_stock by advising to use search_stock if the stock code is unknown.
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 when to use the tool (to get chart data) and provides a prerequisite (use search_stock if stock code unknown). It does not explicitly state when not to use, but the context makes it clear this is for chart data rather than simple price queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_lending대차거래 추이 조회A
대차거래(주식 대여) 정보를 조회합니다 (키움 ka10068/ka20068/ka90012). view=trend(기본)은 일자별 추이 — 체결·상환·증감 주수와 대차잔고, 잔고금액을 시계열로 보여줍니다. stock_code를 지정하면 해당 종목, 생략하면 시장 전체 집계이고 기본 기간은 최근 30일입니다. view=balance_rank는 특정 하루의 대차잔고가 가장 많은 종목 순위입니다 — '어느 종목에 대차 물량이 쌓여 있나'를 물을 때 쓰고, 한 종목의 시간 흐름은 trend를 쓰세요. balance_rank는 시장 전체 횡단면이라 stock_code·from_date를 받지 않으며(주면 무시하고 각주로 알립니다), 기준일은 to_date로 지정하되 생략하는 쪽이 안전합니다 — 당일 집계는 장 마감 후 저녁 늦게(20시 무렵) 열려서, 오늘을 직접 지정하면 그전까지 빈 결과이고 생략하면 최신 집계일로 자동으로 물러섭니다. 공매도 흐름과 함께 보려면 get_short_selling을 참고하세요.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | view=balance_rank의 표시 종목 수 (기본값 20, 최대 50) | |
| view | No | 조회 종류 (기본값: trend) | |
| to_date | No | 조회 종료일 (기본값: 오늘). view=balance_rank에서는 순위의 기준일이며, 오늘을 지정하면 저녁 집계 전까지 빈 결과입니다 — 생략하면 최신 집계일로 자동으로 물러섭니다 | |
| from_date | No | 조회 시작일 (기본값: 30일 전). view=balance_rank에서는 무시됩니다 | |
| stock_code | No | 6자리 종목코드 (생략 시 시장 전체 대차 추이). view=balance_rank에서는 무시됩니다 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses non-obvious behaviors: `balance_rank` ignores certain parameters (and does so with a footnote), same-day data only becomes available after ~20:00 (otherwise empty results), and omitting `to_date` automatically falls back to the latest aggregation date. It does not mention auth or rate limits, but core invocation behaviors are well covered.
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 moderately long but well-structured: it leads with purpose, then explains each view, then covers parameter behavior and a timing caveat. It is dense and every sentence contributes value, but it could be slightly tightened without losing critical nuance.
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 tool with 5 optional parameters, no output schema, and no annotations, the description thoroughly covers purpose, usage, parameter interactions, and edge-case timing behavior. It clearly explains what trend fields are shown, but does not detail the return structure for `balance_rank`, which is 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 100%, so the baseline is 3. The description adds contextual value beyond the schema: it explains the `view` enum semantics, the default recent-30-day period, which parameters are ignored in `balance_rank`, and why omitting `to_date` is safer. This goes beyond the field-level descriptions.
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 precisely states it queries stock lending (securities lending) information and distinguishes two views: `trend` (daily time series of contract/repayment/change and lending balance) and `balance_rank` (ranking of stocks by largest lending balance on a given day). It also clearly differentiates itself from sibling `get_short_selling` by cross-referencing 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 explicitly tells when to use `balance_rank` ('which stocks have accumulated lending volume') vs `trend` for a single stock's flow. It also warns that `balance_rank` ignores `stock_code` and `from_date`, advises omitting `to_date` for safety due to late evening aggregation, and points to `get_short_selling` for combined short-selling flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_price종목 현재가 조회A
6자리 종목코드로 국내 주식/ETF의 현재가, 등락률, 거래량과 기본 지표(PER·EPS·PBR·시가총액)를 조회합니다 (키움 ka10001). 배당수익률·배당금은 키움 REST API에 조회 TR이 없어 제공하지 않습니다. 업종·상장일과 거래정지/관리종목/투자경고 같은 투자유의 상태도 함께 표시됩니다. 종목명만 알고 있다면 search_stock으로 먼저 코드를 찾으세요.
| Name | Required | Description | Default |
|---|---|---|---|
| stock_code | Yes | 6자리 종목코드 (예: 삼성전자 005930, KODEX 200 069500) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses limitations (no dividend yield/dividend data because Kiwoom REST API lacks the TR) and what additional data is included (industry, listing date, trading halt/supervision warning flags). This is good transparency about coverage and edge cases, though it doesn't mention pagination, response format, or potential delays.
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 two sentences: the first clearly states the purpose and data returned, the second notes a specific limitation and provides navigation guidance. No wasted words, front-loaded with the key action 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 single-parameter query tool with no output schema, this description is complete: it specifies input format, what data to expect, what's excluded, and additional status flags. The only minor gap is not stating the response format (JSON shape), but that's often acceptable. Given the tool's simplicity and sibling context, it's well-rounded.
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 schema covers the single parameter (stock_code) with a pattern and example. The description reinforces the format (6자리 종목코드) and adds that it's domestic stocks/ETFs, plus the search_stock fallback. Since schema coverage is 100% and there's only one parameter, the description adds meaningful context without redundancy.
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 clearly states the tool retrieves current price, change rate, volume, and basic indicators (PER, EPS, PBR, market cap) for a 6-digit Korean stock/ETF code. It explicitly distinguishes itself from search_stock and other stock-related siblings by focusing on current price snapshot, not charts, quotes, or sector 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 description provides clear context: it's for querying current price and indicators by stock code, and includes a when-not-to-use note (dividend info not available via Kiwoom REST API) and a cross-reference to search_stock when only the name is known. It doesn't explicitly enumerate alternatives for other use cases, but the sibling list and clarity make usage reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_quotes여러 종목 일괄 시세 조회A
여러 종목의 현재가·등락률·거래량·거래대금·시가총액을 한 번의 호출로 조회합니다 (키움 ka10095). 보유 종목이나 관심 종목처럼 2개 이상 종목의 시세가 필요할 때 get_stock_price를 반복 호출하는 대신 사용하세요 (최대 30종목). 거래정지/관리종목/투자경고 같은 투자유의 상태도 비고에 표시됩니다.
| Name | Required | Description | Default |
|---|---|---|---|
| stock_codes | Yes | 조회할 6자리 종목코드 목록 (1~30개, 예: ["005930", "000660"]) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must bear the burden. It adds useful context (max 30 stocks, internal code, alert statuses in remarks) but does not explicitly state that the tool is read-only or idempotent, nor mention rate limits or error behaviors. A score of 3 is appropriate given the lack of 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?
The description is two sentences, front-loaded with the core purpose and data fields, followed by usage guidance and a note about alert statuses. No redundant or vague phrasing.
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 tool with 1 parameter and no output schema, the description covers the returned fields (price, change, volume, amount, market cap, remarks) and usage context. It could mention error handling or output formatting but is otherwise complete for a batch query 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 100%, so the schema already documents the parameter. The description repeats the parameter constraints (6-digit codes, 1-30 items) and provides an example. This adds no significant value beyond the schema, so 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?
Description clearly states it queries current price, change rate, volume, transaction amount, market cap, and alert statuses for multiple stocks. It distinguishes itself from sibling get_stock_price by explicitly recommending this tool for batch queries.
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?
Explicitly says to use this when needing quotes for 2+ stocks and to avoid repeated calls to get_stock_price. It implies not to use for single stocks but does not explicitly state the alternative, though it is clear enough for an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supply_concentration매물대집중 종목 조회 (시장 전체)A
최근 N일 거래가 특정 가격대(매물대)에 몰린 종목을 조회합니다 (키움 ka10025). 매물대는 반등 시 저항·하락 시 지지로 읽히므로, 현재가 위아래 어디에 물량이 뭉쳐 있는지 확인할 때 씁니다. 특정 종목 하나의 호가 잔량은 get_orderbook, 거래량 급증 종목은 get_market_movers를 쓰세요 — 가격대별 거래 분포를 보는 것은 이 tool뿐입니다.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 건수 (기본값 20, 최대 50; 매물비율 높은 순) | |
| market | No | 시장 구분 (기본값: all=전체) | |
| min_ratio | No | 매물비율 하한(%) (기본값 50, 최소 20). 높일수록 한 가격대에 더 심하게 뭉친 종목만 남습니다 | |
| zone_count | No | 기간을 몇 개의 가격 구간으로 나눌지 (기본값 10) | |
| period_days | No | 매물대를 집계할 기간(일) (기본값 50) | |
| current_price_only | No | true면 현재가가 매물대 구간 안에 들어온 종목만 (기본값: false) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly discloses the tool's read-only, query-like nature via '조회합니다' and explains the conceptual meaning of supply/demand zones. However, it does not describe the output format, return fields, or any limitations (e.g., sorting, pagination) beyond what the schema covers, which keeps it from a perfect score.
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 with no wasted words. It front-loads the core purpose, then explains the interpretation/use-case, then distinguishes from alternatives. Each sentence earns its place and the overall structure is easy to scan.
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 6-parameter tool with no output schema and no annotations, the description is quite complete: it explains the underlying concept, when to use it, and how it differs from siblings. The only gap is that it doesn't describe the return structure or sample output, which would be helpful since no output schema exists. Nonetheless, the rich schema and clear purpose make the tool mentally invocable.
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%, with every parameter already having a clear description (defaults, ranges, and meanings). The tool description adds conceptual context about 매물대, which helps understand the parameters, but it does not enrich individual parameter semantics beyond the schema. Thus, 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?
The description clearly states the action ('조회합니다' - retrieves) and the resource ('매물대에 몰린 종목' - stocks concentrated in supply/demand zones). It also differentiates from siblings by naming specific alternatives like get_orderbook and get_market_movers, making the unique purpose unmistakable.
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?
Provides explicit guidance on when to use this tool ('현재가 위아래 어디에 물량이 뭉쳐 있는지 확인할 때') and explicitly names alternatives for related but distinct tasks (get_orderbook for single-stock orderbook, get_market_movers for volume surges). It even states '가격대별 거래 분포를 보는 것은 이 tool뿐입니다' to emphasize exclusivity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_theme_groups테마 그룹 조회A
키움 테마 그룹 목록을 조회합니다 — 테마명, 종목수, 등락률, 상승/하락 종목수, 기간수익률(10일), 주요종목 (키움 ka90001). 기본은 등락률 상위 테마를 보여주며, stock_code를 주면 해당 종목이 편입된 테마를 검색합니다. 테마명으로 찾는 파라미터는 없어 이름을 알고 있어도 목록에서 골라야 하고(기본 30개는 등락률 상위라 원하는 테마가 없으면 limit을 100까지 올리세요). '반도체'처럼 테마명과 업종명이 겹치는 이름이 있는데, 사용자가 '테마'라고 물었으면 여기가 맞고 get_sector_stocks는 KRX 표준 업종 분류입니다 — 사용자가 쓴 말을 따르세요. 특정 테마의 구성종목은 get_theme_stocks로 조회하세요.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 표시할 테마 개수 (기본 30, 최대 100; 등락률 상위순). 종목 검색 시에는 무시됩니다. | |
| stock_code | No | 특정 종목이 편입된 테마만 검색할 6자리 종목코드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the default ordering (등락률 상위), the stock_code filtering behavior, that limit is ignored during stock search, the absence of a theme-name parameter, and the theme/sector naming ambiguity. This goes well beyond a minimal read-only description.
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 dense but well-front-loaded with the core action and returned fields. It earns most of its length through important caveats, though there is slight redundancy: the 'default is top 등락률' idea appears twice. Overall, it is appropriately sized for the disambiguation burden.
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 2-parameter read-only list tool with no output schema and no annotations, this description is highly complete. It explains what the tool returns, default behavior, parameter interactions, the missing theme-name lookup path, and how to choose between sibling tools. An agent has enough to invoke it correctly in most realistic scenarios.
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 100%, so the baseline is 3. The description adds practical meaning beyond the schema, such as 'if the theme you want is not in the default 30, raise limit to 100' and clarifies that stock_code searches themes containing that stock. Most parameter semantics come from the schema, with a small boost from the added usage guidance.
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: '키움 테마 그룹 목록을 조회합니다' and lists the returned fields. It explicitly differentiates from sibling tools, especially get_sector_stocks (KRX sector classification) and get_theme_stocks (constituents), so an agent can select it correctly.
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 explicit when-to-use guidance: use this when the user says '테마', use get_sector_stocks for 업종, and use get_theme_stocks for constituents of a specific theme. It also warns there is no theme-name filter and advises raising limit to 100 if the desired theme is not in the default top 30.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_theme_stocks테마 구성종목 조회A
특정 테마 그룹의 구성종목과 시세를 조회합니다 — 종목별 현재가, 전일대비, 등락률, 거래량, 기간수익률 (키움 ka90002). theme_code는 get_theme_groups가 돌려주는 '코드' 값입니다.
| Name | Required | Description | Default |
|---|---|---|---|
| theme_code | Yes | 테마 그룹 코드 (get_theme_groups의 '코드' 열 값) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that it queries specific market data fields and the data source. It does not mention authorization, rate limits, or whether the operation is read-only, but the context implies it is a read query. Additional detail on return structure would improve transparency.
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 sentence that efficiently conveys the purpose, key data fields, and dependency on another tool. It is front-loaded and contains no extraneous information.
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?
Given the single required parameter and lack of output schema or annotations, the description provides sufficient context for correct usage. It explains what data is returned and how to obtain the input value, making the tool's functionality clear.
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 input schema already describes the parameter with a pattern and description. The description adds value by explicitly linking theme_code to the output of get_theme_groups, providing contextual meaning beyond the schema.
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 clearly states the tool retrieves constituent stocks and market prices for a specific theme group, including specific fields like current price, change, change rate, volume, and period return. It also identifies the data source (kiwoom ka90002) and explains how to obtain the theme_code, which distinguishes it from sibling tools.
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 that theme_code must come from get_theme_groups, providing clear context for usage. However, it does not explicitly contrast with sibling tools or state when to use this tool versus alternatives like get_stock_price or get_stock_chart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trading_journal당일매매일지 조회A
특정일의 당일매매일지를 조회합니다 — 종목별 매수/매도 평균가·수량, 손익금액, 수익률과 총손익·총수익률 (키움 ka10170). base_date를 생략하면 오늘 기준이며, 최근 2개월 이내 날짜만 조회할 수 있습니다.
| Name | Required | Description | Default |
|---|---|---|---|
| base_date | No | 조회 기준일 (기본값: 오늘, 최근 2개월 이내) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals it is a read operation and mentions the 2-month constraint. However, it does not disclose authentication requirements, rate limits, or behavior when no data is found. It adds value but could be more thorough.
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 sentences: first states purpose and return data, second details parameter behavior. No redundancy, perfectly front-loaded with essential information.
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?
Given no output schema, the description summarizes key output fields (per-stock prices, quantities, profit/loss, totals). It references the API source but does not describe the exact output structure (e.g., list vs object). Mostly complete for a daily journal.
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 100%, and the description reiterates the same information about base_date (default today, last 2 months). It adds no new meaning 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?
The description clearly states the tool reads a daily trading journal for a specific date, listing details like average buy/sell price, quantity, profit/loss, and return rates. It references the specific API (ka10170), distinguishing it from siblings like get_account_holdings or get_transactions.
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 when to use it (for a specific date, defaults to today) and constraints (only within last 2 months). It does not explicitly exclude alternatives, but the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactions계좌 거래내역 조회A
계좌의 거래내역(매수/매도 등)을 기간별로 조회합니다 (키움 kt00015). 기본 조회 기간은 최근 30일이며 from_date/to_date로 변경, stock_code로 특정 종목만 필터링할 수 있습니다. 일자는 결제일(D+2) 기준이라 최근 2거래일 체결분은 아직 잡히지 않습니다 — 당일 체결가·체결시각은 get_order_executions(과거 일자는 조회되지 않습니다), 당일 종목별 손익은 get_trading_journal을 쓰세요. 그래서 '어제 체결가'처럼 결제 전 구간은 어느 tool로도 조회되지 않고, 결제가 끝나면 여기에 잡힙니다.
| Name | Required | Description | Default |
|---|---|---|---|
| to_date | No | 조회 종료일 (기본값: 오늘) | |
| from_date | No | 조회 시작일 (기본값: 30일 전) | |
| stock_code | No | 특정 종목만 조회할 때의 6자리 종목코드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and discloses the most dangerous behavioral quirk: dates are settlement-based (D+2), so the latest 2 trading days' executions are absent, and pre-settlement ranges are unqueryable across all tools. This prevents false 'missing data' conclusions. Minor gap: no mention of return format or pagination, hence not a 5.
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?
Dense and front-loaded: purpose first, then defaults/params, then the critical D+2 warning and sibling routing. Bold formatting highlights the key trap. Slightly longer than strictly necessary due to re-emphasis of the settlement lag, but every clause carries differentiating information.
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?
Given no annotations, no output schema, and high sibling-confusion risk among ~50 tools, the description covers what it does, defaults, parameters, the critical behavioral quirk, and explicit exclusions. Missing only minor details like response shape and any date-range limits, which are predictable from the tool name and title.
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 100%, so the baseline is 3, but the description adds real value beyond the schema: default values (from_date = 30 days ago, to_date = today) and the semantic that date parameters are interpreted on a settlement basis, which materially changes how an agent should set them.
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+scope: '계좌의 거래내역(매수/매도 등)을 기간별로 조회합니다' — retrieves account transaction history by period. The D+2 settlement disclosure and explicit contrast with get_order_executions and get_trading_journal clearly differentiate it from 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?
Provides explicit routing: same-day execution price/time → get_order_executions (with the caveat it has no past dates), same-day per-stock P&L → get_trading_journal, and states pre-settlement periods are queryable by NO tool. This tells the agent exactly when to use this tool vs alternatives and when to give up.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_valuation_rankPER·PBR·ROE 순위 조회 (시장 전체)A
시장 전체를 PER·PBR·ROE 중 한 가지 기준으로 줄 세운 상위 100종목을 조회합니다 (키움 ka10026). 지표를 조합해 거르지는 못하므로 '저PER 저PBR'은 metric을 바꿔 두 번 부릅니다. 저PER·저PBR은 가치주 스크리닝, 고ROE는 자본효율이 높은 기업 찾기, 고PBR·저ROE는 과열·부실 점검에 씁니다. 거래량·등락률 기준 순위는 get_ranking, 특정 종목 하나의 PER·PBR은 get_stock_price를 쓰세요 — 밸류에이션으로 시장을 훑는 것은 이 tool뿐입니다.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 종목 수 (기본값 20, 최대 100) | |
| metric | No | 정렬 기준 (기본값: low_per). low_per 저PER / high_per 고PER / low_pbr 저PBR / high_pbr 고PBR / low_roe 저ROE(적자 상위) / high_roe 고ROE |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: it can only sort by one criterion at a time, cannot combine indicators, and must be called multiple times for combined filters. It also mentions the underlying API code (키움 ka10026) and confirms this is the only valuation scanning tool. Though it doesn't describe the return format, the read-only nature is clearly implied.
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 efficient: four sentences, each serving a distinct purpose—core function, limitation/workaround, usage patterns, and differentiation from alternatives. No fluff or redundant repetition of schema details. Well-structured and easy to parse.
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?
Given there is no output schema and no annotations, the description covers purpose, usage, limitations, and alternatives thoroughly. It falls short of describing the output structure (e.g., what fields the returned list contains), but for a straightforward query tool this is a minor gap. The guidance on when to use which metric and the combination workaround makes it robust for agent decision-making.
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 100% (both top and metric have descriptions). The description adds value beyond the schema by explaining the strategic meaning of each metric (low PER/PBR for value, high ROE for efficiency, high PBR/low ROE for overheating) and the top parameter's default and max are already in the schema. This semantic guidance helps the agent choose appropriate metrics.
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 clearly states the tool sorts the entire market by one of PER/PBR/ROE and returns the top 100 stocks (e.g., '시장 전체를 PER·PBR·ROE 중 한 가지 기준으로 줄 세운 상위 100종목을 조회합니다'). It uses specific verbs and resources, and explicitly differentiates from get_ranking and get_stock_price by noting this is the only tool for market-wide valuation scanning.
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?
Provides explicit usage context: when to use this tool (value screening with low PER/PBR, capital efficiency with high ROE, overheating/insolvency checks with high PBR/low ROE), and when not to use it (volume/price-change rankings → get_ranking, single-stock PER/PBR → get_stock_price). Also explains the limitation of not combining metrics and the workaround of calling twice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vi_stocksVI 발동 종목 조회A
당일 변동성완화장치(VI)가 발동된 종목을 조회합니다 — 발동가격·괴리율·시가대비등락률·발동/해제 시각·발동횟수 (키움 ka10054). market: all(기본)/kospi/kosdaq, direction: all(기본)/up(상승)/down(하락), vi_type: all(기본)/static(정적)/dynamic(동적). stock_code를 지정하면 해당 종목의 당일 발동 내역만 조회하며, 이때 market은 무시됩니다(종목의 시장과 어긋나면 결과가 비므로 전체 기준으로 봅니다).
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 표시할 건수 (기본값 20, 최대 50) | |
| market | No | 시장 구분 (기본값: all). stock_code 지정 시에는 무시됩니다 | |
| vi_type | No | VI 유형 (기본값: all) | |
| direction | No | 발동 방향 (기본값: all) | |
| stock_code | No | 특정 종목의 발동 내역만 조회 (생략 시 전체) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It discloses parameter interactions (stock_code overrides market, potential empty results), lists return fields (발동가격, 괴리율, etc.), and identifies the data source (키움 ka10054). It lacks details like sorting/pagination or whether the data is real-time, but for a lookup tool, it provides substantial behavioral context.
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 efficient and front-loaded. The first sentence clearly states the purpose, and the following dash-separated clauses compactly summarize parameter options and special behavior. It is concise yet informative, with no filler content, though it is slightly dense due to the parameter enumeration.
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?
Given the tool has 5 parameters, no output schema, and no annotations, the description does a good job covering the essentials: purpose, parameter defaults, parameter interactions, and return fields. It does not explicitly describe the output format or sorting order, but these are not critical for a simple retrieval tool. The mention of the underlying system (ka10054) adds useful context.
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 100%, so the baseline is 3. The description adds some semantic value by translating enum values (상승/하락, 정적/동적) and explaining the consequence of stock_code/market mismatch ('종목의 시장과 어긋나면 결과가 비므로'). However, much of the parameter information is already present in the schema descriptions, so the added value is marginal.
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 clearly states the tool's function: '당일 변동성완화장치(VI)가 발동된 종목을 조회합니다' (retrieve stocks that triggered VI today). It specifies the resource (VI-triggered stocks), the verb (조회/retrieve), and lists the key data fields returned (발동가격, 괴리율, 등). This clearly distinguishes it from sibling tools like get_market_movers or get_stock_quotes.
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 provides clear context on when to use the tool: for retrieving VI-triggered stocks. It explains parameter defaults and the precedence rule for stock_code over market, including a practical warning about mismatched markets leading to empty results. However, it does not explicitly mention when not to use it or suggest alternative tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watchlist관심종목 그룹 상세A
관심종목 그룹에 담긴 종목 목록을 조회합니다 (키움 ka01301, 읽기 전용). 그룹코드(예: '000') 또는 그룹명(예: 'etf')을 넘기세요. 그룹을 모르면 get_watchlist_groups로 먼저 확인하세요. 종목명·전일종가·시장과 거래정지/관리종목 같은 투자유의 상태를 종목 마스터에서 보강해 함께 표시합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | 관심종목 그룹코드 또는 그룹명 (get_watchlist_groups로 확인) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses read-only behavior and data augmentation from master (trading halt, management stocks). Could mention output format or pagination but sufficient given no 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?
Two sentences, front-loaded with main action and source, efficient and informative.
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?
Complete for a single-parameter read tool with no output schema; covers prerequisite and return data content.
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?
Single parameter 'group' with clear description, examples ('000', 'etf'), and hint to use sibling tool. Schema coverage is 100% and description adds extra context.
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?
Clearly states it retrieves the list of stocks in a watchlist group, specifies source and read-only nature, and distinguishes from sibling tool get_watchlist_groups by indicating its use for finding group.
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?
Explicitly tells how to pass group code or name, advises to use get_watchlist_groups if group unknown, and describes the augmented data (name, previous close, market, caution status).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watchlist_groups관심종목 그룹 목록A
영웅문(HTS)에 저장한 관심종목 그룹 목록(그룹코드+그룹명)을 조회합니다 (키움 ka01300, 읽기 전용). 특정 그룹의 종목은 get_watchlist로 조회하세요. 그룹 편집(추가/삭제)은 키움 REST API가 지원하지 않아 조회만 가능합니다.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description declares the tool is read-only (읽기 전용) and mentions the API endpoint ka01300, which adds transparency. It states that group editing is not supported, which is a behavioral limitation. No annotations were provided, so the description carries the burden. It does not discuss error conditions or rate limits, but for a simple parameterless read operation, this is adequate.
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 two sentences, front-loaded with the main purpose. It includes an alternative tool reference and a limitation. Every sentence earns its place with no 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?
Given no parameters and no output schema, the description covers the core functionality. It mentions the output fields (group code + group name) and the API code. It could mention more about the output format or potential empty results, but it is sufficiently complete for a simple list retrieval 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?
The input schema has no parameters, so schema coverage is 100%. The description adds meaning by stating what is retrieved (group code + group name). No parameters need explanation, so a baseline of 4 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 clearly states the tool retrieves a list of watchlist groups (group code + group name) stored in the HTS. It uses the verb '조회합니다' (inquiry) and specifies the resource. It distinguishes itself from the sibling tool get_watchlist by noting that get_watchlist is for specific group items.
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 says to use get_watchlist for specific group items, and states that group editing (add/delete) is not supported by the API, so only inquiry is possible. This provides clear when-to-use and when-not-to-use guidance, with an alternative named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingPingA
Health check for the Kiwoom MCP server. Takes no arguments and returns a fixed message. Use this to verify the server is connected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses it takes zero arguments and returns a fixed message, fully describing its simple 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 succinct sentences front-loading purpose, no wasted words. Ideal for a simple tool.
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, no-output-schema tool, description completely covers purpose and behavior without gaps.
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 100% with zero parameters; description confirms no arguments, adding no new info beyond schema. Baseline 3 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?
Clearly identifies the tool as a health check for the Kiwoom MCP server, using specific verbs ('verify') and resource ('server connection'), distinct from sibling tools that focus on data retrieval.
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?
Explicitly states to use for server verification, implying use before operations. Could mention no alternatives, but context with siblings makes purpose clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_stock종목 검색 (이름→코드)A
종목명(부분 일치)이나 6자리 코드로 코스피/코스닥 상장 종목(ETF/ETN 포함)을 검색해 종목코드를 찾습니다 (키움 ka10099). 다른 tool에 넘길 종목코드를 모를 때 먼저 사용하세요. 거래정지·관리종목·투자경고 같은 투자유의 상태는 비고 컬럼에 표시됩니다. 첫 호출은 종목 마스터를 내려받아 몇 초 걸리고, 이후 12시간 동안 캐시됩니다.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | 종목명 일부(예: '삼성전자', 'KODEX 미국') 또는 6자리 종목코드 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses first call delay (few seconds due to master download) and 12-hour cache, and that caution status appears in notes. Fills the gap left by missing 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?
Description is concise (4 sentences) with key information front-loaded: purpose, when to use, behavioral notes. Slightly verbose with the internal code mention but overall well-structured.
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 search tool with no output schema, description covers input, caching behavior, returned information (code, caution status). Adequate for correct agent 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 coverage is 100% and describes the query parameter adequately. Description adds context about scope (KOSPI/KOSDAQ, ETFs/ETNs) but does not significantly enhance parameter understanding beyond schema.
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 clearly states it searches stocks by name or code to find stock codes for KOSPI/KOSDAQ including ETF/ETN, referencing internal code. It distinguishes from sibling tools which are data retrieval tools.
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?
Explicitly advises to use this tool first when stock code is unknown before passing to other tools. While it doesn't list when not to use, the guidance is clear and contextually sufficient.
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. Dates show when Glama detected each change.
1 tool update
v0.52.6- Changed
get_etf_returns1 field changed- changed
Input schema / properties / benchmark_index_code / descriptionPrevious value: -"비교할 지수 코드 3자리 (기본값 201 KOSPI200 — get_market_index의 '코드' 값). view=period 전용"New value: +"비교할 지수 코드 3자리 (기본값 201 KOSPI200 — get_market_index의 '코드' 값). view=period 전용이며 ETF의 추적지수와 자동으로 맞춰지지 않습니다 — 국내 지수 코드만 받습니다"
1 tool update
v0.52.4- Changed
get_stock_lending1 field changed- changed
Input schema / properties / to_date / descriptionPrevious value: -"조회 종료일 (기본값: 오늘). view=balance_rank에서는 순위의 기준일입니다"New value: +"조회 종료일 (기본값: 오늘). view=balance_rank에서는 순위의 기준일이며, 오늘을 지정하면 저녁 집계 전까지 빈 결과입니다 — 생략하면 최신 집계일로 자동으로 물러섭니다"
7 tool updates
v0.51.0- Changed
get_account_balance2 fields changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / viewAdded value: +{ + "default": "summary", + "description": "summary=잔고·손익 요약(기본), settlement=익일 결제 예정 건별 명세", + "enum": [ + "summary", + "settlement" + ], + "type": "string" +}
- Changed
get_broker_activity3 fields changed- changed
Input schema / properties / top / descriptionPrevious value: -"시장 전체 순위에서 표시할 종목 수 (기본 20, 최대 100)"New value: +"표시할 개수 — 시장 전체 순위는 종목 수(기본 20), view=broker_rank는 거래원 수(기본 100 = 50개사 전부). 최대 100" - changed
Input schema / properties / view / descriptionPrevious value: -"stock_code를 줬을 때의 표 종류 — top5(당일 상위 5개사, 기본)/broker_rank(전 거래원 50개사 누적 순위)"New value: +"stock_code를 줬을 때의 표 종류 — top5(당일 상위 5개사, 기본)/broker_rank(전 거래원 50개사 누적 순위)/dropout(당일 상위에서 이탈한 창구와 그 시각)" - changed
Input schema / properties / view / enumPrevious value: -[ - "top5", - "broker_rank" -]New value: +[ + "top5", + "broker_rank", + "dropout" +]
- Changed
get_etf_returns3 fields changed- changed
Input schema / properties / benchmark_index_code / descriptionPrevious value: -"비교할 지수 코드 3자리 (기본값 201 KOSPI200 — get_market_index의 '코드' 값)"New value: +"비교할 지수 코드 3자리 (기본값 201 KOSPI200 — get_market_index의 '코드' 값). view=period 전용" - added
Input schema / properties / daysAdded value: +{ + "description": "view=daily/investor의 표시 일수 (기본값 20, 최대 30)", + "maximum": 30, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / viewAdded value: +{ + "description": "조회 종류 (기본값: period)", + "enum": [ + "period", + "daily", + "investor" + ], + "type": "string" +}
- Changed
get_foreign_holding1 field changed- changed
Input schema / properties / days / descriptionPrevious value: -"기준 기간(거래일) — limit_surge는 1/5/10/20 (기본 5), period_net은 1/3/5/10/20/60/120 (기본 20)"New value: +"기준 기간(거래일) — limit_surge는 1/5/10/20 (기본 5), period_net은 1/3/5/10/20/60/120 (기본 20). streak는 3일 고정이라 이 값을 받지 않습니다"
- Changed
get_program_trading6 fields changed- changed
Input schema / properties / base_date / descriptionPrevious value: -"추이 조회 기준일 — 이 날짜부터 과거로 조회 (기본값: 오늘/최근일)"New value: +"추이 조회 기준일 — 이 날짜부터 과거로 조회 (기본값: 오늘/최근일). view=stock_intraday에는 적용되지 않습니다" - changed
Input schema / properties / direction / descriptionPrevious value: -"view=top의 순매수/순매도 (기본값: net_buy)"New value: +"view=top / date_rank의 순매수/순매도 (기본값: net_buy)" - changed
Input schema / properties / market / descriptionPrevious value: -"시장 구분 (기본값: kospi)"New value: +"시장 구분 (기본값: kospi) — 종목 단위 view와 arbitrage_balance에는 적용되지 않습니다. date_rank는 전체(all) 조회를 제공하지 않는 TR이라 시장을 하나 골라야 합니다" - changed
Input schema / properties / stock_code / descriptionPrevious value: -"view=stock_daily 전용 — 조회할 6자리 종목코드"New value: +"view=stock_daily / stock_intraday 전용 — 조회할 6자리 종목코드" - changed
Input schema / properties / top / descriptionPrevious value: -"표시할 종목/행 수 (기본값 20, 최대 50)"New value: +"표시할 종목/행 수 (기본값 20, 최대 50) — view=date_rank는 순위를 조회 범위 안에서 매기므로 20로 제한됩니다" - changed
Input schema / properties / view / enumPrevious value: -[ - "top", - "market_daily", - "market_intraday", - "stock_daily" -]New value: +[ + "top", + "date_rank", + "market_daily", + "market_intraday", + "stock_daily", + "stock_intraday", + "arbitrage_balance" +]
- Changed
get_stock_lending5 fields changed- changed
Input schema / properties / from_date / descriptionPrevious value: -"조회 시작일 (기본값: 30일 전)"New value: +"조회 시작일 (기본값: 30일 전). view=balance_rank에서는 무시됩니다" - changed
Input schema / properties / stock_code / descriptionPrevious value: -"6자리 종목코드 (생략 시 시장 전체 대차 추이)"New value: +"6자리 종목코드 (생략 시 시장 전체 대차 추이). view=balance_rank에서는 무시됩니다" - changed
Input schema / properties / to_date / descriptionPrevious value: -"조회 종료일 (기본값: 오늘)"New value: +"조회 종료일 (기본값: 오늘). view=balance_rank에서는 순위의 기준일입니다" - added
Input schema / properties / topAdded value: +{ + "description": "view=balance_rank의 표시 종목 수 (기본값 20, 최대 50)", + "maximum": 50, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / viewAdded value: +{ + "description": "조회 종류 (기본값: trend)", + "enum": [ + "trend", + "balance_rank" + ], + "type": "string" +}
- Changed
get_vi_stocks1 field changed- changed
Input schema / properties / market / descriptionPrevious value: -"시장 구분 (기본값: all)"New value: +"시장 구분 (기본값: all). stock_code 지정 시에는 무시됩니다"
6 tool updates
v0.44.1- Changed
get_broker_activity8 fields changed- added
Input schema / properties / daysAdded value: +{ + "description": "누적 기간(거래일) — 시장 전체 순위에서만 사용 (기본값 1)", + "enum": [ + "1", + "5", + "10" + ], + "type": "string" +} - added
Input schema / properties / directionAdded value: +{ + "description": "순매매 방향 — 시장 전체 순위에서는 net_buy(기본)/net_sell/all(종목코드 순, 순위 아님), view=broker_rank에서는 볼 거래원 집합 net_buy(순매수한 곳)/net_sell(순매도한 곳)/all(전체, 기본)", + "enum": [ + "net_buy", + "net_sell", + "all" + ], + "type": "string" +} - added
Input schema / properties / marketAdded value: +{ + "description": "시장 구분 — 시장 전체 순위에서만 사용 (기본값 all)", + "enum": [ + "all", + "kospi", + "kosdaq" + ], + "type": "string" +} - added
Input schema / properties / sortAdded value: +{ + "description": "정렬 기준 — amount(순매매 금액, 기본)/quantity(순매매 수량)", + "enum": [ + "amount", + "quantity" + ], + "type": "string" +} - changed
Input schema / properties / stock_code / descriptionPrevious value: -"조회할 6자리 종목코드"New value: +"조회할 6자리 종목코드 — 주면 종목별 거래원, 생략하면 시장 전체 외국계 창구 순위" - added
Input schema / properties / topAdded value: +{ + "description": "시장 전체 순위에서 표시할 종목 수 (기본 20, 최대 100)", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / viewAdded value: +{ + "description": "stock_code를 줬을 때의 표 종류 — top5(당일 상위 5개사, 기본)/broker_rank(전 거래원 50개사 누적 순위)", + "enum": [ + "top5", + "broker_rank" + ], + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "stock_code" -]
- Added
get_equal_net_trade - Changed
get_foreign_holding8 fields changed- added
Input schema / properties / daysAdded value: +{ + "description": "기준 기간(거래일) — limit_surge는 1/5/10/20 (기본 5), period_net은 1/3/5/10/20/60/120 (기본 20)", + "enum": [ + "1", + "3", + "5", + "10", + "20", + "60", + "120" + ], + "type": "string" +} - added
Input schema / properties / directionAdded value: +{ + "description": "period_net·streak 방향 — net_sell(순매도, 기본)/net_buy(순매수)", + "enum": [ + "net_sell", + "net_buy" + ], + "type": "string" +} - changed
Input schema / properties / limit / descriptionPrevious value: -"표시할 일수 (기본 15, 최대 50; 최신순)"New value: +"종목 추이 모드에서 표시할 일수 (기본 15, 최대 50; 최신순)" - added
Input schema / properties / marketAdded value: +{ + "description": "시장 구분 — rank 모드에서만 사용 (기본값 all)", + "enum": [ + "all", + "kospi", + "kosdaq" + ], + "type": "string" +} - added
Input schema / properties / rankAdded value: +{ + "description": "시장 전체 순위 종류 — limit_surge(한도소진율 증가 상위)/period_net(기간 누적 순매매 상위)/streak(3일 연속 같은 방향 순매매). stock_code를 생략할 때 씁니다", + "enum": [ + "limit_surge", + "period_net", + "streak" + ], + "type": "string" +} - changed
Input schema / properties / stock_code / descriptionPrevious value: -"조회할 6자리 종목코드"New value: +"조회할 6자리 종목코드 — 주면 종목 추이 모드" - added
Input schema / properties / topAdded value: +{ + "description": "rank 모드에서 표시할 종목 수 (기본 20, 최대 100)", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - removed
Input schema / requiredRemoved value: -[ - "stock_code" -]
- Changed
get_foreign_intraday3 fields changed- added
Input schema / properties / investorAdded value: +{ + "description": "투자자 주체 — foreign(외국인, 기본)/institution(기관계)/insurance(보험)/trust(투신)/pension(연기금등)/other_corp(기타법인). foreign만 금액·현재가까지 나옵니다", + "enum": [ + "foreign", + "institution", + "insurance", + "trust", + "pension", + "other_corp" + ], + "type": "string" +} - changed
Input schema / properties / market / descriptionPrevious value: -"시장 (기본값 all=전체 약 1,420종목). 키움이 코드 순으로 주므로 서버가 정렬합니다"New value: +"시장 (기본값 all=전체). foreign은 키움이 코드 순으로 주므로 서버가 정렬합니다" - changed
Input schema / properties / unit / descriptionPrevious value: -"정렬·표시 단위 (기본값: amount=백만원)"New value: +"정렬·표시 단위 (기본값 amount=백만원) — **investor=foreign에서만 유효**, 나머지 주체는 수량만 옵니다"
- Added
get_gold_price - Changed
get_ranking2 fields changed- changed
Input schema / properties / min_volume / descriptionPrevious value: -"거래량 하한 — open_rise/open_fall에서만 사용. 0010=1만주(기본)/0050=5만주/0100=10만주/0500=50만주"New value: +"거래량 하한 — open_rise/open_fall/credit_ratio에서 사용. 0010=1만주(기본)/0050=5만주/0100=10만주/0500=50만주" - changed
Input schema / properties / type / enumPrevious value: -[ - "rise", - "fall", - "volume", - "value", - "open_rise", - "open_fall" -]New value: +[ + "rise", + "fall", + "volume", + "value", + "open_rise", + "open_fall", + "credit_ratio" +]
2 tool updates
v0.39.0- Changed
get_market_movers2 fields changed- added
Input schema / properties / cycleAdded value: +{ + "description": "거래량갱신 비교 기간(거래일) — volume_renew에서만 사용 (기본값 20)", + "enum": [ + "5", + "10", + "20", + "60", + "120" + ], + "type": "string" +} - changed
Input schema / properties / signal / enumPrevious value: -[ - "new_high", - "new_low", - "upper_limit", - "lower_limit", - "surge", - "plunge", - "volume_surge" -]New value: +[ + "new_high", + "new_low", + "upper_limit", + "lower_limit", + "surge", + "plunge", + "volume_surge", + "volume_renew" +]
- Changed
get_ranking3 fields changed- changed
Input schema / properties / market / descriptionPrevious value: -"시장 구분 (기본값: all)"New value: +"시장 구분 (기본값: all — open_rise/open_fall은 all을 지원하지 않습니다)" - added
Input schema / properties / min_volumeAdded value: +{ + "description": "거래량 하한 — open_rise/open_fall에서만 사용. 0010=1만주(기본)/0050=5만주/0100=10만주/0500=50만주", + "enum": [ + "0010", + "0050", + "0100", + "0500" + ], + "type": "string" +} - changed
Input schema / properties / type / enumPrevious value: -[ - "rise", - "fall", - "volume", - "value" -]New value: +[ + "rise", + "fall", + "volume", + "value", + "open_rise", + "open_fall" +]
3 tool updates
v0.36.0- Added
get_etf_rank - Added
get_foreign_intraday - Added
get_net_buy_rank
13 tool updates
v0.34.0- Added
get_account_today - Added
get_credit_trend - Added
get_daily_trading - Added
get_expected_execution - Added
get_institution_trend - Added
get_order_executions - Added
get_orderbook_rank - Changed
get_sector_chart3 fields changed- changed
Input schema / properties / sector_code / descriptionPrevious value: -"업종 코드 3자리 (예: 001 코스피 종합, 101 코스닥 종합 — get_market_index의 '코드' 값)"New value: +"업종 코드 3자리(예: 001 코스피 종합, 101 코스닥 종합) 또는 업종명(예: 증권, 반도체). 이름이 여러 시장에 있으면 후보 코드를 알려 주는 에러가 돌아옵니다" - added
Input schema / properties / sector_code / minLengthAdded value: +1 - removed
Input schema / properties / sector_code / patternRemoved value: -"^\\d{3}$"
- Added
get_sector_flow - Changed
get_sector_price3 fields changed- changed
Input schema / properties / sector_code / descriptionPrevious value: -"업종 코드 3자리 (예: 001 코스피 종합, 101 코스닥 종합 — get_market_index의 '코드' 값)"New value: +"업종 코드 3자리(예: 001 코스피 종합, 101 코스닥 종합) 또는 업종명(예: 증권, 반도체). 이름이 여러 시장에 있으면 후보 코드를 알려 주는 에러가 돌아옵니다" - added
Input schema / properties / sector_code / minLengthAdded value: +1 - removed
Input schema / properties / sector_code / patternRemoved value: -"^\\d{3}$"
- Changed
get_sector_stocks3 fields changed- changed
Input schema / properties / sector_code / descriptionPrevious value: -"업종 코드 3자리 (예: 001 코스피 종합, 101 코스닥 종합 — get_market_index의 '코드' 값)"New value: +"업종 코드 3자리(예: 001 코스피 종합, 101 코스닥 종합) 또는 업종명(예: 증권, 반도체). 이름이 여러 시장에 있으면 후보 코드를 알려 주는 에러가 돌아옵니다" - added
Input schema / properties / sector_code / minLengthAdded value: +1 - removed
Input schema / properties / sector_code / patternRemoved value: -"^\\d{3}$"
- Added
get_supply_concentration - Added
get_valuation_rank
13 tool updates
v0.26.0- Added
get_after_hours - Changed
get_broker_activity1 field changed- changed
Input schema / properties / stock_code / patternPrevious value: -"^\\d{6}$"New value: +"^[0-9A-Z]{6}$"
- Added
get_execution_strength - Changed
get_foreign_holding1 field changed- changed
Input schema / properties / stock_code / patternPrevious value: -"^\\d{6}$"New value: +"^[0-9A-Z]{6}$"
- Changed
get_pending_orders1 field changed- changed
Input schema / properties / stock_code / patternPrevious value: -"^\\d{6}$"New value: +"^[0-9A-Z]{6}$"
- Changed
get_program_trading6 fields changed- added
Input schema / properties / base_dateAdded value: +{ + "description": "추이 조회 기준일 — 이 날짜부터 과거로 조회 (기본값: 오늘/최근일)", + "pattern": "^\\d{4}-?\\d{2}-?\\d{2}$", + "type": "string" +} - changed
Input schema / properties / direction / descriptionPrevious value: -"순매수/순매도 (기본값: net_buy)"New value: +"view=top의 순매수/순매도 (기본값: net_buy)" - added
Input schema / properties / stock_codeAdded value: +{ + "description": "view=stock_daily 전용 — 조회할 6자리 종목코드", + "pattern": "^[0-9A-Z]{6}$", + "type": "string" +} - changed
Input schema / properties / top / descriptionPrevious value: -"표시할 종목 수 (기본값 20, 최대 50)"New value: +"표시할 종목/행 수 (기본값 20, 최대 50)" - changed
Input schema / properties / unit / descriptionPrevious value: -"금액/수량 기준 (기본값: amount)"New value: +"view=top의 금액/수량 기준 (기본값: amount)" - added
Input schema / properties / viewAdded value: +{ + "description": "조회 종류 (기본값: top)", + "enum": [ + "top", + "market_daily", + "market_intraday", + "stock_daily" + ], + "type": "string" +}
- Changed
get_short_selling1 field changed- changed
Input schema / properties / stock_code / patternPrevious value: -"^\\d{6}$"New value: +"^[0-9A-Z]{6}$"
- Changed
get_stock_lending1 field changed- changed
Input schema / properties / stock_code / patternPrevious value: -"^\\d{6}$"New value: +"^[0-9A-Z]{6}$"
- Changed
get_stock_price1 field changed- changed
Input schema / properties / stock_code / patternPrevious value: -"^\\d{6}$"New value: +"^[0-9A-Z]{6}$"
- Changed
get_stock_quotes1 field changed- changed
Input schema / properties / stock_codes / items / patternPrevious value: -"^\\d{6}$"New value: +"^[0-9A-Z]{6}$"
- Changed
get_theme_groups1 field changed- changed
Input schema / properties / stock_code / patternPrevious value: -"^\\d{6}$"New value: +"^[0-9A-Z]{6}$"
- Changed
get_transactions1 field changed- changed
Input schema / properties / stock_code / patternPrevious value: -"^\\d{6}$"New value: +"^[0-9A-Z]{6}$"
- Changed
get_vi_stocks1 field changed- changed
Input schema / properties / stock_code / patternPrevious value: -"^\\d{6}$"New value: +"^[0-9A-Z]{6}$"
5 tool updates
v0.23.0- Added
get_account_trend - Added
get_investor_rank - Changed
get_market_movers1 field changed- changed
Input schema / properties / signal / enumPrevious value: -[ - "new_high", - "new_low", - "upper_limit", - "lower_limit", - "surge", - "plunge" -]New value: +[ + "new_high", + "new_low", + "upper_limit", + "lower_limit", + "surge", + "plunge", + "volume_surge" +]
- Added
get_sector_chart - Added
get_stock_quotes
4 tool updates
v0.16.0- Added
get_broker_activity - Added
get_program_trading - Added
get_stock_lending - Added
get_vi_stocks
6 tool updates
v0.12.0- Removed
calc_isa_tax_status - Added
get_etf_returns - Added
get_market_movers - Added
get_sector_price - Added
get_sector_stocks - Changed
get_stock_chart2 fields changed- changed
Input schema / properties / period / enumPrevious value: -[ - "day", - "week", - "month", - "minute" -]New value: +[ + "day", + "week", + "month", + "year", + "minute", + "tick" +] - added
Input schema / properties / tick_scopeAdded value: +{ + "description": "period=tick일 때 캔들당 틱 수 (기본값: 30)", + "enum": [ + "1", + "3", + "5", + "10", + "30" + ], + "type": "string" +}
21 tool updates
v0.8.0- First observed
calc_isa_tax_status - First observed
get_account_balance - First observed
get_account_holdings - First observed
get_etf_info - First observed
get_foreign_holding - First observed
get_investor_trend - First observed
get_market_index - First observed
get_orderbook - First observed
get_pending_orders - First observed
get_ranking - First observed
get_short_selling - First observed
get_stock_chart - First observed
get_stock_price - First observed
get_theme_groups - First observed
get_theme_stocks - First observed
get_trading_journal - First observed
get_transactions - First observed
get_watchlist - First observed
get_watchlist_groups - First observed
ping - First observed
search_stock
TDQS
Tools are generally well-separated by resource (account, stock, order, market, sector, theme, ETF, gold) and specific action (holdings, trend, today, balance, transactions, pending orders, executions, etc.). Some potential confusion exists among the many market data tools (e.g., get_daily_trading vs get_investor_trend vs get_execution_strength) but descriptions explicitly cross-reference each other to clarify boundaries.
Naming follows a mixed but mostly readable convention: 'get_' plus noun_qualifier (e.g., get_account_holdings, get_stock_quotes, get_orderbook_rank). Some inconsistency: get_ping vs ping, and get_account_today vs get_account_balance (vs get_account_trend) — the pattern is not uniform. Also 'get_trading_journal' vs 'get_transactions' are semantically distinguishable but naming doesn't strongly hint at the difference.
49 tools is far above the typical well-scoped range of 3-15, and even above the generous 16-25 heavy range. However, the server covers a broad domain (Korean stock market, accounts, orders, market data, ETF, gold) and each tool maps to specific Kywoom API TR codes, so the count is justified by the domain's complexity, but it still feels overwhelming for an agent to select from.
The tool surface is extensive: account queries (mostly read-only, no order placement), market data with many screening tools, and special asset classes (ETF, gold, derivatives). Major gaps: there is no tool to place or cancel orders (despite pending orders being viewable), and no options or futures. Also, some account tools are not available in simulation mode. However, for a read-heavy analysis server, the coverage is strong.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
MCP server giving AI agents one-connection access to China A-share market intelligence: financials,
Read-only MCP server exposing a user ORANO library to their own AI agent.
1
Related MCP Servers
- FlicenseAqualityDmaintenanceAn MCP server that enables natural language control of Kiwoom Securities accounts through Claude Desktop. It provides tools for stock price lookup, buying and selling stocks, and analyzing portfolios or trade history via the Kiwoom REST API.112-
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that wraps the Kiwoom Securities REST API to provide read-only access to Korean stock market information. It enables LLMs to query real-time prices, charts, investor trends, and account balances directly.3MIT

pykrx-mcpofficial
AlicenseNot gradedqualityCmaintenanceProvides Korean stock market data (KOSPI, KOSDAQ, KONEX) including prices, fundamentals, investor trading, short selling, and indices via MCP protocol, enabling natural language queries from AI agents like ChatGPT and Claude.3MIT- AlicenseAqualityCmaintenanceMCP server wrapping Toss Securities Open API, enabling stock price queries and trading for Korean and US stocks via natural language.3640MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ChunSam/kiwoom-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server