한국 주식 MCP 서버 무료 · 무인증
기계 독자용 안내는 셋으로 갈립니다 — 무엇이 있나 데이터셋 정의·필드·스키마 · AI 에이전트가 쓰는 법 · 사람이 받아 가는 법 CSV·JSON 파일
주소 하나를 커넥터에 등록하면 Claude·ChatGPT가 KOSPI·KOSDAQ·KONEX 2,792종목의 확정 종가·DART 공시·분기 실적을 직접 조회합니다. 설치도 발급도 없습니다 — 다른 한국 주식 MCP 서버는 대부분 한국투자증권·DART API 키를 먼저 발급받아야 하지만, 이 서버는 미리 만들어 둔 공개 파일을 그대로 내보내므로 주소를 붙여넣는 즉시 동작합니다. 공식 MCP 레지스트리에 com.aikstockdata/mcp 로 등록돼 있습니다. 시세는 전 영업일(T+1) 확정 종가이며 실시간이 아닙니다. 출처는 금융위원회 공공데이터포털과 금융감독원 전자공시(DART)이고, 출처 표기 후 영리 목적을 포함해 자유롭게 이용할 수 있습니다.
5분이면 됩니다
- 1부른다 — 카탈로그부터입니다. 나머지 파일의 주소가 전부 여기 있습니다.curl -s https://aikstockdata.com/data/public/index.json
- 2이렇게 옵니다 — 아래는 꾸며 낸 예시가 아니라 이 페이지를 발행할 때 그 파일에서 그대로 읽은 앞 12줄입니다.
{ "schema_version": "1.1", "site": "한국주식데이터 (aikstockdata.com)", "@type": "DataCatalog", "name": "한국주식데이터 — 공개 데이터 카탈로그", "description": "이 사이트가 공개하는 모든 JSON·CSV 의 목차입니다. 파일 크기(file_bytes)·소형 대체본(fetch_guide)· …(줄 잘림) "generated_kst": "2026-09-01 18:10", "generated_at": "2026-09-01T18:10:00+09:00", "code_rev": "b092b86", "as_of": "2026.09.01", "published_date_iso": "2026-09-01", "quote_basis_date": "20260831", …전체 1,094줄 · 이 파일은 우리가 공개하는 모든 JSON·CSV 의 목차입니다 (크기·신선도·소형 대체본 포함). 전문 보기
- 3아니면 한 줄로 — 이 주소를 Claude·ChatGPT 설정에 한 번 넣으면 됩니다. 넣는 법은 바로 아래에 있습니다.https://mcp.aikstockdata.com/mcp
Claude·ChatGPT에 바로 연결 — MCP 커넥터
아래 주소를 한 번 등록하면, 대화 중에 "삼성전자 실적 어때?" "오늘 성장 랭킹 알려줘"처럼 물어봐도 AI가 우리 데이터로 직접 답합니다. 링크를 매번 붙여넣지 않아도 됩니다.
Claude (웹·데스크톱): 설정 → 커넥터 → "커스텀 커넥터 추가" → 이름(예: 한국주식데이터)과
위 주소를 붙여넣고 저장. 무인증이라 추가 로그인 화면이 없는 게 정상입니다.
ChatGPT: 설정 → 커넥터 → 개발자 모드 활성화 → "커넥터 만들기"에 위 주소 붙여넣기 → 인증 '없음' 선택.
설정 파일에 직접 넣거나(Claude Code·Cursor 등) 명령 한 줄로도 됩니다.
claude mcp add --transport http aikstockdata https://mcp.aikstockdata.com/mcp
{
"mcpServers": {
"aikstockdata": {
"type": "http",
"url": "https://mcp.aikstockdata.com/mcp"
}
}
}
전송 방식은 Streamable HTTP입니다 — 인증 없음, 세션 헤더 불필요, CORS 전면 개방.
제공 도구 12개 — get_today(오늘의 시장 요약 — 지수·등락 폭·주요 공시·성장 랭킹) · search_stock(종목 검색(한글명 부분일치)) · get_stock(종목 상세 — 시세·분기 실적·랭킹 신호·더 최신 잠정실적) · get_rankings(성장 TOP8·조용한 실적주) · get_market_summary(지수·등락 폭 전용) · list_stocks(★조건으로 종목 목록 — 흑자전환·52주 신고저·시총÷영업이익 배수 상한) · get_earnings(★잠정 실적 포함 — 정기보고서보다 2주 빠름) · get_history(★250거래일 일별 시세 + 고점 대비 낙폭·거래량 배수) · get_disclosure_impact(★공시 유형별 이후 주가 — 다른 데서 무료로 못 구함) · get_disclosures(★공시 목록 — 접수 시각(HH:MM)·장 구분까지) · get_earnings_calendar(★실적 캘린더 — 누가 냈고 누가 아직인가 + 마감 D-day + 신규 diff) · get_data_urls(공개 데이터 URL 카탈로그). 모든 응답에 기준일·출처와 "투자 권유가 아님"이 포함됩니다. 원천은 공공데이터(금융위·DART) 가공물입니다. 무인증·무료지만 공정 이용 범위에서 써 주세요 — 같은 데이터는 매 거래일 18:10 한 번만 바뀝니다, 초당 반복 호출은 여러분에게도 새 값을 안 줍니다.
커넥터를 등록했다면 — 이렇게 물어보세요
공시 접수 시각(HH:MM) — 공개 API 에 없는 값
문제. OpenDART 공시검색 API 가 주는 접수 정보는 rcept_dt, 즉 날짜(YYYYMMDD)뿐입니다. 개별 공시 뷰어에도, DART 공시검색 화면에도 시:분이 없습니다. 화면에 시:분이 남아 있는 곳은 최근공시 목록 한 곳뿐이고, 거기에도 조회·내려받기 수단이 없어 매 거래일 직접 훑어 모읍니다. 그런데 같은 날짜의 공시라도 장중에 나온 것과 장 마감 후에 나온 것은 그날 종가에 대해 정반대를 뜻합니다 — 앞의 것은 이미 주가에 반영됐고, 뒤의 것은 아직 반영되지 않았습니다. 날짜만으로는 이 둘이 구분되지 않습니다.
그래서 따로 모읍니다. 시:분이 남아 있는 곳은 DART 최근공시 목록 한 곳뿐이라, 그걸 매 거래일 15:00 에 훑어 붙입니다. 저희 공시 반응 집계도 이 값을 씁니다 — 그 결과 접수일 당일 칸이 왜 공시 반응의 추정치가 아닌지 숫자로 밝힐 수 있게 됐습니다.
curl -s https://aikstockdata.com/data/public/disclosures_intraday.json | head -c 400
| 필드 | 뜻 |
|---|---|
receipt_time | ★접수 시각 "HH:MM"(KST). 정규장은 09:00~15:30 입니다 |
session | 그 시각이 장의 어디인가 —
pre_open(~09:00) · intraday(09:00~15:30) ·
after_close(15:30~) · unknown(시각 미확보).
시각을 직접 비교해도 같지만, 경계가 바뀌면 이 필드만 따라옵니다 |
code | 종목코드 6자리 문자열 — 앞자리 0 을 포함합니다.
정수로 읽으면 000020 이 20 이 됩니다. 매핑이 없으면 null |
in_universe | ★code 가 있다고 저희 시세와
조인되는 것은 아닙니다. DART 는 상장하지 않은 법인에도 종목코드를 달아 둡니다
(하나은행·케이비증권·신한투자증권 등). 상장했더라도 스팩·소형주처럼 저희가 발행하지 않는
종목도 있습니다. 조인할 대상은 in_universe: true 인 건이고, 그때
/data/public/s/{code}.json 이 존재합니다. 실제 예: 어느 날 코드가 붙은
124건 가운데 42건이 저희 발행 목록 밖이었습니다 |
name · market | 회사명 · KOSPI/KOSDAQ/KONEX.
시장 배지가 없는 공시(채권·집합투자 등)는 null |
title | DART 원문 보고서명 — 언제나 채워집니다 |
label | 저희 22유형 분류.
해당 없으면 null 이므로 그때는 title 을 쓰세요 |
rcept_no · dart_url | 접수번호(14자리 문자열)와 DART 원문 주소 — 개별 건을 원문과 대조할 수 있습니다 |
읽는 규칙 네 가지.
① code·rcept_no 는 문자열로 읽으세요
(pd.read_json(..., dtype={"code": str})).
② 저희 시세와 붙일 거면 in_universe: true 로 먼저 거르세요.
코드가 있다고 다 조인되지 않습니다.
③ 모든 공시가 들어 있습니다 — 저희가 분류하는 유형만이 아니라 그날 접수된 전부입니다.
필요한 유형만 label 또는 title 로 걸러 쓰세요.
④ 공시가 0건이어도 파일은 나갑니다("items": []). 파일이 없으면 그건 고장입니다 —
정정·공지 로그에 기록됩니다.
import requests
d = requests.get("https://aikstockdata.com/data/public/disclosures_intraday.json").json()
# 저희 시세와 붙일 수 있는 건만, 장 마감 전 접수만
rows = [i for i in d["items"] if i["in_universe"] and i["receipt_time"] < "15:30"]
for i in rows[:5]:
print(i["receipt_time"], i["code"], i["name"], i["label"] or i["title"])
한계도 밝힙니다. 15:00 수집이므로 그 이후 접수분은 들어 있지 않습니다
— 그날 전체는 18:10 발행의 disclosures.json 에 들어갑니다.
또 이 파일은 접수 사실과 시각일 뿐이며, 가격·수익률·해석을 담지 않습니다.
같은 시각에 여러 건이 접수되는 일도 흔합니다.
장 마감 후 공시 — 18:10 전체판에도 같은 두 필드가 있습니다
15:00 파일은 그 시점까지입니다. 장 마감 후(15:30~)에 접수된 공시가 들어 있는 곳은
18:10 발행 전체판 하나뿐인데, 여기에도 events[].receipt_time 과
events[].session 을 같은 규칙으로 싣습니다
(2026-08-07 추가).
마감 후 접수라면 그날 종가 움직임은 통째로 그 공시보다 앞선 것이라 공시 반응으로 읽으면
안 되고, 반영은 다음 거래일로 넘어갑니다.
import requests
d = requests.get("https://aikstockdata.com/data/public/disclosures.json").json()
# 오늘 장 마감 뒤에 나온 공시 — 아직 종가에 반영되지 않았다
late = [e for e in d["events"] if e["session"] == "after_close"]
for e in late[:5]:
print(e["rcept_dt"], e["receipt_time"], e["code"], e["name"], e["title"])
시각을 못 얻은 건도 필드는 있습니다
(receipt_time: null, session: "unknown") — 필드가 있다 없다 하면
받아 쓰는 쪽이 깨집니다. 확보 비율은 파일 안 receipt_time_note.coverage 에
적힙니다. 접수번호↔시각 대조표만 필요하면
https://aikstockdata.com/data/public/dart_receipt_times.json 을 쓰세요
(covers.through 로 어디까지 수록됐는지 확인할 수 있습니다).
공개 데이터 (JSON · 무료 · 키 불필요)
시세는 전 영업일 확정 종가(T+1)이며 실시간이 아닙니다. 파일 안의 basDt(기준일자)를 꼭 확인하세요. 매 거래일 자동 갱신됩니다.
파일 다운로드 (CSV·JSON)
날짜별 과거 파일은 다운로드 페이지에서 받을 수 있습니다.
CSV는 엑셀에서 바로 열리고, AI 챗봇에는 파일을 업로드하거나 위 주소를 그대로 붙여넣으면 됩니다. 전부 공공데이터 가공물 — 출처 표기 후 자유 이용.
복사해서 바로 쓰는 질문 예시
다른 도구와 함께 쓰기 (pykrx 등)
역할이 다릅니다. pykrx 는 한국거래소(KRX) 통계를 파이썬으로 받아
오는 라이브러리로 수십 년치 일봉·투자자별 매매동향·공매도를 줍니다. 대신
DART 공시와 실적 해석은 다루지 않습니다. 우리는 그 반대입니다 — 공시·실적·신호는
주지만 긴 시세 시계열과 수급·공매도는 없습니다. 둘을 같이 쓰면 서로의 빈 칸이 메워집니다.
우리에게 없는 것(이 목록은 카탈로그의
quality.not_included_fields 와 같은 자리에서 옵니다):
PER · PBR · 업종 · 투자의견 · 목표가 · 실시간가 · 투자자별 수급(외국인·기관·개인 순매수) · 분봉·틱 · 배당 · 재무상태표(자산·부채·자본). 종목별 시계열은 1년치(250거래일)까지입니다.
from pykrx import stock # 시세 시계열은 이쪽
import requests # 공시·실적·해석은 우리
ohlcv = stock.get_market_ohlcv("20260101", "20260820", "005930")
x = requests.get("https://aikstockdata.com/data/public/s/005930.json").json()
x["financials"], x["recent_disclosures"], x["signals"]
위 예제는 실제로 돌려 확인한 것입니다(pykrx 1.2.8 · 155거래일 수신).
pykrx 가 시작할 때 KRX 로그인 실패 경고를 찍어도 공개 경로로 동작합니다.
pykrx 는 KRX 화면 변경에 취약하니, 우리 쪽 주소만으로도 위 세 블록은 그대로 받을 수 있습니다.
이용 조건
출처 표기 예: "자료: 한국주식데이터(aikstockdata.com) — 원천: 금융감독원 DART · 금융위원회 공공데이터포털". 데이터의 정확성·완전성은 보증하지 않으며 공시 원문(DART)이 우선합니다. 데이터셋 상세 정의·스키마는 데이터셋 안내를 참조하세요.
본 데이터와 안내는 정보 제공 목적이며 투자 권유가 아니고, 특정 종목의 매수·매도를 추천하지 않습니다.