
Kiwoom Securities MCP Server
io.github.ChunSam由 GitHub 帳號 ChunSam 發布v0.52.6更新於 Oct 24, 2026
Read-only MCP server for the Kiwoom Securities REST API: market data, account inquiry, ISA tax tool
概覽
面向 Kiwoom 證券 REST API 的唯讀 MCP 伺服器,讓助理查詢韓國股票行情、圖表、排行與帳戶持股。
- 可以做什麼
- 搜尋股票,並讀取價格、報價、K 線、委買委賣、指數、類股、排行、投資人資金流向、ETF、放空、借券、信用與黃金資料
- 查看自選股群組與主題群組及其成分股
- 查詢帳戶餘額、持股、當日狀況、資產走勢、交易明細、未成交與已成交委託以及交易紀錄
- 啟用 ISA 工具時計算 ISA 免稅額度使用情況
- 用不需應用程式金鑰的 ping 工具檢查連線
- 適用情境
- 適合想用自然語言向助理詢問韓國股市行情、資金流向或自己 Kiwoom 帳戶狀況、而不想開啟交易終端機的情境。它依設計為唯讀,適合研究與帳戶檢視,而非下單交易。
- 執行需求
- 透過 npx 或原始碼建置在本機以 stdio 執行,需要 Node.js 22 以上版本。需要從 Kiwoom Open API 入口申請的應用程式金鑰與密鑰(KIWOOM_APP_KEY、KIWOOM_APP_SECRET),模擬與實盤須分別申請並與 KIWOOM_MODE 相符。可選設定 ISA_ENABLED、ISA_TYPE、ISA_OPENED_ON 以啟用 ISA 工具。需要連線至 Kiwoom API 的網路。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Kiwoom Securities MCP Server,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
kiwoom-mcp-server
한국어 · English
🛑 유지보수 중단 (2026-11-02)
이 프로젝트는 더 이상 유지보수하지 않습니다. 마지막 버전은 v0.52.6이며, 이후 기능 추가·버그 수정·의존성 보안 업데이트를 하지 않습니다. 키움 REST API 쪽 변경으로 일부 tool이 예고 없이 동작하지 않을 수 있습니다. 계속 쓰려면 저장소를 fork해 직접 관리해 주세요 (MIT 라이선스).
키움증권 REST API를 조회 전용(read-only) 으로 노출하는 MCP 서버입니다. Claude Desktop / Claude Code에서 자연어로 국내 주식 시세·차트·호가·지수·순위·수급과 내 계좌의 잔고·보유 종목·거래내역을 조회할 수 있고, ISA 계좌라면 비과세 한도 대비 손익통산 현황까지 계산해 줍니다.
⚠️ 보안 경고
- 기본 실행은 로컬 stdio입니다. 원격에서 써야 한다면 반드시 인증이 내장된 HTTP 모드(원격 연결 참조)로만 노출하고, 인증 없는 상태(
--no-auth)로는 절대 외부 네트워크에 열지 마세요..env의 AppKey/AppSecret은 실계좌 조회 권한입니다. 절대 커밋하지 마세요 (.gitignore에 이미 등록되어 있습니다).- 주문(매수/매도/정정/취소) 기능은 설계상 제외되어 있습니다. 이 서버가 계좌를 변경하는 일은 없습니다.
제공 Tool
시장 데이터 (계좌와 무관, 앱키만 있으면 사용 가능):
관심종목 (영웅문 HTS에 저장한 관심 그룹, 읽기 전용):
키움 REST API에는 관심종목 편집(추가/삭제) TR이 없어 조회만 가능합니다.
테마:
계좌 (앱키에 귀속된 계좌 기준):
그 외 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가 일치해야 합니다. - 계좌는 앱키에 귀속되므로 계좌번호 입력은 필요 없습니다.
- 모의투자(VIRTUAL)와 실전투자(REAL)는 각각 별도로 발급받은 앱키를 사용하며,
발급받은 키 종류와
설치
npm에 배포되어 있으므로 클론 없이 npx로 바로 실행할 수 있습니다 — 아래
"Claude Desktop 연결" / "Claude Code 연결"의 npx 설정을 그대로 쓰면 됩니다. 이 경우
앱키는 .env 파일 대신 클라이언트 설정의 env 블록으로 전달합니다(예제는 각
연결 섹션 참고).
소스에서 직접 빌드하거나 코드를 수정하려면:
환경 변수 (.env)
기본값은 일반(비-ISA) 계좌 기준입니다 — 별도 설정이 없으면 시장·계좌 조회 tool만
노출됩니다. ISA 계좌를 연결해 비과세 한도 tool을 쓰려면 ISA_ENABLED=true로 켜고
ISA_TYPE/ISA_OPENED_ON을 채우세요. 끄면 calc_isa_tax_status가 등록되지 않고
나머지 tool은 모두 그대로 동작합니다.
.env는 프로젝트 루트에서 먼저 찾기 때문에 (Claude Desktop처럼) 임의의 작업
디렉터리에서 실행돼도 동작합니다.
Claude Desktop 연결
설정 파일 위치:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
npx (배포판) — 클론 없이 실행. 앱키는 env 블록으로 전달:
소스 빌드 — dist/index.js 직접 실행. 앱키는 프로젝트 루트 .env 사용:
command에는 실행 파일의 절대 경로를 쓰는 편이 가장 안전합니다 (which node,which npx로 확인). GUI 앱은 셸 PATH를 상속받지 않으므로"node"/"npx"라고만 쓰면 서버가 조용히 뜨지 않을 수 있습니다 — 가장 흔한 실패 원인입니다.
저장 후 Claude Desktop을 완전히 종료(macOS는 ⌘Q)했다가 다시 실행하면 tool이
보입니다. npm run build로 다시 빌드한 뒤에도 완전 종료 후 재실행해야
변경이 반영됩니다.
Claude Code 연결
npx (배포판) — 앱키는 -e 플래그로 전달:
소스 빌드 — 프로젝트 루트 .env 사용:
원격 연결 (HTTP 모드) — claude.ai 웹/모바일
claude.ai(웹/모바일)의 커스텀 커넥터는 로컬 stdio 서버에 직접 붙을 수 없고, 공개
HTTPS로 접근 가능한 Streamable HTTP MCP 서버가 필요합니다. --http 플래그(또는
MCP_TRANSPORT=http)로 이 서버를 HTTP 모드로 띄울 수 있습니다:
- 인증이 기본 필수입니다.
MCP_AUTH_TOKEN이 없으면 기동을 거부합니다 — 모든/mcp요청에Authorization: Bearer <토큰>헤더가 있어야 합니다. 인증 없이 열려면--no-auth를 명시해야 하며, 계좌 조회 도구가 그대로 노출되므로 신뢰할 수 있는 네트워크나 모의투자(KIWOOM_MODE=VIRTUAL)에서만 사용하세요. - 기본 바인드는
127.0.0.1입니다 — 터널을 앞에 두는 구성을 전제합니다. 컨테이너/서버에 직접 노출하려면--host 0.0.0.0을 명시하세요. - 공개 HTTPS URL은 Cloudflare Tunnel 등으로 만듭니다:
cloudflared tunnel --url http://localhost:8000(임시 URL — 상시 운영은 named tunnel 권장). - OAuth 메타데이터에 실리는 주소는 요청의
Host와X-Forwarded-Proto에서 추론합니다. Cloudflare Tunnel처럼 그 헤더를 붙여 주는 프록시라면 그대로 두면 되지만, 직접 세운 nginx/Caddy가X-Forwarded-Proto를 넘기지 않으면 issuer가http://로 광고되어 claude.ai가 연결을 거부합니다. 그럴 때MCP_PUBLIC_URL=https://<도메인>으로 고정하세요. - claude.ai 등록: Settings → Connectors → Add custom connector에
https://<도메인>/mcp를 입력합니다 (고급 설정의 OAuth 필드는 비워둡니다). 연결 시 브라우저에 승인 페이지가 뜨고,MCP_AUTH_TOKEN값을 접속 암호로 입력하면 완료됩니다 — 서버가 MCP 인증 스펙(OAuth 2.0 + PKCE, 동적 클라이언트 등록)을 내장하고 있어 별도 헤더 설정이 필요 없습니다. 등록한 커넥터는 웹/모바일/데스크톱에서 공용입니다. 헤더를 지정할 수 있는 클라이언트(예: Claude Code--header)는 기존처럼Authorization: Bearer <MCP_AUTH_TOKEN>정적 헤더로도 접속할 수 있습니다. OAuth 토큰은 작업 디렉터리의.oauth-state.json(0600)에 저장되어 서버를 재시작해도 연결이 유지됩니다. - ⚠️ 키움 API 호출은 이 서버가 실행되는 곳에서 나갑니다. REAL 모드는 키움 지정단말기 인증(8050)이 IP에 묶이므로, 등록된 IP가 아닌 곳(클라우드 등)에서 실행하면 인증 오류가 날 수 있습니다. 원격 노출은 모의투자로 먼저 검증하세요.
기존 stdio 동작(Claude Desktop/Code 연결)은 인자 없이 실행하면 그대로입니다 — 단, .env나
환경변수에 MCP_TRANSPORT=http가 있으면 예외입니다. .env는 전송 방식을 고르기 전에 읽히므로
인자 없이 실행해도 HTTP 경로를 타고, MCP_AUTH_TOKEN이 없으면 아예 기동을 거부합니다.
MCP_TRANSPORT 값과 무관하게 stdio로 강제하려면 **--stdio**를 넘기세요.
동작 확인
MCP 클라이언트 없이 stdio로 직접 확인할 수 있습니다:
ping은 .env 없이도 응답합니다. 시세·계좌 tool은 앱키가 있어야 합니다.
문제 해결
개발
네 가지 모두 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 참고.
라이선스
來源:README.md,提交 d870742
工具
0版本歷史
1- v0.52.6最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分