Skip to main content
Glama
kwonsw812

kiwoom-mcp

by kwonsw812

kiwoom-mcp

License: MIT TypeScript MCP

Claude Desktop에서 자연어로 키움증권 계좌를 제어하는 MCP 서버

키움증권 REST API와 Claude Desktop을 MCP(Model Context Protocol)로 연결하여, 자연어로 주식 조회/매매를 할 수 있습니다.

사용자: "삼성전자 현재가 알려줘"
Claude: 삼성전자(005930) 현재가 72,300원, 전일대비 +1,200원(+1.69%)...

사용자: "10주 시장가 매수해줘"
Claude: 삼성전자 10주 시장가 매수 주문 완료 (주문번호: 12345)

사전 준비

  1. openapi.kiwoom.com → 로그인 → API 사용신청

  2. 계좌 등록 + 본인 서버 IP 등록 (필수)

  3. App Key 다운로드

  4. 모의투자 신청 (kiwoom.com → 모의/실전투자 → 상시모의투자)

Related MCP server: tossinvest-mcp

설치 방법

방법 1: 로컬 설치 (stdio)

git clone https://github.com/YOUR_USERNAME/kiwoom-mcp.git
cd kiwoom-mcp
npm install
npm run build

Claude Desktop 설정

설정 파일 위치:

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

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

{
  "mcpServers": {
    "kiwoom": {
      "command": "node",
      "args": ["/절대경로/kiwoom-mcp/dist/index.js"],
      "env": {
        "KIWOOM_APP_KEY": "...",
        "KIWOOM_SECRET_KEY": "...",
        "KIWOOM_ACCOUNT_NO": "계좌번호10자리",
        "KIWOOM_IS_MOCK": "true"
      }
    }
  }
}

빌드 없이 개발 중 실행하려면:

"command": "npx", "args": ["tsx", "/경로/kiwoom-mcp/src/index.ts"]

방법 2: Docker 원격 배포 (HTTP)

키움 API는 등록된 IP에서만 호출 가능하므로, IP가 등록된 서버에 Docker로 배포하고 원격으로 연결할 수 있습니다.

1. 서버에 .env 파일 생성

KIWOOM_APP_KEY=발급받은_앱키
KIWOOM_SECRET_KEY=발급받은_시크릿키
KIWOOM_ACCOUNT_NO=계좌번호10자리
KIWOOM_IS_MOCK=true
MCP_TRANSPORT=http
MCP_PORT=3000
MCP_AUTH_TOKEN=여기에_토큰_입력

토큰 생성: openssl rand -hex 32

2. Docker Compose로 실행

git clone https://github.com/YOUR_USERNAME/kiwoom-mcp.git
cd kiwoom-mcp
# .env 파일을 위에서 생성한 내용으로 작성
docker compose up -d --build

3. Claude Desktop에서 원격 연결

{
  "mcpServers": {
    "kiwoom": {
      "url": "http://서버IP:3000/mcp",
      "headers": {
        "Authorization": "Bearer 여기에_토큰_입력"
      }
    }
  }
}

환경변수

변수

필수

설명

KIWOOM_APP_KEY

O

키움 OpenAPI 앱 키

KIWOOM_SECRET_KEY

O

키움 OpenAPI 시크릿 키

KIWOOM_ACCOUNT_NO

O

계좌번호 (10자리)

KIWOOM_IS_MOCK

O

모의투자 여부 (true / false)

MCP_TRANSPORT

X

전송 방식 (stdio 또는 http, 기본값: stdio)

MCP_PORT

X

HTTP 모드 포트 (기본값: 3000)

MCP_AUTH_TOKEN

HTTP 모드 시 O

Bearer 인증 토큰 (openssl rand -hex 32로 생성)

제공 도구 (12개)

잔고/포트폴리오

Tool

설명

get_account_balance

보유 주식 목록, 평가금액, 수익률

get_portfolio_summary

종목별 비중/손익 분석

get_deposit_detail

예수금, 출금/주문 가능금액

시세 조회

Tool

설명

get_stock_price

현재가, 등락률, 거래량, PER/PBR

get_stock_chart

일봉 OHLCV 차트 (기간 지정)

search_stock_code

종목명 → 종목코드 검색

주문

Tool

설명

place_buy_order

시장가/지정가 매수

place_sell_order

시장가/지정가 매도

get_unfilled_orders

미체결 주문 목록

cancel_order

주문 취소

거래내역 분석

Tool

설명

get_trade_history

기간별 체결내역

analyze_profit_loss

종목별 실현손익, 승률 분석

사용 예시

"오늘 내 포트폴리오 현황 분석해줘"
"HD현대일렉트릭 현재가 알려주고 10주 매수해줘"
"이번달 거래 손익 분석해줘"
"미체결 주문 전부 취소해줘"

주의사항

  • 반드시 모의투자(KIWOOM_IS_MOCK=true)에서 충분히 테스트한 후 실전 전환하세요

  • API 키를 공개 저장소에 절대 업로드하지 마세요

  • 키움 REST API는 허용된 IP에서만 동작합니다

  • 본 프로젝트는 키움증권 공식 프로젝트가 아닙니다

  • 투자 손실에 대한 책임은 사용자 본인에게 있습니다

라이선스

MIT - 투자 손실에 대한 책임은 지지 않습니다.

Available Tools

11 tools
cancel_orderA
Destructive

원주문번호로 미체결 주문을 취소합니다. 수량을 0으로 입력하면 잔량 전부 취소

ParametersJSON Schema
NameRequiredDescriptionDefault
original_order_noYes취소할 원주문번호
stock_codeYes종목코드 (예: 005930)
quantityYes취소 수량 (0 입력시 잔량 전부 취소)
account_noNo계좌번호 (미입력시 기본 계좌 사용)

TDQS

A4.2/5.0
Behavior4/5

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

The description adds valuable behavioral context beyond what annotations provide. While annotations already indicate this is a destructive, non-idempotent write operation, the description explains the special case for quantity parameter ('수량을 0으로 입력하면 잔량 전부 취소' - entering 0 cancels all remaining quantity), which is crucial operational knowledge not captured in the structured annotations.

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

Conciseness5/5

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

The description is extremely concise with just two sentences that both earn their place. The first sentence states the core purpose, and the second provides crucial behavioral nuance about the quantity parameter. There's zero wasted language or 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 destructive order cancellation tool with good annotations but no output schema, the description provides adequate context. It explains the core operation and the special quantity behavior. However, it doesn't mention potential side effects, error conditions, or what happens after successful cancellation, which would be helpful given the destructive nature.

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?

With 100% schema description coverage, the input schema already documents all parameters thoroughly. The description adds minimal additional semantics by reinforcing the quantity parameter's special behavior (0 = cancel all), but doesn't provide meaningful context beyond what's already in the schema descriptions.

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 specific action ('취소합니다' - cancels) and target resource ('미체결 주문' - unfilled orders) using the identifier '원주문번호' (original order number). It distinguishes itself from sibling tools like place_buy_order and place_sell_order by focusing on cancellation rather than order placement.

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 clear context for when to use this tool ('미체결 주문을 취소합니다' - cancels unfilled orders), implying it should be used for pending orders rather than completed trades. However, it doesn't explicitly mention when NOT to use it or name specific alternatives among the sibling tools.

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

get_account_balanceB
Read-only

보유 주식 목록, 현재가, 매입가, 매입금액 등 계좌 잔고를 조회합니다

ParametersJSON Schema
NameRequiredDescriptionDefault
account_noNo계좌번호 (미입력시 기본 계좌 사용)

TDQS

B3.3/5.0
Behavior3/5

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

The description adds some behavioral context beyond the readOnlyHint annotation. It specifies what data is returned (stock holdings, current prices, purchase prices, purchase amounts), which helps the agent understand the scope of information retrieved. However, it doesn't mention important behavioral aspects like whether this requires authentication, rate limits, response format, or error conditions. The annotation correctly indicates read-only operation, and the description doesn't contradict this.

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 single sentence that efficiently communicates the core functionality. It's front-loaded with the key information (what data is retrieved) without unnecessary elaboration. Every word earns its place in this minimal description.

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 moderate complexity (financial data retrieval), the presence of readOnlyHint annotation, and 100% schema coverage, the description is adequate but has gaps. It explains what data is returned but doesn't cover output format, authentication requirements, or error handling. Without an output schema, the description should ideally provide more detail about the return structure. It meets minimum viable standards 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?

With 100% schema description coverage, the input schema already fully documents the single optional parameter (account_no with default behavior). The description adds no parameter-specific information beyond what's in the schema. According to scoring rules, when schema_description_coverage is high (>80%), the baseline is 3 even with no parameter info in the description.

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's purpose: retrieving account balance information including stock holdings, current prices, purchase prices, and purchase amounts. It uses specific verbs ('조회합니다' - retrieves/queries) and resources ('계좌 잔고' - account balance). However, it doesn't explicitly differentiate from sibling tools like 'get_portfolio_summary' or 'get_deposit_detail', which might provide overlapping or related financial information.

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 doesn't mention sibling tools like 'get_portfolio_summary' (which might provide summary vs detailed balance), 'get_deposit_detail' (which might focus on cash deposits), or 'get_trade_history' (which shows transactions rather than current holdings). There are no explicit when/when-not instructions or prerequisites mentioned.

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

get_deposit_detailB
Read-only

예수금, 증거금, 미수확보금 등 예수금 상세를 조회합니다

ParametersJSON Schema
NameRequiredDescriptionDefault
account_noNo계좌번호 (미입력시 기본 계좌 사용)

TDQS

B3.2/5.0
Behavior3/5

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

The annotations indicate readOnlyHint=true, which the description aligns with by using '조회합니다' (retrieves/views). The description adds value by specifying the types of deposit details retrieved (예수금, 증거금, 미수확보금), but does not disclose additional behavioral traits like rate limits, authentication needs, or response format, relying on annotations for basic safety.

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, efficient sentence in Korean that directly states the tool's function. It is front-loaded with the core purpose and avoids unnecessary words, though it could be slightly more structured for clarity in English contexts.

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 optional parameter, read-only annotation, no output schema), the description is adequate but minimal. It covers the purpose but lacks context on output format, error handling, or integration with sibling tools, leaving gaps for an agent to fully understand usage in a financial system.

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, with the parameter 'account_no' fully documented in the schema. The description does not add any parameter-specific information beyond what the schema provides, such as format examples or constraints, so it meets the baseline for high schema coverage.

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's purpose: retrieving detailed deposit information including deposit money, margin, and unsecured loan collateral. It uses specific financial terms (예수금, 증거금, 미수확보금) that define the scope, though it doesn't explicitly differentiate from sibling tools like 'get_account_balance' or 'get_portfolio_summary' which might overlap in financial data retrieval.

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 is provided on when to use this tool versus alternatives. The description does not mention any prerequisites, exclusions, or comparisons to sibling tools such as 'get_account_balance' or 'get_portfolio_summary', leaving the agent to infer usage context from tool names alone.

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

get_portfolio_summaryA
Read-only

총평가금액, 총손익, 수익률 등 포트폴리오 전체 현황을 분석합니다

ParametersJSON Schema
NameRequiredDescriptionDefault
account_noNo계좌번호 (미입력시 기본 계좌 사용)

TDQS

A3.5/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, indicating this is a safe read operation. The description adds useful context about what gets analyzed (portfolio valuation, profit/loss, returns), which helps the agent understand the scope of data returned. However, it doesn't disclose additional behavioral traits like rate limits, authentication needs beyond the account_no parameter, or whether it requires specific permissions. No contradiction with annotations exists.

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 directly states the tool's purpose without unnecessary words. It's appropriately sized for a simple read operation and front-loaded with key information (what gets analyzed). Every part of the sentence contributes value by specifying the analysis scope.

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 low complexity (1 optional parameter, read-only operation), no output schema, and rich annotations (readOnlyHint), the description is adequate but has gaps. It explains what data is analyzed but doesn't cover return format details, error conditions, or how the analysis is presented (e.g., aggregated values vs. breakdowns). For a portfolio summary tool, more context on output structure would be helpful despite the annotations.

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, with the single parameter 'account_no' clearly documented in the schema ('계좌번호 (미입력시 기본 계좌 사용)' - account number, uses default if not input). The description doesn't add any parameter-specific information beyond what the schema provides, so it meets the baseline score of 3 for high schema coverage without compensating value.

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 what the tool does ('분석합니다' - analyzes) and specifies the resources it analyzes ('총평가금액, 총손익, 수익률 등 포트폴리오 전체 현황' - total valuation, total profit/loss, rate of return, and overall portfolio status). It distinguishes from siblings like get_account_balance (specific balance) or get_trade_history (transaction history) by focusing on comprehensive portfolio analysis. However, it doesn't explicitly name the sibling alternatives for comparison.

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 context by specifying it analyzes '포트폴리오 전체 현황' (overall portfolio status), suggesting it's for summary views rather than detailed transactions or specific stock data. However, it doesn't provide explicit guidance on when to use this tool versus alternatives like get_account_balance (for balance only) or get_trade_history (for transaction details), nor does it mention any prerequisites or exclusions.

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

get_stock_chartB
Read-only

기준일자 기준 일봉 OHLCV 차트 데이터를 조회합니다 (최근 데이터부터 내림차순)

ParametersJSON Schema
NameRequiredDescriptionDefault
stock_codeYes종목코드 (예: 005930)
base_dateNo기준일자 (이 날짜 이전 데이터 조회) (YYYYMMDD 형식)

TDQS

B3.2/5.0
Behavior3/5

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

The description adds some behavioral context beyond annotations: it specifies that data is sorted in descending order by recent data and that base_date filters for data before that date. The annotation (readOnlyHint: true) already indicates this is a safe read operation, so the description doesn't need to reiterate safety. However, it doesn't disclose other behavioral traits like rate limits, authentication needs, or what happens if no data exists for the given parameters.

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, efficient sentence that conveys the core functionality without unnecessary words. It's front-loaded with the main purpose and includes key details (sorting order and date filtering). However, it could be slightly improved by explicitly mentioning the tool's scope relative to siblings.

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 moderate complexity (2 parameters, read-only operation), the description is adequate but has gaps. It covers the basic purpose and data ordering, but lacks output details (no output schema is provided, so the description doesn't explain return values like OHLCV structure or pagination). With annotations covering safety, it's minimally viable but could benefit from more context on usage and results.

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 description coverage is 100%, meaning both parameters (stock_code and base_date) are fully documented in the schema with descriptions and patterns. The description adds minimal value beyond the schema: it clarifies that base_date is used to retrieve data before that date ('이 날짜 이전 데이터 조회'), which is somewhat redundant with the schema's description. No additional parameter semantics are provided.

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's purpose: retrieving daily OHLCV chart data for a stock, sorted by recent data first. It specifies the verb ('조회합니다' - retrieves/checks) and resource ('일봉 OHLCV 차트 데이터' - daily OHLCV chart data). However, it doesn't explicitly differentiate from sibling tools like 'get_stock_price' or 'search_stock', which might offer similar or 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. It mentions the base_date parameter for filtering data before a specific date, but doesn't explain how this differs from other stock-related tools like 'get_stock_price' (which might provide current price) or 'search_stock' (which might search for stocks). There are no explicit when-to-use or when-not-to-use instructions.

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

get_stock_priceA
Read-only

종목의 현재가, 전일대비, 시가/고가/저가, 250일 고저, PER/PBR/EPS를 조회합니다

ParametersJSON Schema
NameRequiredDescriptionDefault
stock_codeYes종목코드 (예: 005930)

TDQS

A3.8/5.0
Behavior3/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds value by specifying the exact metrics returned (current price, PER, etc.), which goes beyond the annotation. However, it doesn't mention rate limits, authentication needs, or response format details.

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 in Korean that lists all key data points without unnecessary words. It's front-loaded with the core purpose and provides complete information in minimal space.

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 read-only tool with one well-documented parameter and no output schema, the description effectively covers what data is returned. It could be more complete by specifying the return format or units (e.g., currency), but given the annotations and simple schema, it's largely adequate.

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 the parameter 'stock_code' fully documented in the schema (including pattern and example). The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline for high schema coverage.

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 specific action ('조회합니다' - 'retrieves' or 'queries') and lists the exact data points returned (current price, day-over-day change, open/high/low prices, 250-day high/low, PER/PBR/EPS). It distinguishes from siblings like get_stock_chart (visual data) or search_stock (finding stocks).

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 retrieving detailed stock price metrics, but doesn't explicitly state when to use this versus alternatives like get_stock_chart (for chart data) or search_stock (for finding stocks by name). No explicit exclusions or prerequisites are mentioned.

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

get_trade_historyA
Read-only

당일 또는 특정 날짜의 매매일지(매수/매도 내역, 손익)를 조회합니다 (최근 2개월까지)

ParametersJSON Schema
NameRequiredDescriptionDefault
base_dateNo조회일자 (미입력시 오늘) (YYYYMMDD 형식)
account_noNo계좌번호 (미입력시 기본 계좌 사용)

TDQS

A3.6/5.0
Behavior3/5

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

The annotation 'readOnlyHint': true already indicates this is a safe read operation. The description adds useful behavioral context: it specifies the time constraint ('최근 2개월까지' - up to last 2 months) and clarifies that it retrieves detailed trade records including profit/loss. However, it doesn't mention other behavioral aspects like response format, pagination, or authentication requirements 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 a single, efficient sentence in Korean that front-loads the core purpose and includes key constraints. Every element earns its place: the action (조회합니다), the resource (매매일지), the content details (매수/매도 내역, 손익), the scope (당일 또는 특정 날짜), and the limit (최근 2개월까지). There's no wasted verbiage.

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 moderate complexity (2 optional parameters, read-only operation), the description provides sufficient context. The annotation covers safety (readOnlyHint: true), and the schema fully documents parameters. The description adds meaningful constraints (2-month limit, profit/loss inclusion) and clarifies default behaviors (today's date, default account). However, without an output schema, some details about return values (e.g., structure of trade records) are missing, though not critically for a retrieval 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 description coverage is 100%, with both parameters ('base_date', 'account_no') fully documented in the schema. The description mentions date and account aspects generally ('당일 또는 특정 날짜', '계좌번호') but doesn't add specific semantic details beyond what the schema already provides (e.g., format 'YYYYMMDD', default behaviors). Baseline 3 is appropriate since the schema carries the parameter documentation burden.

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's purpose: '조회합니다' (retrieve/query) for '매매일지' (trade history) including '매수/매도 내역, 손익' (buy/sell records, profit/loss). It specifies the scope ('당일 또는 특정 날짜', '최근 2개월까지' - today or specific date, up to last 2 months), which is helpful. However, it doesn't explicitly differentiate from sibling tools like 'get_account_balance' or 'get_portfolio_summary' in terms of data granularity or time range.

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 context by mentioning date ranges and optional parameters, but doesn't provide explicit guidance on when to use this tool versus alternatives. For example, it doesn't compare to 'get_portfolio_summary' for aggregated data or 'get_unfilled_orders' for pending trades. The context is clear (retrieve trade history), but no when-not-to-use or alternative tool references are included.

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

get_unfilled_ordersB
Read-only

미체결 주문 목록을 조회합니다

ParametersJSON Schema
NameRequiredDescriptionDefault
account_noNo계좌번호 (미입력시 기본 계좌 사용)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations declare readOnlyHint=true, indicating a safe read operation. The description adds minimal behavioral context beyond this, as it doesn't specify details like response format, pagination, or error handling. However, it doesn't contradict the annotations, and the tool's name ('get') aligns with read-only behavior. With annotations covering safety, the description adds little extra 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 a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core purpose, making it easy to understand quickly. Every part of the sentence earns its place by conveying essential information.

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 low complexity (1 optional parameter, read-only annotation, no output schema), the description is minimally adequate. It covers the basic purpose but lacks details on output (e.g., what data is returned) and usage context. With annotations handling safety, it's complete enough for a simple query tool but could be improved with more behavioral or output 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?

The input schema has 100% description coverage, with the parameter 'account_no' documented as '계좌번호 (미입력시 기본 계좌 사용)' meaning 'account number (uses default account if not input).' The description doesn't add any meaning beyond this schema information, so it meets the baseline of 3 for high schema coverage without extra param details.

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's purpose: '미체결 주문 목록을 조회합니다' translates to 'Retrieves a list of unfilled orders.' This specifies the verb (retrieve/query) and resource (unfilled orders). However, it doesn't explicitly differentiate from sibling tools like 'get_trade_history' or 'cancel_order,' which could handle related but distinct operations.

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 doesn't mention prerequisites (e.g., needing an account), exclusions (e.g., not for filled orders), or comparisons to siblings like 'get_trade_history' for past trades or 'cancel_order' for modifying orders. Usage is implied but not articulated.

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

place_buy_orderB

주식 매수 주문을 실행합니다. 시장가 또는 지정가 매수를 지원합니다

ParametersJSON Schema
NameRequiredDescriptionDefault
stock_codeYes종목코드 (예: 005930)
quantityYes주문 수량
priceNo주문 가격 (시장가일 경우 0)
order_typeNo주문유형: market(시장가) 또는 limit(지정가)market
account_noNo계좌번호 (미입력시 기본 계좌 사용)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already indicate this is a non-readOnly, non-idempotent operation (write/mutation). The description adds that it supports both market and limit orders, which is useful behavioral context beyond annotations. However, it doesn't disclose other important traits like authentication requirements, rate limits, or what happens on failure.

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 appropriately concise with two short sentences that convey the core functionality. It's front-loaded with the primary purpose. No wasted words, though it could potentially benefit from slightly more detail given the tool's complexity.

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?

For a financial transaction tool with no output schema and annotations only covering read/write/idempotency, the description is minimally adequate. It covers what the tool does but lacks important context about return values, error conditions, authentication requirements, and relationship to sibling tools.

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?

With 100% schema description coverage, the schema already documents all 5 parameters thoroughly. The description mentions market vs limit order support (relating to 'order_type' and 'price'), but adds minimal semantic value beyond what's in the schema descriptions. Baseline 3 is appropriate when schema does the heavy lifting.

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 action ('주식 매수 주문을 실행합니다' - executes stock buy orders) and resource (stocks), making the purpose evident. It distinguishes from sibling 'place_sell_order' by specifying 'buy' but doesn't explicitly differentiate from other trading-related tools like 'cancel_order' or 'get_unfilled_orders'.

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 doesn't mention prerequisites (like needing an authenticated account), when not to use it, or how it relates to sibling tools like 'place_sell_order' or 'cancel_order'.

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

place_sell_orderB

주식 매도 주문을 실행합니다. 시장가 또는 지정가 매도를 지원합니다

ParametersJSON Schema
NameRequiredDescriptionDefault
stock_codeYes종목코드 (예: 005930)
quantityYes주문 수량
priceNo주문 가격 (시장가일 경우 0)
order_typeNo주문유형: market(시장가) 또는 limit(지정가)market
account_noNo계좌번호 (미입력시 기본 계좌 사용)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations indicate this is a non-readOnly, non-idempotent tool (mutation with side effects), which the description aligns with by implying execution of orders. The description adds minimal behavioral context beyond annotations—it mentions support for market/limit orders but doesn't cover critical aspects like confirmation mechanisms, error handling, or execution guarantees. 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.

Conciseness4/5

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

The description is concise and front-loaded with the core action ('주식 매도 주문을 실행합니다'), followed by a brief feature note. It avoids redundancy and wastes no words, though it could be slightly more informative without losing efficiency.

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?

For a mutation tool with no output schema and minimal annotations, the description is somewhat incomplete. It covers the basic action and order types but lacks details on return values, error cases, or dependencies (e.g., account authentication). Given the complexity of financial transactions, more context would be beneficial, but it meets a minimum viable threshold.

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 each parameter well-documented in the schema (e.g., stock_code pattern, price default for market orders). The description adds no additional parameter semantics beyond what the schema provides, such as explaining interactions between order_type and price. Baseline score of 3 is appropriate given high schema coverage.

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's purpose as '주식 매도 주문을 실행합니다' (executes stock sell orders) and specifies it supports market or limit orders. It distinguishes from sibling tools like place_buy_order by focusing on selling, but doesn't explicitly differentiate from other order-related tools like cancel_order beyond the action type.

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 is provided about when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., needing sufficient holdings), compare with market vs. limit order scenarios, or reference sibling tools like cancel_order for order management. Usage context is implied but not stated.

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

search_stockB
Read-only

종목코드로 종목명, 시장구분, 업종, 상장일 등 종목 기본 정보를 조회합니다

ParametersJSON Schema
NameRequiredDescriptionDefault
stock_codeYes종목코드 (예: 005930)

TDQS

B3.4/5.0
Behavior3/5

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

Annotations provide readOnlyHint=true, indicating a safe read operation. The description adds context about what information is retrieved (name, market, industry, listing date), which is useful beyond annotations. However, it doesn't disclose behavioral traits like rate limits, authentication needs, or response format details, leaving some gaps.

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, efficient sentence in Korean that directly states the tool's function. It's front-loaded with the core purpose and lists key data points without unnecessary elaboration. However, it could be slightly more structured for clarity in English contexts.

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 (1 parameter, read-only, no output schema), the description is adequate but minimal. It covers the basic purpose and data retrieved, but lacks details on output format, error handling, or integration with sibling tools, leaving room for improvement in completeness.

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 the parameter 'stock_code' fully documented in the schema (type, pattern, example). The description doesn't add any parameter-specific details beyond what the schema provides, so it meets the baseline for high coverage without extra value.

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's purpose: '조회합니다' (to retrieve) basic stock information by stock code, specifying the resource (stock basic information) and key data points (name, market classification, industry, listing date). It distinguishes from siblings like get_stock_price (price only) or get_stock_chart (chart data), but doesn't 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 Guidelines3/5

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

The description implies usage context: when you need basic stock info by code. However, it doesn't explicitly state when to use this versus alternatives (e.g., get_stock_price for price, get_stock_chart for charts) or any prerequisites. The guidance is implied but not detailed.

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.

  1. 11 tool updatesv1.0.0
    • First observedcancel_order
    • First observedget_account_balance
    • First observedget_deposit_detail
    • First observedget_portfolio_summary
    • First observedget_stock_chart
    • First observedget_stock_price
    • First observedget_trade_history
    • First observedget_unfilled_orders
    • First observedplace_buy_order
    • First observedplace_sell_order
    • First observedsearch_stock

TDQS

A3.8/5.0

Scored across 11 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: cancel_order cancels orders, get_account_balance retrieves account holdings, get_deposit_detail gets deposit details, get_portfolio_summary provides portfolio analysis, get_stock_chart fetches chart data, get_stock_price retrieves current stock metrics, get_trade_history shows trade history, get_unfilled_orders lists unfilled orders, place_buy_order executes buy orders, place_sell_order executes sell orders, and search_stock searches for stock information. The descriptions clearly differentiate their functions, eliminating any ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case: get_account_balance, get_deposit_detail, get_portfolio_summary, get_stock_chart, get_stock_price, get_trade_history, get_unfilled_orders, place_buy_order, place_sell_order, search_stock, and cancel_order. The verbs (get, place, search, cancel) are appropriately matched to the nouns, creating a predictable and readable naming convention throughout the set.

Tool Count5/5

With 11 tools, the count is well-scoped for a stock trading server, covering essential operations like account management, order placement, market data retrieval, and portfolio analysis. Each tool serves a specific, necessary function without redundancy, making the set comprehensive yet manageable for typical trading workflows.

Completeness5/5

The tool set provides complete coverage for stock trading and portfolio management: it includes CRUD-like operations (place/cancel orders, get trade history), account and portfolio analysis (balance, deposit, summary), market data access (stock price, chart, search), and order management (unfilled orders). There are no obvious gaps, as all core workflows from research to execution and monitoring are supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

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
    B
    quality
    C
    maintenance
    An MCP server that enables interaction with the Invertir Online (IOL) trading API through Claude Desktop. It allows users to access their IOL trading account and manage financial operations using natural language.
    8
    2
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server wrapping Toss Securities Open API, enabling stock price queries and trading for Korean and US stocks via natural language.
    36
    7
    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
  • A
    license
    A
    quality
    A
    maintenance
    Read-only MCP server for Kiwoom Securities, enabling natural language queries of Korean stock market data and account information, including ISA tax status.
    49
    66
    1
    MIT