lit-forge-mcp 0.11.0 → 0.13.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.
Files changed (28) hide show
  1. package/README.md +8 -2
  2. package/dist/lib/__tests__/economic-release-pulse.test.js +103 -1
  3. package/dist/lib/__tests__/economic-release-pulse.test.js.map +1 -1
  4. package/dist/lib/__tests__/us-macro-latest.test.d.ts +1 -0
  5. package/dist/lib/__tests__/us-macro-latest.test.js +166 -0
  6. package/dist/lib/__tests__/us-macro-latest.test.js.map +1 -0
  7. package/dist/lib/economic-release-pulse/adapters/frb.d.ts +3 -0
  8. package/dist/lib/economic-release-pulse/adapters/frb.js +64 -0
  9. package/dist/lib/economic-release-pulse/adapters/frb.js.map +1 -0
  10. package/dist/lib/economic-release-pulse/adapters/nyfed.d.ts +3 -0
  11. package/dist/lib/economic-release-pulse/adapters/nyfed.js +68 -0
  12. package/dist/lib/economic-release-pulse/adapters/nyfed.js.map +1 -0
  13. package/dist/lib/economic-release-pulse/pulse.js +10 -2
  14. package/dist/lib/economic-release-pulse/pulse.js.map +1 -1
  15. package/dist/lib/economic-release-pulse/util.d.ts +5 -0
  16. package/dist/lib/economic-release-pulse/util.js +39 -0
  17. package/dist/lib/economic-release-pulse/util.js.map +1 -1
  18. package/dist/lib/us-macro-latest.d.ts +44 -0
  19. package/dist/lib/us-macro-latest.js +159 -0
  20. package/dist/lib/us-macro-latest.js.map +1 -0
  21. package/dist/tools/get-economic-release-pulse.js +12 -10
  22. package/dist/tools/get-economic-release-pulse.js.map +1 -1
  23. package/dist/tools/get-us-macro-latest.d.ts +2 -0
  24. package/dist/tools/get-us-macro-latest.js +53 -0
  25. package/dist/tools/get-us-macro-latest.js.map +1 -0
  26. package/dist/tools/index.js +3 -0
  27. package/dist/tools/index.js.map +1 -1
  28. package/package.json +1 -1
package/README.md CHANGED
@@ -10,7 +10,7 @@ Claude Desktop / Claude Code / Cursor など、MCP に対応した任意の AI
10
10
 
11
11
  > **v0.2.0 で「金融・個人投資家特化」にピボット**、**v0.3.0 で「毎朝の市況チェック」系 3 ツールを追加**、**v0.4.0 で銘柄数 9 → 28 に拡大 + 5 つの分析ツール追加**、**v0.6.0 で配当履歴・アナリストコンセンサス・ファンダメンタル指標を追加**、**v0.7.0 で経済イベントに地政学カテゴリ(要人訪問・首脳会談)と複数日イベント(endDate)対応を追加**、**v0.8.0 で地政学イベント専用ツール `get_geopolitical_events` を新設**(首脳会談・国際サミット・主要国選挙・地政学リスクの 4 サブカテゴリを market implications 付きで返す + 一次ソース突合の verify インフラ整備)、**v0.9.0 で地政学ツールを 2 系統に分離・リアルタイム化**: 旧 `get_geopolitical_events` を `get_geopolitical_calendar` にリネーム(用途を確定スケジュール専用に明確化)、新ツール `get_geopolitical_pulse` を追加(BBC World / Al Jazeera / Google News の主要通信社 RSS を集約し、進行中の地政学リスク・突発イベントをリアルタイムで返す)しました。
12
12
 
13
- ## 提供ツール(16 種)
13
+ ## 提供ツール(17 種)
14
14
 
15
15
  ### 個人資産形成プランナー(純関数、外部 API 不要)
16
16
 
@@ -48,6 +48,12 @@ Claude Desktop / Claude Code / Cursor など、MCP に対応した任意の AI
48
48
  | `get_dividend_history` | 個別株・ETF の過去 N 年の配当履歴と暦年合計を取得(`years`: 1/3/5/10、既定 5)。NISA 成長投資枠で配当銘柄を検討する一次情報として使用 |
49
49
  | `get_analyst_consensus` | 個別株のアナリスト推奨レーティング(強気買い〜強気売り)・目標株価(平均/高値/安値)・月別推奨内訳を取得。米国株は coverage が厚く、TSE 銘柄や ETF は欠損しやすい |
50
50
 
51
+ ### 米マクロ最新値(v0.13.0 新規)
52
+
53
+ | ツール名 | 説明 |
54
+ |---|---|
55
+ | `get_us_macro_latest` | **米マクロ三大指標**(雇用統計・CPI・PPI)+ 失業率の最新発表値と前月比・前年同月比を BLS Public Data API v2 から取得(API key 不要・無認証)。`get_economic_release_pulse` が答える「次にいつ発表されるか」に対し、本ツールは「今の数字はいくつか」を答える |
56
+
51
57
  > ⚠ **HTTP 通信について**: 市況・分析・個別株系ツールは **Yahoo Finance API(query1.finance.yahoo.com / query2.finance.yahoo.com)** へ HTTPS リクエストを送信します。実行 PC のネットワークから外部に出る通信が発生する点にご留意ください。データは約 1 時間遅れの参考値で、**投資助言ではなく情報集約**として提供しています。
52
58
  >
53
59
  > v0.6.0 で `get_quote includeFundamentals=true` / `get_dividend_history` / `get_analyst_consensus` の 3 ルートが Yahoo Finance v10 quoteSummary(crumb 認証あり)を経由するため、`yahoo-finance2` パッケージを依存に追加しました。
@@ -113,7 +119,7 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":
113
119
  {"jsonrpc":"2.0","id":2,"method":"tools/list"}' | node dist/index.js
114
120
  ```
115
121
 
116
- `tools/list` のレスポンスに 15 ツールが並べば成功です。
122
+ `tools/list` のレスポンスに 17 ツールが並べば成功です。
117
123
 
118
124
  ## 使用例
119
125
 
@@ -2,7 +2,9 @@
2
2
  // ネットワーク fetch は CI で不安定なため、パーサと JST ヘルパのみ対象。
3
3
  import { describe, it, expect } from "vitest";
4
4
  import { parseCaoDate, parseCaoTime, parseCaoGdpTable, } from "../economic-release-pulse/adapters/cao.js";
5
- import { jstParts, jstToday, jstDatePlus } from "../economic-release-pulse/util.js";
5
+ import { parseEmpireStateTable } from "../economic-release-pulse/adapters/nyfed.js";
6
+ import { parseG17Releases } from "../economic-release-pulse/adapters/frb.js";
7
+ import { jstParts, jstToday, jstDatePlus, isUsEasternDst, etToJst, } from "../economic-release-pulse/util.js";
6
8
  describe("parseCaoDate", () => {
7
9
  it("和暦括弧・曜日付きの内閣府形式をパースする", () => {
8
10
  expect(parseCaoDate("2026(令和8)年5月19日(火)")).toBe("2026-05-19");
@@ -99,4 +101,104 @@ describe("jstParts / jstToday / jstDatePlus", () => {
99
101
  expect(jstDatePlus(0, new Date("2026-05-14T15:00:00Z"))).toBe("2026-05-15");
100
102
  });
101
103
  });
104
+ describe("isUsEasternDst / etToJst", () => {
105
+ it("夏(DST 期間)と冬(標準時)を判定する", () => {
106
+ expect(isUsEasternDst("2026-05-15")).toBe(true);
107
+ expect(isUsEasternDst("2026-07-04")).toBe(true);
108
+ expect(isUsEasternDst("2026-01-15")).toBe(false);
109
+ expect(isUsEasternDst("2026-12-25")).toBe(false);
110
+ });
111
+ it("ET 午前を JST 夜(同日)に変換する — DST 期間は +13h", () => {
112
+ expect(etToJst("2026-05-15", "08:30")).toEqual({
113
+ date: "2026-05-15",
114
+ time: "21:30",
115
+ });
116
+ expect(etToJst("2026-05-15", "09:15")).toEqual({
117
+ date: "2026-05-15",
118
+ time: "22:15",
119
+ });
120
+ });
121
+ it("ET 午前を JST 夜(同日)に変換する — 標準時は +14h", () => {
122
+ expect(etToJst("2026-01-15", "08:30")).toEqual({
123
+ date: "2026-01-15",
124
+ time: "22:30",
125
+ });
126
+ expect(etToJst("2026-01-15", "09:15")).toEqual({
127
+ date: "2026-01-15",
128
+ time: "23:15",
129
+ });
130
+ });
131
+ });
132
+ describe("parseEmpireStateTable", () => {
133
+ // NY 連銀 overview ページの greyborder テーブル実構造を模した fixture。
134
+ const FIXTURE = `
135
+ <table width="100%" class="greyborder" border="0">
136
+ <tbody>
137
+ <tr class="tdtblhdr">
138
+ <td class="tdhdrcol" style="width: 105px;"><div>JAN</div></td>
139
+ <td class="tdhdrcolR" style="width: 105px;"><div>FEB </div></td>
140
+ </tr>
141
+ <tr valign="top">
142
+ <td class="dirCol" style="width: 105px; height: 50px;"><div>15<a href="/medialibrary/media/survey/empire/empire2026/esms_2026_01.pdf?sc_lang=en">&nbsp;report</a></div></td>
143
+ <td class="dirCol" style="width: 105px; height: 50px;"><div>17<a href="/medialibrary/media/survey/empire/empire2026/esms_2026_02.pdf">&nbsp;report</a></div></td>
144
+ </tr>
145
+ <tr class="tdtblhdr">
146
+ <td class="tdhdrcol" style="width: 105px;"><div>MAY</div></td>
147
+ </tr>
148
+ <tr valign="top">
149
+ <td class="dirCol" style="width: 105px; height: 50px;"><div>15<a href="/medialibrary/media/survey/empire/empire2026/esms_2026_05.pdf">&nbsp;report</a></div></td>
150
+ </tr>
151
+ </tbody>
152
+ </table>`;
153
+ it("月名ヘッダと日付セルを zip して ReleaseEvent に変換する", () => {
154
+ const events = parseEmpireStateTable(FIXTURE);
155
+ expect(events).toHaveLength(3);
156
+ // JAN 15(標準時)→ 22:30 JST 同日
157
+ expect(events[0]).toEqual({
158
+ date: "2026-01-15",
159
+ time: "22:30",
160
+ country: "US",
161
+ name: "米 NY 連銀製造業景気指数",
162
+ source: "NY 連銀",
163
+ sourceUrl: "https://www.newyorkfed.org/survey/empire/empiresurvey_overview.html",
164
+ });
165
+ expect(events[1].date).toBe("2026-02-17");
166
+ // MAY 15(DST 期間)→ 21:30 JST 同日
167
+ expect(events[2]).toMatchObject({ date: "2026-05-15", time: "21:30" });
168
+ });
169
+ it("greyborder テーブルが無ければ空配列", () => {
170
+ expect(parseEmpireStateTable("<html>no table</html>")).toEqual([]);
171
+ });
172
+ });
173
+ describe("parseG17Releases", () => {
174
+ // FRB G.17 default ページの 2026 リリース節を模した fixture。
175
+ // 「May 15」と「,」の間に <a>(most recent monthly)</a> が挟まるケースを含む。
176
+ const FIXTURE = `
177
+ <h5>The monthly G.17 release will be released at 9:15 a.m. on these dates:</h5>
178
+ <p><strong>2026:</strong>
179
+ January&nbsp;16,
180
+ February&nbsp;18,
181
+ May&nbsp;15 <a href="Current/default.htm">(most recent monthly)</a>,
182
+ and December&nbsp;16.
183
+ </p>`;
184
+ it("年ブロックから月名+日を全抽出して ReleaseEvent に変換する", () => {
185
+ const events = parseG17Releases(FIXTURE);
186
+ expect(events).toHaveLength(4);
187
+ // January 16(標準時)→ 23:15 JST 同日
188
+ expect(events[0]).toEqual({
189
+ date: "2026-01-16",
190
+ time: "23:15",
191
+ country: "US",
192
+ name: "米 鉱工業生産",
193
+ source: "FRB",
194
+ sourceUrl: "https://www.federalreserve.gov/releases/g17/default.htm",
195
+ });
196
+ // <a> が挟まる May 15(DST 期間)も拾える → 22:15 JST 同日
197
+ expect(events[2]).toMatchObject({ date: "2026-05-15", time: "22:15" });
198
+ expect(events[3].date).toBe("2026-12-16");
199
+ });
200
+ it("該当する年ブロックが無ければ空配列", () => {
201
+ expect(parseG17Releases("<p>no schedule here</p>")).toEqual([]);
202
+ });
203
+ });
102
204
  //# sourceMappingURL=economic-release-pulse.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"economic-release-pulse.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/economic-release-pulse.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"economic-release-pulse.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/economic-release-pulse.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,166 @@
1
+ // us-macro-latest の純粋関数テスト。
2
+ // ネットワーク fetch は実 API に依存するため対象外。summarizeSeries の
3
+ // 正規化・前月比・前年比計算ロジックのみ検証する。
4
+ import { describe, it, expect } from "vitest";
5
+ import { summarizeSeries } from "../us-macro-latest.js";
6
+ const NFP_DEF = {
7
+ id: "CES0000000001",
8
+ key: "nonfarmPayrolls",
9
+ displayName: "米 雇用統計(非農業部門就業者数)",
10
+ unit: "千人",
11
+ };
12
+ const UR_DEF = {
13
+ id: "LNS14000000",
14
+ key: "unemploymentRate",
15
+ displayName: "米 失業率",
16
+ unit: "%",
17
+ };
18
+ const CPI_DEF = {
19
+ id: "CUUR0000SA0",
20
+ key: "cpi",
21
+ displayName: "米 CPI(都市部全消費者、1982-84=100)",
22
+ unit: "index",
23
+ };
24
+ // 雇用統計の data 例(新しい→古い順)。実 API レスポンスを模した最小サンプル。
25
+ const NFP_DATA = [
26
+ {
27
+ year: "2026",
28
+ period: "M04",
29
+ periodName: "April",
30
+ value: "158736",
31
+ latest: "true",
32
+ footnotes: [{ code: "P", text: "preliminary" }],
33
+ },
34
+ { year: "2026", period: "M03", periodName: "March", value: "158621", footnotes: [{}] },
35
+ { year: "2026", period: "M02", periodName: "February", value: "158436", footnotes: [{}] },
36
+ { year: "2026", period: "M01", periodName: "January", value: "158592", footnotes: [{}] },
37
+ { year: "2025", period: "M12", periodName: "December", value: "158432", footnotes: [{}] },
38
+ { year: "2025", period: "M04", periodName: "April", value: "158485", footnotes: [{}] },
39
+ ];
40
+ describe("summarizeSeries (雇用統計)", () => {
41
+ const r = summarizeSeries(NFP_DEF, NFP_DATA);
42
+ it("latest フラグの月を最新値として拾う", () => {
43
+ expect(r.latest.year).toBe(2026);
44
+ expect(r.latest.month).toBe(4);
45
+ expect(r.latest.value).toBe(158736);
46
+ });
47
+ it("preliminary フラグを保持する", () => {
48
+ expect(r.latest.preliminary).toBe(true);
49
+ });
50
+ it("前月差・前月比を正しく計算する", () => {
51
+ // 158736 - 158621 = 115、115 / 158621 ≈ 0.0725%
52
+ expect(r.monthOverMonth?.diff).toBe(115);
53
+ expect(r.monthOverMonth?.percent).toBeCloseTo(0.073, 2);
54
+ });
55
+ it("前年同月差・前年同月比を正しく計算する", () => {
56
+ // 158736 - 158485 = 251、251 / 158485 ≈ 0.158%
57
+ expect(r.yearOverYear?.diff).toBe(251);
58
+ expect(r.yearOverYear?.percent).toBeCloseTo(0.158, 2);
59
+ });
60
+ });
61
+ describe("summarizeSeries (1 月: 前月=前年 12 月)", () => {
62
+ const data = [
63
+ { year: "2026", period: "M01", periodName: "January", value: "158592", latest: "true" },
64
+ { year: "2025", period: "M12", periodName: "December", value: "158432" },
65
+ { year: "2025", period: "M01", periodName: "January", value: "158268" },
66
+ ];
67
+ const r = summarizeSeries(NFP_DEF, data);
68
+ it("前月は前年 12 月を参照する", () => {
69
+ expect(r.monthOverMonth?.diff).toBe(160);
70
+ });
71
+ it("前年同月は 2025-01 を参照する", () => {
72
+ expect(r.yearOverYear?.diff).toBe(324);
73
+ });
74
+ });
75
+ describe("summarizeSeries (失業率 %)", () => {
76
+ const data = [
77
+ { year: "2026", period: "M04", periodName: "April", value: "4.3", latest: "true" },
78
+ { year: "2026", period: "M03", periodName: "March", value: "4.3" },
79
+ { year: "2025", period: "M04", periodName: "April", value: "4.2" },
80
+ ];
81
+ const r = summarizeSeries(UR_DEF, data);
82
+ it("単位 % でも数値として扱える", () => {
83
+ expect(r.latest.value).toBe(4.3);
84
+ expect(r.monthOverMonth?.diff).toBe(0);
85
+ expect(r.yearOverYear?.diff).toBeCloseTo(0.1, 5);
86
+ });
87
+ });
88
+ describe("summarizeSeries (CPI index)", () => {
89
+ const data = [
90
+ { year: "2026", period: "M04", periodName: "April", value: "333.020", latest: "true" },
91
+ { year: "2026", period: "M03", periodName: "March", value: "332.100" },
92
+ { year: "2025", period: "M04", periodName: "April", value: "320.500" },
93
+ ];
94
+ const r = summarizeSeries(CPI_DEF, data);
95
+ it("3 桁 index 値を保持する", () => {
96
+ expect(r.latest.value).toBe(333.02);
97
+ });
98
+ it("前年同月比 % を正しく計算する", () => {
99
+ // (333.02 - 320.5) / 320.5 * 100 ≈ 3.906%
100
+ expect(r.yearOverYear?.percent).toBeCloseTo(3.906, 2);
101
+ });
102
+ });
103
+ describe("summarizeSeries (データ欠損)", () => {
104
+ it("value='-' の月は null として扱われ計算は最新値の比較相手として無視される", () => {
105
+ const data = [
106
+ { year: "2025", period: "M11", periodName: "November", value: "4.5", latest: "true" },
107
+ { year: "2025", period: "M10", periodName: "October", value: "-" }, // 政府閉鎖等で欠損
108
+ { year: "2024", period: "M11", periodName: "November", value: "4.1" },
109
+ ];
110
+ const r = summarizeSeries(UR_DEF, data);
111
+ expect(r.latest.value).toBe(4.5);
112
+ // 前月欠損なので monthOverMonth は diff=null・percent=null
113
+ expect(r.monthOverMonth?.diff).toBeNull();
114
+ expect(r.monthOverMonth?.percent).toBeNull();
115
+ // 前年同月はあるので yearOverYear は値が入る
116
+ expect(r.yearOverYear?.diff).toBeCloseTo(0.4, 5);
117
+ });
118
+ it("空 data でもエラーにならず空サマリを返す", () => {
119
+ const r = summarizeSeries(NFP_DEF, []);
120
+ expect(r.latest.value).toBeNull();
121
+ expect(r.latest.month).toBe(0);
122
+ expect(r.monthOverMonth).toBeUndefined();
123
+ expect(r.yearOverYear).toBeUndefined();
124
+ });
125
+ it("最新月の value が '-' でも latest 情報は維持する", () => {
126
+ const data = [
127
+ { year: "2026", period: "M04", periodName: "April", value: "-", latest: "true" },
128
+ ];
129
+ const r = summarizeSeries(NFP_DEF, data);
130
+ expect(r.latest.year).toBe(2026);
131
+ expect(r.latest.month).toBe(4);
132
+ expect(r.latest.value).toBeNull();
133
+ expect(r.monthOverMonth).toBeUndefined();
134
+ });
135
+ });
136
+ describe("summarizeSeries (年間平均 M13 等の除外)", () => {
137
+ it("M13(年間平均)レコードは除外され月次最新値を採用する", () => {
138
+ const data = [
139
+ // M13 が data 先頭に紛れていても latest フラグ付きの月次レコードを優先
140
+ { year: "2025", period: "M13", periodName: "Annual", value: "4.0" },
141
+ { year: "2026", period: "M04", periodName: "April", value: "4.3", latest: "true" },
142
+ { year: "2026", period: "M03", periodName: "March", value: "4.4" },
143
+ ];
144
+ const r = summarizeSeries(UR_DEF, data);
145
+ expect(r.latest.month).toBe(4);
146
+ expect(r.latest.value).toBe(4.3);
147
+ expect(r.monthOverMonth?.diff).toBeCloseTo(-0.1, 5);
148
+ });
149
+ });
150
+ describe("summarizeSeries (preliminary フラグ判定)", () => {
151
+ it("footnotes に code P が無ければ preliminary=false", () => {
152
+ const data = [
153
+ { year: "2026", period: "M03", periodName: "March", value: "158621", latest: "true", footnotes: [{}] },
154
+ ];
155
+ const r = summarizeSeries(NFP_DEF, data);
156
+ expect(r.latest.preliminary).toBe(false);
157
+ });
158
+ it("footnotes が undefined でも preliminary=false", () => {
159
+ const data = [
160
+ { year: "2026", period: "M03", periodName: "March", value: "158621", latest: "true" },
161
+ ];
162
+ const r = summarizeSeries(NFP_DEF, data);
163
+ expect(r.latest.preliminary).toBe(false);
164
+ });
165
+ });
166
+ //# sourceMappingURL=us-macro-latest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"us-macro-latest.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/us-macro-latest.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ReleaseAdapter, ReleaseEvent } from "../types.js";
2
+ export declare function parseG17Releases(html: string): ReleaseEvent[];
3
+ export declare const frbAdapter: ReleaseAdapter;
@@ -0,0 +1,64 @@
1
+ // FRB アダプタ。
2
+ // 鉱工業生産(G.17: Industrial Production and Capacity Utilization)の今後のリリース日程を
3
+ // 公式の G.17 default ページから取得する。
4
+ // https://www.federalreserve.gov/releases/g17/default.htm
5
+ // 構造: <strong>2026:</strong> の後に
6
+ // "January&nbsp;16, February&nbsp;18, ... and December&nbsp;16." のカンマ区切りテキスト。
7
+ // 途中に <a>(most recent monthly)</a> が挟まるが、月名+日の直接マッチで吸収する。
8
+ // 年は <strong> ラベルから(複数年ブロックがあれば全て拾う)。
9
+ // 依存追加を避けるため正規表現ベース。
10
+ // 注: FOMC 日程は economic-events.ts に収録済み・verify:cb で裏取り済みのため本アダプタ対象外。
11
+ import { withCache, DEFAULT_CACHE_TTL_MS } from "../cache.js";
12
+ import { etToJst, RELEASE_PULSE_UA, RELEASE_PULSE_FETCH_TIMEOUT_MS, } from "../util.js";
13
+ const FRB_G17_URL = "https://www.federalreserve.gov/releases/g17/default.htm";
14
+ // G.17 月次リリースは 9:15 AM ET 公表(ページ明記)。
15
+ const RELEASE_TIME_ET = "09:15";
16
+ const MONTH_NAME = {
17
+ January: "01", February: "02", March: "03", April: "04",
18
+ May: "05", June: "06", July: "07", August: "08",
19
+ September: "09", October: "10", November: "11", December: "12",
20
+ };
21
+ // G.17 ページ HTML から <strong>YYYY:</strong>...</p> の各年ブロックを走査し、
22
+ // 月名+日の組を全抽出して ReleaseEvent[] にする。
23
+ export function parseG17Releases(html) {
24
+ const out = [];
25
+ const blockRe = /<strong>(\d{4}):<\/strong>([\s\S]*?)<\/p>/g;
26
+ let bm;
27
+ while ((bm = blockRe.exec(html)) !== null) {
28
+ const year = bm[1];
29
+ const body = bm[2];
30
+ const pairRe = /(January|February|March|April|May|June|July|August|September|October|November|December)(?:&nbsp;|\s)+(\d{1,2})/g;
31
+ let pm;
32
+ while ((pm = pairRe.exec(body)) !== null) {
33
+ const mo = MONTH_NAME[pm[1]];
34
+ if (!mo)
35
+ continue;
36
+ const ymd = `${year}-${mo}-${pm[2].padStart(2, "0")}`;
37
+ const { date, time } = etToJst(ymd, RELEASE_TIME_ET);
38
+ out.push({
39
+ date,
40
+ time,
41
+ country: "US",
42
+ name: "米 鉱工業生産",
43
+ source: "FRB",
44
+ sourceUrl: FRB_G17_URL,
45
+ });
46
+ }
47
+ }
48
+ return out;
49
+ }
50
+ export const frbAdapter = {
51
+ key: "frb",
52
+ label: "FRB(鉱工業生産 G.17)",
53
+ fetchEvents: () => withCache("frb", DEFAULT_CACHE_TTL_MS, async () => {
54
+ const res = await fetch(FRB_G17_URL, {
55
+ headers: { "User-Agent": RELEASE_PULSE_UA, Accept: "text/html" },
56
+ signal: AbortSignal.timeout(RELEASE_PULSE_FETCH_TIMEOUT_MS),
57
+ redirect: "follow",
58
+ });
59
+ if (!res.ok)
60
+ throw new Error(`HTTP ${res.status}`);
61
+ return parseG17Releases(await res.text());
62
+ }),
63
+ };
64
+ //# sourceMappingURL=frb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frb.js","sourceRoot":"","sources":["../../../../src/lib/economic-release-pulse/adapters/frb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ReleaseAdapter, ReleaseEvent } from "../types.js";
2
+ export declare function parseEmpireStateTable(html: string): ReleaseEvent[];
3
+ export declare const nyfedAdapter: ReleaseAdapter;
@@ -0,0 +1,68 @@
1
+ // NY 連銀アダプタ。
2
+ // Empire State Manufacturing Survey(NY 連銀製造業景気指数)の今後のリリース日程を
3
+ // 公式の overview ページから取得する。
4
+ // https://www.newyorkfed.org/survey/empire/empiresurvey_overview.html
5
+ // 構造: <table class="greyborder"> に「月名ヘッダ行 + 日付行」のグリッド(3 段 × 4 か月)。
6
+ // 月ヘッダ: <td class="tdhdrcol(R)"...><div>JAN</div> が文書順に 12 個
7
+ // 日付セル: <td class="dirCol"...><div>15<a href="...empire2026/..."> が文書順に 12 個
8
+ // 年: 日付セル内の PDF href(.../empire2026/...)から抽出
9
+ // 依存追加を避けるため正規表現ベース(cao.ts / parseRss と同方針)。
10
+ import { withCache, DEFAULT_CACHE_TTL_MS } from "../cache.js";
11
+ import { etToJst, jstToday, RELEASE_PULSE_UA, RELEASE_PULSE_FETCH_TIMEOUT_MS, } from "../util.js";
12
+ const NYFED_URL = "https://www.newyorkfed.org/survey/empire/empiresurvey_overview.html";
13
+ // Empire State Manufacturing Survey は 8:30 AM ET 公表(ページ明記)。
14
+ const RELEASE_TIME_ET = "08:30";
15
+ const MONTH_ABBR = {
16
+ JAN: "01", FEB: "02", MAR: "03", APR: "04", MAY: "05", JUN: "06",
17
+ JUL: "07", AUG: "08", SEP: "09", OCT: "10", NOV: "11", DEC: "12",
18
+ };
19
+ // Empire State の overview ページ HTML から greyborder テーブルを抽出し、
20
+ // 月名ヘッダ配列と日付セル配列を文書順で zip して ReleaseEvent[] にする。
21
+ export function parseEmpireStateTable(html) {
22
+ const tableMatch = html.match(/<table[^>]*class="greyborder"[\s\S]*?<\/table>/i);
23
+ if (!tableMatch)
24
+ return [];
25
+ const inner = tableMatch[0];
26
+ const months = [
27
+ ...inner.matchAll(/class="tdhdrcol[^"]*"[^>]*>\s*<div>\s*([A-Za-z]{3})/g),
28
+ ].map((m) => m[1].toUpperCase());
29
+ const days = [
30
+ ...inner.matchAll(/class="dirCol"[^>]*>\s*<div>\s*(\d{1,2})/g),
31
+ ].map((m) => m[1]);
32
+ // 年は PDF href(.../empire2026/...)から。取れなければ現在 JST 年。
33
+ const yearMatch = inner.match(/empire(\d{4})/);
34
+ const year = yearMatch ? yearMatch[1] : jstToday().slice(0, 4);
35
+ const out = [];
36
+ const n = Math.min(months.length, days.length);
37
+ for (let i = 0; i < n; i++) {
38
+ const mo = MONTH_ABBR[months[i]];
39
+ if (!mo)
40
+ continue;
41
+ const ymd = `${year}-${mo}-${days[i].padStart(2, "0")}`;
42
+ const { date, time } = etToJst(ymd, RELEASE_TIME_ET);
43
+ out.push({
44
+ date,
45
+ time,
46
+ country: "US",
47
+ name: "米 NY 連銀製造業景気指数",
48
+ source: "NY 連銀",
49
+ sourceUrl: NYFED_URL,
50
+ });
51
+ }
52
+ return out;
53
+ }
54
+ export const nyfedAdapter = {
55
+ key: "nyfed",
56
+ label: "NY 連銀(Empire State 製造業景気指数)",
57
+ fetchEvents: () => withCache("nyfed", DEFAULT_CACHE_TTL_MS, async () => {
58
+ const res = await fetch(NYFED_URL, {
59
+ headers: { "User-Agent": RELEASE_PULSE_UA, Accept: "text/html" },
60
+ signal: AbortSignal.timeout(RELEASE_PULSE_FETCH_TIMEOUT_MS),
61
+ redirect: "follow",
62
+ });
63
+ if (!res.ok)
64
+ throw new Error(`HTTP ${res.status}`);
65
+ return parseEmpireStateTable(await res.text());
66
+ }),
67
+ };
68
+ //# sourceMappingURL=nyfed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nyfed.js","sourceRoot":"","sources":["../../../../src/lib/economic-release-pulse/adapters/nyfed.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,17 @@ import { jstToday, jstDatePlus } from "./util.js";
5
5
  import { beaAdapter } from "./adapters/bea.js";
6
6
  import { caoAdapter } from "./adapters/cao.js";
7
7
  import { bojAdapter } from "./adapters/boj.js";
8
+ import { nyfedAdapter } from "./adapters/nyfed.js";
9
+ import { frbAdapter } from "./adapters/frb.js";
8
10
  // 登録アダプタ。新ソース追加時はここに 1 行足す。
9
- // 次サイクル候補: NY 連銀(Empire State)、FRB(鉱工業生産・FOMC)、BLS、総務省統計局。
10
- const ADAPTERS = [beaAdapter, caoAdapter, bojAdapter];
11
+ // 次サイクル候補: BLS(雇用統計・CPI・PPI)、総務省統計局(日 CPI)、FOMC
12
+ const ADAPTERS = [
13
+ beaAdapter,
14
+ caoAdapter,
15
+ bojAdapter,
16
+ nyfedAdapter,
17
+ frbAdapter,
18
+ ];
11
19
  // date(YYYY-MM-DD) が [from, to] の範囲内か(文字列比較で OK)。
12
20
  function inRange(date, from, to) {
13
21
  return date >= from && date <= to;
@@ -1 +1 @@
1
- {"version":3,"file":"pulse.js","sourceRoot":"","sources":["../../../src/lib/economic-release-pulse/pulse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pulse.js","sourceRoot":"","sources":["../../../src/lib/economic-release-pulse/pulse.ts"],"names":[],"mappings":"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"}
@@ -6,3 +6,8 @@ export declare function jstToday(now?: Date): string;
6
6
  export declare function jstDatePlus(daysAhead: number, now?: Date): string;
7
7
  export declare const RELEASE_PULSE_UA = "Mozilla/5.0 (compatible; lit-forge-mcp/0.11; +https://github.com/noblabs/lit-forge-mcp)";
8
8
  export declare const RELEASE_PULSE_FETCH_TIMEOUT_MS = 12000;
9
+ export declare function isUsEasternDst(ymd: string): boolean;
10
+ export declare function etToJst(ymd: string, etHHMM: string): {
11
+ date: string;
12
+ time: string;
13
+ };
@@ -18,4 +18,43 @@ export function jstDatePlus(daysAhead, now = new Date()) {
18
18
  // ブラウザ系 UA を送る(geopolitical-pulse と同方針)。
19
19
  export const RELEASE_PULSE_UA = "Mozilla/5.0 (compatible; lit-forge-mcp/0.11; +https://github.com/noblabs/lit-forge-mcp)";
20
20
  export const RELEASE_PULSE_FETCH_TIMEOUT_MS = 12_000;
21
+ // ある月の第 n 日曜日の日(1-31)を返す。
22
+ function nthSundayOfMonth(year, month0, n) {
23
+ const firstDow = new Date(Date.UTC(year, month0, 1)).getUTCDay(); // 0=日
24
+ const firstSunday = 1 + ((7 - firstDow) % 7);
25
+ return firstSunday + (n - 1) * 7;
26
+ }
27
+ // 与えられた YYYY-MM-DD が米東部夏時間(EDT, UTC-4)期間内かを判定する。
28
+ // 米 DST: 3 月第 2 日曜 02:00 〜 11 月第 1 日曜 02:00。
29
+ // 経済指標のリリースは午前なので 02:00 の切替時刻は無視し、日付レベルで判定する
30
+ // (切替日当日: 3 月開始日は EDT 扱い・11 月終了日は EST 扱い、午前リリースとして正しい)。
31
+ export function isUsEasternDst(ymd) {
32
+ const [y, mo, d] = ymd.split("-").map(Number);
33
+ if (!y || !mo || !d)
34
+ return false;
35
+ const dstStart = nthSundayOfMonth(y, 2, 2); // 3 月(month0=2)第 2 日曜
36
+ const dstEnd = nthSundayOfMonth(y, 10, 1); // 11 月(month0=10)第 1 日曜
37
+ const cur = mo * 100 + d;
38
+ return cur >= 3 * 100 + dstStart && cur < 11 * 100 + dstEnd;
39
+ }
40
+ // 米東部時間(ET)の YYYY-MM-DD + HH:MM を JST の { date, time } に変換する。
41
+ // EDT は UTC-4 → JST(+9) は ET+13h、EST は UTC-5 → ET+14h。
42
+ // 午前 ET は夜 JST で同日内に収まるが、繰り上がりも一般的に処理する。
43
+ export function etToJst(ymd, etHHMM) {
44
+ const [eh, em] = etHHMM.split(":").map(Number);
45
+ const offsetH = isUsEasternDst(ymd) ? 13 : 14;
46
+ let jh = eh + offsetH;
47
+ let dayShift = 0;
48
+ while (jh >= 24) {
49
+ jh -= 24;
50
+ dayShift += 1;
51
+ }
52
+ let date = ymd;
53
+ if (dayShift > 0) {
54
+ const [y, mo, d] = ymd.split("-").map(Number);
55
+ date = new Date(Date.UTC(y, mo - 1, d + dayShift)).toISOString().slice(0, 10);
56
+ }
57
+ const time = `${String(jh).padStart(2, "0")}:${String(em).padStart(2, "0")}`;
58
+ return { date, time };
59
+ }
21
60
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/lib/economic-release-pulse/util.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,sEAAsE;AACtE,qDAAqD;AACrD,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IAC9B,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,QAAQ,CAAC,MAAY,IAAI,IAAI,EAAE;IAC7C,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC;AACtC,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,WAAW,CAAC,SAAiB,EAAE,MAAY,IAAI,IAAI,EAAE;IACnE,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;AACrE,CAAC;AAED,mDAAmD;AACnD,yCAAyC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAC3B,yFAAyF,CAAC;AAE5F,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/lib/economic-release-pulse/util.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ type IndicatorKey = "nonfarmPayrolls" | "unemploymentRate" | "cpi" | "ppi";
2
+ type SeriesDef = {
3
+ id: string;
4
+ key: IndicatorKey;
5
+ displayName: string;
6
+ unit: string;
7
+ };
8
+ export type BlsSeriesDatum = {
9
+ year: string;
10
+ period: string;
11
+ periodName: string;
12
+ value: string;
13
+ latest?: string;
14
+ footnotes?: Array<{
15
+ code?: string;
16
+ text?: string;
17
+ }>;
18
+ };
19
+ export type IndicatorSummary = {
20
+ displayName: string;
21
+ unit: string;
22
+ latest: {
23
+ year: number;
24
+ month: number;
25
+ value: number | null;
26
+ preliminary: boolean;
27
+ };
28
+ monthOverMonth?: {
29
+ diff: number | null;
30
+ percent: number | null;
31
+ };
32
+ yearOverYear?: {
33
+ diff: number | null;
34
+ percent: number | null;
35
+ };
36
+ };
37
+ export type UsMacroLatest = {
38
+ fetchedAt: string;
39
+ source: string;
40
+ indicators: Record<IndicatorKey, IndicatorSummary>;
41
+ };
42
+ export declare function summarizeSeries(def: SeriesDef, data: BlsSeriesDatum[]): IndicatorSummary;
43
+ export declare function fetchUsMacroLatest(): Promise<UsMacroLatest>;
44
+ export {};
@@ -0,0 +1,159 @@
1
+ // 米マクロ最新値取得(v0.13.0 新設)。
2
+ // BLS(米労働統計局)の Public Data API v2 から雇用統計・失業率・CPI・PPI の
3
+ // 4 系列を 1 リクエストで取得し、最新月の値 + 前月差・前月比 + 前年同月差・前年同月比に
4
+ // 正規化して返す。
5
+ //
6
+ // 設計背景:
7
+ // - BLS の HTML schedule ページと RSS フィードは Akamai bot 管理で 403 され取得不能
8
+ // (ToS で「robots/bots は禁止」と公式表明)。
9
+ // - 一方、公開 API は無認証で 1 日 25 リクエストまで使え、bot 制限の対象外。
10
+ // - そのため「次回発表予定」自動取得は道がないが、「最新発表値」は API 経由で完全に取得可能。
11
+ // - 本モジュールは get_market_snapshot(市況値)のマクロ指標版という位置づけ。
12
+ // 発表予定日は get_economic_release_pulse / get_economic_events_today を併用すること。
13
+ //
14
+ // キャッシュ・UA・タイムアウトは economic-release-pulse の共有ユーティリティを再利用。
15
+ // 将来共通ライブラリへの昇格余地あり。
16
+ import { withCache, DEFAULT_CACHE_TTL_MS } from "./economic-release-pulse/cache.js";
17
+ import { RELEASE_PULSE_UA, RELEASE_PULSE_FETCH_TIMEOUT_MS, } from "./economic-release-pulse/util.js";
18
+ const BLS_API_URL = "https://api.bls.gov/publicAPI/v2/timeseries/data/";
19
+ const SERIES = [
20
+ {
21
+ id: "CES0000000001",
22
+ key: "nonfarmPayrolls",
23
+ displayName: "米 雇用統計(非農業部門就業者数)",
24
+ unit: "千人",
25
+ },
26
+ {
27
+ id: "LNS14000000",
28
+ key: "unemploymentRate",
29
+ displayName: "米 失業率",
30
+ unit: "%",
31
+ },
32
+ {
33
+ id: "CUUR0000SA0",
34
+ key: "cpi",
35
+ displayName: "米 CPI(都市部全消費者、1982-84=100)",
36
+ unit: "index",
37
+ },
38
+ {
39
+ id: "WPSFD4",
40
+ key: "ppi",
41
+ displayName: "米 PPI(最終需要、2009=100)",
42
+ unit: "index",
43
+ },
44
+ ];
45
+ // "M01" -> 1。月レコード以外(M13=年間平均など)は null。
46
+ function periodToMonth(period) {
47
+ if (!/^M(0[1-9]|1[0-2])$/.test(period))
48
+ return null;
49
+ return parseInt(period.slice(1), 10);
50
+ }
51
+ // "158736" -> 158736、"-" や空文字は null(BLS の欠損表現)。
52
+ function parseValue(raw) {
53
+ if (!raw || raw === "-" || raw.trim() === "")
54
+ return null;
55
+ const n = Number(raw);
56
+ return Number.isFinite(n) ? n : null;
57
+ }
58
+ // BLS 速報判定: footnotes に code "P" があれば preliminary。
59
+ function isPreliminary(rec) {
60
+ return (rec.footnotes ?? []).some((f) => f?.code === "P");
61
+ }
62
+ function findByYM(data, year, month) {
63
+ return data.find((d) => Number(d.year) === year && periodToMonth(d.period) === month);
64
+ }
65
+ function roundTo(n, digits) {
66
+ const f = 10 ** digits;
67
+ return Math.round(n * f) / f;
68
+ }
69
+ // 1 系列の data 配列を IndicatorSummary に正規化する純関数(テスト容易性のため export)。
70
+ export function summarizeSeries(def, data) {
71
+ // 月次レコードのみに絞る(M13 等を除外)。
72
+ const monthly = data.filter((d) => periodToMonth(d.period) !== null);
73
+ // latest フラグがあればそれを優先、無ければ配列先頭(API は新しい→古い順で返す)。
74
+ const latestRec = monthly.find((d) => d.latest === "true") ?? monthly[0];
75
+ if (!latestRec) {
76
+ return {
77
+ displayName: def.displayName,
78
+ unit: def.unit,
79
+ latest: { year: 0, month: 0, value: null, preliminary: false },
80
+ };
81
+ }
82
+ const latestYear = Number(latestRec.year);
83
+ const latestMonth = periodToMonth(latestRec.period) ?? 0;
84
+ const latestValue = parseValue(latestRec.value);
85
+ const summary = {
86
+ displayName: def.displayName,
87
+ unit: def.unit,
88
+ latest: {
89
+ year: latestYear,
90
+ month: latestMonth,
91
+ value: latestValue,
92
+ preliminary: isPreliminary(latestRec),
93
+ },
94
+ };
95
+ if (latestValue === null)
96
+ return summary;
97
+ // 前月(1 月なら前年 12 月)。
98
+ const prevYear = latestMonth === 1 ? latestYear - 1 : latestYear;
99
+ const prevMonth = latestMonth === 1 ? 12 : latestMonth - 1;
100
+ const prevValue = parseValue(findByYM(monthly, prevYear, prevMonth)?.value);
101
+ // 前年同月。
102
+ const yoyValue = parseValue(findByYM(monthly, latestYear - 1, latestMonth)?.value);
103
+ summary.monthOverMonth = {
104
+ diff: prevValue !== null ? roundTo(latestValue - prevValue, 3) : null,
105
+ percent: prevValue !== null && prevValue !== 0
106
+ ? roundTo(((latestValue - prevValue) / prevValue) * 100, 3)
107
+ : null,
108
+ };
109
+ summary.yearOverYear = {
110
+ diff: yoyValue !== null ? roundTo(latestValue - yoyValue, 3) : null,
111
+ percent: yoyValue !== null && yoyValue !== 0
112
+ ? roundTo(((latestValue - yoyValue) / yoyValue) * 100, 3)
113
+ : null,
114
+ };
115
+ return summary;
116
+ }
117
+ // 全 4 系列をまとめて API 取得し、IndicatorSummary に正規化する。
118
+ // キャッシュは既存共有の 6 時間 TTL を再利用。
119
+ export async function fetchUsMacroLatest() {
120
+ return withCache("bls-us-macro-latest", DEFAULT_CACHE_TTL_MS, async () => {
121
+ const now = new Date();
122
+ const endYear = now.getUTCFullYear();
123
+ // 前年同月比のため 2 年分(年単位指定)取得する。
124
+ const startYear = endYear - 1;
125
+ const res = await fetch(BLS_API_URL, {
126
+ method: "POST",
127
+ headers: {
128
+ "Content-Type": "application/json",
129
+ "User-Agent": RELEASE_PULSE_UA,
130
+ Accept: "application/json",
131
+ },
132
+ body: JSON.stringify({
133
+ seriesid: SERIES.map((s) => s.id),
134
+ startyear: String(startYear),
135
+ endyear: String(endYear),
136
+ }),
137
+ signal: AbortSignal.timeout(RELEASE_PULSE_FETCH_TIMEOUT_MS),
138
+ });
139
+ if (!res.ok)
140
+ throw new Error(`BLS API HTTP ${res.status}`);
141
+ const data = (await res.json());
142
+ if (data.status !== "REQUEST_SUCCEEDED") {
143
+ const detail = data.message?.length ? ` (${data.message.join("; ")})` : "";
144
+ throw new Error(`BLS API failed: ${data.status}${detail}`);
145
+ }
146
+ const seriesList = data.Results?.series ?? [];
147
+ const indicators = {};
148
+ for (const def of SERIES) {
149
+ const found = seriesList.find((s) => s.seriesID === def.id);
150
+ indicators[def.key] = summarizeSeries(def, found?.data ?? []);
151
+ }
152
+ return {
153
+ fetchedAt: new Date().toISOString(),
154
+ source: "BLS Public Data API v2",
155
+ indicators,
156
+ };
157
+ });
158
+ }
159
+ //# sourceMappingURL=us-macro-latest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"us-macro-latest.js","sourceRoot":"","sources":["../../src/lib/us-macro-latest.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,17 @@
1
- // 経済指標リリース予定 リアルタイム取得ツール(v0.11.0 新設)。
1
+ // 経済指標リリース予定 リアルタイム取得ツール(v0.11.0 新設、v0.12.0 で NY 連銀・FRB 追加)。
2
2
  //
3
3
  // 役割分担:
4
4
  // - 本ツール: 公式機関のリリースカレンダーを実取得し、収録漏れの無い「網羅性」を担保
5
5
  // - get_economic_events_today: 手動キュレーション(★★★ 中心・半年 1 回更新・verify 済み)
6
6
  // 両者は補完関係。市況サマリーでは両方を併用するのが望ましい。
7
7
  //
8
- // 現行カバー範囲(v0.11.0):
8
+ // 現行カバー範囲(v0.12.0):
9
9
  // - BEA(米): GDP / 個人所得・支出(PCE)/ 貿易収支 / 企業収益 — 公式 JSON
10
+ // - NY 連銀(米): 製造業景気指数(Empire State)— 公式 HTML
11
+ // - FRB(米): 鉱工業生産(G.17)— 公式 HTML
10
12
  // - 内閣府(日): 四半期別 GDP 速報 — 公式 HTML
11
13
  // - 日銀(日): 金融政策決定会合 / 主な意見 / 短観 / 議事要旨 — lit-forge 収録データ再利用
12
- // 次サイクル予定: NY 連銀(Empire State)/ FRB(鉱工業生産・FOMC)/ BLS / 総務省統計局。
14
+ // 次サイクル予定: BLS(雇用統計・CPI・PPI)/ 総務省統計局(日 CPI)/ FOMC
13
15
  import { z } from "zod";
14
16
  import { fetchEconomicReleasePulse, } from "../lib/economic-release-pulse/pulse.js";
15
17
  import { jsonReply } from "./types.js";
@@ -22,21 +24,21 @@ const inputSchema = {
22
24
  .enum(["US", "JP", "EU", "GB", "CN"])
23
25
  .optional()
24
26
  .describe("国コード絞り込み: US=米国 / JP=日本 / EU / GB / CN。未指定で全件。" +
25
- "現行カバーは US(BEA)と JP(内閣府・日銀)のみ"),
27
+ "現行カバーは US(BEA・NY 連銀・FRB)と JP(内閣府・日銀)のみ"),
26
28
  };
27
29
  export const getEconomicReleasePulseTool = {
28
30
  name: "get_economic_release_pulse",
29
31
  title: "経済指標リリース予定(公式機関カレンダー リアルタイム取得)",
30
32
  description: "**公式機関のリリースカレンダーを実取得**して、当日〜週内の経済指標発表予定を返すツール。" +
31
- "BEA(米経済分析局)・内閣府・日銀の公式日程を並列取得し、国・期間でフィルタして返します。" +
33
+ "BEA(米経済分析局)・NY 連銀・FRB・内閣府・日銀の公式日程を並列取得し、国・期間でフィルタして返します。" +
32
34
  "【get_economic_events_today との違い】" +
33
35
  "`get_economic_events_today` は運営者が一次ソースで裏取りした手動キュレーション(★★★ 中心、半年 1 回更新)で、" +
34
- "収録対象を絞っているため NY 連銀製造業や鉱工業生産などを取りこぼす『網羅性の穴』があります。" +
36
+ "収録対象を絞っているため取りこぼす『網羅性の穴』があります。" +
35
37
  "本ツールは公式カレンダーを実取得することでその穴を埋める**補完ツール**です。市況サマリーでは両方を併用してください。" +
36
- "【現行カバー範囲(v0.11.0)】" +
37
- "BEA(米 GDP / 個人所得・支出〔PCE〕/ 貿易収支 / 企業収益)、内閣府(四半期別 GDP 速報)、" +
38
- "日銀(金融政策決定会合 / 主な意見 / 短観 / 議事要旨)。" +
39
- "NY 連銀(Empire State)・FRB(鉱工業生産・FOMC)・BLS(雇用統計・CPI・PPI)・総務省統計局(日 CPI)は次サイクルで追加予定で、現時点では本ツールに含まれません。" +
38
+ "【現行カバー範囲(v0.12.0)】" +
39
+ "BEA(米 GDP / 個人所得・支出〔PCE〕/ 貿易収支 / 企業収益)、NY 連銀(米 製造業景気指数 Empire State)、" +
40
+ "FRB(米 鉱工業生産 G.17)、内閣府(四半期別 GDP 速報)、日銀(金融政策決定会合 / 主な意見 / 短観 / 議事要旨)。" +
41
+ "BLS(雇用統計・CPI・PPI)・総務省統計局(日 CPI)・FOMC は次サイクルで追加予定で、現時点では本ツールに含まれません。" +
40
42
  "【利用上の注意】" +
41
43
  "アダプタ単位の取得失敗は sources 配列に error として記録され、他アダプタの結果は返されます(部分成功)。" +
42
44
  "結果は 6 時間キャッシュされます。各イベントには一次ソース URL(sourceUrl)が付きます。",
@@ -1 +1 @@
1
- {"version":3,"file":"get-economic-release-pulse.js","sourceRoot":"","sources":["../../src/tools/get-economic-release-pulse.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,QAAQ;AACR,gDAAgD;AAChD,sEAAsE;AACtE,mCAAmC;AACnC,EAAE;AACF,oBAAoB;AACpB,wDAAwD;AACxD,oCAAoC;AACpC,8DAA8D;AAC9D,+DAA+D;AAE/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,yBAAyB,GAE1B,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACvB,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,OAAO,EAAE,CAAC;SACP,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACpC,QAAQ,EAAE;SACV,QAAQ,CACP,gDAAgD;QAC9C,8BAA8B,CACjC;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAiB;IACvD,IAAI,EAAE,4BAA4B;IAClC,KAAK,EAAE,gCAAgC;IACvC,WAAW,EACT,gDAAgD;QAChD,gDAAgD;QAChD,kCAAkC;QAClC,0EAA0E;QAC1E,kDAAkD;QAClD,8DAA8D;QAC9D,oBAAoB;QACpB,0DAA0D;QAC1D,kCAAkC;QAClC,mGAAmG;QACnG,UAAU;QACV,8DAA8D;QAC9D,qDAAqD;IACvD,WAAW;IACX,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,OAAO,CAAiB,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC;YAC7C,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,OAAqC;SAC/C,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;YACf,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EACF,sCAAsC;gBACtC,+CAA+C;gBAC/C,uCAAuC;SAC1C,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"get-economic-release-pulse.js","sourceRoot":"","sources":["../../src/tools/get-economic-release-pulse.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,EAAE;AACF,QAAQ;AACR,gDAAgD;AAChD,sEAAsE;AACtE,mCAAmC;AACnC,EAAE;AACF,oBAAoB;AACpB,wDAAwD;AACxD,+CAA+C;AAC/C,mCAAmC;AACnC,oCAAoC;AACpC,8DAA8D;AAC9D,mDAAmD;AAEnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,yBAAyB,GAE1B,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,GAAG;IAClB,KAAK,EAAE,CAAC;SACL,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACvB,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,OAAO,EAAE,CAAC;SACP,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SACpC,QAAQ,EAAE;SACV,QAAQ,CACP,gDAAgD;QAC9C,wCAAwC,CAC3C;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAiB;IACvD,IAAI,EAAE,4BAA4B;IAClC,KAAK,EAAE,gCAAgC;IACvC,WAAW,EACT,gDAAgD;QAChD,0DAA0D;QAC1D,kCAAkC;QAClC,0EAA0E;QAC1E,gCAAgC;QAChC,8DAA8D;QAC9D,oBAAoB;QACpB,uEAAuE;QACvE,qEAAqE;QACrE,qEAAqE;QACrE,UAAU;QACV,8DAA8D;QAC9D,qDAAqD;IACvD,WAAW;IACX,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,cAAc,GAAG,CAAC,KAAK,IAAI,OAAO,CAAiB,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC;YAC7C,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,OAAqC;SAC/C,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;YACf,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EACF,sCAAsC;gBACtC,+CAA+C;gBAC/C,uCAAuC;SAC1C,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type LitForgeTool } from "./types.js";
2
+ export declare const getUsMacroLatestTool: LitForgeTool;
@@ -0,0 +1,53 @@
1
+ // 米マクロ最新値取得ツール(v0.13.0 新設)。
2
+ // 雇用統計・失業率・CPI・PPI の最新発表値 + 前月比 + 前年同月比 を BLS Public Data API v2
3
+ // から取得する。
4
+ //
5
+ // 設計背景:
6
+ // - 当初は get_economic_release_pulse に BLS アダプタを追加して「発表予定日」を網羅する
7
+ // 計画だったが、BLS の HTML schedule ページと RSS は Akamai bot 管理で 403 が返り取得不能。
8
+ // - 代替路として Public Data API v2 が無認証で動くことを実証し、本ツールでは「最新値」の
9
+ // 取得を実装することにした(発表予定は手動キュレ JSON で従来通り)。
10
+ // - 本ツールは get_market_snapshot(市況値)のマクロ指標版という位置づけ。
11
+ import { fetchUsMacroLatest } from "../lib/us-macro-latest.js";
12
+ import { jsonReply, errorReply } from "./types.js";
13
+ const inputSchema = {};
14
+ export const getUsMacroLatestTool = {
15
+ name: "get_us_macro_latest",
16
+ title: "米マクロ最新値(雇用統計・失業率・CPI・PPI)",
17
+ description: "**米マクロ三大指標**(雇用統計・CPI・PPI)+ 失業率の最新発表値と前月比・前年同月比を返すツール。" +
18
+ "BLS(米労働統計局)の Public Data API v2 を 1 リクエストで叩き、4 系列を集約して返します。" +
19
+ "API key 不要・無認証で動作(BLS 公開 API、未登録枠の 1 日 25 リクエストで運用、6 時間キャッシュ込み)。" +
20
+ "【取得系列】" +
21
+ "雇用統計 = 非農業部門就業者数(CES0000000001、単位: 千人)/ " +
22
+ "失業率(LNS14000000、単位: %)/ " +
23
+ "CPI 都市部全消費者(CUUR0000SA0、index 1982-84=100)/ " +
24
+ "PPI 最終需要(WPSFD4、index 2009=100)。" +
25
+ "【返却内容】" +
26
+ "各指標について最新月の値・前月差・前月比%・前年同月差・前年同月比% を返します。" +
27
+ "速報値(preliminary)には preliminary=true が立ち、後日確定値に更新されます。" +
28
+ "データ欠損月(政府閉鎖等で BLS が値を出せなかった月)は value=null。" +
29
+ "【関連ツール】" +
30
+ "発表予定日は別ツール `get_economic_release_pulse`(公式機関カレンダー)/ " +
31
+ "`get_economic_events_today`(手動キュレ)を参照。本ツールは『今の指標値』、" +
32
+ "それらは『次にいつ出るか』を答えます。" +
33
+ "【利用上の注意】" +
34
+ "BLS は HTML カレンダー / RSS への bot アクセスを拒否しており、" +
35
+ "本ツールが扱う『最新値』のみが自動取得可能です。投資助言ではなく情報集約。",
36
+ inputSchema,
37
+ handler: async () => {
38
+ try {
39
+ const result = await fetchUsMacroLatest();
40
+ return jsonReply({
41
+ ...result,
42
+ note: "BLS Public Data API v2 から取得。" +
43
+ "発表予定日は get_economic_release_pulse / get_economic_events_today を併用してください。" +
44
+ "preliminary=true の月は後日確定値に更新されます。投資助言ではありません。",
45
+ });
46
+ }
47
+ catch (e) {
48
+ const msg = e instanceof Error ? e.message : "fetch failed";
49
+ return errorReply(`BLS Public Data API 取得失敗: ${msg}`);
50
+ }
51
+ },
52
+ };
53
+ //# sourceMappingURL=get-us-macro-latest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-us-macro-latest.js","sourceRoot":"","sources":["../../src/tools/get-us-macro-latest.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,iEAAiE;AACjE,UAAU;AACV,EAAE;AACF,QAAQ;AACR,iEAAiE;AACjE,wEAAwE;AACxE,2DAA2D;AAC3D,2CAA2C;AAC3C,oDAAoD;AAEpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAC;AAEtE,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,MAAM,CAAC,MAAM,oBAAoB,GAAiB;IAChD,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,2BAA2B;IAClC,WAAW,EACT,wDAAwD;QACxD,6DAA6D;QAC7D,kEAAkE;QAClE,QAAQ;QACR,0CAA0C;QAC1C,0BAA0B;QAC1B,8CAA8C;QAC9C,kCAAkC;QAClC,QAAQ;QACR,2CAA2C;QAC3C,uDAAuD;QACvD,4CAA4C;QAC5C,SAAS;QACT,sDAAsD;QACtD,qDAAqD;QACrD,qBAAqB;QACrB,UAAU;QACV,4CAA4C;QAC5C,uCAAuC;IACzC,WAAW;IACX,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;YAC1C,OAAO,SAAS,CAAC;gBACf,GAAG,MAAM;gBACT,IAAI,EACF,8BAA8B;oBAC9B,0EAA0E;oBAC1E,+CAA+C;aAClD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;YAC5D,OAAO,UAAU,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -27,6 +27,7 @@ import { getAnalystConsensusTool } from "./get-analyst-consensus.js";
27
27
  import { getGeopoliticalCalendarTool } from "./get-geopolitical-calendar.js";
28
28
  import { getGeopoliticalPulseTool } from "./get-geopolitical-pulse.js";
29
29
  import { getEconomicReleasePulseTool } from "./get-economic-release-pulse.js";
30
+ import { getUsMacroLatestTool } from "./get-us-macro-latest.js";
30
31
  export const tools = [
31
32
  simulateNisaTool,
32
33
  planRetirementTool,
@@ -49,5 +50,7 @@ export const tools = [
49
50
  getGeopoliticalPulseTool,
50
51
  // v0.11.0 新規: 経済指標リリース予定の公式機関カレンダー リアルタイム取得(手動キュレーションの網羅性補完)
51
52
  getEconomicReleasePulseTool,
53
+ // v0.13.0 新規: 米マクロ最新値(BLS Public Data API、雇用統計・失業率・CPI・PPI)
54
+ getUsMacroLatestTool,
52
55
  ];
53
56
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,sDAAsD;AACtD,6CAA6C;AAC7C,8DAA8D;AAC9D,0DAA0D;AAC1D,yDAAyD;AACzD,kBAAkB;AAClB,kEAAkE;AAClE,mFAAmF;AACnF,+HAA+H;AAC/H,0CAA0C;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAE9E,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,gBAAgB;IAChB,kBAAkB;IAClB,4BAA4B;IAC5B,6BAA6B;IAC7B,qBAAqB;IACrB,0BAA0B;IAC1B,YAAY;IACZ,eAAe;IACf,wBAAwB;IACxB,yBAAyB;IACzB,kBAAkB;IAClB,qBAAqB;IACrB,oBAAoB;IACpB,eAAe;IACf,sBAAsB;IACtB,uBAAuB;IACvB,kEAAkE;IAClE,2BAA2B;IAC3B,wBAAwB;IACxB,6DAA6D;IAC7D,2BAA2B;CAC5B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,sDAAsD;AACtD,6CAA6C;AAC7C,8DAA8D;AAC9D,0DAA0D;AAC1D,yDAAyD;AACzD,kBAAkB;AAClB,kEAAkE;AAClE,mFAAmF;AACnF,+HAA+H;AAC/H,0CAA0C;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,gBAAgB;IAChB,kBAAkB;IAClB,4BAA4B;IAC5B,6BAA6B;IAC7B,qBAAqB;IACrB,0BAA0B;IAC1B,YAAY;IACZ,eAAe;IACf,wBAAwB;IACxB,yBAAyB;IACzB,kBAAkB;IAClB,qBAAqB;IACrB,oBAAoB;IACpB,eAAe;IACf,sBAAsB;IACtB,uBAAuB;IACvB,kEAAkE;IAClE,2BAA2B;IAC3B,wBAAwB;IACxB,6DAA6D;IAC7D,2BAA2B;IAC3B,4DAA4D;IAC5D,oBAAoB;CACrB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lit-forge-mcp",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "mcpName": "io.github.noblabs/lit-forge-mcp",
5
5
  "description": "MCP server for personal asset planning + daily market check: NISA / iDeCo simulation, retirement planning, market snapshot (USD/JPY, Nikkei, S&P 500, etc.), dividend history, analyst consensus, economic events.",
6
6
  "type": "module",