Skip to content
MCP ThesaurusMCP Thesaurus

Kiwoom Securities MCP Server

CommunityIncomplete39/100Claim

npm kiwoom-mcp-serverstdioMITupdated 15d ago

ํ‚ค์›€์ฆ๊ถŒ REST API๋ฅผ ์กฐํšŒ ์ „์šฉ(read-only) ์œผ๋กœ ๋…ธ์ถœํ•˜๋Š” MCP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. Claude Desktop / Claude Code์—์„œ ์ž์—ฐ์–ด๋กœ ๊ตญ๋‚ด ์ฃผ์‹ ์‹œ์„ธยท์ฐจํŠธยทํ˜ธ๊ฐ€ยท์ง€์ˆ˜ยท์ˆœ์œ„ยท์ˆ˜๊ธ‰๊ณผ ๋‚ด ๊ณ„์ขŒ์˜ ์ž”๊ณ ยท๋ณด์œ  ์ข…๋ชฉยท๊ฑฐ๋ž˜๋‚ด์—ญ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ณ , ISA ๊ณ„์ขŒ๋ผ๋ฉด ๋น„๊ณผ์„ธ ํ•œ๋„ ๋Œ€๋น„ ์†์ตํ†ต์‚ฐ ํ˜„ํ™ฉ๊นŒ์ง€ ๊ณ„์‚ฐํ•ด ์ค๋‹ˆ๋‹ค.

SourceWebsite1

What can you do with Kiwoom Securities MCP Server?

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_orderbook 10๋‹จ๊ณ„ ๋งค๋„/๋งค์ˆ˜ ํ˜ธ๊ฐ€ยท์ž”๋Ÿ‰ (ํ†ตํ•ฉ ๊ธฐ์ค€) 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_rank PERยท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_info ETF ์ถ”์ ์ง€์ˆ˜ยท๊ณผ์„ธ์œ ํ˜•ยท์‹œ์„ธยทNAV/๊ดด๋ฆฌ์œจ ka40002, ka10001, ka40009
get_etf_returns ETF ๊ธฐ๊ฐ„๋ณ„ ์ˆ˜์ต๋ฅ  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_price KRX ๊ธˆํ˜„๋ฌผ ์‹œ์„ธ (๊ธˆ 1Kg / ๋ฏธ๋‹ˆ๊ธˆ 100g) โ€” ์ผ๋ณ„์ถ”์ด + ๊ธฐ๊ด€ยท๊ฐœ์ธ ์ˆœ๋งค์ˆ˜, ๋˜๋Š” ๋‹น์ผ ํ‹ฑ ์ฒด๊ฒฐ ka50012, ka50010

๊ด€์‹ฌ์ข…๋ชฉ (์˜์›…๋ฌธ HTS์— ์ €์žฅํ•œ ๊ด€์‹ฌ ๊ทธ๋ฃน, ์ฝ๊ธฐ ์ „์šฉ):

Tool ์„ค๋ช… ํ‚ค์›€ TR
get_watchlist_groups HTS ๊ด€์‹ฌ์ข…๋ชฉ ๊ทธ๋ฃน ๋ชฉ๋ก (๊ทธ๋ฃน์ฝ”๋“œ+๊ทธ๋ฃน๋ช…) 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_status ISA ์†์ตํ†ต์‚ฐ ์ˆœ์ด์ต์˜ ๋น„๊ณผ์„ธ ํ•œ๋„ ๋Œ€๋น„ ํ˜„ํ™ฉ (ํ™•์ • + ์ „๋Ÿ‰๋งค๋„ ์‹œ๋‚˜๋ฆฌ์˜ค, kt00015 ์˜์กด์ด๋ผ ๋ชจ์˜ํˆฌ์ž ๋ฏธ์ง€์›) kt00015, ka10074, kt00018

๊ทธ ์™ธ ping(์—ฐ๊ฒฐ ํ™•์ธ, ์•ฑํ‚ค ๋ถˆํ•„์š”). ๋ชจ๋“  ์‘๋‹ต์€ [๋ชจ์˜ํˆฌ์ž]/[์‹ค์ „ํˆฌ์ž] ์ ‘๋‘์–ด๋กœ ์–ด๋А ์„œ๋ฒ„๊ฐ€ ๋‹ตํ–ˆ๋Š”์ง€ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. search_stock ์ฒซ ํ˜ธ์ถœ์€ ์ข…๋ชฉ ๋งˆ์Šคํ„ฐ(~4,300์ข…๋ชฉ)๋ฅผ ๋‚ด๋ ค๋ฐ›์•„ ๋ช‡ ์ดˆ ๊ฑธ๋ฆฌ๋ฉฐ ์ดํ›„ 12์‹œ๊ฐ„ ์บ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ฑฐ๋ž˜์†Œ ๊ธฐ์ค€ โ€” KRX + ๋„ฅ์ŠคํŠธ๋ ˆ์ด๋“œ(NXT) ํ†ตํ•ฉ

v0.31.0๋ถ€ํ„ฐ ์‹œ์„ธยท๋žญํ‚น tool์€ ํ†ตํ•ฉ(SOR) ๊ธฐ์ค€์œผ๋กœ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. KRX์™€ ๋„ฅ์ŠคํŠธ๋ ˆ์ด๋“œ(NXT) ์ฒด๊ฒฐ์„ ํ•ฉ์‚ฐํ•œ ๊ฐ’์ด๋ฉฐ, NXT ๊ฑฐ๋ž˜๊ฐ€๋Šฅ ์ข…๋ชฉ(์•ฝ 606๊ฐœ, ๋Œ€ํ˜•์ฃผ ๋‹ค์ˆ˜)์€ KRX๋งŒ ๋ณผ ๋•Œ๋ณด๋‹ค ๊ฑฐ๋ž˜๋Ÿ‰์ด ํฌ๊ฒŒ ๋Š˜์–ด๋‚ฉ๋‹ˆ๋‹ค โ€” ์‚ผ์„ฑ์ „์ž ์‹ค์ธก(2026-08-03 ์ •๊ทœ์žฅ) KRX 19.2M / NXT 15.5M / ํ†ตํ•ฉ 34.7M. KRX๋งŒ ํ‘œ์‹œํ•˜๋Š” HTSยทํฌํ„ธ ํ™”๋ฉด๊ณผ ์ˆซ์ž๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋Œ€๊ฐœ ์ด ์ฐจ์ด์ž…๋‹ˆ๋‹ค.

์˜ˆ์™ธ๋Š” get_after_hours(์‹œ๊ฐ„์™ธ ๋‹จ์ผ๊ฐ€) ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค โ€” ํ†ตํ•ฉ ์กฐํšŒ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ NXT ๊ฑฐ๋ž˜๊ฐ€๋Šฅ ์ข…๋ชฉ์€ ์• ์ดˆ์— ์ด TR์—์„œ ์กฐํšŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฑฐ๋ž˜์›(get_broker_activity)์€ v0.47.0์—์„œ ํ†ตํ•ฉ์œผ๋กœ ๋„˜์–ด์™”์Šต๋‹ˆ๋‹ค โ€” ๊ทธ์ „๊นŒ์ง€ KRX ๊ฐ’์„ ๋‚ด๋ณด๋‚ด ์ƒ์œ„ 5์˜ ์ˆœ์œ„๊ฐ€ ์‹ค์ œ์™€ ๋‹ฌ๋ž์Šต๋‹ˆ๋‹ค(์‚ผ์„ฑ์ „์ž ๋งค์ˆ˜ 1์œ„๊ฐ€ KRX ๊ธฐ์ค€ KB์ฆ๊ถŒ / ํ†ตํ•ฉ ๊ธฐ์ค€ ๋ฏธ๋ž˜์—์…‹). ํ˜ธ๊ฐ€๋Š” v0.37.0์—์„œ ํ†ตํ•ฉ์œผ๋กœ ๋„˜์–ด์™”์Šต๋‹ˆ๋‹ค โ€” ka10004 ๋Œ€์‹  ka10007(์‹œ์„ธํ‘œ์„ฑ์ •๋ณด)์„ ์“ฐ๋ฉฐ, ์‚ผ์„ฑ์ „์ž ์‹ค์ธก(2026-08-04 ์ •๊ทœ์žฅ) ๋งค์ˆ˜1 ์ž”๋Ÿ‰์ด KRX 18,421 / NXT 17,081 / ํ†ตํ•ฉ 36,319์ด์—ˆ์Šต๋‹ˆ๋‹ค.

calc_isa_tax_status ์‚ฌ์šฉ ๋ฉ”๋ชจ

  • ์ง‘๊ณ„ ์‹œ์ž‘์ผ: .env์˜ ISA_OPENED_ON(๊ณ„์ขŒ ๊ฐœ์„ค์ผ)์ด ๊ธฐ๋ณธ๊ฐ’, ํ˜ธ์ถœ ์‹œ from_date๋กœ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ€๋Šฅ.
  • ๋ฐฐ๋‹นยท๋ถ„๋ฐฐ๊ธˆ์ด ๊ฑฐ๋ž˜๋‚ด์—ญ์—์„œ ์ž๋™ ๊ฐ์ง€๋˜์ง€ ์•Š์œผ๋ฉด dividends_received ์ธ์ž๋กœ ์ˆ˜๋™ ์ž…๋ ฅ.
  • ์ข…๋ชฉ ๊ณผ์„ธ์œ ํ˜•(๊ณผ์„ธ๋Œ€์ƒ vs ๊ตญ๋‚ด์ฃผ์‹ํ˜•)์€ ์ž๋™ ๋ถ„๋ฅ˜์ž…๋‹ˆ๋‹ค โ€” ETF๋Š” ํ‚ค์›€์ด ์ฃผ๋Š” etftxon_type(ka40002)์œผ๋กœ ํ™•์ •ํ•˜๊ณ (์กฐํšŒ ์‹คํŒจ ์‹œ ์ข…๋ชฉ๋ช… ํœด๋ฆฌ์Šคํ‹ฑ์œผ๋กœ ํด๋ฐฑ), ๊ฐœ๋ณ„์ฃผ์‹ ๋“ฑ ๊ทธ ๋ฐ–์—๋Š” ์ข…๋ชฉ๋ช… ๊ธฐ๋ฐ˜์œผ๋กœ ์ถ”์ •ํ•ฉ๋‹ˆ๋‹ค. ํ‹€๋ฆฐ ๊ฒฝ์šฐ overrides: [{stock_code, tax_type}]๋กœ ์ˆ˜์ •. ๊ฒฐ๊ณผ๋Š” ์ฐธ๊ณ ์šฉ โ€” ์‹ค์ œ ๊ณผ์„ธ๋Š” ์ฆ๊ถŒ์‚ฌ ์ •์‚ฐ ๊ธฐ์ค€.

์š”๊ตฌ ์‚ฌํ•ญ

  • 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 โœ… ํ‚ค์›€ REST API ์•ฑํ‚ค
KIWOOM_APP_SECRET โœ… ํ‚ค์›€ REST API ์•ฑ ์‹œํฌ๋ฆฟ
KIWOOM_MODE VIRTUAL(๋ชจ์˜ํˆฌ์ž, ๊ธฐ๋ณธ๊ฐ’) ๋˜๋Š” REAL(์‹ค์ „ํˆฌ์ž)
ISA_ENABLED true๋ฉด calc_isa_tax_status tool ํ™œ์„ฑํ™”. ๊ธฐ๋ณธ๊ฐ’ false(์ผ๋ฐ˜ ๊ณ„์ขŒ ๊ธฐ์ค€)
ISA_TYPE GENERAL(์ผ๋ฐ˜ํ˜•, ํ•œ๋„ 200๋งŒ์›, ๊ธฐ๋ณธ๊ฐ’) ๋˜๋Š” SEOMIN(์„œ๋ฏผํ˜•/๋†์–ด๋ฏผํ˜•, 400๋งŒ์›). ISA_ENABLED=true์ผ ๋•Œ๋งŒ ์‚ฌ์šฉ
ISA_OPENED_ON ISA ๊ณ„์ขŒ ๊ฐœ์„ค์ผ yyyy-MM-dd โ€” calc_isa_tax_status ์ง‘๊ณ„ ์‹œ์ž‘์ผ ๊ธฐ๋ณธ๊ฐ’. ISA_ENABLED=true์ผ ๋•Œ๋งŒ ์‚ฌ์šฉ
MCP_TRANSPORT stdio(๊ธฐ๋ณธ๊ฐ’) ๋˜๋Š” http โ€” ์›๊ฒฉ ์—ฐ๊ฒฐ ์ฐธ์กฐ
MCP_AUTH_TOKEN HTTP ๋ชจ๋“œ โœ… HTTP ๋ชจ๋“œ์—์„œ ๋ชจ๋“  /mcp ์š”์ฒญ์ด ์ œ์‹œํ•ด์•ผ ํ•˜๋Š” Bearer ํ† ํฐ
MCP_HTTP_PORT HTTP ๋ชจ๋“œ ํฌํŠธ (๊ธฐ๋ณธ๊ฐ’ 8000)
MCP_HTTP_HOST HTTP ๋ชจ๋“œ ๋ฐ”์ธ๋“œ ์ฃผ์†Œ (๊ธฐ๋ณธ๊ฐ’ 127.0.0.1)
MCP_HTTP_NO_AUTH true๋ฉด ์ธ์ฆ ์—†์ด HTTP ๋ชจ๋“œ ๊ธฐ๋™ ํ—ˆ์šฉ (๋น„๊ถŒ์žฅ โ€” ์•„๋ž˜ ๋ณด์•ˆ ์ฃผ์˜ ์ฐธ์กฐ)
MCP_PUBLIC_URL HTTP ๋ชจ๋“œ์—์„œ ์™ธ๋ถ€์— ๊ด‘๊ณ ํ•  ๊ธฐ์ค€ URL (์˜ˆ: https://kiwoom.example.com). ๋ฏธ์„ค์ • ์‹œ ์š”์ฒญ์˜ Host + X-Forwarded-Proto๋กœ ์ถ”๋ก  โ€” ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๊ฐ€ ๊ทธ ํ—ค๋”๋ฅผ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด ๋ช…์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

๊ธฐ๋ณธ๊ฐ’์€ ์ผ๋ฐ˜(๋น„-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 ๋ธ”๋ก์œผ๋กœ ์ „๋‹ฌ:

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

์†Œ์Šค ๋นŒ๋“œ โ€” dist/index.js ์ง์ ‘ ์‹คํ–‰. ์•ฑํ‚ค๋Š” ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ .env ์‚ฌ์šฉ:

{
  "mcpServers": {
    "kiwoom": {
      "command": "/opt/homebrew/bin/node",
      "args": ["/์ ˆ๋Œ€/๊ฒฝ๋กœ/kiwoom-mcp-server/dist/index.js"]
    }
  }
}

command์—๋Š” ์‹คํ–‰ ํŒŒ์ผ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์“ฐ๋Š” ํŽธ์ด ๊ฐ€์žฅ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค (which node, which npx๋กœ ํ™•์ธ). GUI ์•ฑ์€ ์…ธ PATH๋ฅผ ์ƒ์†๋ฐ›์ง€ ์•Š์œผ๋ฏ€๋กœ "node"/"npx"๋ผ๊ณ ๋งŒ ์“ฐ๋ฉด ์„œ๋ฒ„๊ฐ€ ์กฐ์šฉํžˆ ๋œจ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ€” ๊ฐ€์žฅ ํ”ํ•œ ์‹คํŒจ ์›์ธ์ž…๋‹ˆ๋‹ค.

์ €์žฅ ํ›„ Claude Desktop์„ ์™„์ „ํžˆ ์ข…๋ฃŒ(macOS๋Š” โŒ˜Q)ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด tool์ด ๋ณด์ž…๋‹ˆ๋‹ค. npm run build๋กœ ๋‹ค์‹œ ๋นŒ๋“œํ•œ ๋’ค์—๋„ ์™„์ „ ์ข…๋ฃŒ ํ›„ ์žฌ์‹คํ–‰ํ•ด์•ผ ๋ณ€๊ฒฝ์ด ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

Claude Code ์—ฐ๊ฒฐ

npx (๋ฐฐํฌํŒ) โ€” ์•ฑํ‚ค๋Š” -e ํ”Œ๋ž˜๊ทธ๋กœ ์ „๋‹ฌ:

claude mcp add kiwoom \
  -e KIWOOM_APP_KEY=โ€ฆ -e KIWOOM_APP_SECRET=โ€ฆ -e KIWOOM_MODE=REAL \
  -- npx -y kiwoom-mcp-server

์†Œ์Šค ๋นŒ๋“œ โ€” ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ .env ์‚ฌ์šฉ:

claude mcp add kiwoom -- node /์ ˆ๋Œ€/๊ฒฝ๋กœ/kiwoom-mcp-server/dist/index.js

์›๊ฒฉ ์—ฐ๊ฒฐ (HTTP ๋ชจ๋“œ) โ€” claude.ai ์›น/๋ชจ๋ฐ”์ผ

claude.ai(์›น/๋ชจ๋ฐ”์ผ)์˜ ์ปค์Šคํ…€ ์ปค๋„ฅํ„ฐ๋Š” ๋กœ์ปฌ stdio ์„œ๋ฒ„์— ์ง์ ‘ ๋ถ™์„ ์ˆ˜ ์—†๊ณ , ๊ณต๊ฐœ HTTPS๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ Streamable HTTP MCP ์„œ๋ฒ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. --http ํ”Œ๋ž˜๊ทธ(๋˜๋Š” MCP_TRANSPORT=http)๋กœ ์ด ์„œ๋ฒ„๋ฅผ HTTP ๋ชจ๋“œ๋กœ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

MCP_AUTH_TOKEN="$(openssl rand -hex 32)" npx -y kiwoom-mcp-server --http --port 8000
# ์—”๋“œํฌ์ธํŠธ: http://127.0.0.1:8000/mcp ยท ํ—ฌ์Šค์ฒดํฌ: /healthz
  • ์ธ์ฆ์ด ๊ธฐ๋ณธ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. MCP_AUTH_TOKEN์ด ์—†์œผ๋ฉด ๊ธฐ๋™์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค โ€” ๋ชจ๋“  /mcp ์š”์ฒญ์— Authorization: Bearer <ํ† ํฐ> ํ—ค๋”๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธ์ฆ ์—†์ด ์—ด๋ ค๋ฉด --no-auth๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•˜๋ฉฐ, ๊ณ„์ขŒ ์กฐํšŒ ๋„๊ตฌ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๋ฏ€๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋„คํŠธ์›Œํฌ๋‚˜ ๋ชจ์˜ํˆฌ์ž(KIWOOM_MODE=VIRTUAL)์—์„œ๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ๊ธฐ๋ณธ ๋ฐ”์ธ๋“œ๋Š” 127.0.0.1์ž…๋‹ˆ๋‹ค โ€” ํ„ฐ๋„์„ ์•ž์— ๋‘๋Š” ๊ตฌ์„ฑ์„ ์ „์ œํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ/์„œ๋ฒ„์— ์ง์ ‘ ๋…ธ์ถœํ•˜๋ ค๋ฉด --host 0.0.0.0์„ ๋ช…์‹œํ•˜์„ธ์š”.
  • ๊ณต๊ฐœ HTTPS URL์€ Cloudflare Tunnel ๋“ฑ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค: cloudflared tunnel --url http://localhost:8000 (์ž„์‹œ URL โ€” ์ƒ์‹œ ์šด์˜์€ named tunnel ๊ถŒ์žฅ).
  • OAuth ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์‹ค๋ฆฌ๋Š” ์ฃผ์†Œ๋Š” ์š”์ฒญ์˜ Host์™€ X-Forwarded-Proto์—์„œ ์ถ”๋ก ํ•ฉ๋‹ˆ๋‹ค. Cloudflare Tunnel์ฒ˜๋Ÿผ ๊ทธ ํ—ค๋”๋ฅผ ๋ถ™์—ฌ ์ฃผ๋Š” ํ”„๋ก์‹œ๋ผ๋ฉด ๊ทธ๋Œ€๋กœ ๋‘๋ฉด ๋˜์ง€๋งŒ, ์ง์ ‘ ์„ธ์šด nginx/Caddy๊ฐ€ X-Forwarded-Proto๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š์œผ๋ฉด issuer๊ฐ€ http://๋กœ ๊ด‘๊ณ ๋˜์–ด claude.ai๊ฐ€ ์—ฐ๊ฒฐ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๋•Œ MCP_PUBLIC_URL=https://<๋„๋ฉ”์ธ>์œผ๋กœ ๊ณ ์ •ํ•˜์„ธ์š”.
  • claude.ai ๋“ฑ๋ก: Settings โ†’ Connectors โ†’ Add custom connector์— https://<๋„๋ฉ”์ธ>/mcp๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค (๊ณ ๊ธ‰ ์„ค์ •์˜ OAuth ํ•„๋“œ๋Š” ๋น„์›Œ๋‘ก๋‹ˆ๋‹ค). ์—ฐ๊ฒฐ ์‹œ ๋ธŒ๋ผ์šฐ์ €์— ์Šน์ธ ํŽ˜์ด์ง€๊ฐ€ ๋œจ๊ณ , MCP_AUTH_TOKEN ๊ฐ’์„ ์ ‘์† ์•”ํ˜ธ๋กœ ์ž…๋ ฅํ•˜๋ฉด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค โ€” ์„œ๋ฒ„๊ฐ€ MCP ์ธ์ฆ ์ŠคํŽ™(OAuth 2.0 + PKCE, ๋™์  ํด๋ผ์ด์–ธํŠธ ๋“ฑ๋ก)์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด ๋ณ„๋„ ํ—ค๋” ์„ค์ •์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ๋“ฑ๋กํ•œ ์ปค๋„ฅํ„ฐ๋Š” ์›น/๋ชจ๋ฐ”์ผ/๋ฐ์Šคํฌํ†ฑ์—์„œ ๊ณต์šฉ์ž…๋‹ˆ๋‹ค. ํ—ค๋”๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ(์˜ˆ: Claude Code --header)๋Š” ๊ธฐ์กด์ฒ˜๋Ÿผ Authorization: Bearer <MCP_AUTH_TOKEN> ์ •์  ํ—ค๋”๋กœ๋„ ์ ‘์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OAuth ํ† ํฐ์€ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ .oauth-state.json(0600)์— ์ €์žฅ๋˜์–ด ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•ด๋„ ์—ฐ๊ฒฐ์ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.
  • โš ๏ธ ํ‚ค์›€ API ํ˜ธ์ถœ์€ ์ด ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ณณ์—์„œ ๋‚˜๊ฐ‘๋‹ˆ๋‹ค. REAL ๋ชจ๋“œ๋Š” ํ‚ค์›€ ์ง€์ •๋‹จ๋ง๊ธฐ ์ธ์ฆ(8050)์ด IP์— ๋ฌถ์ด๋ฏ€๋กœ, ๋“ฑ๋ก๋œ IP๊ฐ€ ์•„๋‹Œ ๊ณณ(ํด๋ผ์šฐ๋“œ ๋“ฑ)์—์„œ ์‹คํ–‰ํ•˜๋ฉด ์ธ์ฆ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›๊ฒฉ ๋…ธ์ถœ์€ ๋ชจ์˜ํˆฌ์ž๋กœ ๋จผ์ € ๊ฒ€์ฆํ•˜์„ธ์š”.

๊ธฐ์กด stdio ๋™์ž‘(Claude Desktop/Code ์—ฐ๊ฒฐ)์€ ์ธ์ž ์—†์ด ์‹คํ–‰ํ•˜๋ฉด ๊ทธ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค โ€” ๋‹จ, .env๋‚˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— MCP_TRANSPORT=http๊ฐ€ ์žˆ์œผ๋ฉด ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. .env๋Š” ์ „์†ก ๋ฐฉ์‹์„ ๊ณ ๋ฅด๊ธฐ ์ „์— ์ฝํžˆ๋ฏ€๋กœ ์ธ์ž ์—†์ด ์‹คํ–‰ํ•ด๋„ HTTP ๊ฒฝ๋กœ๋ฅผ ํƒ€๊ณ , MCP_AUTH_TOKEN์ด ์—†์œผ๋ฉด ์•„์˜ˆ ๊ธฐ๋™์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. MCP_TRANSPORT ๊ฐ’๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ stdio๋กœ ๊ฐ•์ œํ•˜๋ ค๋ฉด **--stdio**๋ฅผ ๋„˜๊ธฐ์„ธ์š”.

๋™์ž‘ ํ™•์ธ

MCP ํด๋ผ์ด์–ธํŠธ ์—†์ด stdio๋กœ ์ง์ ‘ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

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

ping์€ .env ์—†์ด๋„ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์‹œ์„ธยท๊ณ„์ขŒ tool์€ ์•ฑํ‚ค๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ•ด๊ฒฐ

์ฆ์ƒ ํ™•์ธํ•  ๊ฒƒ
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