한국 주식 데이터를 AI에 연결 MCP · 주소 한 줄 · 무인증
클로드(Claude)·ChatGPT 에 주소 하나를 등록하면, 대화 중에 코스피·코스닥·코넥스 전 종목의 확정 종가와 DART 공시·분기 실적을 AI 가 직접 조회합니다. 설치도, 회원가입도, API 키 발급도 없습니다 — 한국주식데이터가 운영하는 무료 원격 MCP 서버이고 도구는 12개입니다(2026.09.18 기준 2,796종목 · 그날 시세가 있는 종목 2,787).
기계 독자용 안내는 셋으로 갈립니다 — 무엇이 있나 데이터셋 정의·필드·스키마 · AI 에이전트가 쓰는 법 · 사람이 받아 가는 법 CSV·JSON 파일
설치도 발급도 없습니다. 이 서버는 미리 만들어 둔 공개 파일을 그대로 내보냅니다. 그래서 API 키 없이, 주소를 붙여넣는 즉시 동작합니다. 인증 헤더도 없어서 설정 장벽은 주소 한 줄을 붙여넣는 것뿐입니다. 내려받아 설치하지 않고 주소로 붙이는 원격(remote) MCP 서버입니다. 공식 MCP 레지스트리 이름은 com.aikstockdata/mcp 입니다. 시세는 전 영업일(T+1) 확정 종가이며 실시간이 아닙니다. 출처는 금융위원회 공공데이터포털과 금융감독원 전자공시(DART)입니다. 출처를 표기하면 비영리 목적으로 인용·이용할 수 있고, 상업적 재배포는 허용하지 않습니다.
처음이라면 → 주식 AI 연결 3단계 · 주소만 필요하시면 → MCP 주소 · 개발자라면 → curl 로 5분 시작
Claude·ChatGPT에 바로 연결 — MCP 커넥터
아래 주소를 한 번 등록하면, 대화 중에 "삼성전자 실적 어때?" "오늘 성장 랭킹 알려줘"처럼 물어봐도 AI가 우리 데이터로 직접 답합니다. 링크를 매번 붙여넣지 않아도 됩니다.
Claude (웹·데스크톱): Customize › Connectors → + →
Add custom connector → 이름(예: 한국주식데이터)과 위 주소를 붙여넣고 저장. 무인증이라 추가 로그인
화면이 없는 게 정상입니다. 유료 구독이 없어도 쓸 수 있고, 커스텀 커넥터는 1개까지입니다.
ChatGPT (웹 · Plus·Pro·Business·Enterprise·Edu): Settings › Security and login에서
Developer mode를 켠 뒤 → ChatGPT Plugins의 +로 개발자 모드 앱을 만들고 위 주소를 넣습니다.
인증은 No Authentication. 무료 요금제와 모바일 앱에서는 아직 안 됩니다.
메뉴 이름은 2026-09-11 기준 각 회사 공식 도움말(영어 화면)을 따랐습니다 — Claude · ChatGPT. 화면 언어·개편에 따라 이름이 다를 수 있습니다. 이 서비스를 1분으로 보고 싶으시면 유튜브 쇼츠.
설정 파일에 직접 넣거나(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(종목 상세 — 시세·최근 정기보고서 누적 실적·PER(TTM)·PBR·랭킹 신호·더 최신 잠정실적) · get_rankings(성장 TOP8·조용한 실적주) · get_market_summary(지수·등락 폭 전용) · list_stocks(★조건으로 종목 목록 — 흑자전환·52주 신고저·시총÷영업이익 배수 상한) · get_earnings(★잠정 실적 포함 — 정기보고서보다 2주 빠름) · get_history(★종목별 일별 시세 + 고점 대비 낙폭·거래량 배수) · get_disclosure_impact(★공시 유형별 이후 주가 — 시장조정 중앙값·95% 구간) · get_disclosures(★공시 목록 — 접수 시각(HH:MM)·장 구분까지) · get_earnings_calendar(★실적 캘린더 — 누가 냈고 누가 아직인가 + 마감 D-day + 신규 diff) · get_data_urls(공개 데이터 URL 카탈로그). 모든 응답에 기준일·출처와 "투자 권유가 아님"이 포함됩니다. 원천은 공공데이터(금융위·DART) 가공물입니다. 무인증·무료지만 공정 이용 범위에서 써 주세요 — 같은 데이터는 매 거래일 18:30 전후 한 번만 바뀝니다, 초당 반복 호출은 여러분에게도 새 값을 안 줍니다.
5분이면 됩니다 개발자용 — 주소로 직접 받기
- 1부른다 — 카탈로그부터입니다. 나머지 파일의 주소가 전부 여기 있습니다.curl -s https://aikstockdata.com/data/public/index.json
- 2이렇게 옵니다 — 아래는 꾸며 낸 예시가 아니라 이 페이지를 발행할 때 그 파일에서 그대로 읽은 앞 12줄입니다.
{ "schema_version": "1.1", "site": "한국주식데이터 (aikstockdata.com)", "@type": "DataCatalog", "name": "한국주식데이터 — 공개 데이터 카탈로그", "description": "코스피·코스닥·코넥스 전 종목의 T+1 확정 종가·DART 공시(접수 시각 포함)·분기 실적을 매 거래일 18:30 전후(KST …(줄 잘림) "generated_kst": "2026-09-18 18:10", "generated_at": "2026-09-18T18:10:00+09:00", "code_rev": "8c687c8", "as_of": "2026.09.18", "published_date_iso": "2026-09-18", "quote_basis_date": "20260917", …전체 1,290줄 · 이 파일은 우리가 공개하는 모든 JSON·CSV 의 목차입니다 (크기·신선도·소형 대체본 포함). 전문 보기
- 3아니면 한 줄로 — 이 주소를 Claude·ChatGPT 설정에 한 번 넣으면 됩니다. 넣는 법은 연결 안내에 있습니다.https://mcp.aikstockdata.com/mcp
커넥터를 등록했다면 — 이렇게 물어보세요
공시 접수 시각(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 는 상장하지 않은 법인에도 종목코드를 달아 둡니다
(하나은행·케이비증권·신한투자증권 등). 상장했더라도 그날 시세가 없는 종목(거래정지·상장 직후
등 — excluded.json)은 발행하지 않습니다. 조인할 대상은 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 수집이므로 그 이후 접수분은 들어 있지 않습니다
— 저녁 발행의 disclosures.json 은 우리가 분류하는 공시 유형(label 이 붙는 건)만 담으므로,
15:00 이후 접수된 그 밖의 공시는 어느 파일에도 없습니다(그런 공시는 DART 원문 목록에서 보세요).
또 이 파일은 접수 사실과 시각일 뿐이며, 가격·수익률·해석을 담지 않습니다.
같은 시각에 여러 건이 접수되는 일도 흔합니다.
장 마감 후 공시 — 저녁 전체판에도 같은 두 필드가 있습니다
15:00 파일은 그 시점까지입니다. 장 마감 후(15:30~)에 접수된 공시는
저녁 발행 전체판에만 있고(우리가 분류하는 유형만 담깁니다), 여기에도 events[].receipt_time 과
events[].session 을 같은 규칙으로 싣습니다
(2026-08-07 추가).
마감 후 접수라면 그날 정규장 종가 움직임은 통째로 그 공시보다 앞선 것이라 공시 반응으로 읽으면
안 됩니다. 그날 저녁 반응은 2026-09-14 부터 열린 한국거래소 애프터마켓(16:00~20:00 실시간 매매 · 코넥스·관리종목 등 제외 — 보도 기준, 정본은 거래소 공지)에서 먼저 나타날 수 있습니다. 저희 시세는 정규장 종가만 담으므로, 그 움직임은 다음 거래일의 전일 대비 등락에 섞여 보입니다.
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 공시와 실적 해석은 다루지 않습니다. 우리는 그 반대입니다 — 공시·실적·신호를
주고, 시세 시계열은 2025년부터 쌓은 만큼을 드립니다(수급·공매도는 없습니다).
둘을 같이 쓰면 서로의 빈 칸이 메워집니다.
우리에게 없는 것(이 목록은 카탈로그의
quality.not_included_fields 와 같은 자리에서 옵니다):
선행PER(컨센서스) · 업종 · 투자의견 · 목표가 · 실시간가 · 투자자별 수급(외국인·기관·개인 순매수) · 분봉·틱 · 배당 · 재무상태표(자산·부채).
종목별 시계열은 매 거래일 한 행씩 적립합니다 — 자르지 않습니다.
각 파일의 count 가 실린 행 수이고, retention 이 보존 정책입니다.
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)이 우선합니다. 데이터셋 상세 정의·스키마는 데이터셋 안내를 참조하세요. 영문 안내는 MCP server for Korean stocks (English) 에 있습니다.
본 데이터와 안내는 정보 제공 목적이며 투자 권유가 아니고, 특정 종목의 매수·매도를 추천하지 않습니다.