Skip to content
MCP ThesaurusMCP Thesaurus

aikstockdata โ€” Korean Stock Data

CommunityIncomplete39/100Claim

streamable-httpMITupdated 11d ago

KOSPIยทKOSDAQยทKONEX ์ „ ์ข…๋ชฉ์˜ ํ™•์ • ์ข…๊ฐ€์™€ KOSPIยทKOSDAQ ์ง€์ˆ˜, DART ๊ณต์‹œ, ์ข…๋ชฉ๋‹น 1๋…„์น˜ ์ผ๋ณ„ ์‹œ์„ธ๋ฅผ ๋งค ๊ฑฐ๋ž˜์ผ ์ €๋… AI๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” JSON์œผ๋กœ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ž…๋„, API ํ‚ค๋„, ์š”์ฒญ ์ œํ•œ๋„ ์—†์Šต๋‹ˆ๋‹ค.

SourceWebsite7

What can you do with aikstockdata โ€” Korean Stock Data?

aikstockdata โ€” ํ•œ๊ตญ ์ฃผ์‹ ๊ณต์‹œยท์‹œ์„ธ๋ฅผ AI๊ฐ€ ๋ฐ”๋กœ ์ฝ๋Š” ๋ฌด๋ฃŒ JSON + MCP ์„œ๋ฒ„

KOSPIยทKOSDAQยทKONEX ์ „ ์ข…๋ชฉ์˜ ํ™•์ • ์ข…๊ฐ€์™€ KOSPIยทKOSDAQ ์ง€์ˆ˜, DART ๊ณต์‹œ, ์ข…๋ชฉ๋‹น 1๋…„์น˜ ์ผ๋ณ„ ์‹œ์„ธ๋ฅผ ๋งค ๊ฑฐ๋ž˜์ผ ์ €๋… AI๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” JSON์œผ๋กœ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ž…๋„, API ํ‚ค๋„, ์š”์ฒญ ์ œํ•œ๋„ ์—†์Šต๋‹ˆ๋‹ค.

์ˆ˜๋ก ์ข…๋ชฉ ์ˆ˜๋Š” ๋งค ๊ฑฐ๋ž˜์ผ ๋ฐ”๋€๋‹ˆ๋‹ค โ€” ์—ฌ๊ธฐ์— ์ˆ˜๋ฅผ ์ ์–ด ๋‘๋ฉด ๊ทธ ์ˆœ๊ฐ„๋ถ€ํ„ฐ ๋‚ก์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฐ’์€ index.json ์˜ coverage (universe_n ยท published_n ยท excluded_n)์— ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”— ์‚ฌ์ดํŠธ https://aikstockdata.com ยท MCP ์ฃผ์†Œ https://mcp.aikstockdata.com/mcp

๊ณต์‹ MCP ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— com.aikstockdata/mcp ๋กœ ๋“ฑ์žฌ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค(๋„๋ฉ”์ธ ํ™•์ธ ์™„๋ฃŒ).

Hugging Face Kaggle MCP Auth License

English documentation is in the second half of this page.


30์ดˆ ๋งŒ์— AI์— ๋ถ™์ด๊ธฐ

Claude ยท ChatGPT โ€” MCP ์ปค๋„ฅํ„ฐ

์„ค์ •์˜ ์ปค์Šคํ…€ ์ปค๋„ฅํ„ฐ์— ์•„๋ž˜ ์ฃผ์†Œ๋ฅผ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋์ž…๋‹ˆ๋‹ค. ์ธ์ฆ์ด ์—†์Šต๋‹ˆ๋‹ค.

https://mcp.aikstockdata.com/mcp

๋„๊ตฌ 12๊ฐœ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.

๋„๊ตฌ ๋ฌด์—‡์„
get_today ์˜ค๋Š˜ ์‹œ์žฅ ํ•œ ๋ฐฉ์— โ€” ๋“ฑ๋ฝยท์ƒ์Šนํ•˜๋ฝ ์ข…๋ชฉ ์ˆ˜ยท์ฃผ์š” ๊ณต์‹œ
search_stock ยท get_stock ์ข…๋ชฉ ์ฐพ๊ธฐ ยท ์ข…๋ชฉ ์ƒ์„ธ(์‹œ์„ธยท์žฌ๋ฌดยท๊ณต์‹œ)
get_rankings ยท get_market_summary ์ˆœ์œ„ํ‘œ ยท ์‹œ์žฅ ์š”์•ฝ
get_disclosures ๋ฌด์Šจ ๊ณต์‹œ๊ฐ€ ๋ช‡ ์‹œ์— ๋‚ฌ๋‚˜ โ€” ์ ‘์ˆ˜ ์‹œ๊ฐ(HH:MM)๊ณผ ์žฅ ๊ตฌ๋ถ„(์žฅ์ „ยท์žฅ์ค‘ยท์žฅ๋งˆ๊ฐํ›„). ๊ณต๊ฐœ API ์–ด๋””์—๋„ ์—†๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค
list_stocks ์กฐ๊ฑด์— ๋งž๋Š” ์ข…๋ชฉ ๋ชฉ๋ก โ€” ํ‘์ž์ „ํ™˜ยท52์ฃผ ์‹ ๊ณ ์ €์— ์‹œ์ดรท์—ฐํ™˜์‚ฐ์˜์—…์ด์ต ๋ฐฐ์ˆ˜ ์ƒํ•œ๊นŒ์ง€
get_earnings ์ž ์ • ์‹ค์  ํฌํ•จ โ€” ์ •๊ธฐ๋ณด๊ณ ์„œ๋ณด๋‹ค 2์ฃผ ๋น ๋ฆ…๋‹ˆ๋‹ค
get_earnings_calendar ๋ˆ„๊ฐ€ ๋ƒˆ๊ณ  ๋ˆ„๊ฐ€ ์•„์ง์ธ๊ฐ€ โ€” ๋ฒ•์ • ๋งˆ๊ฐ D-day, ์ง์ „ ๋ฐœํ–‰ ๋Œ€๋น„ ์‹ ๊ทœ ๋ชฉ๋ก. ์ƒํƒœ๋ฅผ ๋ชป ๋“ค๊ณ  ๋‹ค๋‹ˆ๋Š” ์—์ด์ „ํŠธ์—๊ฒ ์ด๊ฒŒ ์›นํ›…์„ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค
get_history 250๊ฑฐ๋ž˜์ผ ์ผ๋ณ„ ์‹œ์„ธ + 52์ฃผ ๊ณ ์ €ยท๊ณ ์  ๋Œ€๋น„ ๋‚™ํญยท๊ฑฐ๋ž˜๋Ÿ‰ ๋ฐฐ์ˆ˜
get_disclosure_impact ๊ณต์‹œ ์œ ํ˜•๋ณ„๋กœ ๊ทธ ๋’ค 1ยท5๊ฑฐ๋ž˜์ผ ์ฃผ๊ฐ€(์‹œ์žฅ ๋“ฑ๋ฝ์„ ๋บ€ ๊ฐ’). 20๊ฑฐ๋ž˜์ผ์€ ๊ทธ ์œ ํ˜•์˜ ํ‘œ๋ณธ์ด ์ฐจ๋ฉด ๋‚˜์˜ต๋‹ˆ๋‹ค โ€” ์‘๋‹ต์˜ h20_status ๋ฅผ ๋ณด์„ธ์š”
get_data_urls ์›์ž๋ฃŒ ์ฃผ์†Œ ์นดํƒˆ๋กœ๊ทธ โ€” ๋„๊ตฌ์— ์—†๋Š” ๊ฒƒ๋„ JSON ์œผ๋กœ ๋‹ค ์žˆ์Šต๋‹ˆ๋‹ค

๊ทธ๋‹ค์Œ์—” ๊ทธ๋ƒฅ ๋ฌผ์–ด๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค: "์˜ค๋Š˜ ํ•œ๊ตญ ์‹œ์žฅ ์–ด๋• ์–ด?" ยท "์‚ผ์„ฑ์ „์ž ์ตœ๊ทผ ๊ณต์‹œ ์ •๋ฆฌํ•ด์ค˜" ยท "ํ‘์ž์ „ํ™˜ํ•œ ์ข…๋ชฉ ์ค‘์— ์‹œ์ด์ด ์˜์—…์ด์ต์˜ 10๋ฐฐ ์•ˆ ๋˜๋Š” ๊ฒƒ๋งŒ"

MCP ์—†์ด โ€” ์ฃผ์†Œ๋งŒ ๋ถ™์—ฌ๋„ฃ๊ธฐ

https://aikstockdata.com/data/public/today.json ์„ ์ฝ๊ณ  ์˜ค๋Š˜ ํ•œ๊ตญ ์‹œ์žฅ์„ ์š”์•ฝํ•ด์ค˜.

Python

import urllib.request, json

def get(path):
    url = "https://aikstockdata.com/data/public/" + path
    return json.load(urllib.request.urlopen(url))

today = get("today.json")            # ์˜ค๋Š˜ ํ•˜๋ฃจ ์š”์•ฝ (7KB)
samsung = get("s/005930.json")       # ํ•œ ์ข…๋ชฉ (5KB)
hist = get("s/005930_history.json")  # 1๋…„์น˜ [๋‚ ์งœ, ์ข…๊ฐ€, ๊ฑฐ๋ž˜๋Ÿ‰] (7KB)

โ˜…์ข…๋ชฉ์ฝ”๋“œ๋Š” ์—ฌ์„ฏ ์ž๋ฆฌ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์ •์ˆ˜๋กœ ์ฝ์œผ๋ฉด 000020์ด 20์ด ๋ฉ๋‹ˆ๋‹ค. pandas ๋ฅผ ์“ด๋‹ค๋ฉด dtype={"code": str} ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ฃผ์„ธ์š”.

curl

curl -s https://aikstockdata.com/data/public/s/005930.json

์ด๋ ‡๊ฒŒ ๋ฌผ์–ด๋ณด์„ธ์š”

MCP ๋ฅผ ๋ถ™์˜€๊ฑฐ๋‚˜ ์ฃผ์†Œ๋ฅผ ๋ถ™์—ฌ๋„ฃ์—ˆ๋‹ค๋ฉด, ์•„๋ž˜๋Š” ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•ด ์“ฐ๋Š” ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ „๋ถ€ ์šฐ๋ฆฌ ๋ฐ์ดํ„ฐ๋กœ ๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋งŒ ๊ณจ๋ž์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ๋ฌด์Šจ ์ผ์ด ์žˆ์—ˆ๋‚˜

์˜ค๋Š˜ ํ•œ๊ตญ ์‹œ์žฅ ์–ด๋• ์–ด? ์ง€์ˆ˜๋ž‘ ์˜ค๋ฅธ ์ข…๋ชฉ ์ˆ˜๋ฅผ ๊ฐ™์ด ์•Œ๋ ค์ค˜.

์ง€์ˆ˜์™€ ์ƒ์Šน ์ข…๋ชฉ ์ˆ˜๋Š” ์ž์ฃผ ๋ฐ˜๋Œ€๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์ ‘์ˆ˜๋œ ๊ณต์‹œ ์ค‘ ์ค‘์š”๋„ ๋†’์€ ๊ฒƒ 10๊ฑด๋งŒ ์‰ฌ์šด ๋ง๋กœ ํ’€์–ด์ค˜.
์˜ค๋Š˜ ์žฅ ๋งˆ๊ฐ ํ›„์— ๋‚˜์˜จ ๊ณต์‹œ๋งŒ ๊ณจ๋ผ์ค˜. ์•„์ง ์ข…๊ฐ€์— ๋ฐ˜์˜๋˜์ง€ ์•Š์€ ๊ฒƒ๋“ค์ด์•ผ.

์ด๊ฒŒ ์šฐ๋ฆฌ๋งŒ ๋‹ตํ•  ์ˆ˜ ์žˆ๋Š” ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค โ€” ๊ณต๊ฐœ API ์—๋Š” ์ ‘์ˆ˜ ๋‚ ์งœ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ์ข…๋ชฉ์„ ํŒŒ๊ณ ๋“ค ๋•Œ

์‚ผ์„ฑ์ „์ž ์ตœ๊ทผ ๊ณต์‹œ๋ž‘ ๋ถ„๊ธฐ ์‹ค์  ์ •๋ฆฌํ•ด์ค˜. ์ „๋…„ ๋™๊ธฐ ๋Œ€๋น„๋„.
005930 ์˜ ์ตœ๊ทผ 1๋…„ ์ข…๊ฐ€ ํ๋ฆ„์—์„œ ์ตœ๊ณ ๊ฐ€ ๋Œ€๋น„ ์ง€๊ธˆ ๋ช‡ % ์ง€์ ์ธ์ง€ ๊ณ„์‚ฐํ•ด์ค˜.

s/005930_history.json ํ•œ ํŒŒ์ผ(7KB)๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

SKํ•˜์ด๋‹‰์Šค๊ฐ€ ์ตœ๊ทผ์— ๋‚ธ ๊ณต์‹œ ์ค‘์— ์ž๊ธฐ์ฃผ์‹ ๊ด€๋ จ๋œ ๊ฒŒ ์žˆ์–ด?

์—ฌ๋Ÿฌ ์ข…๋ชฉ์„ ํ›‘์„ ๋•Œ

์‹œ๊ฐ€์ด์•ก ์ƒ์œ„ 20๊ฐœ ์ข…๋ชฉ์˜ ์˜ค๋Š˜ ๋“ฑ๋ฝ๋ฅ ์„ ํ‘œ๋กœ ๋งŒ๋“ค์–ด์ค˜.
์ตœ๊ทผ 120์ผ ์•ˆ์— ์‹ค์ ์„ ๋ฐœํ‘œํ•œ ์ข…๋ชฉ ์ค‘ ์˜์—…์ด์ต์ด ์ „๋…„ ๋Œ€๋น„ ๋Š˜์–ด๋‚œ ๊ณณ์„ ์ฐพ์•„์ค˜.
52์ฃผ ์‹ ๊ณ ๊ฐ€๋ฅผ ์ฐ์€ ์ข…๋ชฉ์ด ์˜ค๋Š˜ ๋ช‡ ๊ฐœ์•ผ?

๊ณต์‹œ๊ฐ€ ๋‚˜์˜จ ๋’ค์— ๋ฌด์Šจ ์ผ์ด ์žˆ์—ˆ๋Š”์ง€

๋ฐฐ๋‹น ๊ฒฐ์ • ๊ณต์‹œ ๋’ค 5๊ฑฐ๋ž˜์ผ ๋™์•ˆ ์‹œ์žฅ ๋Œ€๋น„ ์ˆ˜์ต๋ฅ ์ด ์–ด๋• ๋Š”์ง€ ์•Œ๋ ค์ค˜.
์‹ ๋ขฐ๊ตฌ๊ฐ„๋„ ๊ฐ™์ด ๋ณด์—ฌ์ฃผ๊ณ , 0์„ ํฌํ•จํ•˜๋Š”์ง€ ํŒ๋‹จํ•ด์ค˜.

์ˆซ์ž๋งŒ ๋ฐ›์•„ ์˜ค์ง€ ๋ง๊ณ  ๊ตฌ๊ฐ„์„ ๊ฐ™์ด ๋ฌผ์–ด๋ณด์„ธ์š”. ํ˜„์žฌ ์ˆซ์ž๊ฐ€ ์žˆ๋Š” 18์นธ ์ค‘ 15์นธ์˜ 95% ๊ตฌ๊ฐ„์ด 0์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์‚ฌ์‹ค์„ ๊ฐ์ถ”์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ด ํ‘œ์˜ ์š”์ ์ž…๋‹ˆ๋‹ค.

๊ณต์‹œ ์ ‘์ˆ˜ ์‹œ๊ฐ์ด ์žฅ ์‹œ์ž‘ ์ „์ธ ๊ฑด๊ณผ ์žฅ ๋งˆ๊ฐ ํ›„์ธ ๊ฑด์„ ๋‚˜๋ˆ ์„œ,
๊ณต์‹œ ๋‹น์ผ ์ˆ˜์ต๋ฅ  ์ค‘์•™๊ฐ’์„ ๊ฐ๊ฐ ๊ณ„์‚ฐํ•ด์ค˜.

์ ‘์ˆ˜ ์‹œ๊ฐ์ด ์—†์œผ๋ฉด ์ด ์งˆ๋ฌธ ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ์‹ถ์„ ๋•Œ

https://aikstockdata.com/data/public/index.json ์„ ์ฝ๊ณ 
์ง€๊ธˆ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉฐ์น  ์ „ ๊ฒƒ์ธ์ง€, ์‹ ์„ ๋„ ์ƒํƒœ๊ฐ€ ๋ญ”์ง€ ์•Œ๋ ค์ค˜.

์‹ ์„ ๋„๋Š” ์ €ํฌ ์ฃผ์žฅ์ด ์•„๋‹ˆ๋ผ ๊ณ„์‚ฐ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ค๋ž˜๋˜๋ฉด ์Šค์Šค๋กœ stale ์ด๋ผ๊ณ  ๋ฐํž™๋‹ˆ๋‹ค.

disclosure_impact.json ์˜ per_event ๋ฅผ ๋ฐ›์•„์„œ ๋ฐฐ๋‹น ๊ฒฐ์ • ์œ ํ˜•์˜ +5์ผ
์ค‘์•™๊ฐ’์„ ์ง์ ‘ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์ค˜. cluster ๋กœ ์ค‘๋ณต์„ ๋จผ์ € ์ œ๊ฑฐํ•˜๊ณ .

์ง‘๊ณ„๋ฅผ ๋ฐ˜๋ฐ•ํ•˜๋ผ๊ณ  ๊ฐœ๋ณ„ ๊ฐ’์„ ์‹ฃ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ cluster ๋Š” ํ•œ ๋ฒˆ๋งŒ ์„ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค โ€” ์•ˆ ๊ทธ๋Ÿฌ๋ฉด ์ €ํฌ๊ฐ€ ์ €์งˆ๋ €๋˜ ์ค‘๋ณต ๊ณ„์‚ฐ์ด ์žฌํ˜„๋ฉ๋‹ˆ๋‹ค.


์™œ ๋งŒ๋“ค์—ˆ๋‚˜

ํ•œ๊ตญ ์‹œ์žฅ ๋ฐ์ดํ„ฐ๋Š” AI๊ฐ€ ์“ฐ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ณต์‹ ์ถœ์ฒ˜(๊ธˆ์œต์œ„์›ํšŒ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ, ๊ธˆ์œต๊ฐ๋…์› DART)๋Š” API ํ‚ค๋ฅผ ๋จผ์ € ๋ฐ›์•„์•ผ ํ•˜๊ณ , ํ•œ๊ธ€ ํ•„๋“œ๋ช…์ด ๊ทธ๋Œ€๋กœ์ธ XMLยทJSON์„ ์ฃผ๋ฉฐ, ๊ฐ’์ด ์—†๋Š” ๊ฒƒ์ธ์ง€ 0์ธ ๊ฒƒ์ธ์ง€ ๊ตฌ๋ถ„ํ•  ๋ฐฉ๋ฒ•์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ทธ๊ฒƒ์„ LLM์ด ๊ทธ๋Œ€๋กœ ์ฝ๋Š” ์ž๊ธฐ์„ค๋ช…ํ˜• JSON์œผ๋กœ ์ •๊ทœํ™”ํ•˜๊ณ , ์ฃผ์†Œ ํ•˜๋‚˜๋งŒ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋˜๋Š” MCP ์„œ๋ฒ„๋ฅผ ์–น์—ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์งˆ์ ์ธ ์ฐจ์ด๋Š” ์ž๊ฒฉ์ฆ๋ช…์ž…๋‹ˆ๋‹ค. ํ•œ๊ตญ ์ฃผ์‹ MCP ์„œ๋ฒ„ ๋Œ€๋ถ€๋ถ„์€ DARTยท์ฆ๊ถŒ์‚ฌ API๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ค‘๊ณ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ํ˜ธ์ถœ ์ „์— ํ‚ค ๋ฐœ๊ธ‰์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋ฒ„๋Š” ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋‘” ๊ณต๊ฐœ ํŒŒ์ผ์„ ๋‚ด๋ณด๋‚ด๋ฏ€๋กœ ์ฃผ์†Œ๋ฅผ ๋ถ™์—ฌ๋„ฃ๋Š” ์ˆœ๊ฐ„๋ถ€ํ„ฐ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.


์—ฌ๊ธฐ์„œ๋งŒ ๋ฌด๋ฃŒ๋กœ ์–ป๋Š” ๊ฒƒ

1. โ˜…๊ณต์‹œ ์ ‘์ˆ˜ ์‹œ๊ฐ (HH:MM) โ€” ๊ณต๊ฐœ API ์–ด๋””์—๋„ ์—†์Šต๋‹ˆ๋‹ค

DART ๊ณต์‹œ๊ฒ€์ƒ‰ API๊ฐ€ ์ฃผ๋Š” ์ ‘์ˆ˜ ์ •๋ณด๋Š” ๋‚ ์งœ(YYYYMMDD)๋ฟ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ณ„ ๊ณต์‹œ ๋ทฐ์–ด์—๋„, ๊ณต์‹œ๊ฒ€์ƒ‰ ํ™”๋ฉด์—๋„ ์‹œ:๋ถ„์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ™์€ ๋‚ ์งœ์˜ ๊ณต์‹œ๋ผ๋„ ์žฅ์ค‘์— ๋‚˜์˜จ ๊ฒƒ๊ณผ ์žฅ ๋งˆ๊ฐ ํ›„์— ๋‚˜์˜จ ๊ฒƒ์€ ๊ทธ๋‚  ์ข…๊ฐ€์— ๋Œ€ํ•ด ์ •๋ฐ˜๋Œ€๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค โ€” ์•ž์˜ ๊ฒƒ์€ ์ด๋ฏธ ์ฃผ๊ฐ€์— ๋ฐ˜์˜๋๊ณ , ๋’ค์˜ ๊ฒƒ์€ ์•„์ง ๋ฐ˜์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ €ํฌ๋Š” ์‹œ:๋ถ„์ด ๋‚จ์•„ ์žˆ๋Š” ์œ ์ผํ•œ ๊ณณ์—์„œ ์ด ๊ฐ’์„ ๋”ฐ๋กœ ๋ชจ์•„ ๋ถ™์ž…๋‹ˆ๋‹ค.

https://aikstockdata.com/data/public/disclosures.json          # 18:10 ๋ฐœํ–‰ ยท events[].receipt_time ยท session
https://aikstockdata.com/data/public/disclosures_intraday.json # 15:00 ๋ฐœํ–‰ ยท ๊ทธ๋‚  ์ ‘์ˆ˜ ์ „๊ฑด
https://aikstockdata.com/data/public/dart_receipt_times.json   # ์ ‘์ˆ˜๋ฒˆํ˜ธ โ†” ์‹œ๊ฐ ๋Œ€์กฐํ‘œ

session ์€ ์ •๊ทœ์žฅ(09:00~15:30) ๊ธฐ์ค€ ์„ธ ๊ฐˆ๋ž˜์ž…๋‹ˆ๋‹ค.

๊ฐ’ ๋œป ๊ทธ๋‚  ์ข…๊ฐ€ ์›€์ง์ž„์€
pre_open ~09:00 ์ ‘์ˆ˜ ์ „์ฒด๊ฐ€ ๊ณต์‹œ ๋’ค โ€” ๋ฐ˜์‘์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๊ฒฝ์šฐ
intraday 09:00~15:30 ์•ž๋ถ€๋ถ„์€ ๊ณต์‹œ ์ด์ „ โ€” ์„ž์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค
after_close 15:30~ ์ „์ฒด๊ฐ€ ๊ณต์‹œ ์•ž โ€” ๊ณต์‹œ ๋ฐ˜์‘์ด ์•„๋‹™๋‹ˆ๋‹ค
d = get("disclosures.json")
late = [e for e in d["events"] if e["session"] == "after_close"]
# ์˜ค๋Š˜ ์žฅ ๋งˆ๊ฐ ๋’ค์— ๋‚˜์˜จ ๊ณต์‹œ โ€” ์•„์ง ์ข…๊ฐ€์— ๋ฐ˜์˜๋˜์ง€ ์•Š์•˜๋‹ค

์‹ค์ธก์œผ๋กœ ์ ‘์ˆ˜ ๊ฑด์˜ 40% ์•ˆํŒŽ์ด ์žฅ ๋งˆ๊ฐ ํ›„์ž…๋‹ˆ๋‹ค. ์‹œ๊ฐ์ด ์—†์œผ๋ฉด ๊ทธ 40%๋ฅผ ๊ทธ๋‚  ์ข…๊ฐ€์˜ ๋ฐ˜์‘์œผ๋กœ ์ž˜๋ชป ์ฝ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

2. ๊ณต์‹œ ์œ ํ˜•๋ณ„๋กœ ๊ทธ ๋’ค์— ์‹ค์ œ๋กœ ๋ฌด์Šจ ์ผ์ด ์žˆ์—ˆ๋‚˜

๊ณต์‹œ๋งˆ๋‹ค ๊ทธ ์ข…๋ชฉ์˜ ์ผ๋ณ„ ์ข…๊ฐ€์™€ ์†Œ์† ์ง€์ˆ˜๋ฅผ ๋ถ™์—ฌ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. "์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ณต์‹œ ๋’ค์— ์‹œ์žฅ์€ ์–ด๋–ป๊ฒŒ ์›€์ง์˜€๋‚˜" ๋ฅผ ๊ธฐ๋ก์œผ๋กœ์„œ ๋ฌผ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค โ€” ์˜ˆ์ธก์ด ์•„๋‹™๋‹ˆ๋‹ค.

https://aikstockdata.com/data/public/disclosure_impact.json

์œ ํ˜•๋ณ„๋กœ +1 / +5๊ฑฐ๋ž˜์ผ ๋’ค์˜ ์‹œ์žฅ์กฐ์ • ์ˆ˜์ต๋ฅ  ์ค‘์•™๊ฐ’(์ข…๋ชฉ ์ˆ˜์ต๋ฅ  โˆ’ ๊ฐ™์€ ๊ธฐ๊ฐ„ ์†Œ์† ์ง€์ˆ˜ ์ˆ˜์ต๋ฅ )๊ณผ ์‹œ์žฅ์„ ์ด๊ธด ๋น„์œจ์„ ํ•จ๊ป˜ ๋ƒ…๋‹ˆ๋‹ค. +20๊ฑฐ๋ž˜์ผ์€ ๊ทธ ์œ ํ˜•์˜ ํ‘œ๋ณธ์ด ์ฐจ๋ฉด ์œ ํ˜•๋ณ„๋กœ ๋‚˜์˜ต๋‹ˆ๋‹ค โ€” ์‘๋‹ต์˜ h20_status ๋ฅผ ๋ณด์„ธ์š”(์—†๋‹ค๊ณ  ๊ฒฐ๋ก ๋‚ด์ง€ ๋ง ๊ฒƒ). ๊ฐœ๋ณ„ ๊ฐ’์€ DART ์ ‘์ˆ˜๋ฒˆํ˜ธ๋ฅผ ์—ด์‡ ๋กœ ์‹ฃ๊ธฐ ๋•Œ๋ฌธ์— ์›๋ฌธ๊ณผ ๋Œ€์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ‘œ๋ณธ์ด 20๊ฑด ๋ฏธ๋งŒ์ธ ์œ ํ˜•์—๋Š” ์ˆซ์ž๋ฅผ ๋„ฃ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฑด์งœ๋ฆฌ ์ค‘์•™๊ฐ’์€ ์šฐ์—ฐ์„ ํ†ต๊ณ„๋กœ ๋‘”๊ฐ‘์‹œํ‚ต๋‹ˆ๋‹ค. 95% ๊ตฌ๊ฐ„๋„ ํ•จ๊ป˜ ์‹ฃ๋Š”๋ฐ, ํ˜„์žฌ ์ˆซ์ž๊ฐ€ ์žˆ๋Š” 18์นธ ์ค‘ 17์นธ์˜ ๊ตฌ๊ฐ„์ด 0์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์‚ฌ์‹ค์„ ๊ฐ์ถ”์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ด ํ‘œ์˜ ์š”์ ์ž…๋‹ˆ๋‹ค.

3. ์ข…๋ชฉ๋‹น 1๋…„ ์‹œ์„ธ๊ฐ€ ํ•œ ํŒŒ์ผ 7KB

s/{์ข…๋ชฉ์ฝ”๋“œ}_history.json โ€” ์ตœ๋Œ€ 250๊ฑฐ๋ž˜์ผ์˜ [๋‚ ์งœ, ์ข…๊ฐ€, ๊ฑฐ๋ž˜๋Ÿ‰]. ํ–‰์„ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐฐ์—ด๋กœ ๋‘ก๋‹ˆ๋‹ค. ์—ฌ์„ฏ ๊ฐœ ํ‚ค ์ด๋ฆ„์„ 250๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด ์ •๋ณด ์—†์ด ํŒŒ์ผ๋งŒ ๋‘ ๋ฐฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค(์‹ค์ธก 14.3KB โ†’ 6.8KB).

4. ์ง€์ˆ˜์™€ ์ƒ์Šน ์ข…๋ชฉ ์ˆ˜๋ฅผ ๋”ฐ๋กœ ์ค๋‹ˆ๋‹ค โ€” ๋‘˜์ด ์–ด๊ธ‹๋‚˜๊ธฐ ๋•Œ๋ฌธ์—

today.json ์€ KOSPIยทKOSDAQ ์ข…๊ฐ€์™€ ์ƒ์Šนยทํ•˜๋ฝ ์ข…๋ชฉ ์ˆ˜๋ฅผ ๋‘˜ ๋‹ค ์‹ฃ์Šต๋‹ˆ๋‹ค. ์ด ๋‘˜์€ ์ž์ฃผ ๋ฐ˜๋Œ€๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. 2026-08-03 ์—๋Š” ์ฝ”์Šคํ”ผ๊ฐ€ 5.12% ๋‚ด๋ ธ๋Š”๋ฐ 855์ข…๋ชฉ์ด ์˜ค๋ฅด๊ณ  518์ข…๋ชฉ์ด ๋‚ด๋ ธ์Šต๋‹ˆ๋‹ค โ€” ์ง€์ˆ˜๋Š” ์‹œ์ด ๊ฐ€์ค‘์ด๊ณ  ์ข…๋ชฉ ์ˆ˜๋Š” ํ•œ ์ข…๋ชฉ ํ•œ ํ‘œ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ถœ์ฒ˜๋Š” ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์ฃผ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊ฐ™์œผ๋ ค๋‹ˆ ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

5. ๊ฑฐ๋ž˜์ผ๋งˆ๋‹ค ์˜๊ตฌ ์ฃผ์†Œ๊ฐ€ ๋‚จ์Šต๋‹ˆ๋‹ค

https://aikstockdata.com/market/{YYYY-MM-DD} โ€” ์ฃผ์†Œ์˜ ๋‚ ์งœ๋Š” ๋ฐœํ–‰์ผ์ด ์•„๋‹ˆ๋ผ ์ข…๊ฐ€ ๊ธฐ์ค€์ผ์ž…๋‹ˆ๋‹ค. (ํ•œ ๋ฒˆ ํ‹€๋ฆฐ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํญ๋ฝํ•œ ๋‚  ํŽ˜์ด์ง€๊ฐ€ ๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ +17.9% ๋จธ๋ฆฌ๊ธฐ์‚ฌ๋ฅผ ๋‹ฌ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋‚ ์งœ์™€ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๊ธ‹๋‚  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)


ํ†ต์งœ๋กœ ๋ฐ›๊ณ  ์‹ถ๋‹ค๋ฉด

๋ฐœํ–‰์ผ์— ๊ณ ์ •๋œ ์Šค๋ƒ…์ƒท์ž…๋‹ˆ๋‹ค. ๋งค ๊ฑฐ๋ž˜์ผ ๊ฐฑ์‹ ๋˜๋Š” ์›๋ณธ์€ ์œ„ ์ฃผ์†Œ๋“ค์ž…๋‹ˆ๋‹ค.

์–ด๋”” ๋ฌด์—‡
Hugging Face JSON Lines ยท ์ข…๋ชฉ ๋งˆ์Šคํ„ฐ ยท ์ผ๋ณ„ ์ข…๊ฐ€ ยท ๊ณต์‹œ ์œ ํ˜•๋ณ„ ์ดํ›„ ์ฃผ๊ฐ€
Kaggle CSV 4๊ฐœ ยท ๊ณต์‹œ ์ ‘์ˆ˜ ์‹œ๊ฐ ์—ด ํฌํ•จ

์ธ์šฉ์šฉ ์›”๊ฐ„ ๋™๊ฒฐ๋ณธ์€ ํ—ˆ๊น…ํŽ˜์ด์Šค์˜ korea-equity-daily-YYYY-MM ์— ๋”ฐ๋กœ ์žˆ์Šต๋‹ˆ๋‹ค. main ์€ ๋งค ๊ฑฐ๋ž˜์ผ ๋ฎ์–ด์“ฐ์ด๋ฏ€๋กœ ์ธ์šฉ์— ์“ธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.


์„ค๊ณ„ ์›์น™

  • null ์€ 0์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฐ์ธก์€ null, 0 ์€ ์‹ค์ œ๋กœ ์ธก์ •๋œ 0์ž…๋‹ˆ๋‹ค(๊ฑฐ๋ž˜ ์—†์Œ ๋“ฑ, has_trade: false ๋กœ ํ‘œ์‹œ).
  • '๊ธฐ์ค€์ผ'์ด ๋‘ ๊ฐœ์ž…๋‹ˆ๋‹ค. quote_as_of(์‹œ์„ธ ๊ธฐ์ค€์ผ, T+1 ํ™•์ • ์ข…๊ฐ€)์™€ disclosure_through(๊ณต์‹œ ์ˆ˜๋ก์ผ)๋Š” ๋”ฐ๋กœ ์›€์ง์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ "์˜ค๋Š˜"๋กœ ํ•ฉ์น˜์ง€ ๋งˆ์„ธ์š”.
  • ์‹ ์„ ๋„๋Š” ์ฃผ์žฅ์ด ์•„๋‹ˆ๋ผ ๊ณ„์‚ฐ๊ฐ’์ž…๋‹ˆ๋‹ค. index.json โ†’ freshness.status ๋Š” ์‹ค์ œ ๊ฒฝ๊ณผ์ผ์—์„œ ๋‚˜์˜ต๋‹ˆ๋‹ค(fresh 4์ผ ์ด๋‚ด / delayed 5~7์ผ / stale 8์ผ ์ด์ƒ). quote_as_of_age_days ๋ฅผ ๊ฐ™์ด ์‹ค์–ด ์ง์ ‘ ๊ฒ€์‚ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ํšŒ๊ณ„ ํ•ญ๋“ฑ์‹์„ ์–ด๊ธฐ๋Š” ์ˆ˜์น˜๋Š” ๊ฒŒ์‹œํ•˜์ง€ ์•Š๊ณ  ์ฒ ํšŒํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์ด์ต์ด ๋งค์ถœ์•ก์„ ๋„˜๋Š” ๋“ฑ์˜ ํŒŒ์‹ฑ ๊ฒฐ๊ณผ๋Š” ์ˆซ์ž๋ฅผ ์ง€์šฐ๊ณ  ๊ณต์‹œ ์ œ๋ชฉ๊ณผ DART ์›๋ฌธ ๋งํฌ๋งŒ ๋‚จ๊น๋‹ˆ๋‹ค (value_status: "withdrawn_inconsistent").
  • ๋žญํ‚น ์‚ฐ์‹์€ ์ „๋ถ€ ๊ณต๊ฐœ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค โ€” rankings.json ์•ˆ์— ์„ฑ๋ถ„๋ณ„ ์ ์ˆ˜๊นŒ์ง€ ๋“ค์–ด ์žˆ์–ด ๋ˆ„๊ตฌ๋‚˜ ์žฌ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹คํŒจ๋„ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค. notices.json ์— ํŒŒ์ดํ”„๋ผ์ธ ์‹คํŒจ์™€ ์ •์ •์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰์ด ์‹คํŒจํ•˜๋ฉด ๋ฐ˜์ฏค ๋งŒ๋“  ๊ฒƒ์„ ๋‚ด๋ณด๋‚ด์ง€ ์•Š๊ณ  ๋งˆ์ง€๋ง‰ ์ •์ƒ ์Šค๋ƒ…์ƒท์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ํˆฌ์ž ๊ถŒ์œ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ณต๊ฐœ ๊ณต์‹œ์— ๋Œ€ํ•œ ๊ธฐ๊ณ„์  ์ง‘๊ณ„์ด๋ฉฐ ๋ชฉํ‘œ์ฃผ๊ฐ€ยทํˆฌ์ž์˜๊ฒฌยท๋งค์ˆ˜๋งค๋„ ์ถ”์ฒœ์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ค๊ณ„์ƒ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

์—†๋Š” ๊ฒƒ

์‹ค์‹œ๊ฐ„ยท๋ถ„๋ด‰ ์‹œ์„ธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(์ „ ์˜์—…์ผ ํ™•์ • ์ข…๊ฐ€, T+1). ์ฆ๊ถŒ์‚ฌ ์œ ๋ž˜์˜ PERยทPBRยท์ปจ์„ผ์„œ์Šคยท ๋ชฉํ‘œ์ฃผ๊ฐ€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ฃผ๋ฌธ ์‹คํ–‰ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. ์˜๋„๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค โ€” ์žฌ๋ฐฐํฌํ•  ๊ถŒ๋ฆฌ๊ฐ€ ๋ถ„๋ช…ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋‹ค๋ฃน๋‹ˆ๋‹ค.


์ถœ์ฒ˜์™€ ๋ผ์ด์„ ์Šค

  • ๊ธˆ์œต๊ฐ๋…์› ์ „์ž๊ณต์‹œ์‹œ์Šคํ…œ(DART) โ€” ๊ณต์‹œ
  • ๊ธˆ์œต์œ„์›ํšŒ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ โ€” ์ผ๋ณ„ ํ™•์ • ์ข…๊ฐ€

๋ฐœํ–‰ ํŒŒ์ผ์€ ๊ณต๊ณต๋ฐ์ดํ„ฐ ๊ฐ€๊ณต๋ฌผ์ด๋ฉฐ ์ถœ์ฒ˜๋ฅผ ํ‘œ๊ธฐํ•˜๋ฉด ์˜๋ฆฌ ๋ชฉ์ ์„ ํฌํ•จํ•ด ์ž์œ ๋กญ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฃŒ: ํ•œ๊ตญ์ฃผ์‹๋ฐ์ดํ„ฐ(aikstockdata.com) โ€” ์›์ฒœ: ๊ธˆ์œต๊ฐ๋…์› DART ยท ๊ธˆ์œต์œ„์›ํšŒ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ

์ด ์ €์žฅ์†Œ์˜ ์ฝ”๋“œ๋Š” MIT ๋ผ์ด์„ ์Šค์ž…๋‹ˆ๋‹ค(LICENSE ์ฐธ์กฐ). ์œ„ ๋ฐ์ดํ„ฐ ๋ผ์ด์„ ์Šค๋Š” ๋ฐœํ–‰๋˜๋Š” JSONยทCSV ํŒŒ์ผ์— ์ ์šฉ๋˜๋ฉฐ ์ด ์ €์žฅ์†Œ์˜ ์ฝ”๋“œ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐœํ–‰ ๋ฐ์ดํ„ฐ๋Š” ์ •๋ณด ์ œ๊ณต ๋ชฉ์ ์ด๋ฉฐ ํˆฌ์ž ์กฐ์–ธ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ๊ณ„๊ฐ€ ์ง‘๊ณ„ํ•œ ๊ณผ๊ฑฐ ๊ธฐ๋ก์ด๊ณ  ์–ด๋–ค ์ข…๋ชฉ์˜ ๋งค์ˆ˜ยท๋งค๋„๋ฅผ ๊ถŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


์ €์žฅ์†Œ ๊ตฌ์„ฑ

mcp/worker.js      MCP ์„œ๋ฒ„ (Cloudflare Worker ยท ์ƒํƒœ ์—†๋Š” JSON-RPC over HTTP)
examples/          ๋ฐ”๋กœ ๋Œ์•„๊ฐ€๋Š” Python ยท JavaScript ยท ์…ธ ์˜ˆ์ œ

๋ฐœํ–‰ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์€ ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


English

The Korean documentation above is the primary reference. This section mirrors it.

Why this exists

Korean market data is hard for AI to use. The official sources (๊ธˆ์œต์œ„์›ํšŒ public data portal, ๊ธˆ์œต๊ฐ๋…์› DART) require API keys, return raw XML/JSON with untranslated Korean field names, and give you no way to tell whether a number is missing or actually zero.

This project normalizes them into selfโ€‘describing JSON that an LLM can read directly โ€” and adds an MCP server so Claude and ChatGPT can query it midโ€‘conversation without any setup beyond pasting a URL.

The practical difference: no credentials. Most Korean stock MCP servers proxy the DART or brokerage APIs live, so you have to register for a key before the first call. This one serves preโ€‘built public files, so it works the moment you paste the URL.


Quick start โ€” connect an AI in 30 seconds

Claude / ChatGPT (MCP connector)

Add this URL as a custom connector in settings. No authentication.

https://mcp.aikstockdata.com/mcp

Twelve tools become available.

Tool What it does
get_today Whole market in one call โ€” breadth, tone, top filings
search_stock ยท get_stock Find a ticker ยท full detail (price, financials, filings)
get_rankings ยท get_market_summary Ranking tables ยท market digest
get_disclosures What was filed, and when exactly โ€” receipt time (HH:MM) and session (pre-open / intraday / after-close). Not exposed by any public Korean API
list_stocks The list, not just the count โ€” turnaround to profit, 52-week high/low, with a capรทannualised-operating-income ceiling
get_earnings Preliminary results included โ€” filed ~2 weeks before the regular report
get_earnings_calendar Who has filed, who hasn't โ€” statutory deadline D-day plus a diff of what's new since the previous publish. For stateless agents, polling this replaces a webhook
get_history 250 trading days of daily prices + 52w high/low, drawdown, volume ratio
get_disclosure_impact Market-adjusted price path at +1/+5 trading days after each filing type; +20 appears per type once it has enough samples โ€” read h20_status
get_data_urls Catalogue of raw JSON โ€” the tool list is not the extent of the data

Then just ask: "์˜ค๋Š˜ ํ•œ๊ตญ ์‹œ์žฅ ์–ด๋• ์–ด?" or "Samsung Electronics latest disclosures?" or "Which stocks turned profitable and trade under 10ร— operating income?"

Any AI, without MCP โ€” paste a URL

https://aikstockdata.com/data/public/today.json ์„ ์ฝ๊ณ  ์˜ค๋Š˜ ํ•œ๊ตญ ์‹œ์žฅ์„ ์š”์•ฝํ•ด์ค˜.

Python

import urllib.request, json

def get(path):
    req = urllib.request.Request("https://aikstockdata.com" + path,
                                 headers={"User-Agent": "my-app"})
    return json.loads(urllib.request.urlopen(req).read())

today = get("/data/public/today.json")
print(today["market_breadth"], today["quote_as_of"])

samsung = get("/data/public/s/005930.json")     # one stock, ~5 KB
print(samsung["quote"], samsung["financials"])

Why the User-Agent header? The CDN's bot filter rejects the default Python-urllib user agent with a 403. requests, curl, httpx and browser fetch work without it. Sending any UA string is enough.

JavaScript (browser or Node โ€” CORS is open)

const r = await fetch("https://aikstockdata.com/data/public/today.json");
const today = await r.json();
console.log(today.market_breadth, today.quote_as_of);

curl

curl -s https://aikstockdata.com/data/public/s/005930.json | jq .quote

Prefer a bulk download? Hugging Face

The live API below is republished every trading evening. If you would rather pull one file and work offline, a dated snapshot is mirrored there:

https://huggingface.co/datasets/aikstockdata/korea-equity-daily

from datasets import load_dataset

px = load_dataset("aikstockdata/korea-equity-daily", "daily_prices", split="train")
# 361,111 rows across 1,463 stocks, up to 250 trading days each (close and volume)

Four configs: daily_prices, stocks, filing_impact_summary, and filing_price_impact โ€” the individual filings behind the summary, one row each, so the published medians can be recomputed rather than taken on trust.

The loadable files are JSON Lines, not CSV. A Korean ticker is six digits including leading zeros, and type inference on CSV turns 000020 into 20, at which point it joins to nothing. The snapshot is frozen at its upload date โ€” the endpoints below are the ones that stay current.


Endpoints

Start at the catalog โ€” it lists every file with its size, freshness and archive dates:

https://aikstockdata.com/data/public/index.json
Endpoint What it is Size
today.json Oneโ€‘day digest โ€” KOSPI/KOSDAQ index close, breadth, top filings, rankings 7 KB
s/{code6}.json One stock โ€” quote, financials, recent filings, signals ~5 KB
s/{code6}_history.json One stock, 250 trading days โ€” [date, close, volume] ~7 KB
disclosure_impact.json What happened after each filing type โ€” marketโ€‘adjusted median return at +1/+5 trading days (+20 once that type's sample is full โ€” see h20_status) 60 KB
disclosures_intraday.json Today's filings with receipt times (HH:MM) โ€” published 15:00 KST, before the close 60 KB
dart_receipt_times.json Receipt number โ†’ HH:MM lookup โ€” not available from any public API 110 KB
earnings_recent60.json Earnings scoreboard, latest 60 (truncationโ€‘safe) 40 KB
daily/today_{YYYYMMDD}.json Archived daily digest (30โ€‘day window) 7 KB
search_index_min.json Name โ†’ code lookup (URL patterns declared once) 83 KB
disclosures_top100.json Top 100 filings by importance score, plainโ€‘Korean explanation 80 KB
quotes_top300.json Top 300 by market cap, sort order guaranteed 84 KB
rankings.json Growth top 8, quiet performers, 52โ€‘week highs/lows, movers 17 KB
earnings.json Earnings filings, 120โ€‘day rolling scoreboard 148 KB
quotes_slim.json All stocks, 6 core fields 201 KB
quotes.json All stocks, all fields 400 KB
disclosures.json All filings from the last 7 days, with financial detail 380 KB
excluded.json Stocks in the universe with no quote, and why 9 KB
notices.json Machineโ€‘readable incident and correction log 9 KB
quotes.csv / quotes_en.csv Same data as CSV (Korean / English headers) 161 KB

Also: /openapi.json (OpenAPI 3.1 โ€” drop it into a ChatGPT custom GPT as an Action, or generate an SDK) ยท /llms.txt ยท /llms-full.txt ยท /feed.xml ยท JSON Schemas under /data/public/schemas/

โš ๏ธ Large files get truncated by AI fetch tools

Most AI fetch tools cut responses at 50โ€“150 KB, and a truncated JSON is unparseable โ€” which produces silently wrong answers rather than an error. index.json carries a machineโ€‘readable fetch_guide block with the small alternative for every large file. Rule of thumb: if you need one stock, always use s/{code}.json.


What you can't get anywhere else for free

0. Filing receipt times (HH:MM) โ€” not in any public Korean source

The DART search API returns a receipt date, never a time. Neither does the filing viewer, nor the search screen. But an intraday filing and an after-close filing mean opposite things for that day's close: the first is already in the price, the second is not.

/data/public/disclosures.json           # 18:10 KST ยท events[].receipt_time and .session
/data/public/disclosures_intraday.json  # 15:00 KST ยท every filing received that day
/data/public/dart_receipt_times.json    # receipt number to time lookup

session splits on the Korean regular session (09:00-15:30): pre_open (the whole day follows the filing โ€” the only identifiable case), intraday (mixed), after_close (the whole day precedes it โ€” not a reaction at all). Measured: roughly 40% of filings arrive after the close. Without the minute, that 40% gets read as same-day reaction.

1. What actually happened after each filing type

Every filing is joined to that stock's daily closes and to its market index, so you can ask "what did the market do after this kind of filing, historically?" โ€” as a record, not a forecast.

https://aikstockdata.com/data/public/disclosure_impact.json

For each filing type: the median marketโ€‘adjusted return at +1 / +5 trading days (stock return minus its own index over the same window), plus how often it beat the market. +20 trading days appears per type once that type's sample is full โ€” read h20_status in the response before concluding it's missing. Perโ€‘filing values are keyed by DART receipt number, so you can join back to the original document. (๋ฐฐ๋‹น ๊ฒฐ์ • = dividend decision. Live values as of 2026โ€‘08โ€‘07; they change every trading evening โ€” always read the interval from the file, not from this page.)

{ "label": "๋ฐฐ๋‹น ๊ฒฐ์ •",
  "h5": { "n": 41, "enough": true, "median_excess_pct": 2.28,
          "median_ci95": [0.23, 4.65], "ci_includes_zero": false,
          "up_ratio_pct": 68.3 } }

Read median_ci95 before median_excess_pct. Of the cells currently carrying a number, most have an interval spanning zero โ€” those values are not distinguishable from zero. The interval ships in the same object so you cannot take the median alone by accident.

Types with fewer than 20 samples are not given a number โ€” a median over a handful of cases turns coincidence into a statistic. This is a record of what happened, not a claim about cause, and not a prediction.

2. One year of daily prices per stock, as one small file

s/{code6}_history.json โ€” up to 250 trading days of [date, close, volume], ~7 KB. Rows are arrays, not objects: repeating six key names 250 times doubles the file for no information (measured: 14.3 KB โ†’ 6.8 KB).

3. Index and breadth are kept separate โ€” because they disagree

today.json carries both the KOSPI/KOSDAQ close and the advance/decline count, because they routinely point opposite ways. On 2026โ€‘08โ€‘03 KOSPI fell 5.12% while 855 stocks rose and 518 fell: the index is capโ€‘weighted, the count is one vote per stock. Most sources give you only one of the two and let you assume they agree.

4. A dated page per trading day, permanently

https://aikstockdata.com/market/{YYYY-MM-DD} โ€” the URL date is the closingโ€‘price date, not the publish date. (We got that wrong once and a crash day carried a +17.9% headline for a few hours. Now the date and the data cannot disagree.)


Design decisions that matter for AI

  • null never means zero. A missing value is null. 0 means an actual measured zero (e.g. no trades that day, flagged by has_trade: false).
  • Two different "as of" dates. quote_as_of (price date, T+1 settled close) and disclosure_through (last filing receipt date) are separate fields, because they move independently. Never collapse them into one "today".
  • Freshness is computed, not asserted. index.json โ†’ freshness.status is derived from the actual age of the data (fresh โ‰ค4d / delayed 5โ€“7d / stale 8d+), and quote_as_of_age_days is exposed so you can check the arithmetic yourself.
  • Numbers that violate accounting identities are withdrawn, not published. If a parsed filing shows net income exceeding revenue, the numbers are dropped and only the filing title and the DART original link remain, tagged value_status: "withdrawn_inconsistent".
  • Every ranking formula is published inside rankings.json itself, with perโ€‘component scores, so any result can be recomputed.
  • Failures are logged in public. notices.json records pipeline failures and corrections. When a run fails, the last good snapshot is kept rather than publishing a partial one.
  • Not investment advice. Rankings are mechanical screens over public filings. No target prices, no analyst opinions, no buy/sell recommendations โ€” by design.

What is not here

No realโ€‘time quotes (data is the previous trading day's settled close, T+1). No PER/PBR/analyst consensus/target prices from brokerage sources. No order execution. These are deliberate โ€” the project only redistributes data it has clear rights to redistribute.


Data sources & license

Data derives from Korean public sources:

  • ๊ธˆ์œต๊ฐ๋…์› ์ „์ž๊ณต์‹œ์‹œ์Šคํ…œ (DART) โ€” regulatory filings
  • ๊ธˆ์œต์œ„์›ํšŒ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ โ€” daily settled closing prices

The published files are derived works of public data and are free to use, including commercially, with attribution:

์ž๋ฃŒ: ํ•œ๊ตญ์ฃผ์‹๋ฐ์ดํ„ฐ(aikstockdata.com) โ€” ์›์ฒœ: ๊ธˆ์œต๊ฐ๋…์› DART ยท ๊ธˆ์œต์œ„์›ํšŒ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ

The code in this repository is MIT licensed (see LICENSE). The data license above applies to the published JSON/CSV files, not to this repository's code.

The data is provided for information purposes and is not investment advice. It is a machine aggregation of past records and does not recommend buying or selling any security.


Repository contents

mcp/worker.js      MCP server (Cloudflare Worker, stateless JSON-RPC over HTTP)
examples/          Runnable Python / JavaScript / shell examples

The data pipeline that produces the published files is maintained separately.



Keywords: Korean stock market API, KOSPI JSON, KOSDAQ data, DART disclosures API, MCP server Korea, free Korean stock data, ํ•œ๊ตญ ์ฃผ์‹ API ๋ฌด๋ฃŒ, ํ•œ๊ตญ ์ฃผ์‹ MCP, DART ๊ณต์‹œ JSON, ์ฝ”์Šคํ”ผ ์ข…๊ฐ€ CSV