smart-web-mcp 0.20.0 → 0.20.2
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/CHANGELOG.md +40 -0
- package/dist/korea/fine-dust.d.ts +7 -0
- package/dist/korea/fine-dust.js +49 -1
- package/dist/korea/fine-dust.js.map +1 -1
- package/dist/korea/law.d.ts +8 -0
- package/dist/korea/law.js +53 -3
- package/dist/korea/law.js.map +1 -1
- package/dist/korea/proxy-client.d.ts +1 -0
- package/dist/korea/proxy-client.js +103 -8
- package/dist/korea/proxy-client.js.map +1 -1
- package/dist/korea/public-restroom.d.ts +7 -4
- package/dist/korea/public-restroom.js +71 -12
- package/dist/korea/public-restroom.js.map +1 -1
- package/dist/korea/real-estate.d.ts +7 -0
- package/dist/korea/real-estate.js +72 -5
- package/dist/korea/real-estate.js.map +1 -1
- package/dist/korea/stock.js +49 -20
- package/dist/korea/stock.js.map +1 -1
- package/dist/korea/weather.js +5 -0
- package/dist/korea/weather.js.map +1 -1
- package/dist/mcp-server.js +1 -4
- package/dist/mcp-server.js.map +1 -1
- package/dist/smartcrawl.js +14 -0
- package/dist/smartcrawl.js.map +1 -1
- package/dist/smartfetch/provider-policy.d.ts +1 -0
- package/dist/smartfetch/provider-policy.js +10 -1
- package/dist/smartfetch/provider-policy.js.map +1 -1
- package/dist/smartfetch/providers/naver-blog.js +76 -17
- package/dist/smartfetch/providers/naver-blog.js.map +1 -1
- package/dist/smartfetch/providers/naver-cafe.js +26 -7
- package/dist/smartfetch/providers/naver-cafe.js.map +1 -1
- package/dist/smartfetch/providers/wikidocs.js +33 -11
- package/dist/smartfetch/providers/wikidocs.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* This tool downloads a regional CSV on first call (cached in memory for the session).
|
|
9
9
|
* CSV is ~2-5 MB per region; nationwide is ~15 MB.
|
|
10
10
|
*/
|
|
11
|
-
import { httpGet } from "./proxy-client.js";
|
|
11
|
+
import { formatError, httpGet, httpGetDecodedText } from "./proxy-client.js";
|
|
12
12
|
const CSV_BASE = "https://file.localdata.go.kr/file/download/public_restroom_info";
|
|
13
|
+
const LOCALDATA_REFERER = "https://www.localdata.go.kr/";
|
|
13
14
|
const KAKAO_SEARCH = "https://dapi.kakao.com/v2/local/search/keyword.json";
|
|
14
15
|
// In-memory cache: regionCode → parsed rows
|
|
15
16
|
const csvCache = new Map();
|
|
@@ -57,20 +58,59 @@ function parseCSV(text) {
|
|
|
57
58
|
}
|
|
58
59
|
return rows;
|
|
59
60
|
}
|
|
61
|
+
function compactErrorMessage(message) {
|
|
62
|
+
return message
|
|
63
|
+
.replace(/<[^>]+>/g, " ")
|
|
64
|
+
.replace(/\s+/g, " ")
|
|
65
|
+
.trim()
|
|
66
|
+
.slice(0, 180);
|
|
67
|
+
}
|
|
68
|
+
function coordinateUnavailableResult(location, radiusKm) {
|
|
69
|
+
return {
|
|
70
|
+
source: "public-restroom",
|
|
71
|
+
location_hint: location,
|
|
72
|
+
radius_km: radiusKm,
|
|
73
|
+
total: 0,
|
|
74
|
+
items: [],
|
|
75
|
+
warning: "좌표를 확인할 수 없습니다. lat/lon을 직접 입력하거나 KAKAO_REST_API_KEY를 설정해 주세요.",
|
|
76
|
+
data_error: {
|
|
77
|
+
code: "coordinate_unavailable",
|
|
78
|
+
status: 0,
|
|
79
|
+
message: "좌표 확인 실패: lat/lon 입력 또는 KAKAO_REST_API_KEY 설정이 필요합니다.",
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
60
83
|
async function fetchCSV(regionCode, timeoutMs = 30000) {
|
|
61
84
|
const cacheKey = regionCode ?? "nationwide";
|
|
62
85
|
if (csvCache.has(cacheKey))
|
|
63
|
-
return csvCache.get(cacheKey);
|
|
86
|
+
return { rows: csvCache.get(cacheKey) };
|
|
64
87
|
const url = regionCode
|
|
65
|
-
? `${CSV_BASE}/info?
|
|
88
|
+
? `${CSV_BASE}/info?localCode=${regionCode}`
|
|
66
89
|
: `${CSV_BASE}/info`;
|
|
67
|
-
const result = await
|
|
68
|
-
if (!result.ok)
|
|
69
|
-
return
|
|
70
|
-
|
|
71
|
-
|
|
90
|
+
const result = await httpGetDecodedText(url, { accept: "text/csv, text/plain, */*", referer: LOCALDATA_REFERER }, timeoutMs, ["utf-8", "euc-kr"]);
|
|
91
|
+
if (!result.ok) {
|
|
92
|
+
return {
|
|
93
|
+
rows: [],
|
|
94
|
+
error: {
|
|
95
|
+
code: result.code,
|
|
96
|
+
status: result.status,
|
|
97
|
+
message: compactErrorMessage(formatError(result)),
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
const rows = parseCSV(result.data);
|
|
102
|
+
if (rows.length === 0) {
|
|
103
|
+
return {
|
|
104
|
+
rows,
|
|
105
|
+
error: {
|
|
106
|
+
code: "empty_csv",
|
|
107
|
+
status: 0,
|
|
108
|
+
message: "CSV response did not contain parseable restroom rows",
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
72
112
|
csvCache.set(cacheKey, rows);
|
|
73
|
-
return rows;
|
|
113
|
+
return { rows };
|
|
74
114
|
}
|
|
75
115
|
async function resolveLocationCoords(location, kakaoApiKey, timeoutMs = 10000) {
|
|
76
116
|
const key = kakaoApiKey ?? process.env["KAKAO_REST_API_KEY"] ?? "";
|
|
@@ -128,13 +168,24 @@ export async function runPublicRestroom(options) {
|
|
|
128
168
|
anchorLon = coords.lon;
|
|
129
169
|
}
|
|
130
170
|
else {
|
|
131
|
-
return
|
|
171
|
+
return coordinateUnavailableResult(location, radiusKm);
|
|
132
172
|
}
|
|
133
173
|
}
|
|
134
174
|
const regionCode = inferRegionCode(location);
|
|
135
|
-
const
|
|
175
|
+
const csv = await fetchCSV(regionCode, timeoutMs);
|
|
176
|
+
const rows = csv.rows;
|
|
136
177
|
if (rows.length === 0) {
|
|
137
|
-
return {
|
|
178
|
+
return {
|
|
179
|
+
source: "public-restroom",
|
|
180
|
+
location_hint: location,
|
|
181
|
+
anchor_lat: anchorLat,
|
|
182
|
+
anchor_lon: anchorLon,
|
|
183
|
+
radius_km: radiusKm,
|
|
184
|
+
total: 0,
|
|
185
|
+
items: [],
|
|
186
|
+
warning: "공중화장실 데이터 원본을 불러오지 못해 근처 결과를 계산할 수 없습니다. 잠시 후 다시 시도하세요.",
|
|
187
|
+
...(csv.error ? { data_error: csv.error } : {}),
|
|
188
|
+
};
|
|
138
189
|
}
|
|
139
190
|
const radiusM = radiusKm * 1000;
|
|
140
191
|
const nearby = rows
|
|
@@ -162,6 +213,14 @@ export function renderPublicRestroom(result) {
|
|
|
162
213
|
`검색 반경: ${result.radius_km}km | ${result.total}개 발견`,
|
|
163
214
|
"",
|
|
164
215
|
];
|
|
216
|
+
if (result.warning) {
|
|
217
|
+
lines.push(result.warning);
|
|
218
|
+
if (result.data_error) {
|
|
219
|
+
const status = result.data_error.status ? ` / HTTP ${result.data_error.status}` : "";
|
|
220
|
+
lines.push(`진단: ${result.data_error.code}${status} - ${result.data_error.message}`);
|
|
221
|
+
}
|
|
222
|
+
return lines.join("\n");
|
|
223
|
+
}
|
|
165
224
|
if (result.total === 0) {
|
|
166
225
|
lines.push(`반경 ${result.radius_km}km 내 공중화장실이 없습니다. 반경을 늘려서 다시 시도해보세요.`);
|
|
167
226
|
return lines.join("\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-restroom.js","sourceRoot":"","sources":["../../src/korea/public-restroom.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"public-restroom.js","sourceRoot":"","sources":["../../src/korea/public-restroom.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,11 @@ export type RealEstateSummary = {
|
|
|
27
27
|
median_deposit_10k?: number;
|
|
28
28
|
monthly_rent_avg_10k?: number;
|
|
29
29
|
};
|
|
30
|
+
export type RealEstateDataError = {
|
|
31
|
+
code: string;
|
|
32
|
+
status: number;
|
|
33
|
+
message: string;
|
|
34
|
+
};
|
|
30
35
|
export type RealEstateResult = {
|
|
31
36
|
source: "real-estate";
|
|
32
37
|
action: "region-code" | "transactions";
|
|
@@ -37,6 +42,8 @@ export type RealEstateResult = {
|
|
|
37
42
|
region_codes?: RegionCode[];
|
|
38
43
|
items?: RealEstateDeal[];
|
|
39
44
|
summary?: RealEstateSummary;
|
|
45
|
+
warning?: string;
|
|
46
|
+
data_error?: RealEstateDataError;
|
|
40
47
|
};
|
|
41
48
|
export type AssetType = "apartment" | "officetel" | "villa" | "single-house" | "commercial";
|
|
42
49
|
export type DealType = "trade" | "rent";
|
|
@@ -8,14 +8,46 @@ function prevMonthYmd() {
|
|
|
8
8
|
d.setMonth(d.getMonth() - 1);
|
|
9
9
|
return d.toISOString().slice(0, 7).replace("-", "");
|
|
10
10
|
}
|
|
11
|
+
function compactDiagnosticMessage(message) {
|
|
12
|
+
try {
|
|
13
|
+
const parsed = JSON.parse(message);
|
|
14
|
+
if (parsed && typeof parsed === "object" && "message" in parsed) {
|
|
15
|
+
const nested = parsed.message;
|
|
16
|
+
if (typeof nested === "string" && nested.trim())
|
|
17
|
+
return compactDiagnosticMessage(nested);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// Fall through to generic compaction.
|
|
22
|
+
}
|
|
23
|
+
return message
|
|
24
|
+
.replace(/<[^>]+>/g, " ")
|
|
25
|
+
.replace(/\s+/g, " ")
|
|
26
|
+
.trim()
|
|
27
|
+
.slice(0, 220);
|
|
28
|
+
}
|
|
29
|
+
function dataErrorResult(result) {
|
|
30
|
+
return {
|
|
31
|
+
code: result.code,
|
|
32
|
+
status: result.status,
|
|
33
|
+
message: compactDiagnosticMessage(result.message),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
11
36
|
export async function runRealEstate(options) {
|
|
12
37
|
const { action, q, lawd_cd, asset_type = "apartment", deal_type = "trade", deal_ymd, num_of_rows = 100, timeoutMs = 20000 } = options;
|
|
13
38
|
if (action === "region-code") {
|
|
14
39
|
if (!q)
|
|
15
40
|
return { ok: false, message: "지역명(q)이 필요합니다." };
|
|
16
41
|
const result = await proxyGet("/v1/real-estate/region-code", { q }, timeoutMs);
|
|
17
|
-
if (!result.ok)
|
|
18
|
-
return {
|
|
42
|
+
if (!result.ok) {
|
|
43
|
+
return {
|
|
44
|
+
source: "real-estate",
|
|
45
|
+
action: "region-code",
|
|
46
|
+
region_codes: [],
|
|
47
|
+
warning: "부동산 지역코드 데이터를 지금 불러올 수 없습니다. 잠시 후 다시 시도하세요.",
|
|
48
|
+
data_error: dataErrorResult(result),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
19
51
|
const regions = (result.data["results"] ?? []);
|
|
20
52
|
return { source: "real-estate", action: "region-code", region_codes: regions };
|
|
21
53
|
}
|
|
@@ -25,8 +57,20 @@ export async function runRealEstate(options) {
|
|
|
25
57
|
const ymd = deal_ymd || prevMonthYmd();
|
|
26
58
|
const path = `/v1/real-estate/${asset_type}/${deal_type}`;
|
|
27
59
|
const result = await proxyGet(path, { lawd_cd, deal_ymd: ymd, num_of_rows: String(num_of_rows) }, timeoutMs);
|
|
28
|
-
if (!result.ok)
|
|
29
|
-
return {
|
|
60
|
+
if (!result.ok) {
|
|
61
|
+
return {
|
|
62
|
+
source: "real-estate",
|
|
63
|
+
action: "transactions",
|
|
64
|
+
asset_type,
|
|
65
|
+
deal_type,
|
|
66
|
+
lawd_cd,
|
|
67
|
+
deal_ymd: ymd,
|
|
68
|
+
items: [],
|
|
69
|
+
summary: { sample_count: 0 },
|
|
70
|
+
warning: "부동산 실거래가 데이터를 지금 불러올 수 없습니다. 잠시 후 다시 시도하세요.",
|
|
71
|
+
data_error: dataErrorResult(result),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
30
74
|
const d = result.data;
|
|
31
75
|
const items = (d["items"] ?? []);
|
|
32
76
|
const summary = d["summary"];
|
|
@@ -55,6 +99,15 @@ function formatPrice(won10k) {
|
|
|
55
99
|
export function renderRealEstate(result) {
|
|
56
100
|
if (result.action === "region-code") {
|
|
57
101
|
const lines = ["# 지역코드 조회", ""];
|
|
102
|
+
if (result.warning) {
|
|
103
|
+
lines.push(result.warning);
|
|
104
|
+
lines.push("k-skill-proxy 또는 국토교통부 상류 서비스가 호출 한도나 일시적인 프록시 오류를 반환했을 수 있습니다.");
|
|
105
|
+
if (result.data_error) {
|
|
106
|
+
const status = result.data_error.status ? ` / HTTP ${result.data_error.status}` : "";
|
|
107
|
+
lines.push(`진단: ${result.data_error.code}${status} - ${result.data_error.message}`);
|
|
108
|
+
}
|
|
109
|
+
return lines.join("\n");
|
|
110
|
+
}
|
|
58
111
|
for (const r of result.region_codes ?? []) {
|
|
59
112
|
lines.push(`- **${r.name}**: \`${r.lawd_cd}\``);
|
|
60
113
|
}
|
|
@@ -69,6 +122,15 @@ export function renderRealEstate(result) {
|
|
|
69
122
|
`기준: ${result.deal_ymd}`,
|
|
70
123
|
"",
|
|
71
124
|
];
|
|
125
|
+
if (result.warning) {
|
|
126
|
+
lines.push(result.warning);
|
|
127
|
+
lines.push("k-skill-proxy 또는 국토교통부 상류 서비스가 호출 한도나 일시적인 프록시 오류를 반환했을 수 있습니다.");
|
|
128
|
+
if (result.data_error) {
|
|
129
|
+
const status = result.data_error.status ? ` / HTTP ${result.data_error.status}` : "";
|
|
130
|
+
lines.push(`진단: ${result.data_error.code}${status} - ${result.data_error.message}`);
|
|
131
|
+
}
|
|
132
|
+
lines.push("");
|
|
133
|
+
}
|
|
72
134
|
if (s) {
|
|
73
135
|
lines.push("## 요약");
|
|
74
136
|
lines.push(`- 거래건수: ${s.sample_count}건`);
|
|
@@ -85,7 +147,12 @@ export function renderRealEstate(result) {
|
|
|
85
147
|
lines.push("");
|
|
86
148
|
}
|
|
87
149
|
lines.push("## 상위 거래");
|
|
88
|
-
|
|
150
|
+
const items = result.items ?? [];
|
|
151
|
+
if (items.length === 0) {
|
|
152
|
+
lines.push("조회된 거래가 없습니다.");
|
|
153
|
+
lines.push("법정동코드, 기준월, 주택유형/거래유형을 확인하거나 다른 월로 다시 조회하세요.");
|
|
154
|
+
}
|
|
155
|
+
for (const item of items.slice(0, 10)) {
|
|
89
156
|
const price = item.price_10k !== undefined ? formatPrice(item.price_10k) : item.deposit_10k !== undefined ? `보증금 ${formatPrice(item.deposit_10k)}` : "";
|
|
90
157
|
lines.push(`- ${item.name ?? "?"} ${item.area_m2 ?? "?"}㎡ ${item.floor ?? "?"}층 ${price} (${item.deal_date ?? "?"})`);
|
|
91
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-estate.js","sourceRoot":"","sources":["../../src/korea/real-estate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"real-estate.js","sourceRoot":"","sources":["../../src/korea/real-estate.ts"],"names":[],"mappings":"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"}
|
package/dist/korea/stock.js
CHANGED
|
@@ -8,45 +8,74 @@ function todayKst() {
|
|
|
8
8
|
const kst = new Date(now.getTime() + 9 * 60 * 60 * 1000);
|
|
9
9
|
return kst.toISOString().slice(0, 10).replace(/-/g, "");
|
|
10
10
|
}
|
|
11
|
+
function previousDate(date, daysAgo) {
|
|
12
|
+
const year = Number(date.slice(0, 4));
|
|
13
|
+
const month = Number(date.slice(4, 6));
|
|
14
|
+
const day = Number(date.slice(6, 8));
|
|
15
|
+
const utc = new Date(Date.UTC(year, month - 1, day));
|
|
16
|
+
utc.setUTCDate(utc.getUTCDate() - daysAgo);
|
|
17
|
+
return utc.toISOString().slice(0, 10).replace(/-/g, "");
|
|
18
|
+
}
|
|
19
|
+
function candidateBaseDates(baseDate, explicit) {
|
|
20
|
+
if (explicit)
|
|
21
|
+
return [baseDate];
|
|
22
|
+
return Array.from({ length: 8 }, (_, index) => previousDate(baseDate, index));
|
|
23
|
+
}
|
|
11
24
|
export async function runStock(options) {
|
|
12
25
|
const { action, q, market, code, basDate, limit = 10, timeoutMs = 15000 } = options;
|
|
13
26
|
const bas_dd = basDate || todayKst();
|
|
27
|
+
const baseDates = candidateBaseDates(bas_dd, Boolean(basDate));
|
|
14
28
|
if (action === "search") {
|
|
15
29
|
if (!q)
|
|
16
30
|
return { ok: false, message: "검색어(q)가 필요합니다." };
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
31
|
+
let items = [];
|
|
32
|
+
for (const date of baseDates) {
|
|
33
|
+
const result = await proxyGet("/v1/korean-stock/search", { q, bas_dd: date, limit: String(limit) }, timeoutMs);
|
|
34
|
+
if (!result.ok)
|
|
35
|
+
return { ok: false, message: `Stock search failed: ${result.message}` };
|
|
36
|
+
items = (result.data["items"] ?? []);
|
|
37
|
+
if (items.length > 0)
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
21
40
|
return { source: "korean-stock", action: "search", query: q, items };
|
|
22
41
|
}
|
|
23
42
|
if (action === "base-info") {
|
|
24
43
|
if (!market || !code)
|
|
25
44
|
return { ok: false, message: "market과 code가 필요합니다." };
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
45
|
+
for (const date of baseDates) {
|
|
46
|
+
const result = await proxyGet("/v1/korean-stock/base-info", { market, code, bas_dd: date }, timeoutMs);
|
|
47
|
+
if (!result.ok)
|
|
48
|
+
return { ok: false, message: `Stock base-info failed: ${result.message}` };
|
|
49
|
+
const item = result.data["item"];
|
|
50
|
+
if (item)
|
|
51
|
+
return { source: "korean-stock", action: "base-info", item };
|
|
52
|
+
}
|
|
53
|
+
return { ok: false, message: "종목 정보가 없습니다." };
|
|
33
54
|
}
|
|
34
55
|
// trade-info
|
|
35
56
|
if (!market || !code)
|
|
36
57
|
return { ok: false, message: "market과 code가 필요합니다." };
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
58
|
+
for (const date of baseDates) {
|
|
59
|
+
const result = await proxyGet("/v1/korean-stock/trade-info", { market, code, bas_dd: date }, timeoutMs);
|
|
60
|
+
if (!result.ok)
|
|
61
|
+
return { ok: false, message: `Stock trade-info failed: ${result.message}` };
|
|
62
|
+
const item = result.data["item"];
|
|
63
|
+
if (item)
|
|
64
|
+
return { source: "korean-stock", action: "trade-info", item };
|
|
65
|
+
}
|
|
66
|
+
return { ok: false, message: `해당 날짜(${bas_dd}) 거래 데이터가 없습니다.` };
|
|
44
67
|
}
|
|
45
68
|
export function renderStock(result) {
|
|
46
69
|
if (result.action === "search") {
|
|
47
70
|
const lines = [`# 종목 검색 — "${result.query}"`, ""];
|
|
48
|
-
|
|
49
|
-
lines.push(
|
|
71
|
+
if (result.items.length === 0) {
|
|
72
|
+
lines.push("일치하는 KRX 상장 종목을 찾지 못했습니다.");
|
|
73
|
+
lines.push("철자나 종목코드를 확인하거나 다른 검색어로 다시 시도하세요.");
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
for (const item of result.items) {
|
|
77
|
+
lines.push(`- **${item.name}** (${item.code}) — ${item.market}`);
|
|
78
|
+
}
|
|
50
79
|
}
|
|
51
80
|
lines.push("\n_KRX 공식 데이터 기준 / 투자 조언 아님_");
|
|
52
81
|
return lines.join("\n");
|
package/dist/korea/stock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stock.js","sourceRoot":"","sources":["../../src/korea/stock.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAsC5C,SAAS,QAAQ;IACf,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACxD,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAQ9B;IACC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IACnF,MAAM,MAAM,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"stock.js","sourceRoot":"","sources":["../../src/korea/stock.ts"],"names":[],"mappings":"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"}
|
package/dist/korea/weather.js
CHANGED
|
@@ -87,6 +87,11 @@ export function renderWeather(result) {
|
|
|
87
87
|
}
|
|
88
88
|
lines.push("");
|
|
89
89
|
}
|
|
90
|
+
else if (result.items.length === 0) {
|
|
91
|
+
lines.push("요청한 좌표/기준시각에 대한 예보 항목이 반환되지 않았습니다.");
|
|
92
|
+
lines.push("nx/ny 또는 base_date/base_time을 확인하거나 잠시 후 다시 시도하세요.");
|
|
93
|
+
lines.push("");
|
|
94
|
+
}
|
|
90
95
|
return lines.join("\n");
|
|
91
96
|
}
|
|
92
97
|
//# sourceMappingURL=weather.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weather.js","sourceRoot":"","sources":["../../src/korea/weather.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"weather.js","sourceRoot":"","sources":["../../src/korea/weather.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAsB5C,MAAM,eAAe,GAA2B;IAC9C,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,OAAO;IACZ,GAAG,EAAE,OAAO;CACb,CAAA;AAED,MAAM,SAAS,GAA2B,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;AAC/E,MAAM,SAAS,GAA2B,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;AAEnG,SAAS,WAAW,CAAC,QAAgB,EAAE,KAAa;IAClD,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAA;IACxD,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAA;IACxD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAQhC;IACC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAE3E,MAAM,MAAM,GAA2B,EAAE,CAAA;IACzC,IAAI,EAAE,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IAC/C,IAAI,EAAE,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;IAC/C,IAAI,GAAG,KAAK,SAAS;QAAE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IAClD,IAAI,GAAG,KAAK,SAAS;QAAE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IAClD,IAAI,QAAQ;QAAE,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAA;IAC3C,IAAI,QAAQ;QAAE,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAA;IAE3C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAA0B,4BAA4B,EAAE,MAAM,EAAE,SAAS,CAAC,CAAA;IACvG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,MAAM,CAAC,OAAO,EAAE,EAAE,CAAA;IAC3E,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;IACxB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAA8B,CAAA;IACnF,MAAM,KAAK,GAAkB,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACjD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QAC5D,OAAO;YACL,QAAQ,EAAE,GAAG;YACb,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACtE,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACtE,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC;SAC7B,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,0CAA0C;IAC1C,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACtG,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACzD,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QACvE,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,eAAe;QACvB,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC9D,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAC9D,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,KAAK;QACL,OAAO;KACR,CAAA;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,GAAG,CAAA;IAC/G,MAAM,KAAK,GAAG,CAAC,aAAa,GAAG,EAAE,EAAE,OAAO,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;IACrF,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,EAAE,CAAC,CAAA;QAClC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;SAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;QAChD,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAA;QAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
|
package/dist/mcp-server.js
CHANGED
|
@@ -573,7 +573,7 @@ export function createSmartWebServer(version, runtime) {
|
|
|
573
573
|
},
|
|
574
574
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
575
575
|
}, async ({ location, lat, lon, radius_km, limit, timeout_ms }) => {
|
|
576
|
-
const
|
|
576
|
+
const r = await runPublicRestroom({
|
|
577
577
|
location,
|
|
578
578
|
...(lat === undefined ? {} : { lat }),
|
|
579
579
|
...(lon === undefined ? {} : { lon }),
|
|
@@ -581,9 +581,6 @@ export function createSmartWebServer(version, runtime) {
|
|
|
581
581
|
...(limit === undefined ? {} : { limit }),
|
|
582
582
|
...(timeout_ms === undefined ? {} : { timeoutMs: timeout_ms }),
|
|
583
583
|
});
|
|
584
|
-
if ("ok" in result && result.ok === false)
|
|
585
|
-
throw new Error(result.message);
|
|
586
|
-
const r = result;
|
|
587
584
|
return { structuredContent: r, content: [{ type: "text", text: renderPublicRestroom(r) }] };
|
|
588
585
|
});
|
|
589
586
|
return server;
|