mcpField
K
kiwoom-mcp-server

kiwoom-mcp-server

本地服务
npmjs.com金融数据110 周前更新

关于 kiwoom-mcp-server

kiwoom-mcp-server 是只读 MCP 服务,用于查询韩国股市数据和 Kiwoom 账户信息。它提供丰富的市场与账户工具,包括 ISA 税务状态计算,但不支持修改订单。

主要功能

  1. 01韩国股票行情与图表
  2. 02市场排名与投资者资金流
  3. 03ETF、卖空与借贷数据
  4. 04只读账户及交易查询
  5. 05ISA 税务状态计算

适用场景

  1. 01查看韩国股价与市场趋势
  2. 02检查持仓、余额和交易记录
  3. 03分析投资者资金流或卖空活动
  4. 04估算 ISA 收益与免税额度的关系

MCP 相关

它将 Kiwoom Securities REST API 的市场和账户查询功能作为 MCP 工具提供。支持本地 stdio 和经过身份验证的 HTTP 连接;有意排除交易订单操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"kiwoom": {
"command": "npx",
"args": [
"-y",
"kiwoom-mcp-server"
],
"env": {
"KIWOOM_APP_KEY": "<KIWOOM_APP_KEY>",
"KIWOOM_APP_SECRET": "<KIWOOM_APP_SECRET>",
"KIWOOM_MODE": "<KIWOOM_MODE>",
"ISA_ENABLED": "<ISA_ENABLED>"
}
}
}
}
启动命令npx -y kiwoom-mcp-server
需要配置的环境变量
KIWOOM_APP_KEY密钥Kiwoom REST API app key (issued at openapi.kiwoom.com; VIRTUAL and REAL need separate keys)
KIWOOM_APP_SECRET密钥Kiwoom REST API app secret
KIWOOM_MODEVIRTUAL (모의투자, mock trading) or REAL (실전투자, live account)
ISA_ENABLEDOpt-in switch for the ISA tax-allowance tool (set true together with ISA_TYPE / ISA_OPENED_ON)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmkiwoom-mcp-server0.52.6

工具

49

收录的工具列表 · 更新于 3 周前

此工具无需参数。

详细介绍

kiwoom-mcp-server

한국어 · English

키움증권 REST API를 조회 전용(read-only) 으로 노출하는 MCP 서버입니다. Claude Desktop / Claude Code에서 자연어로 국내 주식 시세·차트·호가·지수·순위·수급과 내 계좌의 잔고·보유 종목·거래내역을 조회할 수 있고, ISA 계좌라면 비과세 한도 대비 손익통산 현황까지 계산해 줍니다.

⚠️ 보안 경고

  • 기본 실행은 로컬 stdio입니다. 원격에서 써야 한다면 반드시 인증이 내장된 HTTP 모드(원격 연결 참조)로만 노출하고, 인증 없는 상태(--no-auth)로는 절대 외부 네트워크에 열지 마세요.
  • .env의 AppKey/AppSecret은 실계좌 조회 권한입니다. 절대 커밋하지 마세요 (.gitignore에 이미 등록되어 있습니다).
  • 주문(매수/매도/정정/취소) 기능은 설계상 제외되어 있습니다. 이 서버가 계좌를 변경하는 일은 없습니다.

제공 Tool

시장 데이터 (계좌와 무관, 앱키만 있으면 사용 가능):

Tool설명키움 TR
search_stock종목명→코드 검색 (코스피/코스닥, ETF/ETN 포함) + 투자유의 표시ka10099
get_stock_price현재가/등락률/거래량/기본지표 + 업종·상장일·투자유의ka10001, ka10099
get_stock_quotes여러 종목(최대 30개) 일괄 시세 — 현재가·등락률·거래량·거래대금·시가총액ka10095, ka10099
get_stock_chart일/주/월/년/분/틱봉 캔들 차트 (수정주가 반영)ka10079~83, ka10094
get_daily_trading일별 거래·수급 — 종가·거래대금 + 개인/기관/외국인 순매수·프로그램·신용비율, 또는 장전/장중/장후 거래 분포ka10086, ka10015
get_orderbook10단계 매도/매수 호가·잔량 (통합 기준)ka10007
get_orderbook_rank시장 전체 호가잔량 상위 / 잔량 급증 / 잔량비율 급증 (정규장 중)ka10020~22
get_market_index코스피/코스닥 종합·업종 지수ka20003
get_sector_price업종 지수 현재가 상세 (등락 구성·52주 고저·시간대별 추이)ka20001
get_sector_stocks업종 구성 종목 시세 (현재가·등락률·거래량·고저가)ka20002
get_sector_chart업종 지수 일/주/월/년/분/틱봉 캔들 차트ka20004~08, ka20019
get_sector_flow업종별 투자자 순매수 — 시장 전체 업종의 개인/외국인/기관계 + 증권·투신·연기금·사모ka10051
get_ranking상승률/하락률/거래량/거래대금 상위 + 시가대비 등락률(체결강도 포함) + 신용비율 상위ka10027/30/32, ka10028, ka10033
get_equal_net_trade기관·외국인이 동시에 같은 방향으로 순매매한 종목 + 주체별 추정 평균단가ka10062
get_valuation_rankPER·PBR·ROE 고저 순위 (시장 전체 밸류에이션 스크리닝)ka10026
get_supply_concentration매물대집중 종목 — 특정 가격대에 거래가 몰린 종목과 그 구간ka10025
get_market_movers신고가/신저가/상한가/하한가/급등/급락/거래량급증/거래량갱신(직전 N일 최대 돌파) 특이 종목ka10016/17/19/23/24
get_vi_stocks당일 VI(변동성완화장치) 발동 종목 (발동가·괴리율·시각)ka10054
get_expected_execution동시호가 예상체결 순위 (개장 전 08:3009:00 / 마감 전 15:2015:30)ka10029
get_investor_trend개인/외국인/기관 순매수 동향 (기간 합계 + 일별)ka10059, ka10061
get_institution_trend기관·외국인 추정평균단가 + 일별·기간누적 순매수ka10045
get_investor_rank외국인·기관 순매매 상위 종목 / N일 연속 순매수 현황ka90009, ka10131
get_net_buy_rank투자자 12주체(개인·외국인·기관계·금융투자·보험·투신·은행·연기금등·사모펀드·기타금융·국가·기타법인)별 순매수 상위 종목 — 직전 완료 거래일 기준ka10066
get_foreign_intraday장중 주체별 순매수/순매도 상위 종목 — 외국인·기관계·보험·투신·연기금등·기타법인 (실시간 잠정치)ka10063, ka10065
get_broker_activity종목별 거래원(증권사) 매수/매도 상위 5 + 외국계 창구 표시, 전 거래원 50개사 누적 순위(view=broker_rank), 당일 상위에서 이탈한 창구(view=dropout), 또는 시장 전체 외국계 창구 순매매 상위ka10002, ka10102, ka10037, ka10038, ka10053
get_etf_infoETF 추적지수·과세유형·시세·NAV/괴리율ka40002, ka10001, ka40009
get_etf_returnsETF 기간별 수익률 vs 비교지수(직접 고르는 국내 지수 — 추적지수와 자동으로 맞춰지지 않음) + 일별 NAV·괴리율·추적오차 추이, 일자별 외국인·기관 순매수ka40001, ka40003, ka40008
get_etf_rank상장 ETF 전 종목 스크리너 — 괴리율(고평가/저평가)·등락률·거래량·추적오차 정렬 + 과세유형·운용사·추적지수 필터ka40004
get_short_selling종목별 일자별 공매도 추이 (공매도량·비중·평균가)ka10014
get_stock_lending대차거래 추이 (체결·상환·증감·잔고) — 종목별/시장 전체 + 대차잔고 상위 종목 순위ka10068, ka20068, ka90012
get_credit_trend신용융자·대주 잔고 추이 (신규·상환·잔고·공여율·잔고율)ka10013
get_foreign_holding외국인 보유(한도) 동향 — 종목별 추이, 또는 시장 전체 순위(한도소진율 증가 / 기간 누적 순매매 / 3일 연속 순매매)ka10008, ka10036, ka10034, ka10035
get_program_trading프로그램 매매 상위(당일·날짜 지정) + 추이 (일자별/시간대별/종목별, 코스피/코스닥) + 종목 시간대별·차익거래 잔고ka90003, ka90004, ka90010, ka90005, ka90013, ka90008, ka90006
get_after_hours시간외 단일가 (16:00~18:00) — 종목별 5단 호가·시세 또는 등락률 순위ka10087, ka10098
get_execution_strength체결강도 추이 (매수÷매도 체결량×100, 100이 균형) — 일별 60거래일 / 시간별 60분ka10046, ka10047
get_gold_priceKRX 금현물 시세 (금 1Kg / 미니금 100g) — 일별추이 + 기관·개인 순매수, 또는 당일 틱 체결ka50012, ka50010

관심종목 (영웅문 HTS에 저장한 관심 그룹, 읽기 전용):

Tool설명키움 TR
get_watchlist_groupsHTS 관심종목 그룹 목록 (그룹코드+그룹명)ka01300
get_watchlist그룹 내 종목 목록 (종목명·전일종가·시장·투자유의 보강)ka01301, ka10099

키움 REST API에는 관심종목 편집(추가/삭제) TR이 없어 조회만 가능합니다.

테마:

Tool설명키움 TR
get_theme_groups테마 그룹 목록 (등락률·종목수·기간수익률·주요종목; 종목별 편입 테마 검색)ka90001
get_theme_stocks특정 테마의 구성종목과 시세 (현재가·등락률·거래량·기간수익률)ka90002

계좌 (앱키에 귀속된 계좌 기준):

Tool설명키움 TR
get_account_balance예수금 + 총평가금액/총평가손익/추정예탁자산 + 당일/당월/누적 손익, view=settlement은 익일 결제 예정 건별 명세kt00001, kt00018, kt00004, kt00008
get_account_holdings보유 종목별 수량/평균단가/현재가/평가손익kt00018
get_account_today계좌 당일 현황 — 매매대금·수수료·세금·입출금 + D+2 추정 (실전 전용)kt00017
get_account_trend일별 추정예탁자산 추이 + 기간 수익률/평가손익/입출금 요약 (기본 30일, 모의투자 미지원)kt00002, kt00016
get_transactions기간별 거래내역 (체결일·단가·정산금액, 모의투자 미지원)kt00015
get_pending_orders미체결 주문 (주문번호·구분·상태·주문/미체결수량·주문가격)ka10075
get_order_executions체결 내역 (주문번호·구분·상태·주문/체결 수량·가격·수수료+세금, side/종목/주문번호 필터)ka10076
get_trading_journal당일매매일지 (종목별 매수/매도 평균가·수량·실현손익, 총손익)ka10170
calc_isa_tax_statusISA 손익통산 순이익의 비과세 한도 대비 현황 (확정 + 전량매도 시나리오, kt00015 의존이라 모의투자 미지원)kt00015, ka10074, kt00018

그 외 ping(연결 확인, 앱키 불필요). 모든 응답은 [모의투자]/[실전투자] 접두어로 어느 서버가 답했는지 표시합니다. search_stock 첫 호출은 종목 마스터(~4,300종목)를 내려받아 몇 초 걸리며 이후 12시간 캐시됩니다.

거래소 기준 — KRX + 넥스트레이드(NXT) 통합

v0.31.0부터 시세·랭킹 tool은 통합(SOR) 기준으로 조회합니다. KRX와 넥스트레이드(NXT) 체결을 합산한 값이며, NXT 거래가능 종목(약 606개, 대형주 다수)은 KRX만 볼 때보다 거래량이 크게 늘어납니다 — 삼성전자 실측(2026-08-03 정규장) KRX 19.2M / NXT 15.5M / 통합 34.7M. KRX만 표시하는 HTS·포털 화면과 숫자가 다르면 대개 이 차이입니다.

예외는 get_after_hours(시간외 단일가) 하나입니다 — 통합 조회가 불가능하며 NXT 거래가능 종목은 애초에 이 TR에서 조회되지 않습니다. 거래원(get_broker_activity)은 v0.47.0에서 통합으로 넘어왔습니다 — 그전까지 KRX 값을 내보내 상위 5의 순위가 실제와 달랐습니다(삼성전자 매수 1위가 KRX 기준 KB증권 / 통합 기준 미래에셋). 호가는 v0.37.0에서 통합으로 넘어왔습니다 — ka10004 대신 ka10007(시세표성정보)을 쓰며, 삼성전자 실측(2026-08-04 정규장) 매수1 잔량이 KRX 18,421 / NXT 17,081 / 통합 36,319이었습니다.

calc_isa_tax_status 사용 메모
  • 집계 시작일: .env의 ISA_OPENED_ON(계좌 개설일)이 기본값, 호출 시 from_date로 오버라이드 가능.
  • 배당·분배금이 거래내역에서 자동 감지되지 않으면 dividends_received 인자로 수동 입력.
  • 종목 과세유형(과세대상 vs 국내주식형)은 자동 분류입니다 — ETF는 키움이 주는 etftxon_type(ka40002)으로 확정하고(조회 실패 시 종목명 휴리스틱으로 폴백), 개별주식 등 그 밖에는 종목명 기반으로 추정합니다. 틀린 경우 overrides: [{stock_code, tax_type}]로 수정. 결과는 참고용 — 실제 과세는 증권사 정산 기준.

요구 사항

  • Node.js 22 이상 — Node 20이 2026-04-30에 EOL이 되면서 바닥을 올렸습니다 (process.loadEnvFile은 20.12부터 있으므로 코드가 요구하는 최소치는 그보다 낮습니다)
  • 키움증권 REST API 앱키 — 키움 Open API 포털에서 앱 등록 후 발급
    • 모의투자(VIRTUAL)와 실전투자(REAL)는 각각 별도로 발급받은 앱키를 사용하며, 발급받은 키 종류와 KIWOOM_MODE가 일치해야 합니다.
    • 계좌는 앱키에 귀속되므로 계좌번호 입력은 필요 없습니다.

설치

npm에 배포되어 있으므로 클론 없이 npx로 바로 실행할 수 있습니다 — 아래 "Claude Desktop 연결" / "Claude Code 연결"의 npx 설정을 그대로 쓰면 됩니다. 이 경우 앱키는 .env 파일 대신 클라이언트 설정의 env 블록으로 전달합니다(예제는 각 연결 섹션 참고).

소스에서 직접 빌드하거나 코드를 수정하려면:

git clone <이 저장소 URL>   # 또는 소스 복사
cd kiwoom-mcp-server
npm install
cp .env.example .env        # 아래 표를 참고해 값 입력
npm run build               # dist/ 생성
npm test                    # 단위 테스트 (네트워크 불필요)

环境变量(.env)

变量必填说明
KIWOOM_APP_KEY✅Kiwoom REST API 应用密钥
KIWOOM_APP_SECRET✅Kiwoom REST API 应用密钥密文
KIWOOM_MODEVIRTUAL(模拟投资,默认值)或 REAL(实盘投资)
ISA_ENABLED为 true 时启用 calc_isa_tax_status 工具。默认值为 false(按普通账户处理)
ISA_TYPEGENERAL(普通型,限额 200 万韩元,默认值)或 SEOMIN(民众型/农渔民型,400 万韩元)。仅在 ISA_ENABLED=true 时使用
ISA_OPENED_ONISA 账户开户日期 yyyy-MM-dd — calc_isa_tax_status 的统计开始日期默认值。仅在 ISA_ENABLED=true 时使用
MCP_TRANSPORTstdio(默认值)或 http — 参见远程连接
MCP_AUTH_TOKENHTTP 模式 ✅HTTP 模式下所有 /mcp 请求都必须提供的 Bearer 令牌
MCP_HTTP_PORTHTTP 模式端口(默认值 8000)
MCP_HTTP_HOSTHTTP 模式绑定地址(默认值 127.0.0.1)
MCP_HTTP_NO_AUTH为 true 时允许在无身份验证的情况下启动 HTTP 模式(不建议 — 参见下方安全提示)
MCP_PUBLIC_URLHTTP 模式下对外公布的基础 URL(例如:https://kiwoom.example.com)。未设置时,根据请求的 Host 和 X-Forwarded-Proto 推断 — 如果反向代理未添加这些标头,则必须明确设置

默认按普通(非 ISA)账户处理 — 若无其他配置,仅会公开市场和账户查询工具。若要连接 ISA 账户并使用免税额度工具,请设置 ISA_ENABLED=true,并填写 ISA_TYPE/ISA_OPENED_ON。关闭后,calc_isa_tax_status 不会注册,其余工具均照常运行。

由于会先在项目根目录查找 .env,即使从任意工作目录运行(例如 Claude Desktop),也能正常工作。

连接 Claude Desktop

配置文件位置:

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json

npx(发行版)— 无需克隆即可运行。通过 env 块传递应用密钥:

{
  "mcpServers": {
    "kiwoom": {
      "command": "npx",
      "args": ["-y", "kiwoom-mcp-server"],
      "env": {
        "KIWOOM_APP_KEY": "…",
        "KIWOOM_APP_SECRET": "…",
        "KIWOOM_MODE": "REAL"
      }
    }
  }
}

从源码构建 — 直接运行 dist/index.js。应用密钥使用项目根目录中的 .env:

{
  "mcpServers": {
    "kiwoom": {
      "command": "/opt/homebrew/bin/node",
      "args": ["/절대/경로/kiwoom-mcp-server/dist/index.js"]
    }
  }
}

建议在 command 中使用可执行文件的绝对路径(使用 which node、 which npx 确认)。GUI 应用不会继承 Shell 的 PATH,因此如果只写 "node"/"npx", 服务可能无法启动,且不会显示任何提示 — 这是最常见的失败原因。

保存后,彻底退出 Claude Desktop(macOS 上按 ⌘Q)并重新启动,即可看到工具。运行 npm run build 重新构建后,也必须彻底退出并重新启动,更改才会生效。

连接 Claude Code

npx(发行版)— 通过 -e 标志传递应用密钥:

claude mcp add kiwoom \
  -e KIWOOM_APP_KEY=… -e KIWOOM_APP_SECRET=… -e KIWOOM_MODE=REAL \
  -- npx -y kiwoom-mcp-server

从源码构建 — 使用项目根目录中的 .env:

claude mcp add kiwoom -- node /절대/경로/kiwoom-mcp-server/dist/index.js

远程连接(HTTP 模式)— claude.ai 网页版/移动端

claude.ai(网页版/移动端)的自定义连接器无法直接连接本地 stdio 服务,需要可通过公开 HTTPS 访问的 Streamable HTTP MCP 服务。可以使用 --http 标志(或设置 MCP_TRANSPORT=http)以 HTTP 模式启动此服务:

MCP_AUTH_TOKEN="$(openssl rand -hex 32)" npx -y kiwoom-mcp-server --http --port 8000
# 엔드포인트: http://127.0.0.1:8000/mcp · 헬스체크: /healthz
  • **默认要求进行身份验证。**如果没有设置 MCP_AUTH_TOKEN,服务会拒绝启动 — 所有 /mcp 请求都必须带有 Authorization: Bearer <令牌> 标头。若要在无身份验证的情况下开放,必须明确指定 --no-auth;由于账户查询工具会直接暴露,请仅在可信网络或模拟投资环境(KIWOOM_MODE=VIRTUAL)中使用。
  • 默认绑定地址为 127.0.0.1 — 预期在前面配置隧道。若要直接暴露容器/服务器,请明确指定 --host 0.0.0.0。
  • 使用 Cloudflare Tunnel 等方式创建公开 HTTPS URL: cloudflared tunnel --url http://localhost:8000(临时 URL — 建议长期运行时使用 named tunnel)。
  • OAuth 元数据中的地址根据请求的 Host 和 X-Forwarded-Proto 推断。 如果使用 Cloudflare Tunnel 等会添加这些标头的代理,无需更改;但若自行配置的 nginx/Caddy 未传递 X-Forwarded-Proto,issuer 就会以 http:// 公布, 导致 claude.ai 拒绝连接。此时请设置 MCP_PUBLIC_URL=https://<域名>。
  • 在 claude.ai 中注册:在 Settings → Connectors → Add custom connector 中输入 https://<域名>/mcp(高级设置中的 OAuth 字段留空)。连接时,浏览器会显示授权页面, 输入 MCP_AUTH_TOKEN 的值作为连接密码即可完成 — 服务内置 MCP 身份验证规范(OAuth 2.0 + PKCE、动态客户端注册),无需单独设置标头。已注册的连接器可在网页版/移动端/桌面端通用。 可指定标头的客户端(例如 Claude Code 的 --header)也可以像以前一样,使用静态标头 Authorization: Bearer <MCP_AUTH_TOKEN> 连接。 OAuth 令牌保存在工作目录的 .oauth-state.json(0600)中,重启服务后仍可保持连接。
  • ⚠️ **Kiwoom API 调用从运行此服务的设备发出。**REAL 模式的 Kiwoom 指定终端认证(8050)与 IP 绑定,因此在非注册 IP 的位置(例如云端)运行时可能出现认证错误。请先使用模拟投资验证远程开放。

原有的 stdio 行为(连接 Claude Desktop/Code)在不带参数运行时保持不变 — 但如果 .env 或环境变量中设置了 MCP_TRANSPORT=http,则例外。由于会在选择传输方式之前读取 .env,即使不带参数运行,也会使用 HTTP 路径;若未设置 MCP_AUTH_TOKEN,服务会直接拒绝启动。无论 MCP_TRANSPORT 的值如何,若要强制使用 stdio,请传入 --stdio。

验证运行

无需 MCP 客户端,即可直接通过 stdio 验证:

printf '%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"t","version":"0"}}}' \
  '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"ping","arguments":{}}}' \
  | node dist/index.js

无需 .env,ping 也能响应。行情和账户工具需要应用密钥。

문제 해결

증상확인할 것
Desktop에 tool이 안 보임command가 node 절대 경로인지, npm run build를 했는지, Desktop을 완전 종료 후 재실행했는지
환경설정이 없거나 잘못되었습니다.env가 프로젝트 루트에 있는지, 필수 변수가 채워졌는지
키움 인증에 실패했습니다앱키 종류(모의/실전)와 KIWOOM_MODE가 일치하는지, 포털에서 앱이 활성 상태인지
요청 한도를 초과했습니다키움 레이트리밋(TR당 약 1초 1회). 서버가 자동 재시도한 뒤에도 초과한 경우이니 잠시 후 다시 시도
예수금과 D+2 추정예수금이 다름미결제(D+2 정산) 매매가 있으면 정상입니다

개발

npm run dev         # tsx로 소스 직접 실행
npm run check       # 버전 5곳 동기화 · 카운트 · README 2종 tool 문서화 · server.ts 등록 누락
npm run check:write # 위 카운트를 실제 값으로 고쳐 씀 (버전은 안 건드림)
npm run typecheck   # tsc --noEmit -p tsconfig.test.json (src + tests)
npm test            # vitest
npm run build       # tsc → dist/

네 가지 모두 CI(.github/workflows/ci.yml, Node 22·24)에서 돌고, 거기에 npm audit --omit=dev --audit-level=high가 한 단계 더 붙습니다. 타입체크가 tsconfig.test.json을 쓰는 이유는 빌드용 tsconfig.json의 rootDir가 src라 테스트를 거기 넣으면 dist/ 레이아웃이 바뀌기 때문입니다 — 빌드는 그대로 tsconfig.json을 씁니다.

구조: src/kiwoom/(인증·HTTP·TR 계층) → src/tools/(MCP tool, 포맷터 분리) → src/isa/(과세유형 분류·실현손익 재구성·손익통산). 상세 규칙과 검증된 API 계약은 CLAUDE.md 참고.

라이선스

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。