krx-cli 1.3.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,6 +8,12 @@ Claude Code, GPT, Cursor 등의 AI 에이전트가 Bash tool을 통해 한국
8
8
 
9
9
  - **Agent-Native**: JSON 출력 기본, 시맨틱 exit code, 스키마 인트로스펙션
10
10
  - **전체 시장 커버리지**: 지수, 주식, ETF/ETN/ELW, 채권, 파생상품, 일반상품, ESG (31개 엔드포인트)
11
+ - **종목 검색**: 종목명으로 검색 후 코드 조회 (`krx stock search`)
12
+ - **시장 요약**: 한 번의 호출로 지수/상승·하락/Top movers 확인 (`krx market summary`)
13
+ - **워치리스트**: 관심 종목 저장 및 일괄 시세 조회 (`krx watchlist`)
14
+ - **기간 조회**: `--from/--to`로 여러 날짜 데이터 병렬 조회
15
+ - **데이터 파이프라인**: `--sort`, `--limit`, `--code` 로 서버 사이드 필터링
16
+ - **파일 캐싱**: 과거 데이터 자동 캐싱으로 rate limit 절약
11
17
  - **안전한 사용**: 입력 검증, rate limit 추적, dry-run 지원
12
18
  - **서비스 승인 관리**: API별 승인 상태 자동 확인
13
19
 
@@ -70,6 +76,53 @@ krx index list --date 20260310 --market kosdaq
70
76
  krx stock list --date 20260310 --market kospi
71
77
  krx stock list --date 20260310 --market kosdaq
72
78
  krx stock info --market kospi
79
+ krx stock search 삼성전자 # 종목 검색
80
+ ```
81
+
82
+ ### 시장 요약
83
+
84
+ ```bash
85
+ krx market summary # 최근 거래일 시장 요약
86
+ krx market summary --date 20260310 # 특정 날짜
87
+ ```
88
+
89
+ ### 기간 조회
90
+
91
+ ```bash
92
+ krx index list --market kospi --from 20260301 --to 20260310
93
+ krx stock list --market kospi --from 20260301 --to 20260305 --code KR7005930003
94
+ ```
95
+
96
+ ### 정렬 및 제한
97
+
98
+ ```bash
99
+ krx stock list --date 20260310 --market kospi --sort FLUC_RT --limit 10
100
+ krx stock list --date 20260310 --market kospi --sort ACC_TRDVAL --asc --limit 5
101
+ ```
102
+
103
+ ### 워치리스트
104
+
105
+ ```bash
106
+ krx watchlist add 삼성전자 # 종목 검색 후 워치리스트 추가
107
+ krx watchlist remove 삼성전자 # 정확한 이름으로 제거
108
+ krx watchlist remove KR7005930003 # 종목코드로 제거
109
+ krx watchlist list # 워치리스트 조회
110
+ krx watchlist show # 워치리스트 종목 시세 조회
111
+ krx watchlist show --date 20260310 # 특정 날짜 시세
112
+ ```
113
+
114
+ ### 캐시 관리
115
+
116
+ ```bash
117
+ krx cache status # 캐시 현황 조회
118
+ krx cache clear # 캐시 전체 삭제
119
+ ```
120
+
121
+ ### 버전 관리
122
+
123
+ ```bash
124
+ krx version # 현재 버전 확인 및 최신 버전 비교
125
+ krx update # 최신 버전으로 업데이트
73
126
  ```
74
127
 
75
128
  ### ETF/ETN/ELW 조회
@@ -91,6 +144,10 @@ krx bond list --date 20260310 --market general
91
144
  ```bash
92
145
  krx derivative list --date 20260310 --type futures
93
146
  krx derivative list --date 20260310 --type options
147
+ krx derivative list --date 20260310 --type futures-kospi
148
+ krx derivative list --date 20260310 --type futures-kosdaq
149
+ krx derivative list --date 20260310 --type options-kospi
150
+ krx derivative list --date 20260310 --type options-kosdaq
94
151
  ```
95
152
 
96
153
  ### 일반상품 조회
@@ -116,12 +173,22 @@ krx schema stock.stk_bydd_trd
116
173
 
117
174
  ## 글로벌 옵션
118
175
 
119
- | 옵션 | 설명 | 기본값 |
120
- | ----------------------- | ------------------------------ | ------------------------------ |
121
- | `-o, --output <format>` | 출력 형식: json, table, ndjson | json (파이프) / table (터미널) |
122
- | `-f, --fields <fields>` | 출력 필드 필터 (쉼표 구분) | 전체 |
123
- | `--dry-run` | API 호출 없이 요청 내용 출력 | - |
124
- | `-v, --verbose` | 상세 로그 (stderr) | - |
176
+ | 옵션 | 설명 | 기본값 |
177
+ | ----------------------- | ----------------------------------- | ------------------------------ |
178
+ | `-o, --output <format>` | 출력 형식: json, table, ndjson, csv | json (파이프) / table (터미널) |
179
+ | `-f, --fields <fields>` | 출력 필드 필터 (쉼표 구분) | 전체 |
180
+ | `--code <isuCd>` | 종목코드 필터 (ISU_CD) | - |
181
+ | `--sort <field>` | 결과 정렬 기준 필드 | - |
182
+ | `--asc` | 오름차순 정렬 (기본: 내림차순) | - |
183
+ | `--limit <n>` | 결과 개수 제한 | - |
184
+ | `--from <date>` | 기간 조회 시작일 (YYYYMMDD) | - |
185
+ | `--to <date>` | 기간 조회 종료일 (YYYYMMDD) | - |
186
+ | `--no-cache` | 캐시 무시하고 새로 조회 | - |
187
+ | `--filter <expression>` | 필터 표현식 (예: "FLUC_RT > 5") | - |
188
+ | `--save <path>` | 결과를 파일로 저장 | - |
189
+ | `--retries <n>` | 네트워크 에러 시 재시도 (기본: 3) | - |
190
+ | `--dry-run` | API 호출 없이 요청 내용 출력 | - |
191
+ | `-v, --verbose` | 상세 로그 (stderr) | - |
125
192
 
126
193
  ## Exit Codes
127
194
 
@@ -224,16 +291,19 @@ mkdir -p ~/.claude/skills && cp SKILL.md ~/.claude/skills/krx-cli.md
224
291
  mkdir -p ~/.cursor/skills && cp SKILL.md ~/.cursor/skills/krx-cli.md
225
292
  ```
226
293
 
227
- ## MCP 서버 (Claude Desktop / ChatGPT Desktop)
294
+ ## MCP 서버
228
295
 
229
- CLI 외에 MCP(Model Context Protocol) 서버도 제공합니다. Claude Desktop, ChatGPT Desktop 등 MCP를 지원하는 클라이언트에서 사용할 수 있습니다.
296
+ CLI 외에 MCP(Model Context Protocol) 서버도 제공합니다. 가지 전송 방식을 지원합니다:
230
297
 
231
- ### 설정 (Claude Desktop)
298
+ | 전송 방식 | 바이너리 | 지원 클라이언트 |
299
+ | --------------- | ----------- | --------------- |
300
+ | stdio | `krx-mcp` | Claude Desktop |
301
+ | Streamable HTTP | `krx serve` | ChatGPT 웹 |
232
302
 
233
303
  API 키는 `krx auth set <key>`로 등록한 것이 자동으로 사용됩니다.
234
304
  `krx-mcp`는 `npm install -g krx-cli`로 설치하면 함께 설치됩니다.
235
305
 
236
- ### Claude Desktop
306
+ ### Claude Desktop (stdio)
237
307
 
238
308
  설정 파일 위치:
239
309
 
@@ -250,38 +320,52 @@ API 키는 `krx auth set <key>`로 등록한 것이 자동으로 사용됩니다
250
320
  }
251
321
  ```
252
322
 
253
- ### ChatGPT Desktop
323
+ 설정 앱을 재시작하면 MCP 도구가 활성화됩니다.
254
324
 
255
- 설정 파일 위치:
325
+ ### ChatGPT 웹 (Streamable HTTP)
256
326
 
257
- - **macOS**: `~/Library/Application Support/com.openai.chat/mcp.json`
258
- - **Windows**: `%LOCALAPPDATA%\OpenAI\ChatGPT\mcp.json`
327
+ ChatGPT 웹은 원격 MCP 서버만 지원하므로, HTTP 서버를 실행한 뒤 ngrok으로 외부에 노출해야 합니다.
259
328
 
260
- ```json
261
- {
262
- "mcpServers": {
263
- "krx": {
264
- "command": "krx-mcp"
265
- }
266
- }
267
- }
329
+ ```bash
330
+ # 터미널 1: MCP 서버 실행
331
+ krx serve --port 3000 --host 0.0.0.0
332
+
333
+ # 터미널 2: ngrok으로 외부 노출
334
+ ngrok http 3000
268
335
  ```
269
336
 
270
- 설정 앱을 재시작하면 MCP 도구가 활성화됩니다.
337
+ 1. ngrok 출력에서 `https://xxxx.ngrok.io` URL 복사
338
+ 2. ChatGPT 웹 → Settings → Developer → MCP Server 추가
339
+ 3. URL: `https://xxxx.ngrok.io/mcp`
340
+
341
+ Health check: `http://localhost:3000/health`
271
342
 
272
343
  ### 제공 Tool
273
344
 
274
- | Tool | 설명 |
275
- | ---------------- | ------------------------------------------ |
276
- | `krx_index` | 지수 일별시세 (KOSPI/KOSDAQ/KRX/채권/파생) |
277
- | `krx_stock` | 주식 일별매매정보 + 종목 기본정보 |
278
- | `krx_etp` | ETF/ETN/ELW 일별매매정보 |
279
- | `krx_bond` | 채권 일별매매정보 (국채/일반/소액) |
280
- | `krx_derivative` | 선물/옵션 일별매매정보 |
281
- | `krx_commodity` | 금/석유/배출권 일별매매정보 |
282
- | `krx_esg` | ESG 지수/채권/ETP 정보 |
283
- | `krx_schema` | 엔드포인트 응답 필드 스키마 조회 |
284
- | `krx_rate_limit` | 일일 API 호출 현황 조회 |
345
+ | Tool | 설명 |
346
+ | -------------------- | -------------------------------------------- |
347
+ | `krx_index` | 지수 일별시세 (KOSPI/KOSDAQ/KRX/채권/파생) |
348
+ | `krx_stock` | 주식 일별매매정보 + 종목 기본정보 |
349
+ | `krx_etp` | ETF/ETN/ELW 일별매매정보 |
350
+ | `krx_bond` | 채권 일별매매정보 (국채/일반/소액) |
351
+ | `krx_derivative` | 선물/옵션 일별매매정보 |
352
+ | `krx_commodity` | 금/석유/배출권 일별매매정보 |
353
+ | `krx_esg` | ESG 지수/채권/ETP 정보 |
354
+ | `krx_search` | 종목명 검색 (KOSPI + KOSDAQ) |
355
+ | `krx_market_summary` | 시장 요약 (지수/상승·하락/Top movers/거래량) |
356
+ | `krx_watchlist` | 관심종목 관리 (추가/제거/조회/시세) |
357
+ | `krx_schema` | 엔드포인트 응답 필드 스키마 조회 |
358
+ | `krx_rate_limit` | 일일 API 호출 현황 조회 |
359
+
360
+ ### 제공 Resource
361
+
362
+ MCP Resource로 읽기 전용 상태 데이터를 노출합니다.
363
+
364
+ | Resource | 설명 |
365
+ | ---------------------- | ---------------------------------- |
366
+ | `krx://watchlist` | 워치리스트 종목 목록 (JSON) |
367
+ | `krx://rate-limit` | 일일 API 호출 현황 (JSON) |
368
+ | `krx://service-status` | 카테고리별 서비스 승인 상태 (JSON) |
285
369
 
286
370
  ### 사용 예시
287
371
 
@@ -304,6 +388,7 @@ MCP 클라이언트에서 자연어로 요청하면 됩니다:
304
388
  pnpm install
305
389
  pnpm build
306
390
  pnpm test
391
+ pnpm test:e2e
307
392
  pnpm typecheck
308
393
  pnpm lint
309
394
  ```
package/SKILL.md CHANGED
@@ -7,7 +7,7 @@ install: npm install -g krx-cli
7
7
  binary: krx
8
8
  metadata:
9
9
  author: kyo504
10
- version: "1.3.1"
10
+ version: "1.6.0"
11
11
  invariants:
12
12
  - Always use YYYYMMDD format for --date (e.g., 20260310)
13
13
  - Data is T-1 (previous trading day), available from 2010 onwards
@@ -118,6 +118,55 @@ krx esg list --date 20260310 --type etp # ESG ETP
118
118
  krx esg list --date 20260310 --type sri-bond # SRI bonds
119
119
  ```
120
120
 
121
+ ### Stock Search (종목 검색)
122
+
123
+ ```bash
124
+ krx stock search 삼성전자 # Search by name (KOSPI + KOSDAQ)
125
+ krx stock search SK # Partial match
126
+ ```
127
+
128
+ ### Market Summary (시장 요약)
129
+
130
+ ```bash
131
+ krx market summary # Today's market overview
132
+ krx market summary --date 20260310 # Specific date
133
+ ```
134
+
135
+ Returns: KOSPI/KOSDAQ indices, top 5 gainers/losers, advancing/declining/unchanged counts, total volume/value.
136
+
137
+ ### Watchlist (관심종목)
138
+
139
+ ```bash
140
+ krx watchlist add 삼성전자 # Search and add to watchlist
141
+ krx watchlist remove 삼성전자 # Remove by exact name
142
+ krx watchlist remove KR7005930003 # Remove by ISU_CD
143
+ krx watchlist list # List all watchlist entries
144
+ krx watchlist show # Show prices for watchlist stocks
145
+ krx watchlist show --date 20260310 # Specific date
146
+ ```
147
+
148
+ ### Cache Management
149
+
150
+ ```bash
151
+ krx cache status # Show cache size, files, dates
152
+ krx cache clear # Clear all cached data
153
+ ```
154
+
155
+ ### Version & Update
156
+
157
+ ```bash
158
+ krx version # Show current version and check for updates
159
+ krx update # Update to the latest version (npm install -g krx-cli)
160
+ ```
161
+
162
+ ### MCP HTTP Server
163
+
164
+ ```bash
165
+ krx serve # Start on http://127.0.0.1:3000/mcp
166
+ krx serve --port 8080 # Custom port
167
+ krx serve --host 0.0.0.0 # Bind to all interfaces (for ngrok)
168
+ ```
169
+
121
170
  ### Schema (introspection)
122
171
 
123
172
  ```bash
@@ -128,9 +177,19 @@ krx schema index.kospi_dd_trd # Specific endpoint schema
128
177
  ## Global Flags
129
178
 
130
179
  ```
131
- --output, -o <format> json (default) | table | ndjson
180
+ --output, -o <format> json (default) | table | ndjson | csv
132
181
  --fields, -f <fields> Filter output fields: --fields ISU_NM,TDD_CLSPRC,FLUC_RT
182
+ --code <isuCd> Filter by stock code (ISU_CD)
183
+ --sort <field> Sort results by field name
184
+ --asc Sort ascending (default: descending)
185
+ --limit <n> Limit number of results
186
+ --from <date> Start date for range query (YYYYMMDD)
187
+ --to <date> End date for range query (YYYYMMDD)
188
+ --no-cache Bypass cache and fetch fresh data
189
+ --filter <expression> Filter results (e.g. "FLUC_RT > 5", "MKT_NM == KOSPI")
133
190
  --dry-run Show request details without calling API
191
+ --save <path> Save output to file instead of stdout
192
+ --retries <n> Max retries on network error (default: 3)
134
193
  --verbose, -v Verbose logging to stderr
135
194
  ```
136
195
 
@@ -154,10 +213,36 @@ krx schema index.kospi_dd_trd # Specific endpoint schema
154
213
  krx index list --date 20260310 --market kospi --fields IDX_NM,CLSPRC_IDX,FLUC_RT
155
214
  ```
156
215
 
157
- ### Get Samsung Electronics stock price
216
+ ### Get Samsung Electronics stock price (by search)
217
+
218
+ ```bash
219
+ krx stock search 삼성전자 # Find ISU_CD first
220
+ krx stock list --date 20260310 --market kospi --code KR7005930003
221
+ ```
222
+
223
+ ### Top 5 gainers
224
+
225
+ ```bash
226
+ krx stock list --date 20260310 --market kospi --sort FLUC_RT --limit 5 --fields ISU_NM,TDD_CLSPRC,FLUC_RT
227
+ ```
228
+
229
+ ### Date range query (multi-day)
158
230
 
159
231
  ```bash
160
- krx stock list --date 20260310 --market kospi --fields ISU_NM,TDD_CLSPRC,FLUC_RT | jq '.[] | select(.ISU_NM == "삼성전자")'
232
+ krx index list --market kospi --from 20260301 --to 20260310 --fields IDX_NM,BAS_DD,CLSPRC_IDX
233
+ ```
234
+
235
+ ### Quick market overview
236
+
237
+ ```bash
238
+ krx market summary --date 20260310
239
+ ```
240
+
241
+ ### Track and monitor stocks
242
+
243
+ ```bash
244
+ krx watchlist add 삼성전자 # Add to watchlist
245
+ krx watchlist show --date 20260310 # View prices for all watchlist stocks
161
246
  ```
162
247
 
163
248
  ### Check API availability before querying
@@ -294,3 +379,13 @@ krx schema index.kospi_dd_trd # Shows params + responseFields
294
379
  krx schema stock.stk_bydd_trd # Stock endpoint fields
295
380
  krx schema --all # All 31 endpoints
296
381
  ```
382
+
383
+ ## MCP Resources
384
+
385
+ Read-only state data exposed as MCP Resources (for MCP clients):
386
+
387
+ | Resource | Description |
388
+ | ---------------------- | ----------------------------------- |
389
+ | `krx://watchlist` | Watchlist entries (JSON) |
390
+ | `krx://rate-limit` | Daily API call status (JSON) |
391
+ | `krx://service-status` | Per-category approval status (JSON) |