Skip to main content
Glama
Kuco-dev

tossinvest-api-mcp

by Kuco-dev

tossinvest-api-mcp

토스증권 Open API를 실제로 호출하는 로컬 실행형 MCP 서버

공식 OpenAPI 명세의 모든 operation을 읽어 MCP 도구를 자동 생성합니다.

CI License: MIT Node.js TypeScript MCP SDK

WARNING

비공식 프로젝트입니다. 토스증권의 지원·보증·후원을 받지 않습니다.

투자 조언 도구가 아닙니다. 투자 판단과 그 결과에 대한 모든 책임은 사용자에게 있습니다.

실제 자산에 영향을 주는 주문 API를 포함합니다. 기본값은 비활성화 + dry-run이며, 활성화 시 발생하는 손실에 대해 프로젝트는 책임지지 않습니다.

주요 기능

  • OpenAPI 기반 도구 자동 생성 — 엔드포인트를 하드코딩하지 않습니다. 공식 명세에 API가 추가되면 코드 수정 없이 다음 실행 시 도구가 생깁니다.

  • 실제 API 호출 — OAuth 2.0 Client Credentials 자동 발급·만료 관리·동시 발급 방지(single-flight)

  • 다층 주문 안전장치 — 실주문 기본 비활성화, dryRun 기본 true, 8개 조건 충족 시에만 실행, mutation 자동 재시도 전면 금지

  • 금융 데이터 정밀도 보존 — 금액·수량·가격을 문자열로 유지해 부동소수점 손실을 방지

  • 보안 기본값 — 토큰 메모리 보관, 로그·오류 redaction, 공식 도메인 외 차단(SSRF 방지), path traversal·prototype pollution 방어

  • Docker 지원 — 하드닝된 멀티스테이지 이미지 + Compose 제공

현재 명세(v1.2.5) 기준 29개 operation(읽기 23 / mutation 6)과 관리 도구 7개를 제공합니다.

Related MCP server: tossinvest-openapi-mcp

빠른 시작

pnpm install
pnpm build

cp .env.example .env    # TOSSINVEST_CLIENT_ID / SECRET 입력
pnpm inspect            # MCP Inspector로 도구 목록 확인

MCP 클라이언트 등록은 MCP 클라이언트 설정을, 컨테이너 실행은 Docker로 실행을 참고하세요.

공식 문서


목차

  1. 요구사항

  2. 설치

  3. API 키 발급 및 설정

  4. 허용 IP 등록

  5. 환경변수

  6. 빌드 및 실행

  7. Docker로 실행

  8. MCP 클라이언트 설정

  9. 제공 도구

  10. 계좌 선택 방법

  11. 사용 예시

  12. 실주문 활성화 절차

  13. 조건주문 활성화 절차

  14. mutation 자동 재시도 금지 정책

  15. Rate limit 처리

  16. 문제 해결

  17. 보안 주의사항

  18. 테스트

  19. OpenAPI snapshot 갱신

  20. MCP SDK 버전 선택

  21. 프로젝트 구조

  22. 기여

  23. 라이선스


요구사항

항목

버전

Node.js (실행)

20.10 이상

Node.js (개발·빌드)

22.13 이상 — pnpm 11의 요구사항

pnpm

9 이상 (이 저장소는 11.17.0으로 고정)

토스증권 계좌

Open API 사용 신청 완료

빌드된 dist/는 Node 20.10+에서 동작하지만, 소스에서 직접 빌드하려면 pnpm 11이 요구하는 Node 22.13 이상이 필요합니다. Docker를 사용하면 호스트 Node 버전과 무관하게 실행할 수 있습니다.

설치

git clone https://github.com/Kuco-dev/tossinvest-api-mcp.git
cd tossinvest-api-mcp
pnpm install
pnpm build

API 키 발급 및 설정

  1. 토스증권 WTS(웹 트레이딩) 접속

  2. 설정 → Open API 메뉴 진입

  3. API 사용 신청 후 client_id, client_secret 발급

  4. client_secret은 발급 시점에만 확인 가능하므로 안전한 곳에 보관

  5. 프로젝트 루트에 .env 생성

cp .env.example .env
TOSSINVEST_CLIENT_ID=발급받은_client_id
TOSSINVEST_CLIENT_SECRET=발급받은_client_secret

.env.gitignore에 등록되어 있습니다. 절대 커밋하지 마세요.

허용 IP 등록

토스증권 Open API는 등록된 IP에서만 호출할 수 있습니다.

  1. WTS → 설정 → Open API → 허용 IP 관리

  2. 현재 사용 중인 공인 IP를 등록

등록하지 않으면 토큰 발급 단계에서 403 access_denied (IP address not allowed)를 받습니다. 이 서버는 해당 오류를 ip-not-allowed 코드로 정규화하고 tossinvest_auth_statuspossibleIpAllowlistIssuetrue로 표시합니다.

가정/사무실 회선은 공인 IP가 변경될 수 있으므로, 인증이 갑자기 실패하면 IP부터 확인하세요.

환경변수

변수

기본값

설명

TOSSINVEST_CLIENT_ID

(없음)

OAuth client ID

TOSSINVEST_CLIENT_SECRET

(없음)

OAuth client secret

TOSSINVEST_DEFAULT_ACCOUNT

(없음)

기본 계좌 accountSeq

TOSSINVEST_OPENAPI_URL

공식 명세 URL

OpenAPI JSON 위치

TOSSINVEST_BASE_URL

https://openapi.tossinvest.com

API 서버

TOSSINVEST_ALLOW_CUSTOM_BASE_URL

false

비공식 base URL 허용 여부

TOSSINVEST_OPENAPI_STRICT

true

명세 변환 실패 시 fail-closed

TOSSINVEST_SPEC_CACHE_ENABLED

true

true면 원격 명세 우선, 실패 시 snapshot

TOSSINVEST_ENABLE_TRADING

false

일반 주문 mutation 실행 허용

TOSSINVEST_ENABLE_CONDITIONAL_ORDERS

false

조건주문 mutation 실행 허용

TOSSINVEST_MUTATION_CONFIRMATION

I_UNDERSTAND_THIS_PLACES_A_REAL_ORDER

실주문 확인 문자열

TOSSINVEST_TOKEN_EXPIRY_SKEW_SECONDS

60

토큰 만료 safety skew

TOSSINVEST_REQUEST_TIMEOUT_MS

30000

요청 타임아웃

TOSSINVEST_MAX_READ_RETRIES

2

읽기 요청 최대 재시도

TOSSINVEST_MAX_RESPONSE_BYTES

8388608

응답 크기 상한

TOSSINVEST_LOG_LEVEL

info

silent/error/warn/info/debug

TOSSINVEST_ENABLE_RAW_REQUESTS

false

raw request 도구 노출 여부

인증 정보가 없어도 서버는 정상 기동합니다. 명세 조회·검색·상세 조회·인증 상태 조회는 인증 없이 동작하며, 실제 API 호출 시점에만 credentials-missing 오류를 반환합니다.

빌드 및 실행

pnpm install          # 의존성 설치
pnpm dev              # 개발 모드 (tsx watch)
pnpm build            # dist/ 로 컴파일
pnpm start            # 빌드 결과 실행 (stdio)
pnpm test             # 테스트
pnpm test:coverage    # 커버리지 포함 테스트
pnpm lint             # ESLint
pnpm typecheck        # 타입 검사
pnpm openapi:update   # 공식 명세로 snapshot 갱신
pnpm openapi:verify   # snapshot 검증
pnpm inspect          # MCP Inspector 로 도구 목록 확인

pnpm inspect를 실행하면 MCP Inspector가 열리며 등록된 전체 도구 목록과 입력 스키마를 확인할 수 있습니다. (pnpm build 선행 필요)

Docker로 실행

Node/pnpm을 설치하지 않고 컨테이너로 실행할 수 있습니다.

중요: 이 서버는 stdio MCP 서버입니다. 컨테이너의 stdin/stdout이 곧 MCP 통신 채널이므로 반드시 -i(interactive) 옵션이 필요하며, -t(TTY)는 주면 안 됩니다. TTY는 JSON-RPC 프레이밍을 깨뜨립니다. 같은 이유로 docker compose up은 실사용에 적합하지 않습니다 (stdin이 MCP 클라이언트에 연결되지 않음).

1. 이미지 빌드

docker compose build
# 또는
docker build -t tossinvest-api-mcp:latest .

멀티스테이지 빌드로 최종 이미지에는 dist/런타임 의존성 3개(@modelcontextprotocol/sdk, zod, dotenv)만 포함됩니다. node 사용자로 실행되며 root 권한을 사용하지 않습니다.

2. 환경변수 설정

인증 정보는 이미지에 굽지 않고 실행 시점에 주입합니다. .dockerignore.env를 빌드 컨텍스트에서 제외합니다.

cp .env.example .env   # 값 입력

3. 실행

# 대화형 실행 (직접 JSON-RPC를 보내 확인할 때)
docker compose run --rm tossinvest-mcp

# 컨테이너 안의 도구 목록을 Inspector로 확인
docker compose --profile tools run --rm --service-ports inspector
# → http://127.0.0.1:6274 접속

package.json 단축 스크립트도 제공합니다.

pnpm docker:build
pnpm docker:run
pnpm docker:inspect

4. MCP 클라이언트에 Docker로 등록

MCP 클라이언트는 컨테이너를 직접 띄워야 하므로 docker compose가 아니라 docker run -i를 사용합니다.

Claude Desktop / Cursor (Linux · macOS)

{
  "mcpServers": {
    "tossinvest": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "--env-file", "/absolute/path/tossinvest-api-mcp/.env",
        "tossinvest-api-mcp:latest"
      ]
    }
  }
}

Windows

{
  "mcpServers": {
    "tossinvest": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "--env-file", "C:/absolute/path/tossinvest-api-mcp/.env",
        "tossinvest-api-mcp:latest"
      ]
    }
  }
}

--env-file 대신 개별 주입도 가능합니다.

"args": [
  "run", "--rm", "-i",
  "-e", "TOSSINVEST_CLIENT_ID",
  "-e", "TOSSINVEST_CLIENT_SECRET",
  "-e", "TOSSINVEST_DEFAULT_ACCOUNT",
  "tossinvest-api-mcp:latest"
]

-e KEY(값 없이)는 호스트의 동일 이름 환경변수를 전달합니다. 설정 파일에 secret을 적지 않아도 됩니다.

컨테이너 보안 설정

docker-compose.yml에는 다음 하드닝이 적용되어 있습니다.

설정

이유

user: node

root 실행 금지

read_only: true

서버는 파일 쓰기가 없음 (토큰은 메모리 보관)

tmpfs: /tmp, HOME=/tmp

읽기 전용 루트에서 필요한 최소 쓰기 공간만 허용

cap_drop: ALL

모든 리눅스 capability 제거

no-new-privileges:true

권한 상승 차단

mem_limit, pids_limit

자원 남용 방지

stdin_open: true, tty: false

stdio MCP 채널 보장

tini (ENTRYPOINT)

SIGTERM 전달 → graceful shutdown

실주문 env 기본 false

Dockerfile ENV에서도 안전 기본값 강제

Inspector 서비스는 npx로 패키지를 내려받아야 해서 read_only: false이며, 포트는 127.0.0.1에만 게시되어 외부에 노출되지 않습니다.

오프라인 동작

이미지에는 OpenAPI snapshot이 포함되어 있어, 원격 명세를 받지 못해도 서버가 기동됩니다.

# 원격 명세 조회를 끄고 snapshot만 사용
docker run --rm -i -e TOSSINVEST_SPEC_CACHE_ENABLED=false tossinvest-api-mcp:latest

다만 실제 API 호출에는 인터넷 연결과 허용 IP 등록이 필요합니다. 컨테이너의 아웃바운드 IP가 호스트 공인 IP와 다를 수 있으니(NAT/VPN 환경) 인증 실패 시 IP를 먼저 확인하세요.

MCP 클라이언트 설정

빌드 후 dist/index.js절대 경로를 사용합니다.

Claude Desktop

설정 파일 위치

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows

{
  "mcpServers": {
    "tossinvest": {
      "command": "node",
      "args": ["C:/absolute/path/tossinvest-api-mcp/dist/index.js"],
      "env": {
        "TOSSINVEST_CLIENT_ID": "사용자 값",
        "TOSSINVEST_CLIENT_SECRET": "사용자 값",
        "TOSSINVEST_DEFAULT_ACCOUNT": "사용자 값",
        "TOSSINVEST_ENABLE_TRADING": "false"
      }
    }
  }
}

Linux / macOS

{
  "mcpServers": {
    "tossinvest": {
      "command": "node",
      "args": ["/absolute/path/tossinvest-api-mcp/dist/index.js"],
      "env": {
        "TOSSINVEST_CLIENT_ID": "사용자 값",
        "TOSSINVEST_CLIENT_SECRET": "사용자 값",
        "TOSSINVEST_DEFAULT_ACCOUNT": "사용자 값",
        "TOSSINVEST_ENABLE_TRADING": "false"
      }
    }
  }
}

Claude Code

# Linux / macOS
claude mcp add tossinvest \
  --env TOSSINVEST_CLIENT_ID=사용자값 \
  --env TOSSINVEST_CLIENT_SECRET=사용자값 \
  --env TOSSINVEST_DEFAULT_ACCOUNT=사용자값 \
  -- node /absolute/path/tossinvest-api-mcp/dist/index.js
# Windows PowerShell
claude mcp add tossinvest `
  --env TOSSINVEST_CLIENT_ID=사용자값 `
  --env TOSSINVEST_CLIENT_SECRET=사용자값 `
  --env TOSSINVEST_DEFAULT_ACCOUNT=사용자값 `
  -- node C:/absolute/path/tossinvest-api-mcp/dist/index.js

또는 프로젝트 루트 .mcp.json:

{
  "mcpServers": {
    "tossinvest": {
      "command": "node",
      "args": ["/absolute/path/tossinvest-api-mcp/dist/index.js"],
      "env": {
        "TOSSINVEST_CLIENT_ID": "사용자 값",
        "TOSSINVEST_CLIENT_SECRET": "사용자 값"
      }
    }
  }
}

Cursor

~/.cursor/mcp.json 또는 프로젝트의 .cursor/mcp.json:

{
  "mcpServers": {
    "tossinvest": {
      "command": "node",
      "args": ["C:/absolute/path/tossinvest-api-mcp/dist/index.js"],
      "env": {
        "TOSSINVEST_CLIENT_ID": "사용자 값",
        "TOSSINVEST_CLIENT_SECRET": "사용자 값",
        "TOSSINVEST_DEFAULT_ACCOUNT": "사용자 값"
      }
    }
  }
}

Codex CLI

~/.codex/config.toml:

[mcp_servers.tossinvest]
command = "node"
args = ["/absolute/path/tossinvest-api-mcp/dist/index.js"]

[mcp_servers.tossinvest.env]
TOSSINVEST_CLIENT_ID = "사용자 값"
TOSSINVEST_CLIENT_SECRET = "사용자 값"
TOSSINVEST_DEFAULT_ACCOUNT = "사용자 값"
TOSSINVEST_ENABLE_TRADING = "false"

Windows에서는 args["C:/absolute/path/tossinvest-api-mcp/dist/index.js"]로 지정합니다.

일반 MCP stdio 클라이언트

command: node
args:    <절대경로>/dist/index.js
transport: stdio
env:     TOSSINVEST_CLIENT_ID, TOSSINVEST_CLIENT_SECRET, ...

stdout은 JSON-RPC 전용이며 모든 로그는 stderr로만 출력됩니다.

제공 도구

관리용 wrapper 도구

도구

설명

tossinvest_api_overview

OpenAPI 버전, 문서 버전, 서버 URL, tag, operation 수, 읽기/mutation 수, 실주문 활성화 상태, snapshot/원격 사용 여부

tossinvest_list_operations

tag/method/path/readOnly/destructive/keyword 필터로 operation 목록 조회

tossinvest_search_operations

operationId·summary·description·path·tag 검색

tossinvest_get_operation

특정 operation 상세 (필수/선택 입력, requestBody, 응답 스키마, 계좌 헤더 필요 여부, mutation 여부, rate limit 그룹, MCP 도구 이름)

tossinvest_call_operation

operationId 기반 호출 wrapper (mutation guard 동일 적용)

tossinvest_auth_status

인증 설정·토큰 준비 상태 (secret/token 미노출)

tossinvest_refresh_auth

토큰 명시적 갱신 ({ ok, expiresIn, expiresAt }만 반환)

tossinvest_raw_request

TOSSINVEST_ENABLE_RAW_REQUESTS=true일 때만 노출. 공식 명세에 정의된 method+path만 허용

OpenAPI 기반 직접 도구 자동 생성

서버는 시작 시 공식 OpenAPI 명세를 로드하여 모든 operation을 MCP 도구로 자동 등록합니다. 엔드포인트 목록을 코드에 하드코딩하지 않으므로, 공식 명세에 새 API가 추가되면 서버 코드 수정 없이 다음 시작 시 자동으로 도구가 생깁니다.

  • 도구 이름 = OpenAPI operationId (MCP 규칙에 맞게 정규화, 충돌 시 서버 시작 실패)

  • 설명 = summary + description + method/path + tag 조합

  • 입력 스키마 = parameters와 requestBody에서 생성

  • annotation = readOnlyHint / destructiveHint / idempotentHint / openWorldHint

입력 형식:

{
  "path": {},
  "query": {},
  "body": {},
  "account": "1",
  "dryRun": true,
  "confirmation": ""
}

해당 operation에 필요 없는 필드는 스키마에서 제거됩니다. 예를 들어 getAccounts는 입력이 없고, getPrices에는 account/dryRun/confirmation이 없습니다. 임의 헤더 입력은 허용되지 않습니다.

현재 명세(문서 버전 1.2.5) 기준으로 등록되는 도구:

분류

개수

전체 operation

29

읽기 전용

23

mutation (주문 3 + 조건주문 3)

6

제외

1 (issueOAuth2Token)

issueOAuth2Token(POST /oauth2/token)은 client secret과 access token이 MCP 경계를 넘지 않도록 의도적으로 도구 등록에서 제외하고, 서버 내부 인증 계층이 전담합니다. 대신 tossinvest_auth_status / tossinvest_refresh_auth를 사용하세요.

계좌 선택 방법

계좌가 필요한 API는 다음 순서로 계좌를 결정합니다.

  1. 도구 입력의 account

  2. TOSSINVEST_DEFAULT_ACCOUNT

  3. 둘 다 없으면 호출하지 않고 오류 반환

임의로 첫 번째 계좌를 자동 선택하지 않습니다. 먼저 계좌 목록을 조회하세요.

getAccounts 도구를 호출해 accountSeq를 확인해줘

확인한 accountSeqaccount에 전달하거나 .env에 넣습니다.

TOSSINVEST_DEFAULT_ACCOUNT=1

사용 예시

시세 조회

삼성전자와 애플 현재가를 알려줘

내부적으로 getPrices가 호출됩니다.

{
  "name": "getPrices",
  "arguments": { "query": { "symbols": "005930,AAPL" } }
}

응답:

{
  "ok": true,
  "operationId": "getPrices",
  "httpStatus": 200,
  "requestId": "01HXYZ...",
  "rateLimit": { "limit": 10, "remaining": 9, "resetSeconds": 1 },
  "result": [ { "symbol": "005930", "close": "70000" } ]
}

호가, 체결, 캔들도 같은 방식입니다.

{ "name": "getOrderbook", "arguments": { "query": { "symbol": "005930" } } }
{ "name": "getTrades",    "arguments": { "query": { "symbol": "005930", "count": 20 } } }
{ "name": "getCandles",   "arguments": { "query": { "symbol": "005930", "interval": "1d", "count": 30 } } }

계좌 조회

{ "name": "getAccounts",  "arguments": {} }
{ "name": "getHoldings",  "arguments": { "account": "1" } }
{ "name": "getBuyingPower", "arguments": { "account": "1", "query": { "currency": "KRW" } } }
{ "name": "getSellableQuantity", "arguments": { "account": "1", "query": { "symbol": "005930" } } }
{ "name": "getCommissions", "arguments": { "account": "1" } }

주문 조회

{ "name": "getOrders", "arguments": { "account": "1", "query": { "symbol": "005930", "limit": 20 } } }
{ "name": "getOrder",  "arguments": { "account": "1", "path": { "orderId": "0d5QIH..." } } }
{ "name": "getConditionalOrders", "arguments": { "account": "1" } }

dry-run 주문 (기본 동작)

{
  "name": "createOrder",
  "arguments": {
    "account": "1",
    "body": {
      "symbol": "005930",
      "side": "BUY",
      "orderType": "LIMIT",
      "quantity": "10",
      "price": "70000"
    }
  }
}

dryRun을 생략하면 기본값 true이므로 토스증권 서버로 어떤 네트워크 요청도 보내지 않고 실행 계획만 반환합니다.

{
  "ok": true,
  "dryRun": true,
  "operationId": "createOrder",
  "executed": false,
  "summary": {
    "operationId": "createOrder",
    "method": "POST",
    "path": "/api/v1/orders",
    "mutationType": "일반 주문 mutation (실제 자산 영향)",
    "account": "*",
    "symbol": "005930",
    "side": "BUY",
    "orderType": "LIMIT",
    "quantity": "10",
    "price": "70000"
  },
  "missingRequiredFields": [],
  "blockers": [
    "실주문이 비활성화되어 있습니다 (TOSSINVEST_ENABLE_TRADING=false).",
    "dryRun=true 이므로 네트워크 요청을 보내지 않습니다.",
    "confirmation 문자열이 비어 있습니다."
  ],
  "requirementsToExecute": [
    "TOSSINVEST_ENABLE_TRADING=true",
    "도구 입력에 dryRun=false 를 명시",
    "confirmation 에 TOSSINVEST_MUTATION_CONFIRMATION 과 동일한 값을 전달"
  ],
  "note": "실제 주문은 전송되지 않았습니다. ..."
}

가격·수량·금액은 문자열로 전달하세요. 부동소수점 변환으로 인한 정밀도 손실을 막기 위해 서버는 이 값을 문자열 그대로 유지합니다.

실주문 활성화 절차

실제 주문은 아래 8가지 조건이 모두 충족될 때만 실행됩니다. 하나라도 어긋나면 네트워크 요청 자체를 보내지 않습니다.

  1. TOSSINVEST_ENABLE_TRADING=true

  2. 도구 입력 dryRun=false

  3. confirmationTOSSINVEST_MUTATION_CONFIRMATION과 정확히 일치

  4. 인증 정보(CLIENT_ID/CLIENT_SECRET) 정상

  5. 계좌 명시(account 또는 TOSSINVEST_DEFAULT_ACCOUNT)

  6. OpenAPI 스키마 필수값 충족

  7. 요청 대상이 공식 API 서버

  8. mutation 종류가 명확히 분류됨

절차:

# 1) .env 수정
TOSSINVEST_ENABLE_TRADING=true
TOSSINVEST_MUTATION_CONFIRMATION=I_UNDERSTAND_THIS_PLACES_A_REAL_ORDER
TOSSINVEST_DEFAULT_ACCOUNT=1
# 2) MCP 클라이언트 재시작 (env 반영)
// 3) 반드시 먼저 dry-run 으로 내용 확인 후, 실제 실행
{
  "name": "createOrder",
  "arguments": {
    "account": "1",
    "body": {
      "symbol": "005930",
      "side": "BUY",
      "orderType": "LIMIT",
      "quantity": "10",
      "price": "70000",
      "clientOrderId": "my-order-001"
    },
    "dryRun": false,
    "confirmation": "I_UNDERSTAND_THIS_PLACES_A_REAL_ORDER"
  }
}

clientOrderId는 토스증권의 멱등성 키(10분 유효)입니다. 중복 주문 위험을 줄이려면 지정을 권장합니다.

조건주문 활성화 절차

조건주문은 위 조건에 더해 별도 플래그가 필요합니다.

TOSSINVEST_ENABLE_TRADING=true
TOSSINVEST_ENABLE_CONDITIONAL_ORDERS=true

TOSSINVEST_ENABLE_TRADING만 켜고 조건주문을 실행하면 차단됩니다.

mutation 자동 재시도 금지 정책

다음 operation은 어떤 경우에도 자동 재시도하지 않습니다.

  • createOrder, modifyOrder, cancelOrder

  • createConditionalOrder, modifyConditionalOrder, cancelConditionalOrder

  • 향후 명세에 추가되는 주문 관련 mutation

timeout, connection reset, 500/502/503처럼 결과가 불확실한 경우에도 재시도하지 않습니다. 주문이 이미 접수되었을 수 있기 때문입니다. 대신 다음을 반환합니다.

{
  "ok": false,
  "operationId": "createOrder",
  "httpStatus": 503,
  "error": {
    "code": "mutation-result-unknown",
    "message": "createOrder 요청의 결과가 불확실합니다. 자동 재시도하지 않았습니다. ...",
    "requestId": "01HXYZ...",
    "retryable": false,
    "details": {
      "originalErrorCode": "upstream-error",
      "clientOrderId": "my-order-001",
      "account": "*",
      "nextStep": "주문내역 조회 API 로 접수 여부를 확인하세요."
    }
  }
}

이 경우 재요청하기 전에 반드시 getOrders / getOrder(조건주문은 getConditionalOrders)로 접수 여부를 확인하세요.

또한 401 자동 갱신도 mutation에는 적용되지 않습니다. 읽기 전용 GET 요청만 토큰을 1회 갱신하고 1회 재시도합니다.

Rate limit 처리

응답 헤더 X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, Retry-After를 파싱해 성공 응답의 rateLimit 필드로 반환합니다.

"rateLimit": { "limit": 10, "remaining": 9, "resetSeconds": 1 }

재시도 정책:

  • GET 등 명확한 읽기 전용 요청만 재시도

  • mutation 재시도 금지

  • Retry-After가 있으면 우선 사용 (30초 초과 시 재시도하지 않음)

  • 없으면 exponential backoff + jitter

  • 최대 횟수는 TOSSINVEST_MAX_READ_RETRIES (기본 2)

  • 인증 실패·입력 오류·권한 오류는 재시도하지 않음

  • 타임아웃은 AbortController로 구현 (TOSSINVEST_REQUEST_TIMEOUT_MS)

문제 해결

증상

원인 / 해결

credentials-missing

TOSSINVEST_CLIENT_ID / TOSSINVEST_CLIENT_SECRET 미설정. MCP 클라이언트 env에 넣었는지 확인 후 클라이언트 재시작

auth-failed (invalid_client)

client ID/secret 오타 또는 클라이언트 비활성. 자동 재시도하지 않으므로 값을 직접 확인

ip-not-allowed

WTS → 설정 → Open API → 허용 IP 관리에 현재 공인 IP 등록

account-header-required

account 인자 또는 TOSSINVEST_DEFAULT_ACCOUNT 설정. getAccountsaccountSeq 확인

rate-limit-exceeded

호출 빈도 조절. 응답의 retryAfterSeconds 참고

trading-disabled

실주문 8조건 미충족. 응답의 details.requirementsToExecute 확인

mutation-blocked

명세 변경으로 mutation 분류 불가. src/config/constants.ts의 정책 테이블 갱신 필요

mutation-result-unknown

주문 결과 불확실. getOrders로 확인 후 판단

openapi-load-failed

네트워크 문제. pnpm openapi:update로 snapshot 갱신

도구 목록이 안 보임

pnpm build 후 절대 경로 확인. pnpm inspect로 직접 점검

클라이언트가 JSON 파싱 오류

stdout 오염. 이 서버는 stdout에 JSON-RPC만 출력하므로, 다른 래퍼 스크립트가 출력하는지 확인

Docker에서 즉시 종료됨

-i 옵션 누락. stdin이 닫히면 stdio 서버는 종료됩니다

Docker에서 JSON-RPC 깨짐

-t(TTY)를 준 경우. docker run --rm -i만 사용하세요

Docker에서 credentials-missing

--env-file 경로가 절대 경로인지, .env에 값이 들어있는지 확인

Docker에서 ip-not-allowed

컨테이너 아웃바운드 IP가 호스트와 다를 수 있음. 허용 IP 재확인

docker compose up에서 동작 안 함

정상입니다. stdio 서버이므로 docker compose run --rm 또는 MCP 클라이언트에서 docker run -i로 실행하세요

로그 레벨을 높이면 stderr에서 더 자세한 정보를 볼 수 있습니다. 비밀값은 debug 모드에서도 redaction됩니다.

TOSSINVEST_LOG_LEVEL=debug

보안 주의사항

  • .env와 인증 파일은 .gitignore 처리되어 있습니다. 절대 커밋하지 마세요.

  • access token은 메모리에만 보관하며 파일·DB·로그·MCP 응답에 저장하거나 출력하지 않습니다.

  • client secret과 Authorization 헤더는 로그와 오류 객체에서 redaction됩니다.

  • 계좌 식별값은 로그·dry-run 요약에서 마스킹됩니다.

  • 사용자는 Authorization, Cookie, Host, Content-Length, Proxy-Authorization, X-Tossinvest-Account 헤더를 직접 지정할 수 없습니다.

  • 기본적으로 공식 도메인(openapi.tossinvest.com)만 호출할 수 있습니다 (SSRF 방지).

  • 공식 OpenAPI에 정의되지 않은 path는 호출할 수 없습니다.

  • path traversal, prototype pollution, 과대 응답, JSON 파싱 오류를 방어합니다.

  • 실주문은 기본 비활성화이며 dry-run이 기본값입니다.

자세한 내용은 SECURITY.md를 참고하세요.

테스트

pnpm test
pnpm test:coverage

모든 테스트는 HTTP mock을 사용하며 실제 토스증권 API를 호출하지 않습니다. 실제 주문 API를 호출하는 테스트는 존재하지 않습니다.

테스트 범위:

  • OpenAPI: snapshot 파싱, operationId 인덱싱/중복 검출, $ref 해석, 순환 참조, requestBody/parameter 변환, required·enum·oneOf/anyOf/allOf·nullable 처리, 도구 이름 충돌, 신규 operation 자동 등록

  • 인증: 인증 정보 누락, 최초 발급, 캐시, safety skew, single-flight 동시 발급 방지, 401 처리, secret redaction

  • 계좌: 명시 account, 기본 account, 누락 시 차단, 필요한 API에만 헤더 추가, 마스킹

  • 요청: path 인코딩, query 직렬화, 다중 symbol, JSON/form body, timeout, 429, Retry-After, 4xx/5xx 정규화, requestId 추출, decimal 정밀도 유지

  • 주문 안전성: 기본 비활성, dryRun 기본 true, dry-run 무통신, confirmation 검증, 조건주문 별도 플래그, mutation 무재시도, wrapper·raw로 우회 불가

  • MCP: initialize, tools/list, 관리 도구, 직접 도구, 오류 응답, stdout 무오염, stderr 로그, graceful shutdown

OpenAPI snapshot 갱신

원격 명세를 우선 사용하지만, 네트워크 장애 시 번들 snapshot으로 폴백합니다.

pnpm openapi:update   # 공식 JSON 다운로드 → src/openapi/openapi.snapshot.json 갱신
pnpm openapi:verify   # operation 수, operationId 중복, 스키마 변환 가능 여부 검증

openapi:verify 출력 예:

[openapi:verify] 검증 성공
  OpenAPI 버전      : 3.1.0
  API 문서 버전     : 1.2.5
  API 서버          : https://openapi.tossinvest.com
  path 수           : 27
  등록 operation    : 29
  읽기 전용         : 23
  mutation          : 6
  분류 불가 mutation: 0
  제외 operation    : 1

MCP SDK 버전 선택

  • 선택 버전: @modelcontextprotocol/sdk 1.29.0 (package.json에 정확한 버전으로 고정)

  • 선택 이유:

    • 구현 시점 기준 npm latest 태그가 가리키는 안정(stable) 릴리스입니다. beta/rc 태그를 사용하지 않았습니다.

    • 저수준 Server + StdioServerTransport + setRequestHandler API는 안정 API이며 deprecated되지 않았습니다.

    • structuredContent가 안정 버전에서 지원되므로, 사람이 읽는 text와 기계가 처리하는 구조화 결과를 함께 반환합니다.

    • experimental/* 경로의 API는 사용하지 않았습니다.

프로젝트 구조

tossinvest-api-mcp/
├─ src/
│  ├─ index.ts                  # stdio 진입점, 시그널 처리
│  ├─ server.ts                 # MCP 서버 구성, 도구 등록
│  ├─ config/                   # 환경변수 검증(Zod), 상수·정책 테이블
│  ├─ auth/                     # OAuth 토큰 관리, 인증 오류
│  ├─ openapi/                  # 명세 로더·$ref 해석·스키마 변환·도구 생성
│  │  └─ openapi.snapshot.json  # 오프라인 폴백용 번들 명세
│  ├─ client/                   # 요청 조립, 응답 파싱, 재시도, rate limit
│  ├─ tools/                    # mutation 분류·guard, operation/관리 도구
│  ├─ security/                 # redaction, URL 정책, 민감 필드 정의
│  ├─ errors/                   # AppError, 오류 정규화
│  └─ utils/                    # logger(stderr), single-flight, JSON
├─ tests/                       # Vitest (실제 API 호출 없음)
├─ scripts/                     # snapshot 갱신·검증, 빌드 자산 복사
├─ Dockerfile
└─ docker-compose.yml

기여

이슈와 PR을 환영합니다. CONTRIBUTING.md를 먼저 읽어주세요.

PR 전 아래가 모두 통과해야 합니다.

pnpm typecheck && pnpm lint && pnpm test && pnpm build && pnpm openapi:verify

실제 주문 API를 호출하는 코드나 테스트는 절대 추가하지 마세요. 보안 취약점은 공개 이슈 대신 SECURITY.md의 절차를 따라주세요.

라이선스

MIT

이 프로젝트는 토스증권과 무관한 비공식 프로젝트이며, 금융·투자 조언 소프트웨어가 아닙니다. 사용에 따른 모든 책임은 사용자에게 있습니다.

Available Tools

36 tools
cancelConditionalOrderA
Destructive

조건주문 취소

조건주문을 취소합니다. conditionalOrderId 로 취소 대상을 식별합니다.

Rate Limits Group: CONDITIONAL_ORDER

[DELETE /api/v1/conditional-orders/{conditionalOrderId}]

tags: Conditional Order

⚠️ 실제 자산에 영향을 주는 조건주문 API 입니다. 기본값은 dryRun=true 이며 실행하려면 TOSSINVEST_ENABLE_CONDITIONAL_ORDERS=true 와 confirmation 이 필요합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesURL 경로 파라미터
dryRunNo기본값 true. true 이면 토스증권 서버로 어떤 네트워크 요청도 보내지 않고 실행 계획만 반환합니다. 실제 주문을 내려면 false 로 명시해야 합니다.
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.
confirmationNo실주문 확인 문자열. TOSSINVEST_MUTATION_CONFIRMATION 환경변수 값과 정확히 일치해야 실제 주문이 실행됩니다.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include destructiveHint=true, and the description adds critical behavioral details: the dry-run safety default, the requirement for TOSSINVEST_ENABLE_CONDITIONAL_ORDERS and confirmation, and the rate limits group. This goes beyond annotation-only disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with title, explanation, rate limits, endpoint, and warning, but the sentence about tags and the warning section could be more concise. It front-loads the purpose but includes some redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacking an output schema, the description does not explain the response format or error handling. It covers the effect (cancellation) and safety precautions, but omits return value details, which is a gap for complete agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and schema descriptions are comprehensive for all 4 parameters. The description adds minimal extra meaning (e.g., dryRun default, confirmation requirement), but does not significantly improve understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states '조건주문 취소' (cancel conditional order) and explains the action using conditionalOrderId. It differentiates from sibling tools like createConditionalOrder, getConditionalOrder, modifyConditionalOrder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the dryRun default and required environment variables for execution, but does not explicitly state when to use or avoid this tool compared to alternatives like cancelOrder for spot orders.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cancelOrderA
Destructive

주문 취소

기존 주문을 취소합니다. 이미 체결된 주문은 취소할 수 없습니다.

Rate Limits Group: ORDER

[POST /api/v1/orders/{orderId}/cancel]

tags: Order

⚠️ 실제 자산에 영향을 주는 주문 API 입니다. 기본값은 dryRun=true 이며 실행하려면 TOSSINVEST_ENABLE_TRADING=true 와 confirmation 이 필요합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo요청 본문 (application/json). 금액·수량·가격은 정밀도 보존을 위해 문자열로 전달합니다.
pathYesURL 경로 파라미터
dryRunNo기본값 true. true 이면 토스증권 서버로 어떤 네트워크 요청도 보내지 않고 실행 계획만 반환합니다. 실제 주문을 내려면 false 로 명시해야 합니다.
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.
confirmationNo실주문 확인 문자열. TOSSINVEST_MUTATION_CONFIRMATION 환경변수 값과 정확히 일치해야 실제 주문이 실행됩니다.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds critical behavioral details: dryRun defaults to true, actual execution requires TOSSINVEST_ENABLE_TRADING and confirmation, and it affects real assets. Rate limits group is also mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with line breaks, headers, and a warning. It is front-loaded with purpose. Minor redundancy (first line repeats title) but overall efficient for the information conveyed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description covers key aspects: purpose, constraint on executed orders, dryRun behavior, and required environment variables. Lacks details on response/error handling but sufficient for safe usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The description itself reinforces the dryRun default and confirmation requirement, adding value beyond the schema. No parameter information is missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool cancels an existing order, with the specific verb '취소합니다' (cancels) and resource '기존 주문' (existing order). It distinguishes from siblings like cancelConditionalOrder by specifying it cancels general orders, not conditional ones.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates the tool is for canceling existing orders and notes that executed orders cannot be canceled, but does not explicitly compare to alternatives like modifyOrder or cancelConditionalOrder. Usage guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createConditionalOrderA
Destructive

조건주문 생성

특정 종목의 가격을 감시해 조건 충족 시 자동으로 매매(매수/매도)하는 조건주문을 생성합니다.

감시가와 매매 방향(매수/매도)을 설정한 후 가격이 감시가에 도달하면 조건이 발동되어 주문이 생성됩니다.

타입(type) — 조건의 개수와 관계를 정합니다:

  • SINGLE: first 한 조건만 감시합니다.

  • OCO (One-Cancels-the-Other): 두 조건(first·second)을 동시에 감시하다, 하나의 조건이 충족되면 나머지 조건은 자동 취소됩니다. first/second 모두 매도(SELL) 이며 first 감시가 > 현재가 > second 감시가 여야 합니다. 호가유형은 지정가(LIMIT)만 지원합니다.

  • OTO (One-Triggers-the-Other): first 조건이 체결되면 그때부터 second 조건 감시가 시작됩니다. first매수(BUY), second매도(SELL) 입니다. 호가유형은 지정가(LIMIT)만 지원합니다.

Rate Limits Group: CONDITIONAL_ORDER

[POST /api/v1/conditional-orders]

tags: Conditional Order

⚠️ 실제 자산에 영향을 주는 조건주문 API 입니다. 기본값은 dryRun=true 이며 실행하려면 TOSSINVEST_ENABLE_CONDITIONAL_ORDERS=true 와 confirmation 이 필요합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes조건주문 생성 요청. "이 가격(triggerPrice)에 닿으면 매수/매도(orderSide) 주문" 만 입력하면 됩니다. 가격이 감시가(triggerPrice)에 닿으면 트리거됩니다. 타입은 `type`(SINGLE/OCO/OTO)으로 지정합니다.
dryRunNo기본값 true. true 이면 토스증권 서버로 어떤 네트워크 요청도 보내지 않고 실행 계획만 반환합니다. 실제 주문을 내려면 false 로 명시해야 합니다.
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.
confirmationNo실주문 확인 문자열. TOSSINVEST_MUTATION_CONFIRMATION 환경변수 값과 정확히 일치해야 실제 주문이 실행됩니다.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true and readOnlyHint=false. The description adds context about real asset impact, dryRun safety, confirmation requirement, rate limit group, and type-specific behaviors (e.g., OCO/OTO only LIMIT). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is detailed but well-structured with headings and bullet points. It front-loads the core purpose and type explanations. Some redundancy exists (e.g., repeating trigger behavior), but overall efficient for a complex tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (nested objects, multiple types), the description covers key aspects: types, constraints, real-asset impact, safety features (dryRun, confirmation), and rate limits. No output schema exists, so return values are not explained; but the description is fairly complete for usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 meaning beyond schema by explaining type-specific constraints (e.g., OCO first/second both SELL, OTO first BUY second SELL) and clarifying that quantity is shared across conditions in OCO/OTO.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates conditional orders that monitor prices for specific stocks and automatically execute trades when conditions are met. It distinguishes itself from siblings like `createOrder` by focusing on conditional order creation, and explains the three types (SINGLE, OCO, OTO).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides guidance on when to use each type (SINGLE, OCO, OTO) with specific side and price constraints. It also mentions the default dryRun behavior and required confirmation for real execution. However, it does not explicitly contrast with `createOrder` for immediate orders.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createOrderA
Destructive

주문 생성

매수 또는 매도 주문을 생성합니다.

수량 지정 방식quantity, orderAmount 중 정확히 하나를 사용:

  • quantity: 주문 수량 (주 단위). 지정한 수량만큼 주문. 소수점 수량은 미국 주식 시장가 매도(MARKET+SELL)에만 허용 (그 외는 정수만)

  • orderAmount: 주문 금액 (달러). 지정한 금액만큼 주문하며, 체결 수량은 시장가에 따라 결정. US MARKET 전용

금액 주문 (orderAmount): 정규장 시간에만 가능합니다. 정규장 외 시간에 호출 시 422 amount-order-outside-regular-hours 를 반환합니다.

Rate Limits Group: ORDER

[POST /api/v1/orders]

tags: Order

⚠️ 실제 자산에 영향을 주는 주문 API 입니다. 기본값은 dryRun=true 이며 실행하려면 TOSSINVEST_ENABLE_TRADING=true 와 confirmation 이 필요합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes요청 본문 (application/json). 금액·수량·가격은 정밀도 보존을 위해 문자열로 전달합니다.
dryRunNo기본값 true. true 이면 토스증권 서버로 어떤 네트워크 요청도 보내지 않고 실행 계획만 반환합니다. 실제 주문을 내려면 false 로 명시해야 합니다.
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.
confirmationNo실주문 확인 문자열. TOSSINVEST_MUTATION_CONFIRMATION 환경변수 값과 정확히 일치해야 실제 주문이 실행됩니다.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include destructiveHint=true and openWorldHint=true. Description adds that it affects real assets, dryRun default is true, and confirmation is required for actual execution. Also mentions rate limits and error conditions beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured with sections, bullet points, and warnings. It front-loads the purpose. Slightly verbose but each sentence adds value; could be trimmed slightly without loss.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (multiple modes, constraints, no output schema), the description covers usage, parameters, and safety warnings well. Missing return value explanation, but the schema is comprehensive and sibling tools for further details exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. Description adds value by summarizing the two order creation methods (quantity-based vs amount-based) and their differences, which helps the agent choose correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states '주문 생성' and '매수 또는 매도 주문을 생성합니다.' which clearly indicates the verb (create) and resource (orders). It distinguishes from sibling tools like 'cancelOrder' and 'modifyOrder' by being the primary order creation endpoint.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance on when to use 'quantity' vs 'orderAmount', constraints on orderAmount (US MARKET only, regular hours), and mentions dryRun and confirmation requirements. Does not explicitly state when not to use this tool but context is clear from sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getAccountsA
Read-onlyIdempotent

계좌 목록 조회

사용자의 계좌 목록을 조회합니다.

  • 현재는 종합매매 (BROKERAGE) 계좌만 반환하며, 계좌가 없으면 빈 배열. 자녀계좌는 사용할 수 없습니다.

  • 응답의 accountSeq다른 모든 사용자 컨텍스트 API (보유 주식, 주문, 매수가능금액 등) 의 X-Tossinvest-Account 헤더에 사용합니다.

  • accountType enum 은 BROKERAGE / OVERSEAS_DERIVATIVES / PENSION_SAVINGS / RESHORING_INVESTMENT 가 정의되어 있으나 본 API 에서는 현재 BROKERAGE 만 노출됩니다. enum 의미는 Account.accountType schema 참조.

Rate Limits Group: ACCOUNT

[GET /api/v1/accounts]

tags: Account

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly, idempotent, and non-destructive. The description adds significant context: only BROKERAGE accounts are returned, child accounts are excluded, and the accountType enum meaning is referenced. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with bullet points, each sentence adds value. It is concise yet informative, covering purpose, limitations, and usage context without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description explains the important accountSeq field and references the enum schema, it does not fully describe the response structure. Given no output schema, a bit more detail on response fields would improve completeness, but it is adequate for a simple list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the description does not need to add parameter semantics. The schema coverage is 100%, and the description effectively addresses the tool's usage without mentioning parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 accounts, specifically noting it currently returns only BROKERAGE accounts. It distinguishes itself from siblings by focusing on account listing, which is a prerequisite for other account-related APIs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use (to get account list) and provides context that accountSeq is used in other APIs, implying this tool should be called first. It notes limitations (only BROKERAGE, no child accounts). However, it does not explicitly state when not to use or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getBuyingPowerA
Read-onlyIdempotent

매수 가능 금액 조회

매수 주문 시 사용할 수 있는 매수 가능 금액을 조회합니다. 미수거래를 제외한 현금 기반 매수 가능 금액(미수 미발생 기준)을 반환합니다.

Rate Limits Group: ORDER_INFO

[GET /api/v1/buying-power]

tags: Order Info

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint. The description adds value by specifying it returns cash-based buying power (excluding margin) and includes the rate limits group. This provides useful behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the Korean title, then a clear purpose, rate limits group, and endpoint. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is mostly complete for a simple read-only tool. However, it lacks an explanation of the return value format or structure, which would be helpful given there is no output schema. Still, the core functionality is well communicated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters having descriptions. The description does not add any additional meaning beyond what the schema 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves '매수 가능 금액' (buying power) and specifies it's for cash-only (no margin) orders. The verb '조회' (retrieve) and resource are clear. Unlike siblings like getSellableQuantity or getOrders, this tool is specifically for available funds for buy orders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies using this tool before placing buy orders to check available funds, but does not explicitly state when not to use it or mention alternatives. However, the context is clear enough for an AI agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getCandlesA
Read-onlyIdempotent

캔들 차트 조회

종목의 캔들(OHLCV) 차트 데이터를 조회합니다. 최대 200개 봉을 반환합니다.

Rate Limits Group: MARKET_DATA_CHART

[GET /api/v1/candles]

tags: Market Data

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate read-only, idempotent, and non-destructive behavior. The description adds context by specifying a maximum of 200 bars and the rate limit group, which supplements the annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and includes the key purpose, rate limit group, and endpoint. While efficient, it could be better structured with explicit usage guidance. Minor lack of structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (nested parameter but well-described in schema) and lack of output schema, the description is adequate but does not explain return value format or pagination details beyond the schema. Slightly incomplete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each parameter described in the input schema. The tool description does not add new information beyond what is in the schema, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves OHLCV candle data for a stock symbol, with a maximum of 200 bars. This effectively distinguishes it from sibling tools like getMarketIndicatorCandles, which focus on market indicators.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for stock candle data but does not explicitly contrast with alternatives (e.g., getMarketIndicatorCandles) or provide guidance on when to use this tool vs others. No exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getCommissionsA
Read-onlyIdempotent

매매 수수료 조회

현재 계좌의 시장별 매매 수수료율을 조회합니다. 국내주식과 해외주식의 수수료 정보를 배열로 반환합니다.

Rate Limits Group: ORDER_INFO

[GET /api/v1/commissions]

tags: Order Info

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and idempotent. Description adds value by stating return type (array) and rate limits group (ORDER_INFO), which are beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise and well-structured: title, main action, return detail, rate limit, endpoint. Front-loaded with key information, no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a simple read tool: explains what it returns (array of commission info by market) and rate limit group. Lacks output schema but mentions return type adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter description. Tool description does not add additional parameter semantics beyond schema, so baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it queries trading commission rates for the current account by market, specifying domestic and foreign stocks. It distinguishes itself from siblings like getBuyingPower or getPrices, but does not explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. It implies usage for commission rates but lacks exclusion criteria or context for when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getConditionalOrderA
Read-onlyIdempotent

조건주문 상세 조회

조건주문 단건 상세를 조회합니다. 진행 중 + 종료된 조건주문을 모두 조회할 수 있습니다. conditionalOrderId 로 조건주문을 식별합니다.

Rate Limits Group: CONDITIONAL_ORDER_HISTORY

[GET /api/v1/conditional-orders/{conditionalOrderId}]

tags: Conditional Order History

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesURL 경로 파라미터
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint and destructiveHint. Description adds that both ongoing and terminated orders can be retrieved, but no further behavioral details (e.g., rate limits beyond group name).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise and well-structured with title, action, and details. Includes rate limit group and HTTP method. Minor whitespace but no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read operation with no output schema, the description adequately covers purpose, identification, scope, and rate limit group. No major gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage, so description adds marginal extra meaning (e.g., clarifies conditionalOrderId role). Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves details of a single conditional order (조건주문 상세 조회) and distinguishes from sibling tools like getConditionalOrders (list), createConditionalOrder, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving single order details, but does not explicitly state when not to use or alternative tools. However, sibling context makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getConditionalOrdersA
Read-onlyIdempotent

조건주문 목록 조회

조건주문 목록을 조회합니다.

모든 타입 반환: 이 API 로 등록한 조건주문뿐 아니라 다른 채널(토스증권 앱 등)에서 등록한 조건주문도 함께 반환됩니다. 타입별 필터는 제공하지 않으며, 응답의 type 필드로 구분합니다.

지원하는 status 값:

  • OPEN: 진행 중(감시 중·일시중지·주문 진행 중 포함) 조건주문

  • CLOSED: 종료된(완료·만료) 조건주문

symbol 을 지정하면 해당 종목의 조건주문만 반환합니다. OPEN/CLOSED 모두에서 사용할 수 있습니다.

페이징: 커서 기반. 응답의 nextCursor 를 다음 요청의 cursor 로 전달합니다. limit 기본 20, 최대 100.

Rate Limits Group: CONDITIONAL_ORDER_HISTORY

[GET /api/v1/conditional-orders]

tags: Conditional Order History

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and idempotent behavior. The description adds valuable context: it returns orders from all channels, supports cursor-based paging, mentions rate limits, and explains status values beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (types, status values, paging, rate limits) and no unnecessary words. It is concise yet informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers key aspects: purpose, parameters, paging, and response fields like 'type' and 'nextCursor'. Without an output schema, it provides sufficient context for an agent to use the tool, though a full response structure would be ideal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions. The tool description adds extra context about the 'type' field in responses and clarifies symbol usage across statuses, which supplements the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists conditional orders and specifies that it returns all types from all channels, which helps distinguish from related tools like getConditionalOrder. However, it does not explicitly name sibling tools or contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (listing conditional orders) and provides details on parameters like status and symbol. It does not explicitly state when not to use it or mention alternatives (e.g., getConditionalOrder for a single order).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getExchangeRateA
Read-onlyIdempotent

환율 조회

KRW ↔ USD 환율 정보를 조회합니다.

  • 갱신 주기 1분, 참고용 표시 환율. 실제 주문 시 적용되는 거래 환율과 다를 수 있습니다.

  • dateTime 미지정 시 현재 시점의 유효 환율이 응답됩니다.

  • 응답의 validFrom ~ validUntil 은 해당 환율의 유효 시간 윈도 (보통 1분) 입니다.

Rate Limits Group: MARKET_INFO

[GET /api/v1/exchange-rate]

tags: Market Info

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral context beyond the annotations (readOnlyHint, idempotentHint, etc.): it discloses the 1-minute refresh cycle, the reference nature of the rate, and the validFrom/validUntil time window. No contradiction with annotations is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured with bullet points. Each sentence adds meaningful information: update frequency, reference vs actual rate, dateTime behavior, response window, and rate limit group. No redundant or verbose content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (single parameter, no output schema), the description covers all necessary aspects: purpose, parameter behavior, return value semantics (validFrom/Until), rate limits, and usage caveats. It is complete for an agent to correctly invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 value by explaining the behavior of the dateTime parameter and noting the reference rate nature, which is not fully captured in the schema. It does not need to re-document base/quote currencies since those are already well described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as querying KRW ↔ USD exchange rates. It uses a specific verb (조회) and resource (환율), and the scope is explicitly limited to the KRW/USD pair, which distinguishes it from sibling tools like getMarketIndicatorPrices or getOrderbook.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides useful context: the rate is a reference rate with a 1-minute update interval, not the actual transaction rate, and if dateTime is omitted, the current rate is returned. However, it does not explicitly state when not to use this tool or suggest alternatives like the actual trading rate source.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getHoldingsA
Read-onlyIdempotent

보유 주식 조회

보유 주식 정보를 조회합니다. 국내(KR)·미국(US) 주식만 포함하며, 해외 옵션·채권은 제외합니다. 보유 종목이 없으면 요약 금액은 0이고 items는 빈 배열입니다.

Rate Limits Group: ASSET

[GET /api/v1/holdings]

tags: Asset

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo쿼리 파라미터
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, etc. The description adds value by specifying inclusion/exclusion of asset types and behavior for empty holdings. No contradictions. Could mention rate limits in more detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise, using only a few sentences to convey purpose, scope, and edge case behavior. Structure is clear with title, body, rate limit info, and endpoint. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with two optional parameters, the description explains the return structure (summary and items) and the empty case. Lacks details on response fields, but no output schema exists. Rate limits mentioned. Sufficient for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed descriptions for both parameters. The tool description itself adds no additional meaning beyond the schema, so baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it retrieves holding stock information, specifies scope (KR/US stocks only, excludes options/bonds), and is a distinct resource (holdings). However, it does not explicitly differentiate from the sibling tool 'getStocks', which may cause ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but provides no guidance on when to use it versus alternatives, when not to use it, or what prerequisites exist. Missing context for decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getKrMarketCalendarA
Read-onlyIdempotent

국내 장 운영 정보 조회

국내 시장의 거래 가능 시간을 조회합니다. 통합 모드 (KRX+NXT) 기준이며, 특수장(시간외종가/시간외단일가)은 제외됩니다. 전일/당일/익일 3영업일 정보를 반환합니다. 모든 시간은 KST(+09:00) 기준.

Rate Limits Group: MARKET_INFO

[GET /api/v1/market-calendar/KR]

tags: Market Info

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo쿼리 파라미터

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds behavioral traits: returns 3 business days, excludes special sessions, uses KST, integrated mode, and rate limit group. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, front-loaded with purpose, 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.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks description of response structure and does not clarify the optional date parameter's behavior (e.g., default to current day). Some gaps remain for a tool with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the date parameter already described. The description adds no additional meaning or usage context for the parameter, such as default behavior or output structure. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves Korean market trading hours, specifies scope (integrated mode, excludes special sessions, returns 3 days), and distinguishes from sibling getUsMarketCalendar by explicitly mentioning KR and 'domestic market'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied through the description of 'domestic market' and sibling tool names, but no explicit guidance is given on when to use this tool versus alternatives (e.g., getUsMarketCalendar) or 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.

getMarketIndicatorCandlesA
Read-onlyIdempotent

시장 지표 캔들 차트 조회

시장 지표(국내 지수·국채)의 캔들(OHLCV) 차트 데이터를 조회합니다. 최대 200개 봉을 반환합니다.

지원 심볼은 그룹 상단 Market Indicators 설명의 심볼 카탈로그(8종)와 동일하며, 카탈로그에 없는 심볼은 400 unsupported-symbol 로 응답합니다. 개별 종목의 캔들은 GET /api/v1/candles 를 사용하세요.

분봉(1m)은 지수(KOSPI·KOSDAQ)만 지원합니다. 국채(KR_BOND_*)는 일봉(1d)만 지원하며, 분봉 요청 시 400 invalid-request 로 응답합니다.

Rate Limits Group: MARKET_INDICATOR_CHART

[GET /api/v1/market-indicators/{symbol}/candles]

tags: Market Indicators

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesURL 경로 파라미터
queryYes쿼리 파라미터

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint. Description adds behavioral details: max 200 candles, pagination mechanism, rate limit group, and error responses. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with line breaks and bullet points. Front-loaded with main purpose, then detailed constraints. Every sentence adds value. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers key aspects: purpose, supported symbols, intervals, pagination, error handling, rate limits. However, does not describe the response format or structure beyond 'OHLCV', which could be improved for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 100% schema description coverage, the description adds valuable context not in the schema (e.g., URL encoding for '+' in 'before' parameter, clarification of interval restrictions per symbol type). Adds meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it queries market indicator candle chart data (OHLCV) with a max of 200 candles. It distinguishes from the sibling 'getCandles' tool by explicitly stating to use that for individual stocks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: which tool to use for individual stocks, which intervals are supported per symbol type, and mentions rate limit group. Also covers error responses for unsupported symbols and invalid requests.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getMarketIndicatorInvestorTradingA
Read-onlyIdempotent

투자자별 매매대금 조회

KRX 시장(코스피·코스닥)의 투자자별 매매대금을 조회합니다. 개인·외국인·기관·기타법인 4개 투자자 분류의 매수·매도 거래대금을 집계 단위(interval)별 기록으로 최신순 제공하며, 기관은 7개 세부 분류(breakdown)를 함께 제공합니다.

  • KOSPI / KOSDAQ 만 지원합니다. 그 외 심볼은 400 unsupported-symbol 로 응답합니다.

  • 모든 거래대금은 원화(KRW) 정수이며, 별도의 통화 필드는 제공하지 않습니다.

  • 4개 분류(개인·외국인·기관·기타법인)의 매수 합계와 매도 합계는 시장 전체 기준으로 서로 같습니다.

  • foreigner 는 외국인 전체 합계(등록·미등록 외국인 포함)이며, institutionbuyAmount/sellAmountbreakdown 7개 항목의 합과 일치합니다.

  • 당일 기록은 장 종료 전까지 갱신될 수 있는 잠정치입니다. updatedAt 으로 마지막 갱신 시각을 확인하세요.

  • 다음 페이지는 응답의 nextUntil 값을 until 파라미터로 전달해 조회합니다.

Rate Limits Group: MARKET_INDICATOR

[GET /api/v1/market-indicators/{symbol}/investor-trading]

tags: Market Indicators

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesURL 경로 파라미터
queryYes쿼리 파라미터

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark as read-only and idempotent. Description adds valuable context: provisional data until market close, updatedAt field, breakdown consistency, and balance of buy/sell sums.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, well-structured with bullet points. Every sentence adds value; no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, description covers data types, pagination, currency, balance, and provisional nature. Nearly complete; could mention if response includes breakdown only for institutions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of parameters. Description adds meaning: interval units, count limits, until format/pagination usage, and symbol restriction beyond enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool queries investor trading amounts for KOSPI/KOSDAQ markets, distinguishes from sibling tools like getMarketIndicatorPrices and getMarketIndicatorCandles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly lists supported symbols, pagination mechanism, and data interpretation notes. Lacks explicit when-not-to-use compared to alternatives, but sibling context makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getMarketIndicatorPricesA
Read-onlyIdempotent

시장 지표 현재가 조회

시장 지표(국내 지수·국채)의 현재가를 조회합니다. 최대 200건 까지 다건 조회를 지원하며 콤마(,)로 구분합니다.

지원 심볼은 그룹 상단 Market Indicators 설명의 심볼 카탈로그(8종)를 따르며, 카탈로그에 없는 심볼은 400 unsupported-symbol 로 응답합니다.

Rate Limits Group: MARKET_INDICATOR

[GET /api/v1/market-indicators/prices]

tags: Market Indicators

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and idempotent behavior. The description adds batch limit (200), delimiter (comma), error code (400), and rate limit group, providing useful context beyond annotations. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact with a clear structure: title, purpose, batch limit, symbol constraints, error note, rate limit, and tag. Information is front-loaded. Minor markdown verbosity does not detract significantly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple retrieval tool with one parameter and no output schema, the description covers key aspects: purpose, supported symbols, limits, error handling, and rate limits. It does not detail the response structure, but the output is likely obvious price data given the name and context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for the single parameter, already specifying symbol format, limit, and example. The description adds the symbol catalog reference and error handling, but these are minor extensions to the schema's own description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 '시장 지표 현재가' (current prices of market indicators). It specifies domestic indices and government bonds, distinguishing it from sibling tools like getPrices (stocks) and getExchangeRate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states supported symbols come from a catalog of 8 types and that unsupported symbols return a 400 error. This guides when to use the tool. However, it does not explicitly contrast with other market indicator tools like getMarketIndicatorCandles.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getOrderA
Read-onlyIdempotent

주문 상세 조회

특정 주문의 상세 정보를 조회합니다. 모든 주문 상태(체결 완료, 취소, 거부 등)의 주문을 조회할 수 있습니다.

Rate Limits Group: ORDER_HISTORY

[GET /api/v1/orders/{orderId}]

tags: Order History

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesURL 경로 파라미터
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, indicating a safe read operation. The description adds the rate limit group and HTTP method, but no additional behavioral traits beyond confirming it queries all statuses. The annotations carry most of the transparency burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a clear title and a concise two-sentence explanation, followed by relevant metadata (rate limits, HTTP method, tags). Every piece serves a purpose with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, single-order retrieval tool with full schema coverage and informative annotations, the description covers the core functionality, status scope, and rate limit group. No output schema is present, but the return format is not critical for tool selection. The description is contextually complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters (orderId and account) with descriptions. The description does not add any further parameter-specific meaning or usage details beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves detailed information for a specific order (주문 상세 조회) and explicitly mentions it can query orders in any status. This distinguishes it from sibling tools like getOrders (which lists orders) and cancelOrder/modifyOrder (which mutate orders).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when you need details of a specific order, but does not provide explicit guidance on when not to use it or cite alternatives. However, the context of sibling tools makes the use case fairly clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getOrderbookB
Read-onlyIdempotent

호가 조회

매수/매도 호가 및 잔량을 조회합니다.

Rate Limits Group: MARKET_DATA

[GET /api/v1/orderbook]

tags: Market Data

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context: Rate Limits Group 'MARKET_DATA' and HTTP method 'GET'. However, it does not describe response structure or pagination.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is efficient with 3 sentences, front-loading the purpose. Includes endpoint and tags without redundancy. Minor repetition of title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with well-documented schema and annotations, the description adequately covers purpose and behavioral constraints. No output schema exists, so no need to explain returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a detailed description of the 'symbol' parameter including pattern and examples. The description does not add additional parameter meaning beyond the schema, meeting the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title '호가 조회' and description '매수/매도 호가 및 잔량을 조회합니다' clearly state the tool retrieves orderbook data (bids/asks with quantities). It specifies the verb '조회' and resource '호가', but does not explicitly distinguish from sibling tools like getPrices or getCandles.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., when to use getPrices vs getOrderbook). No exclusions or prerequisites mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getOrdersA
Read-onlyIdempotent

주문 목록 조회

주문 목록을 조회합니다. status 파라미터로 주문 상태를 필터링합니다.

지원하는 status 값:

  • 진행 중 주문: OPEN -- PENDING, PARTIAL_FILLED, PENDING_CANCEL, PENDING_REPLACE 상태의 주문을 반환

  • 종료된 주문: CLOSED -- FILLED, CANCELED, REJECTED, REPLACED 등 종료 상태 주문을 반환합니다.

symbol을 지정하면 해당 종목의 주문만 필터링하여 반환합니다.

페이징 동작:

  • status=OPEN: 모든 대기 중 주문을 전량 반환합니다. limit, cursor 는 무시되며, from/to 만 주문 생성일(orderedAt, KST 기준) 범위 필터로 적용됩니다 (미지정 시 전체 기간).

  • status=CLOSED: limit (기본 20, 최대 100), cursor, from/to 파라미터 모두 적용됩니다.

Rate Limits Group: ORDER_HISTORY

[GET /api/v1/orders]

tags: Order History

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral details beyond the annotations (readOnlyHint, etc.), such as pagination nuances, status lifecycle group mapping, and rate limit group. These traits are not captured in annotations and are crucial for agent decision-making.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (introduction, status values, pagination, rate limits). Every sentence adds value; no fluff. It is appropriately sized and front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description does not explain return values. However, it covers input behavior comprehensively, including edge cases (e.g., limit ignored in OPEN). The agent can infer the response shape from typical list endpoints. Slightly incomplete but strong overall.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although schema description coverage is 100%, the description adds substantial meaning by explaining how status values map to individual order statuses and how pagination parameters behave differently for OPEN vs CLOSED. This goes beyond the schema's syntactic description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states '주문 목록 조회' (order list inquiry) with explicit filtering by status and symbol. It distinguishes itself from sibling tools like getOrder (single order) and createOrder by focusing on listing, making the purpose precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides detailed context on when to use OPEN vs CLOSED status, including pagination behavior differences. While it doesn't explicitly state when not to use the tool versus alternatives, the usage context is clear and sufficient for an AI agent to decide correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getPriceLimitA
Read-onlyIdempotent

상/하한가 조회

종목의 당일 상한가 및 하한가를 조회합니다.

Rate Limits Group: MARKET_DATA

[GET /api/v1/price-limits]

tags: Market Data

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which cover safety and idempotency. The description adds that it queries '당일' (today's) limits and includes a rate limits group, which provides useful context beyond what annotations offer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively concise, with only a few lines of text. It front-loads the title and purpose, but the inclusion of the endpoint path and tags is somewhat unnecessary and could be omitted for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only query tool with strong annotations and full schema coverage, the description adequately covers the purpose and return type (upper/lower limits). It lacks details about pagination or error cases, but given the tool's simplicity, this is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage for the symbol parameter, explaining the required format (e.g., 6-digit KRX, alphabetic US tickers). The description does not add additional meaning beyond the schema, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves the daily upper and lower price limits for a stock. It uses specific verbs (조회/조회합니다) and resource (상/하한가). Among sibling tools, only this one provides price limits, so it is well-differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention preconditions or limitations. However, the tool's function is self-evident, and the context is simple enough that an agent can infer usage from the name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getPricesA
Read-onlyIdempotent

현재가 조회

종목의 현재가 정보를 조회합니다. 최대 200건 까지 다건 조회를 지원하며 콤마(,)로 구분합니다.

Rate Limits Group: MARKET_DATA

[GET /api/v1/prices]

tags: Market Data

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint. The description adds useful behavioral details: rate limits group (MARKET_DATA), HTTP method (GET), and the 200-item batch constraint. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at three lines, front-loaded with the main action, and includes essential details (batch limit, rate limits, endpoint) without unnecessary text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one parameter and no output schema, the description adequately covers purpose, constraints, and rate limits. It lacks response format details, but given the tool's simplicity, it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema description for 'symbols' already covers the format, allowed characters, and separator. The description's main text does not add new parameter meaning beyond what is in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 information for stocks, supports batch queries up to 200 items separated by commas, and includes the HTTP endpoint. This distinguishes it from sibling tools like getCandles (historical data) and getOrderbook (order book depth).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide guidance on when to use this tool versus alternatives. For example, it doesn't contrast with getCandles for historical data or getMarketIndicatorPrices for index prices. Only a batch size limit is given, not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getRankingsA
Read-onlyIdempotent

주식 랭킹 조회

지정한 시장(marketCountry) · 기간(duration) · 기준(type)의 주식 랭킹을 조회합니다. 상위 100위까지 제공합니다.

  • TOP_GAINERS / TOP_LOSERSduration=realtime 을 지원하지 않습니다 (400 unsupported-ranking-duration).

  • tradingVolume / tradingAmount 의 집계 기준은 type 이 결정합니다 — TOSS_SECURITIES_* 는 토스증권 체결 기준, 그 외(MARKET_* / TOP_*)는 시장 전체 기준.

  • price.basePriceTOP_GAINERS / TOP_LOSERSduration 시작 시점 기준가이며, 나머지 타입은 duration 과 무관하게 항상 전일 기준가입니다. price.changeRate 도 같은 의미를 따릅니다 (기간 등락률 vs 전일 대비 등락률).

  • 응답 항목 수는 count 보다 적을 수 있습니다 (시세 조회에 실패한 종목은 제외).

  • 랭킹이 집계되지 않은 조합은 에러가 아닌 빈 rankings 배열로 응답하며, 이때 rankedAt 은 null 입니다.

Rate Limits Group: RANKING

[GET /api/v1/rankings]

tags: Ranking

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate read-only, idempotent, non-destructive. The description adds behavioral details: response count may be less than requested, empty rankings on no aggregation, and nuanced price.basePrice behavior. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with bullet points, front-loaded with the main purpose. While somewhat lengthy, every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given tool complexity, the description covers major edge cases (unsupported duration, missing data, price behavior). No output schema exists, but description partially addresses return structure. Sufficiently complete for most use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 context on aggregation logic and price semantics, but the schema already describes each parameter adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool queries stock rankings by marketCountry, duration, and type, providing top 100. It distinguishes itself from siblings by focusing on rankings and includes detailed type and duration explanations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (get rankings) and highlights that TOP_GAINERS and TOP_LOSERS do not support realtime duration, guiding against invalid usage. It does not explicitly mention alternatives but the context makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getSellableQuantityA
Read-onlyIdempotent

판매 가능 수량 조회

특정 종목의 판매 가능 수량을 조회합니다.

Rate Limits Group: ORDER_INFO

[GET /api/v1/sellable-quantity]

tags: Order Info

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds the rate limit group and HTTP method, but no additional behavioral details like error handling or output format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: one explanatory sentence plus minimal metadata (rate limit, endpoint). No wasted words, front-loaded with purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Lacks output format description and does not differentiate from similar tools like getHoldings. For a simple read-only query with good annotations, it is adequate but not fully comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with detailed parameter descriptions (symbol format, account fallback). The tool description does not add further parameter insights beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it queries sellable quantity for a specific stock (종목). The title '판매 가능 수량 조회' matches. It is distinct from sibling tools like getOrders or createOrder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives such as getHoldings or getBuyingPower. The description only provides the rate limit group, no context on selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getStocksB
Read-onlyIdempotent

종목 기본 정보 조회

종목의 기본 정보를 조회합니다. symbols 를 콤마로 구분하여 최대 200건 까지 다건 조회를 지원합니다. 종목명, 시장, 통화, 상장 상태, 거래정지 여부 등 트레이딩에서 필요한 참조 데이터를 제공합니다.

Rate Limits Group: STOCK

[GET /api/v1/stocks]

tags: Stock Info

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only, idempotent, non-destructive behavior. Description adds rate limit group and confirms the endpoint, but lacks details on response format, error handling, or behavior for invalid symbols. The information provided is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise: title, bullet-like list of returned fields, rate limit group, and HTTP method. Each sentence adds value, and the structure is front-loaded with the most important info. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one parameter, but the lack of an output schema leaves the response format unknown. The description mentions some fields (name, market, currency) but not all, which may require the agent to infer or call the tool to discover the structure. Error scenarios are not covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. Description repeats the symbols parameter's bulk limit (200) but does not add new semantics beyond the schema's own detailed description. No additional constraints or clarifications are introduced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it retrieves basic stock info (name, market, currency, etc.) and supports bulk query of up to 200 symbols. It distinguishes the tool's purpose from price or order tools implicitly, but does not explicitly differentiate from siblings like getStockWarnings or getPrices.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives such as getPrices or getCandles. The description only explains what it does, not when it should be preferred or when other tools are more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getStockWarningsA
Read-onlyIdempotent

매수 유의사항 조회

종목의 매수 유의사항 및 변동성 완화(VI) 발동 정보를 조회합니다.

포함 종류: 정리매매(LIQUIDATION_TRADING), 단기과열종목(OVERHEATED), 투자경고(INVESTMENT_WARNING), 투자위험(INVESTMENT_RISK), VI 정적/동적/혼합(VI_STATIC / VI_DYNAMIC / VI_STATIC_AND_DYNAMIC), 신주인수권(STOCK_WARRANTS). 전체 enum 은 StockWarning.warningType 참조.

"활성"의 시간 기준: 응답 시점 기준으로 startDate <= 오늘 <= endDate 인 항목 (또는 endDatenull 인 진행 중 항목).

응답 정렬: startDate 내림차순 (최근 발동된 항목부터). startDate 가 동일한 경우 정렬 순서는 보장되지 않습니다.

데이터 적시성: VI 발동/해제는 거래소 이벤트 발생 후 수 초 내 반영됩니다. 정리매매·단기과열·투자경고/위험 지정은 거래소 공시 기준 일배치로 반영됩니다.

미존재 vs 빈 배열:

  • 종목 자체가 없으면 404 stock-not-found.

  • 종목은 있으나 활성 유의사항이 없으면 200 OK + result: [].

Rate Limits Group: STOCK

[GET /api/v1/stocks/{symbol}/warnings]

tags: Stock Info

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesURL 경로 파라미터

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations confirm read-only, idempotent, non-destructive behavior. The description adds critical details: active time criteria, sorting order, data latency (seconds for VI, daily batch for others), and response differences (404 vs empty array). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with paragraphs and bullet points, covering necessary details efficiently. Slightly verbose with some internal references (e.g., full enum reference) but overall concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description thoroughly explains the response format (empty array vs 404), active definition, sorting, and timeliness. This is complete and actionable for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'symbol' is fully described in the input schema with pattern and examples. The description does not add extra parameter semantics beyond what the schema provides, so baseline score applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves buy warnings and VI activation information for a stock. It lists specific warning types and provides distinct error handling (404 vs empty array), 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when results are empty vs when a stock is not found, and notes data timeliness for different warning types. However, it does not explicitly contrast with sibling tools or state when to use it over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getTradesB
Read-onlyIdempotent

최근 체결 내역 조회

당일 최근 체결 내역을 조회합니다.

Rate Limits Group: MARKET_DATA

[GET /api/v1/trades]

tags: Market Data

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes쿼리 파라미터

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds that it queries today's trades and belongs to the MARKET_DATA rate limit group, but does not disclose other behavioral traits like return format, ordering, or pagination behavior. With strong annotations, the description provides modest added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: a title, one explanatory sentence, and metadata (rate limits, endpoint, tags). Every sentence adds value, and the information is front-loaded. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter with nested object, no output schema), the description is adequate but lacks details about return structure, ordering of trades, or error handling. It doesn't clarify the distinction from similar market data tools. More context would improve agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% as both parameters (symbol, count) have descriptions in the schema. The tool description itself does not add any parameter semantics beyond what the schema already provides. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it queries recent trade history ('최근 체결 내역 조회') and specifies it's for today ('당일'). This verb+resource combination is specific enough to identify the tool's purpose, though it does not explicitly differentiate from sibling tools like getCandles or getOrderbook.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites, when not to use, or contrast with sibling tools. The only context is the rate limits group, which is not enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getUsMarketCalendarA
Read-onlyIdempotent

해외 장 운영 정보 조회

미국 시장의 장 운영 시간을 조회합니다. 4 세션(dayMarket, preMarket, regularMarket, afterMarket) 별로 nullable. 휴장 시 4 세션 모두 null. 전일/당일/익일 3영업일 정보를 반환합니다. 모든 시간은 KST(+09:00) 기준.

Rate Limits Group: MARKET_INFO

[GET /api/v1/market-calendar/US]

tags: Market Info

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo쿼리 파라미터

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds useful details beyond annotations: nullable sessions, all null on holidays, three business days, times in KST, and rate limit group. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise, front-loaded purpose, and every sentence adds value. Could be slightly more structured but is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Explains output structure (4 sessions, 3 days, nullable) and rate limits, compensating for no output schema. Adequate for a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100% of the parameter, so baseline is 3. Description does not add much beyond the schema's description of the date parameter but provides response context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it queries US market hours and returns three business days of session info, effectively distinguishing from the sibling getKrMarketCalendar by name and context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool over alternatives like getKrMarketCalendar; it only implicitly indicates US market focus.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modifyConditionalOrderA
Destructive

조건주문 수정

조건주문을 수정합니다. 조건주문 전체를 재설정하므로 본문에 type·expireDate·first(필요 시 second) 를 모두 전달합니다. 수량(quantity)은 각 감시 조건(first/second) 안에 입력합니다. (등록과 달리 expireDate 가 필수입니다.) 종목은 conditionalOrderId 로 식별되므로 본문에 symbol 은 필요 없습니다. 본문의 type 은 변경 결과 타입이며, 타입 전환(예: SINGLE→OCO)이 허용됩니다. 응답의 type 으로 확인하세요.

conditionalOrderId 로 수정 대상을 식별합니다.

주의: 수정은 기존 조건주문을 취소하고 새 조건주문을 생성하는 방식으로 동작합니다. 따라서 수정 후에는 새로운 conditionalOrderId 가 발급되고 기존 ID 는 무효화됩니다. 이후 조회·수정·취소에는 반드시 응답으로 반환된 conditionalOrderId 를 사용하세요.

Rate Limits Group: CONDITIONAL_ORDER

[POST /api/v1/conditional-orders/{conditionalOrderId}/modify]

tags: Conditional Order

⚠️ 실제 자산에 영향을 주는 조건주문 API 입니다. 기본값은 dryRun=true 이며 실행하려면 TOSSINVEST_ENABLE_CONDITIONAL_ORDERS=true 와 confirmation 이 필요합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes조건주문 수정 요청. 등록과 동일하게 "이 가격에 닿으면 매매" 만 입력하며, 조건주문 전체를 재설정하므로 유지할 조건도 함께 전달해야 합니다. 종목은 `conditionalOrderId` 로 식별되므로 수정 요청에는 `symbol` 이 필요 없습니다.
pathYesURL 경로 파라미터
dryRunNo기본값 true. true 이면 토스증권 서버로 어떤 네트워크 요청도 보내지 않고 실행 계획만 반환합니다. 실제 주문을 내려면 false 로 명시해야 합니다.
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.
confirmationNo실주문 확인 문자열. TOSSINVEST_MUTATION_CONFIRMATION 환경변수 값과 정확히 일치해야 실제 주문이 실행됩니다.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations (destructiveHint=true, readOnlyHint=false), the description reveals critical behavioral details: the modification cancels and recreates the order, resulting in a new conditionalOrderId and invalidation of the old one. It also warns about real asset impact, dryRun default, required confirmation and environment variable, and specifies rate limits group.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately concise but includes some repetition (e.g., explaining the reset behavior in multiple places). While every sentence adds value, the structure could be tightened. The caution and rate limits sections are well-placed, but overall length is acceptable given the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, no output schema, and annotations that do not fully explain side effects, the description is comprehensive. It covers the cancellation-and-recreation behavior, new ID issuance, required fields, dryRun mode, confirmation, environment variable, rate limits, and real asset impact. An agent can safely invoke this tool with the provided information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all parameters. The description adds value by explaining that type is the result type and transitions are allowed, that expireDate is required here unlike creation, and that symbol is not needed. However, there is a potential contradiction: the description states quantity is inside first/second conditions, but schema shows quantity as a top-level field. This could cause confusion, slightly reducing the score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as modifying a conditional order ('조건주문 수정') and distinguishes it from creation (expireDate required) and cancellation (new ID issued). It specifies that the entire order is reset, leaving no ambiguity about the operation's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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 modify a conditional order) and provides explicit guidance: send all fields (type, expireDate, first, second if needed), and notes that symbol is unnecessary. It contrasts with creation by stating expireDate is required here. However, it does not explicitly state when to use alternatives like cancelConditionalOrder or createConditionalOrder instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

modifyOrderA
Destructive

주문 정정

기존 주문의 가격 또는 수량을 정정합니다.

KR 주식: quantity 필수. 양의 정수만 허용합니다.

US 주식: quantity 제공 불가. 가격 변경만 지원합니다. quantity 제공 시 400 us-modify-quantity-not-supported 에러를 반환합니다.

Rate Limits Group: ORDER

[POST /api/v1/orders/{orderId}/modify]

tags: Order

⚠️ 실제 자산에 영향을 주는 주문 API 입니다. 기본값은 dryRun=true 이며 실행하려면 TOSSINVEST_ENABLE_TRADING=true 와 confirmation 이 필요합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes요청 본문 (application/json). 금액·수량·가격은 정밀도 보존을 위해 문자열로 전달합니다.
pathYesURL 경로 파라미터
dryRunNo기본값 true. true 이면 토스증권 서버로 어떤 네트워크 요청도 보내지 않고 실행 계획만 반환합니다. 실제 주문을 내려면 false 로 명시해야 합니다.
accountNo요청에 사용할 계좌의 accountSeq. getAccounts 응답의 accountSeq 값을 사용합니다. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 환경변수를 사용하며, 둘 다 없으면 호출하지 않고 오류를 반환합니다.
confirmationNo실주문 확인 문자열. TOSSINVEST_MUTATION_CONFIRMATION 환경변수 값과 정확히 일치해야 실제 주문이 실행됩니다.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Extensive behavioral context beyond annotations: dryRun default, confirmation requirement, market-specific rules (KR quantity required, US quantity not allowed), rate limits group, and specific error codes. No contradictions with annotations (destructiveHint=true, readOnlyHint=false).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise and well-structured with clear sections for KR stocks, US stocks, and important warnings. No unnecessary sentences; every part adds information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, so description should cover return behavior. It provides many error codes and prerequisites, but does not describe the success response format. Still, it is comprehensive enough for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 summarizing market-specific parameter constraints (KR vs US) and mentioning the rate limits group, which is not in the schema. It also provides context for dryRun and confirmation, though these are already in schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool modifies existing orders (price or quantity) and differentiates between KR and US markets. It distinguishes itself from sibling tools like createOrder or cancelOrder by specifying its action on existing orders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied for modifying orders, but no explicit comparison to alternatives like cancelOrder. However, it provides critical guidelines: default dryRun=true, requirement of TOSSINVEST_ENABLE_TRADING=true and confirmation for actual execution, and market-specific constraints, which are highly useful for correct usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tossinvest_api_overviewA
Read-onlyIdempotent

로드된 토스증권 OpenAPI 명세의 요약 정보를 반환합니다. 버전, 서버 URL, tag 목록, operation 수, 실주문 활성화 상태, snapshot/원격 사용 여부를 포함합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and idempotency. The description adds specifics about the returned fields (version, server URL, tags, etc.), which is additional context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that first states the primary purpose and then lists the specific items included. It is extremely concise with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description sufficiently explains what the tool returns. No additional details are necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the description does not need to explain them. The schema coverage is 100%, and the baseline for zero parameters is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns a summary of the Toss Securities OpenAPI spec, listing specific elements like version, server URL, tags, operation count, etc. This distinguishes it from sibling tools that deal with market data, orders, or accounts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool returns but does not explicitly guide when to use it versus alternatives. It is implied as an initial overview tool, but no explicit 'when not to use' or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tossinvest_auth_statusA
Read-onlyIdempotent

인증 설정과 토큰 준비 상태를 안전하게 반환합니다. client ID 는 마스킹되며 client secret 과 access token 은 절대 반환하지 않습니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds valuable behavioral context: client ID is masked, and client secret/access token are never returned. This goes beyond annotations and helps the agent understand safety constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences, front-loaded with the core purpose. Every word adds value; no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 explains what is returned (auth settings, token readiness) and crucially what is not returned (secrets). It is complete for a status-check tool, though the exact fields of the response are not described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100%. Baseline is 4. The description does not add parameter details because there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns authentication settings and token readiness status, with specific behavior on masking client ID and not returning secrets. The verb '반환합니다' and resource '인증 설정과 토큰 준비 상태' are specific. It distinguishes from siblings like tossinvest_refresh_auth.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as tossinvest_refresh_auth or other auth-related tools. No context on prerequisites, timing, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tossinvest_call_operationA
Destructive

operationId 로 임의의 토스증권 API operation 을 호출합니다. 직접 도구 등록을 지원하지 않는 클라이언트를 위한 wrapper 입니다. 이 wrapper 도 동일한 mutation guard 를 통과하므로 주문 안전정책을 우회할 수 없습니다 (dryRun 기본 true).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo요청 본문 (JSON)
pathNopath parameter
queryNoquery parameter
dryRunNomutation 인 경우 기본 true. false 로 명시해야 실제 요청을 보냅니다.
accountNo계좌 accountSeq. 미지정 시 TOSSINVEST_DEFAULT_ACCOUNT 사용.
operationIdYes호출할 operationId
confirmationNomutation 실행 확인 문자열 (TOSSINVEST_MUTATION_CONFIRMATION 과 일치해야 함).

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations by revealing the mutation guard, dryRun defaulting to true, and that it cannot bypass order safety policies. Annotations only indicate destructive and readOnly=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with core action, no wasted words. Highly concise and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 7 parameters, no output schema, and nested objects, the description is short. It lacks guidance on finding operationId (sibling tool exists) and handling responses. Adequate for a wrapper but could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline 3. The description does not add meaningful parameter details beyond what the schema already provides, such as the dryRun default which is in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool calls any Toss Securities API operation by operationId, acting as a wrapper for unsupported clients. This distinguishes it from sibling tools which are specific operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states it is for clients that do not support direct tool registration, providing context for when to use it. However, it does not explicitly exclude usage when a specific tool exists, though implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tossinvest_get_operationA
Read-onlyIdempotent

특정 operationId 의 상세 정보(method, path, tag, 설명, 필수/선택 입력, requestBody, 응답 스키마, 계좌 헤더 필요 여부, mutation 여부, rate limit 그룹, MCP 도구 이름)를 반환합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationIdYesOpenAPI operationId

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds no extra behavioral traits beyond listing what fields are returned, which is useful but not beyond what annotations already imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence listing many attributes, which is dense but clear. It could be broken into bullet points or structured for easier parsing, but it is efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single parameter, full schema coverage, and no output schema, the description comprehensively lists all returned fields (method, path, tag, inputs, response schema, etc.), making the tool's behavior fully understandable without additional information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a clear description for operationId. The tool description does not add further meaning to the parameter itself; it only describes the output. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns detailed information for a specific operationId, including method, path, tag, inputs, etc. This distinguishes it from sibling tools like tossinvest_list_operations and tossinvest_search_operations, which list or search operations without returning full details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention scenarios where detailed operation info is needed, nor does it exclude cases where other tools are more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tossinvest_list_operationsC
Read-onlyIdempotent

등록된 operation 목록을 필터링해 반환합니다. tag, method, path, readOnly, destructive, keyword 로 필터링할 수 있습니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNotag 이름 (부분 일치, 대소문자 무시)
pathNopath 부분 문자열
methodNoHTTP method
keywordNooperationId/summary/description 키워드
readOnlyNo읽기 전용 operation 만 조회
destructiveNo자산에 영향을 주는 mutation 만 조회

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds only that filtering by those properties is possible, but omits details like pagination, result limits, or output structure. Minimal additional value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that conveys the core functionality and filter options without any redundant or verbose language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 6 parameters, no output schema, and many sibling tools, the description is too brief. It does not explain how filters combine, whether pagination exists, or what constitutes an 'operation', leaving significant gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with each parameter described individually. The description merely lists the filterable fields without adding new meaning. Baseline score of 3 is appropriate as the schema already carries the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool returns a filtered list of registered operations, specifying the filter criteria. However, it does not differentiate itself from the sibling 'tossinvest_search_operations', which may have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'tossinvest_get_operation' or 'tossinvest_search_operations'. There is no mention of context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tossinvest_refresh_authB

access token 을 명시적으로 재발급합니다. 토큰 문자열은 반환하지 않고 만료 정보만 반환합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false and destructiveHint=false, but the description does not elaborate on effects (e.g., invalidating previous tokens, permission requirements, rate limits). It adds only that the token string is not returned, which is minimal beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the key action. Every word is informative with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool, the description covers core purpose and return value. However, it lacks specifics on the expiration info structure, which for a complete picture would be helpful.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so baseline is 4. The description adds meaning about the return behavior (only expiration info, not token string), compensating for the lack of an output schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reissues an access token and explicitly mentions it returns only expiration info, not the token string. The verb 'refresh auth' matches sibling naming, but it does not explicitly distinguish from 'tossinvest_auth_status'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like tossinvest_auth_status. The description does not specify prerequisites, such as requiring a valid token, or when reissuing is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tossinvest_search_operationsA
Read-onlyIdempotent

operationId, summary, description, path, tag 를 대상으로 operation 을 검색합니다.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo최대 결과 수 (기본 20)
queryYes검색어

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, providing safety context. The description adds that it searches specific fields but does not disclose additional traits like pagination or empty result handling. The description adds moderate value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that efficiently conveys the tool's purpose without unnecessary words. It earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 and the tool's search nature, the description could be more complete by mentioning that it returns matching operations or the response format. It is adequate but leaves some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents both parameters (query and limit) with descriptions. The description does not add additional meaning to the parameters, such as formatting or search syntax. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: searching operations by operationId, summary, description, path, and tag. This distinguishes it from sibling tools like list_operations (likely listing all) and get_operation (retrieving a specific one).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. It does not mention that it is for filtering or searching, while list_operations might be for bulk retrieval. No when-not or alternative tool mentions.

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. 36 tool updatesv0.1.0
    • First observedcancelConditionalOrder
    • First observedcancelOrder
    • First observedcreateConditionalOrder
    • First observedcreateOrder
    • First observedgetAccounts
    • First observedgetBuyingPower
    • First observedgetCandles
    • First observedgetCommissions
    • First observedgetConditionalOrder
    • First observedgetConditionalOrders
    • First observedgetExchangeRate
    • First observedgetHoldings
    • First observedgetKrMarketCalendar
    • First observedgetMarketIndicatorCandles
    • First observedgetMarketIndicatorInvestorTrading
    • First observedgetMarketIndicatorPrices
    • First observedgetOrder
    • First observedgetOrderbook
    • First observedgetOrders
    • First observedgetPriceLimit
    • First observedgetPrices
    • First observedgetRankings
    • First observedgetSellableQuantity
    • First observedgetStocks
    • First observedgetStockWarnings
    • First observedgetTrades
    • First observedgetUsMarketCalendar
    • First observedmodifyConditionalOrder
    • First observedmodifyOrder
    • First observedtossinvest_api_overview
    • First observedtossinvest_auth_status
    • First observedtossinvest_call_operation
    • First observedtossinvest_get_operation
    • First observedtossinvest_list_operations
    • First observedtossinvest_refresh_auth
    • First observedtossinvest_search_operations

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct function: market calendar vs indicators, stock prices vs indicator prices, orders vs conditional orders, etc. The descriptions clearly differentiate between similar concepts (e.g., getPrices vs getMarketIndicatorPrices), leaving no ambiguity.

Naming Consistency3/5

Most tools follow a verb_noun pattern (getX, createX, cancelX), but there is a separate group with a 'tossinvest_' prefix and snake_case (tossinvest_list_operations, etc.). This mixed convention, along with camelCase in some names (getOrderbook), creates noticeable inconsistency.

Tool Count4/5

With 36 tools, the server covers a broad trading domain without being excessive. The count is reasonable for features like orders, conditional orders, market data, indicators, and account management, though it is slightly on the higher side.

Completeness5/5

The tool set includes all essential operations for a trading API: market data (calendar, indicators, orderbook, prices, trades), order management (create, cancel, modify, list, get), conditional orders, account info (holdings, buying power, commissions, exchange rate), rankings, and even meta tools for exploring the API. No obvious gaps.

Maintenance

ActivitySlowing
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP server wrapping Toss Securities Open API, enabling stock price queries and trading for Korean and US stocks via natural language.
    36
    40
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    Safe-by-default MCP server for the official Toss Securities Open API, providing read-only market and account data with optional order operations protected by multiple safety gates.
    27
    16
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Toss Securities (토스증권) Open API MCP server for the Korean stock market. Supports real-time quotes, orderbook, candles, account holdings, buying power, and order management (create/modify/cancel) with a built-in safety gate requiring explicit confirmation before any real order is placed.
    17
    40
    3
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Self-hosted MCP server that wraps the Toss Securities Open API, enabling natural language queries for account balances, holdings, transactions, and stock prices via Claude.
    4
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Kuco-dev/tossinvest-api-mcp'

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