korean-stats-mcp 1.8.5 → 1.8.7

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2024
3
+ Copyright (c) 2024 chrisryugj
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  **국가데이터처 KOSIS, 이제 사이트에 들어가지 않습니다.**
4
4
  AI 어시스턴트에게 한국어로 물어보면 국가데이터처 공식 수치가 출처와 함께 바로 나옵니다.
5
5
 
6
+ [![npm version](https://img.shields.io/npm/v/korean-stats-mcp.svg)](https://www.npmjs.com/package/korean-stats-mcp)
6
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
7
8
  [![MCP](https://img.shields.io/badge/MCP-Compatible-blue)](https://modelcontextprotocol.io/)
8
9
  [![KOSIS](https://img.shields.io/badge/KOSIS-OpenAPI-green)](https://kosis.kr/openapi/)
@@ -115,7 +116,7 @@ AI: 2025년 하반기 광진구의 고용률은 61.6%입니다.
115
116
  2024년 광진구의 65세 이상 고령인구는 ○○,○○○명입니다.
116
117
  ```
117
118
 
118
- 전국 **230개 이상의 자치구·시군**을 KOSIS 자치구 단위 통계표로 직접 조회합니다. 전국 226개 시군구가 동일 구조로 수록된 **KOSIS 표준 통계표(자치구 코드 라우팅)를 우선** 쓰고, 표준표에 없는 분야만 자치구 통계연보(`.xlsx`)로 보완합니다. `중구`·`남구`처럼 여러 시에 있는 이름도 "부산 중구"처럼 광역시를 같이 말하면 정확히 구분합니다.
119
+ 전국 **226개 시군구**(자치구·시·군)를 KOSIS 자치구 단위 통계표로 직접 조회합니다. 시군구가 동일 구조로 수록된 **KOSIS 표준 통계표(자치구 코드 라우팅)를 우선** 쓰고, 표준표에 없는 분야만 자치구 통계연보(`.xlsx`)로 보완합니다. `중구`·`남구`처럼 여러 시에 있는 이름도 "부산 중구"처럼 광역시를 같이 말하면 정확히 구분합니다.
119
120
 
120
121
  ---
121
122
 
@@ -131,7 +132,7 @@ AI: 2025년 하반기 광진구의 고용률은 61.6%입니다.
131
132
 
132
133
  ## 무엇을 물어볼 수 있나
133
134
 
134
- ### 통계 키워드 — 92개 + 자연어 별칭 100개 이상
135
+ ### 통계 키워드 — 92개 + 자연어 별칭 88개
135
136
 
136
137
  | 분야 | 예시 키워드 |
137
138
  |------|------------|
@@ -285,13 +286,32 @@ AI 앱 설정에 발급받은 키를 넣습니다.
285
286
 
286
287
  ## 원격 엔드포인트
287
288
 
289
+ 공식 주소는 통합 호스트 경로 하나입니다.
290
+
288
291
  - 엔드포인트: `https://mcp.gomdori.app/stats` (14개 도구 전체 동작)
289
- - 헬스체크: `https://mcp.gomdori.app/stats/health`
292
+ - 헬스체크: `https://mcp.gomdori.app/stats/health` → 배포 중인 버전과 도구 수(`{"status":"ok","name":…,"version":…,"tools":14}`)를 그대로 반환합니다
293
+ - 구 개별 주소 `korean-stats-mcp.fly.dev` 는 통합 호스트로 옮기면서 중단됐습니다. 예전 설정에 남아 있다면 위 주소로 바꿔주세요.
290
294
 
291
295
  ---
292
296
 
293
297
  ## 변경 이력
294
298
 
299
+ <details>
300
+ <summary>v1.8 — 프로덕션 정확성 하드닝 + quick_rank·explain_statistic + 통합 호스트 이전</summary>
301
+
302
+ - **잘못된 수치가 정답처럼 나가던 경로 차단** — 인식 못 한 지역명에 전국값을 조용히 반환하던 동작 제거(에러 + 지원 지역 안내로 교체), `청년실업률`·`연봉`처럼 **정의가 다른 지표로의 무단 별칭 치환 제거**(안내 문구로 전환), `다문화인구`·`유소년인구` 같은 복합어가 `인구`에 부분매칭되던 버그 차단
303
+ - **노령화지수 라우팅 교체** — 장래추계 전용 표(`DT_1YL12501E`, 2033~2052년)에서 인구총조사 실측(`DT_1IN2030`)으로. 고령인구비율은 별도 키워드로 분리(지수 ≠ 비율)
304
+ - 인구동향(출생·사망·혼인·이혼) 최근 시점에 **잠정치 안내** 자동 부착, 출처 표기에 통계표 ID + 최종갱신일(`LST_CHN_DE`) 포함
305
+ - **신규 도구 2종** — `quick_rank`(동급 지자체 전수 대비 순위·백분위·평균 격차·순위 변동), `explain_statistic`(통계 정의·작성목적·조사주기 + 보고서 인용 각주). **도구 12개 → 14개**
306
+ - 견고성 — 동일 키 in-flight 요청 병합(캐시 stampede 방지), 체인 도구 동시성 캡 8(17×8=136 동시 KOSIS 호출 방지), vitest 단위 테스트 도입
307
+ - v1.8.1 — 통계설명을 정식 엔드포인트(`statisticsExplData.do`)로 교체 + 자치구 코드 lookup 검증 강화
308
+ - v1.8.2 ~ v1.8.5 — MCP 도구 annotations(read-only·비파괴·멱등·openWorld) 부여, 도구명을 영문 그대로 노출(비-ASCII title이 붙으면 claude.ai 웹이 도구 목록을 인식하지 못함), 과대했던 도구 description 축소
309
+ - v1.8.6: 응답 캐시를 크기 상한 LRU(기본 32MB, `CACHE_MAX_MB`)로 교체. 종전 캐시는 키 1,000개가 차면 저장 단계에서 예외를 던져 KOSIS 응답을 받아 놓고도 요청이 실패했고, 바이트 상한이 없어 통합 호스트에서 프로세스 하나가 RSS 434MB를 차지했다
310
+ - v1.8.7: `fetch_kosis_excel` 복구. KOSIS 가 2026-08-05 다운로드 절차에 `srvcNm` 필드를 요구하도록 바뀌어 xlsx 대신 오류 페이지만 받고 있었다
311
+ - **배포를 통합 호스트로 이전** — 공식 주소 `mcp.gomdori.app/stats` (구 `korean-stats-mcp.fly.dev` 중단)
312
+
313
+ </details>
314
+
295
315
  <details>
296
316
  <summary>v1.7 — 자치구 데이터 소스 우선순위 재정립 + HTTP 서버 안정화</summary>
297
317
 
@@ -17,7 +17,7 @@ export declare class KosisClient {
17
17
  /**
18
18
  * API 요청 실행 (timeout 15s + 3회 재시도 + 지수 백오프)
19
19
  *
20
- * - Fly 해외 리전(nrt 등) → KOSIS Korea cold path 일시 abort 대응
20
+ * - KOSIS cold path 일시 abort 대응
21
21
  * - KOSIS 응답 에러(err/errMsg 필드)는 영구 실패 → 즉시 throw, retry 안 함
22
22
  * - HTTP 4xx도 영구 실패 → 즉시 throw
23
23
  * - 네트워크 오류·타임아웃·5xx만 retry (800ms / 1600ms 백오프)
@@ -25,7 +25,7 @@ export class KosisClient {
25
25
  /**
26
26
  * API 요청 실행 (timeout 15s + 3회 재시도 + 지수 백오프)
27
27
  *
28
- * - Fly 해외 리전(nrt 등) → KOSIS Korea cold path 일시 abort 대응
28
+ * - KOSIS cold path 일시 abort 대응
29
29
  * - KOSIS 응답 에러(err/errMsg 필드)는 영구 실패 → 즉시 throw, retry 안 함
30
30
  * - HTTP 4xx도 영구 실패 → 즉시 throw
31
31
  * - 네트워크 오류·타임아웃·5xx만 retry (800ms / 1600ms 백오프)
@@ -1,8 +1,14 @@
1
1
  /**
2
2
  * 캐시 매니저
3
3
  * 메모리 캐시를 사용하여 KOSIS API 호출을 최적화
4
+ *
5
+ * 크기 상한이 있는 LRU. node-cache 를 쓰던 시절엔 두 가지가 문제였다.
6
+ * 1) maxKeys 가 차면 set() 이 ECACHEFULL 을 던졌다. KOSIS 응답을 받아 놓고도
7
+ * 그 요청이 실패로 끝나고, 만료로 키가 빠질 때까지 새 요청이 전부 같은 길을 간다.
8
+ * 2) 바이트 상한이 없었다. 통합 호스트(1GB, MCP 5종 동거)에서 stats 한 프로세스가
9
+ * RSS 434MB(피크 576MB)를 차지했다(2026-09-23 실측). 호스트 가용 메모리 34MB.
10
+ * 지금은 가득 차면 오래 안 쓴 항목부터 내보낸다. 던지지 않는다.
4
11
  */
5
- import NodeCache from 'node-cache';
6
12
  declare const TTL: {
7
13
  readonly STATISTICS_LIST: number;
8
14
  readonly STATISTICS_DATA: number;
@@ -12,13 +18,22 @@ declare const TTL: {
12
18
  readonly EMPTY_RESULT: 60;
13
19
  };
14
20
  declare class CacheManager {
21
+ private readonly maxKeys;
22
+ private readonly maxSize;
15
23
  private cache;
24
+ private totalSize;
25
+ private hits;
26
+ private misses;
16
27
  private inflight;
17
- constructor();
28
+ constructor(maxKeys?: number, maxSize?: number);
18
29
  /**
19
30
  * 캐시 키 생성
20
31
  */
21
32
  private generateKey;
33
+ private remove;
34
+ private read;
35
+ private write;
36
+ private sweepExpired;
22
37
  /**
23
38
  * 캐시에서 데이터 조회 또는 fetcher 실행
24
39
  */
@@ -46,7 +61,12 @@ declare class CacheManager {
46
61
  /**
47
62
  * 캐시 통계
48
63
  */
49
- getStats(): NodeCache.Stats;
64
+ getStats(): {
65
+ keys: number;
66
+ size: number;
67
+ hits: number;
68
+ misses: number;
69
+ };
50
70
  /**
51
71
  * 캐시 초기화
52
72
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,SAAS,MAAM,YAAY,CAAC;AAInC,QAAA,MAAM,GAAG;;;;;;;CAQC,CAAC;AAEX,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAAY;IAGzB,OAAO,CAAC,QAAQ,CAAuC;;IAWvD;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB;;OAEG;IACG,UAAU,CAAC,CAAC,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC;IAmCb;;OAEG;IACG,iBAAiB,CAAC,CAAC,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,iBAAiB,CAAC,CAAC,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,gBAAgB,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,cAAc,CAAC,CAAC,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,YAAY,CAAC,CAAC,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACH,QAAQ;IAIR;;OAEG;IACH,KAAK;CAGN;AAKD,wBAAgB,eAAe,IAAI,YAAY,CAK9C;AAED,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,QAAA,MAAM,GAAG;;;;;;;CAQC,CAAC;AAkBX,cAAM,YAAY;IAWd,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAV1B,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;IAGnB,OAAO,CAAC,QAAQ,CAAuC;gBAGpC,OAAO,GAAE,MAA6B,EACtC,OAAO,GAAE,MAA6B;IAMzD;;OAEG;IACH,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,IAAI;IAiBZ,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACG,UAAU,CAAC,CAAC,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,CAAC,CAAC;IAmCb;;OAEG;IACG,iBAAiB,CAAC,CAAC,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,iBAAiB,CAAC,CAAC,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,gBAAgB,CAAC,CAAC,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,cAAc,CAAC,CAAC,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACG,YAAY,CAAC,CAAC,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,CAAC,CAAC;IAIb;;OAEG;IACH,QAAQ;;;;;;IAIR;;OAEG;IACH,KAAK;CAIN;AAKD,wBAAgB,eAAe,IAAI,YAAY,CAK9C;AAED,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC"}
@@ -1,8 +1,14 @@
1
1
  /**
2
2
  * 캐시 매니저
3
3
  * 메모리 캐시를 사용하여 KOSIS API 호출을 최적화
4
+ *
5
+ * 크기 상한이 있는 LRU. node-cache 를 쓰던 시절엔 두 가지가 문제였다.
6
+ * 1) maxKeys 가 차면 set() 이 ECACHEFULL 을 던졌다. KOSIS 응답을 받아 놓고도
7
+ * 그 요청이 실패로 끝나고, 만료로 키가 빠질 때까지 새 요청이 전부 같은 길을 간다.
8
+ * 2) 바이트 상한이 없었다. 통합 호스트(1GB, MCP 5종 동거)에서 stats 한 프로세스가
9
+ * RSS 434MB(피크 576MB)를 차지했다(2026-09-23 실측). 호스트 가용 메모리 34MB.
10
+ * 지금은 가득 차면 오래 안 쓴 항목부터 내보낸다. 던지지 않는다.
4
11
  */
5
- import NodeCache from 'node-cache';
6
12
  import { config } from '../config/index.js';
7
13
  // 캐시 TTL 설정 (초 단위)
8
14
  const TTL = {
@@ -14,18 +20,31 @@ const TTL = {
14
20
  // 빈 결과: KOSIS 일시 장애로 0건이 왔을 때 6시간 고착되지 않도록 짧게
15
21
  EMPTY_RESULT: 60,
16
22
  };
23
+ /** 크기 추정: 캐시 미스(네트워크 왕복 뒤)에만 한 번 계산한다 */
24
+ function estimateSize(value) {
25
+ try {
26
+ return JSON.stringify(value)?.length ?? 0;
27
+ }
28
+ catch {
29
+ return Number.POSITIVE_INFINITY; // 직렬화 불가(순환 참조 등)는 캐시하지 않는다
30
+ }
31
+ }
17
32
  class CacheManager {
18
- cache;
33
+ maxKeys;
34
+ maxSize;
35
+ // Map 삽입 순서 = LRU 순서. 조회 적중 시 지웠다 다시 넣어 맨 뒤로 보낸다.
36
+ cache = new Map();
37
+ totalSize = 0;
38
+ hits = 0;
39
+ misses = 0;
19
40
  // 동일 키 동시 요청 dedup — chain 도구가 같은 (지표×지역)을 병렬 호출할 때
20
41
  // 캐시 미스 stampede로 KOSIS 중복 호출되는 것을 방지 (promise 공유)
21
42
  inflight = new Map();
22
- constructor() {
23
- this.cache = new NodeCache({
24
- stdTTL: config.cache.ttlHours * 60 * 60,
25
- checkperiod: 600, // 10분마다 만료 체크
26
- maxKeys: config.cache.maxKeys,
27
- useClones: false, // 성능을 위해 복제 비활성화
28
- });
43
+ constructor(maxKeys = config.cache.maxKeys, maxSize = config.cache.maxSize) {
44
+ this.maxKeys = maxKeys;
45
+ this.maxSize = maxSize;
46
+ // 만료 항목은 조회 때도 지우지만, 다시 안 불리는 키가 메모리에 남지 않게 10분마다 쓸어낸다
47
+ setInterval(() => this.sweepExpired(), 10 * 60 * 1000).unref();
29
48
  }
30
49
  /**
31
50
  * 캐시 키 생성
@@ -37,13 +56,58 @@ class CacheManager {
37
56
  .join('&');
38
57
  return `${prefix}:${sortedParams}`;
39
58
  }
59
+ remove(key, entry) {
60
+ this.cache.delete(key);
61
+ this.totalSize -= entry.size;
62
+ }
63
+ read(key) {
64
+ const entry = this.cache.get(key);
65
+ if (!entry) {
66
+ this.misses++;
67
+ return undefined;
68
+ }
69
+ if (Date.now() >= entry.expiresAt) {
70
+ this.remove(key, entry);
71
+ this.misses++;
72
+ return undefined;
73
+ }
74
+ this.cache.delete(key);
75
+ this.cache.set(key, entry);
76
+ this.hits++;
77
+ return entry.value;
78
+ }
79
+ write(key, value, ttlSeconds) {
80
+ const size = estimateSize(value);
81
+ // 한 건이 예산의 1/8 을 넘으면 캐시하지 않는다. 큰 표 하나가 나머지를 통째로 밀어내는 것 방지
82
+ if (size > this.maxSize / 8)
83
+ return;
84
+ const previous = this.cache.get(key);
85
+ if (previous)
86
+ this.remove(key, previous);
87
+ for (const [oldestKey, oldest] of this.cache) {
88
+ if (this.cache.size < this.maxKeys && this.totalSize + size <= this.maxSize)
89
+ break;
90
+ this.remove(oldestKey, oldest);
91
+ }
92
+ // TTL 0 은 node-cache 시절처럼 "만료 없음"으로 둔다 (CACHE_TTL_HOURS=0)
93
+ const expiresAt = ttlSeconds > 0 ? Date.now() + ttlSeconds * 1000 : Number.POSITIVE_INFINITY;
94
+ this.cache.set(key, { value, expiresAt, size });
95
+ this.totalSize += size;
96
+ }
97
+ sweepExpired() {
98
+ const now = Date.now();
99
+ for (const [key, entry] of this.cache) {
100
+ if (now >= entry.expiresAt)
101
+ this.remove(key, entry);
102
+ }
103
+ }
40
104
  /**
41
105
  * 캐시에서 데이터 조회 또는 fetcher 실행
42
106
  */
43
107
  async getOrFetch(prefix, params, fetcher, ttl) {
44
108
  const key = this.generateKey(prefix, params);
45
109
  // 캐시에서 조회
46
- const cached = this.cache.get(key);
110
+ const cached = this.read(key);
47
111
  if (cached !== undefined) {
48
112
  return cached;
49
113
  }
@@ -57,7 +121,7 @@ class CacheManager {
57
121
  const data = await fetcher();
58
122
  // 빈 배열은 일시 장애일 수 있음 — 짧은 TTL로만 캐시 (장기 고착 방지)
59
123
  const isEmpty = Array.isArray(data) && data.length === 0;
60
- this.cache.set(key, data, isEmpty ? TTL.EMPTY_RESULT : (ttl ?? config.cache.ttlHours * 60 * 60));
124
+ this.write(key, data, isEmpty ? TTL.EMPTY_RESULT : (ttl ?? config.cache.ttlHours * 60 * 60));
61
125
  return data;
62
126
  }
63
127
  finally {
@@ -101,13 +165,14 @@ class CacheManager {
101
165
  * 캐시 통계
102
166
  */
103
167
  getStats() {
104
- return this.cache.getStats();
168
+ return { keys: this.cache.size, size: this.totalSize, hits: this.hits, misses: this.misses };
105
169
  }
106
170
  /**
107
171
  * 캐시 초기화
108
172
  */
109
173
  flush() {
110
- this.cache.flushAll();
174
+ this.cache.clear();
175
+ this.totalSize = 0;
111
176
  }
112
177
  }
113
178
  // 싱글톤 인스턴스
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"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"}
@@ -14,6 +14,7 @@ export declare const config: {
14
14
  readonly cache: {
15
15
  readonly ttlHours: number;
16
16
  readonly maxKeys: 1000;
17
+ readonly maxSize: number;
17
18
  };
18
19
  readonly logLevel: string;
19
20
  readonly viewCodes: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDT,CAAC;AAGX,wBAAgB,cAAc,IAAI,IAAI,CAMrC;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,MAAM,CAAC,SAAS,CAAC;AACrD,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,MAAM,CAAC,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDT,CAAC;AAGX,wBAAgB,cAAc,IAAI,IAAI,CAMrC;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,MAAM,CAAC,SAAS,CAAC;AACrD,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,MAAM,CAAC,WAAW,CAAC"}
@@ -17,6 +17,8 @@ export const config = {
17
17
  cache: {
18
18
  ttlHours: parseInt(process.env.CACHE_TTL_HOURS || '6', 10),
19
19
  maxKeys: 1000,
20
+ // 캐시 총량 상한 (JSON 직렬화 길이 기준). 파싱된 행 배열의 힙 점유는 약 2배라 32MB ≈ 힙 64MB
21
+ maxSize: (parseInt(process.env.CACHE_MAX_MB || '32', 10) || 32) * 1024 * 1024,
20
22
  },
21
23
  // 로그 레벨
22
24
  logLevel: process.env.LOG_LEVEL || 'info',
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,eAAe;IACf,KAAK,EAAE;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE;QACvC,OAAO,EAAE,0BAA0B;QACnC,SAAS,EAAE;YACT,cAAc,EAAE,oBAAoB;YACpC,cAAc,EAAE,oBAAoB;YACpC,aAAa,EAAE,mCAAmC;YAClD,gBAAgB,EAAE,sBAAsB;YACxC,uEAAuE;YACvE,YAAY,EAAE,wBAAwB;SACvC;KACF;IAED,QAAQ;IACR,KAAK,EAAE;QACL,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,EAAE,EAAE,CAAC;QAC1D,OAAO,EAAE,IAAI;KACd;IAED,QAAQ;IACR,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IAEzC,qBAAqB;IACrB,SAAS,EAAE;QACT,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,UAAU;QACrB,WAAW,EAAE,aAAa;QAC1B,WAAW,EAAE,aAAa;QAC1B,eAAe,EAAE,mBAAmB;QACpC,eAAe,EAAE,UAAU;QAC3B,aAAa,EAAE,QAAQ;QACvB,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,OAAO;QACrB,YAAY,EAAE,OAAO;QACrB,SAAS,EAAE,UAAU;KACb;IAEV,QAAQ;IACR,WAAW,EAAE;QACX,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,YAAY;QACf,EAAE,EAAE,KAAK;KACD;CACF,CAAC;AAEX,YAAY;AACZ,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,eAAe;IACf,KAAK,EAAE;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE;QACvC,OAAO,EAAE,0BAA0B;QACnC,SAAS,EAAE;YACT,cAAc,EAAE,oBAAoB;YACpC,cAAc,EAAE,oBAAoB;YACpC,aAAa,EAAE,mCAAmC;YAClD,gBAAgB,EAAE,sBAAsB;YACxC,uEAAuE;YACvE,YAAY,EAAE,wBAAwB;SACvC;KACF;IAED,QAAQ;IACR,KAAK,EAAE;QACL,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG,EAAE,EAAE,CAAC;QAC1D,OAAO,EAAE,IAAI;QACb,iEAAiE;QACjE,OAAO,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;KAC9E;IAED,QAAQ;IACR,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;IAEzC,qBAAqB;IACrB,SAAS,EAAE;QACT,SAAS,EAAE,UAAU;QACrB,SAAS,EAAE,UAAU;QACrB,WAAW,EAAE,aAAa;QAC1B,WAAW,EAAE,aAAa;QAC1B,eAAe,EAAE,mBAAmB;QACpC,eAAe,EAAE,UAAU;QAC3B,aAAa,EAAE,QAAQ;QACvB,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,OAAO;QACrB,YAAY,EAAE,OAAO;QACrB,SAAS,EAAE,UAAU;KACb;IAEV,QAAQ;IACR,WAAW,EAAE;QACX,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,IAAI;QACP,CAAC,EAAE,GAAG;QACN,CAAC,EAAE,YAAY;QACf,EAAE,EAAE,KAAK;KACD;CACF,CAAC;AAEX,YAAY;AACZ,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetchKosisExcel.d.ts","sourceRoot":"","sources":["../../src/tools/fetchKosisExcel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0CxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,WAAW,CAAC,CAAC;AAErF,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkKD,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0K5F"}
1
+ {"version":3,"file":"fetchKosisExcel.d.ts","sourceRoot":"","sources":["../../src/tools/fetchKosisExcel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0CxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,WAAW,CAAC,CAAC;AAErF,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuKD,wBAAsB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0K5F"}
@@ -31,10 +31,10 @@ const KOSIS_BASE = `${KOSIS_HOST}/nsibsHtmlSvc/fileView/FileStbl`;
31
31
  /**
32
32
  * KOSIS stat.kosis.kr 콜드 호출 안정화 wrapper
33
33
  *
34
- * Fly Singapore → KOSIS Korea 콜드 path에서 첫 호출이 timeout/ECONNRESET 으로 자주 실패한다.
34
+ * KOSIS 콜드 path에서 첫 호출이 timeout/ECONNRESET 으로 자주 실패한다.
35
35
  * KOSIS는 멱등 GET·세션 쿠키 기반 POST라 재시도 안전 (POST 부작용 없음 — 다운로드만).
36
36
  *
37
- * - timeout: 15s (Singapore→Seoul cold path 여유)
37
+ * - timeout: 15s (cold path 여유)
38
38
  * - attempts: 3 (지수 백오프 800ms / 1600ms — 추가 대기 상한 ~2.4s)
39
39
  */
40
40
  async function fetchWithRetry(url, init, attempts = 3) {
@@ -203,10 +203,11 @@ async function fetchDownloadInfo(orgId, tblId, fileSn, cookie) {
203
203
  const path = json.resultMap?.dwldFilePath ?? json.dwldFilePath;
204
204
  const name = json.resultMap?.dwldFileNm ?? json.dwldFileNm;
205
205
  const size = json.resultMap?.dwldFileSize ?? json.dwldFileSize;
206
+ const srvcNm = json.resultMap?.srvcNm ?? json.srvcNm;
206
207
  if (!path || !name) {
207
208
  throw new Error(`fileItmDownload.do 응답 누락: ${JSON.stringify(json).slice(0, 300)}`);
208
209
  }
209
- return { dwldFilePath: path, dwldFileNm: name, dwldFileSize: size };
210
+ return { dwldFilePath: path, dwldFileNm: name, dwldFileSize: size, srvcNm };
210
211
  }
211
212
  /** 3단계: dwldServerFile.do POST → 실제 xlsx 바이너리 */
212
213
  async function downloadFile(orgId, tblId, fileSn, info, cookie) {
@@ -219,6 +220,9 @@ async function downloadFile(orgId, tblId, fileSn, info, cookie) {
219
220
  fileSvc: '',
220
221
  file_path: info.dwldFilePath,
221
222
  file_name: info.dwldFileNm,
223
+ // KOSIS 가 2026-08-05 "웹취약수정"으로 dwldServerFile.do 에 srvcNm(2단계 응답값)을 요구한다.
224
+ // 빠지면 xlsx 대신 eGovFrame 오류 페이지(2,392B)를 준다(2026-09-23 실측: 넣으면 140,110B xlsx).
225
+ srvcNm: info.srvcNm ?? '',
222
226
  });
223
227
  const res = await fetchWithRetry(url, {
224
228
  method: 'POST',
@@ -1 +1 @@
1
- {"version":3,"file":"fetchKosisExcel.js","sourceRoot":"","sources":["../../src/tools/fetchKosisExcel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetchKosisExcel.js","sourceRoot":"","sources":["../../src/tools/fetchKosisExcel.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "korean-stats-mcp",
3
- "version": "1.8.5",
3
+ "version": "1.8.7",
4
4
  "description": "한국 국가데이터처 KOSIS OpenAPI 기반 MCP 서버 - 92개 키워드 + 자연어 별칭/오타 정규화 + 17개 시도/자치구 230+ 라우팅 + 시계열 추세 + 전국 순위(quick_rank) + 출처 각주 생성(explain_statistic) + 체인 도구 3종(지역 브리핑·다지역 비교·정책 영역) + 자치구 정밀 OpenAPI 라우팅 15종 통계표.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -43,7 +43,6 @@
43
43
  "dotenv": "^16.4.5",
44
44
  "express": "^4.22.2",
45
45
  "kordoc": "^2.8.0",
46
- "node-cache": "^5.1.2",
47
46
  "zod": "^3.23.8"
48
47
  },
49
48
  "devDependencies": {
@@ -52,11 +51,10 @@
52
51
  "@types/node": "^20.11.0",
53
52
  "@typescript-eslint/eslint-plugin": "^6.19.0",
54
53
  "@typescript-eslint/parser": "^6.19.0",
55
- "@vercel/node": "^3.0.0",
56
54
  "eslint": "^8.56.0",
57
55
  "prettier": "^3.2.4",
58
56
  "typescript": "^5.3.3",
59
- "vitest": "^2.1.9"
57
+ "vitest": "^4.1.11"
60
58
  },
61
59
  "engines": {
62
60
  "node": ">=20.0.0"
@@ -68,7 +66,11 @@
68
66
  "fast-uri@<=3.1.1": "^3.1.2",
69
67
  "ajv@>=7.0.0 <8.18.0": "^8.18.0",
70
68
  "qs@>=6.7.0 <=6.14.1": "^6.14.2",
71
- "protobufjs@<=7.5.7": "^7.5.8"
69
+ "protobufjs@<=7.5.7": "^7.5.8",
70
+ "qs@>=6.15.0 <6.16.0": "^6.16.0",
71
+ "minimatch@>=9.0.0 <9.0.7": "^9.0.7",
72
+ "adm-zip@<0.6.1": "^0.6.1",
73
+ "sharp@>=0.34.0 <0.35.4": "^0.35.4"
72
74
  }
73
75
  }
74
76
  }