lit-forge-mcp 0.1.2 → 0.3.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 (72) hide show
  1. package/README.md +40 -20
  2. package/dist/index.js +3 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/lib/economic-events.d.ts +9 -0
  5. package/dist/lib/economic-events.js +146 -0
  6. package/dist/lib/economic-events.js.map +1 -0
  7. package/dist/lib/indicators.d.ts +2 -0
  8. package/dist/lib/indicators.js +14 -0
  9. package/dist/lib/indicators.js.map +1 -0
  10. package/dist/lib/market-types.d.ts +41 -0
  11. package/dist/lib/market-types.js +4 -0
  12. package/dist/lib/market-types.js.map +1 -0
  13. package/dist/lib/nisa.d.ts +56 -0
  14. package/dist/lib/nisa.js +163 -0
  15. package/dist/lib/nisa.js.map +1 -0
  16. package/dist/lib/yahoo.d.ts +9 -0
  17. package/dist/lib/yahoo.js +110 -0
  18. package/dist/lib/yahoo.js.map +1 -0
  19. package/dist/tools/calculate-compound-interest.d.ts +2 -0
  20. package/dist/tools/calculate-compound-interest.js +51 -0
  21. package/dist/tools/calculate-compound-interest.js.map +1 -0
  22. package/dist/tools/calculate-required-monthly.d.ts +2 -0
  23. package/dist/tools/calculate-required-monthly.js +74 -0
  24. package/dist/tools/calculate-required-monthly.js.map +1 -0
  25. package/dist/tools/get-economic-events.d.ts +2 -0
  26. package/dist/tools/get-economic-events.js +42 -0
  27. package/dist/tools/get-economic-events.js.map +1 -0
  28. package/dist/tools/get-market-snapshot.d.ts +2 -0
  29. package/dist/tools/get-market-snapshot.js +27 -0
  30. package/dist/tools/get-market-snapshot.js.map +1 -0
  31. package/dist/tools/get-quote.d.ts +2 -0
  32. package/dist/tools/get-quote.js +31 -0
  33. package/dist/tools/get-quote.js.map +1 -0
  34. package/dist/tools/index.js +19 -20
  35. package/dist/tools/index.js.map +1 -1
  36. package/dist/tools/plan-retirement.d.ts +2 -0
  37. package/dist/tools/plan-retirement.js +60 -0
  38. package/dist/tools/plan-retirement.js.map +1 -0
  39. package/dist/tools/simulate-nisa.d.ts +2 -0
  40. package/dist/tools/simulate-nisa.js +41 -0
  41. package/dist/tools/simulate-nisa.js.map +1 -0
  42. package/package.json +13 -14
  43. package/dist/tools/convert-base64.d.ts +0 -2
  44. package/dist/tools/convert-base64.js +0 -38
  45. package/dist/tools/convert-base64.js.map +0 -1
  46. package/dist/tools/convert-timestamp.d.ts +0 -2
  47. package/dist/tools/convert-timestamp.js +0 -52
  48. package/dist/tools/convert-timestamp.js.map +0 -1
  49. package/dist/tools/convert-url.d.ts +0 -2
  50. package/dist/tools/convert-url.js +0 -33
  51. package/dist/tools/convert-url.js.map +0 -1
  52. package/dist/tools/convert-yaml-json.d.ts +0 -2
  53. package/dist/tools/convert-yaml-json.js +0 -46
  54. package/dist/tools/convert-yaml-json.js.map +0 -1
  55. package/dist/tools/decode-jwt.d.ts +0 -2
  56. package/dist/tools/decode-jwt.js +0 -56
  57. package/dist/tools/decode-jwt.js.map +0 -1
  58. package/dist/tools/describe-cron.d.ts +0 -2
  59. package/dist/tools/describe-cron.js +0 -63
  60. package/dist/tools/describe-cron.js.map +0 -1
  61. package/dist/tools/format-json.d.ts +0 -2
  62. package/dist/tools/format-json.js +0 -37
  63. package/dist/tools/format-json.js.map +0 -1
  64. package/dist/tools/generate-hash.d.ts +0 -2
  65. package/dist/tools/generate-hash.js +0 -29
  66. package/dist/tools/generate-hash.js.map +0 -1
  67. package/dist/tools/generate-uuid.d.ts +0 -2
  68. package/dist/tools/generate-uuid.js +0 -41
  69. package/dist/tools/generate-uuid.js.map +0 -1
  70. package/dist/tools/test-regex.d.ts +0 -2
  71. package/dist/tools/test-regex.js +0 -54
  72. package/dist/tools/test-regex.js.map +0 -1
package/README.md CHANGED
@@ -4,26 +4,34 @@
4
4
  [![license](https://img.shields.io/npm/l/lit-forge-mcp.svg)](./LICENSE)
5
5
  [![node](https://img.shields.io/node/v/lit-forge-mcp.svg)](https://nodejs.org)
6
6
 
7
- [lit-forge.com](https://lit-forge.com) の開発者向けユーティリティを Model Context Protocol(MCP)経由で AI から直接呼び出せるようにする stdio サーバーです。
7
+ [lit-forge.com](https://lit-forge.com) **個人資産形成プランナー(つみたて NISA・iDeCo)** を Model Context Protocol(MCP)経由で AI から直接呼び出せるようにする stdio サーバーです。
8
8
 
9
9
  Claude Desktop / Claude Code / Cursor など、MCP に対応した任意の AI クライアントで動作します。
10
10
 
11
- ## 提供ツール(10 種)
11
+ > **v0.2.0 で「金融・個人投資家特化」にピボット**、**v0.3.0 で「毎朝の市況チェック」系 3 ツールを追加**しました。
12
+
13
+ ## 提供ツール(7 種)
14
+
15
+ ### 個人資産形成プランナー(純関数、外部 API 不要)
16
+
17
+ | ツール名 | 説明 |
18
+ |---|---|
19
+ | `simulate_nisa` | 月の積立額・想定年利・年数から、月次複利で評価額・運用益・年次推移を試算 |
20
+ | `plan_retirement` | 年齢・貯蓄・収入・希望生活費・リスク許容度・年金から、楽観/現実/悲観 3 シナリオで老後資金の充足度を診断 + 必要月額逆算 |
21
+ | `calculate_required_monthly` | 目標金額・現在の貯蓄・年利・年数から、達成に必要な毎月の積立額を逆算 |
22
+ | `calculate_compound_interest` | 元本(一括)と月次積立を月次複利で評価する汎用複利計算ツール |
23
+
24
+ ### 市況・経済イベント(v0.3.0 新規。**HTTP 通信あり**)
12
25
 
13
26
  | ツール名 | 説明 |
14
27
  |---|---|
15
- | `format_json` | JSON 整形(pretty)/ 圧縮(minify) |
16
- | `test_regex` | 正規表現マッチ(JavaScript 互換、フラグ指定可、名前付きグループ対応) |
17
- | `decode_jwt` | JWT Header / Payload / Signature に分解(exp/nbf/iat の人間可読化と有効期限判定つき) |
18
- | `convert_base64` | Base64 エンコード/デコード(UTF-8 / URL-safe 対応) |
19
- | `convert_url` | URL パーセントエンコード/デコード(component / URI 切替) |
20
- | `generate_hash` | MD5 / SHA-1 / SHA-256 / SHA-384 / SHA-512(hex / base64) |
21
- | `generate_uuid` | UUID v4 / v7 を最大 100 件まで一括生成 |
22
- | `convert_timestamp` | Unix 時刻 ⇔ ISO 8601 日時(秒/ミリ秒切替) |
23
- | `convert_yaml_json` | YAML ⇔ JSON 相互変換(js-yaml) |
24
- | `describe_cron` | cron 式を人間可読化 + 次回実行時刻を計算(IANA タイムゾーン対応) |
25
-
26
- すべて純関数(外部 API 不要・状態を持たない)で動作します。AI が出力した JSON を整形したり、JWT をデバッグしたり、UUID をテストデータとして大量生成したりするのに便利です。
28
+ | `get_market_snapshot` | USD/JPY・EUR/JPY・日経平均・TOPIX・S&P 500・NASDAQ 100・米10年金利・金・原油 WTI の現在値・前日比を一括取得([lit-forge.com/today](https://lit-forge.com/today) と同等情報) |
29
+ | `get_economic_events_today` | 当日 or 今週の経済イベント(FOMC・日銀金融政策決定会合・米雇用統計・CPI・GDP・中国 PMI 等)を重要度付きで返す。半年分を手動キュレーション |
30
+ | `get_quote` | 任意の Yahoo Finance ティッカー(株・為替・指数・コモディティ・暗号資産)の現在値・前日比を取得。例: `AAPL` / `^DJI` / `BTC-USD` |
31
+
32
+ > ⚠ **HTTP 通信について**: v0.3.0 から、`get_market_snapshot` / `get_quote` **Yahoo Finance API(query1.finance.yahoo.com)** HTTPS リクエストを送信します。実行 PC のネットワークから外部に出る通信が発生する点にご留意ください。データは Yahoo Finance より取得(約 1 時間遅れ)、**投資助言ではなく情報集約**として提供しています。
33
+
34
+ Claude / GPT / Cursor との対話の中で「老後資金大丈夫?」「月いくら積み立てれば?」「今日の市況を要約して」「FOMC は今週いつ?」を即座に試算・確認できます。
27
35
 
28
36
  ## インストール / 設定
29
37
 
@@ -74,17 +82,29 @@ echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":
74
82
  {"jsonrpc":"2.0","id":2,"method":"tools/list"}' | node dist/index.js
75
83
  ```
76
84
 
77
- `tools/list` のレスポンスに 10 ツールが並べば成功です。
85
+ `tools/list` のレスポンスに 7 ツールが並べば成功です。
78
86
 
79
87
  ## 使用例
80
88
 
81
89
  Claude にこんな依頼ができます:
82
90
 
83
- - 「この JWT をデコードして payload の中身を見せて」
84
- - 「`name: foo\nlist: [1,2,3]` を JSON にして」
85
- - 「`0 9 * * 1-5` を日本語で説明して、次の 5 回の実行時刻も Asia/Tokyo で出して」
86
- - 「テストデータ用に UUID v7 を 20 個生成して」
87
- - 「`(\\w+)@(\\w+)` でメールアドレスをパースしたいんだけど、`alice@example.com bob@test.jp` で試して」
91
+ **資産形成プランニング**
92
+ - 「私は35歳で月3万を積立中。現在の貯蓄500万、退職65歳、月の希望生活費25万。老後資金足りる?」
93
+ - 「20年で2000万作りたい。今500万あって年利4%なら毎月いくら積み立てればいい?」
94
+ - 「100万円を年利5%で30年複利運用したらいくらになる?」
95
+ - 「月3万円を年利6%で20年積み立てたら?」
96
+
97
+ **市況・経済イベント(v0.3.0)**
98
+ - 「今日の市況を要約して」「主要指標の前日比を表で見せて」
99
+ - 「今週の経済イベントは?特に FOMC や日銀の予定を教えて」
100
+ - 「米10年金利と日経平均の動きから、今のリスクオン度合いをコメントして」
101
+ - 「BTC-USD の今の値は?」「ポンド円(GBPJPY=X)を教えて」
102
+
103
+ ## 投資判断の免責
104
+
105
+ 本ツールの試算はすべて月次複利による参考値です。実際の運用結果(市場変動・税金・手数料・為替)を保証するものではありません。個別の金融商品の推奨ではなく、**投資判断はご自身の責任**でお願いします。
106
+
107
+ 公的年金額の概算は厚生年金の標準値ベースです。正確な見込み額は[ねんきんネット](https://www.nenkin.go.jp/n_net/)でご確認ください。
88
108
 
89
109
  ## ライセンス
90
110
 
package/dist/index.js CHANGED
@@ -1,11 +1,12 @@
1
1
  #!/usr/bin/env node
2
- // lit-forge MCP server エントリポイント。stdio で起動し、10 ツールを登録する。
2
+ // lit-forge MCP server エントリポイント。stdio で起動し、NISA / iDeCo 個人資産形成
3
+ // プランナー系 4 ツールを登録する。
3
4
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
5
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
6
  import { tools } from "./tools/index.js";
6
7
  const server = new McpServer({
7
8
  name: "lit-forge",
8
- version: "0.1.0",
9
+ version: "0.3.0",
9
10
  });
10
11
  for (const tool of tools) {
11
12
  server.registerTool(tool.name, {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,wDAAwD;AAExD,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;IACzB,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT;QACE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,EACD,IAAI,CAAC,OAAO,CACb,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,0CAA0C,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;AACjF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,+DAA+D;AAC/D,qBAAqB;AAErB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;IACzB,MAAM,CAAC,YAAY,CACjB,IAAI,CAAC,IAAI,EACT;QACE,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,EACD,IAAI,CAAC,OAAO,CACb,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,0CAA0C,KAAK,CAAC,MAAM,SAAS,CAAC,CAAC;AACjF,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { EconomicEvent } from "./market-types.js";
2
+ export declare const LAST_UPDATED = "2026-05-01";
3
+ export declare const ECONOMIC_EVENTS: readonly EconomicEvent[];
4
+ export declare function jstDateKey(now?: Date): string;
5
+ export declare function getEventsForDate(date: string, events?: readonly EconomicEvent[]): EconomicEvent[];
6
+ export declare function getEventsForWeek(fromDate: string, events?: readonly EconomicEvent[]): EconomicEvent[];
7
+ export declare function filterByImportance(events: readonly EconomicEvent[], minImportance: 1 | 2 | 3): EconomicEvent[];
8
+ export declare const COUNTRY_LABEL: Record<EconomicEvent["country"], string>;
9
+ export declare const IMPORTANCE_STARS: Record<EconomicEvent["importance"], string>;
@@ -0,0 +1,146 @@
1
+ // 主要経済イベントカレンダー(2026 年 5 月〜10 月)。
2
+ // FOMC・日銀会合・米雇用統計・CPI・GDP・中国 PMI など、相場に影響大きいイベントのみ収録。
3
+ // 第三者 API に依存しない自前データ → AdSense YMYL 配慮 + スクレイピング先 DOM 変更で死なない。
4
+ // 半年に 1 回 PR で追加運用、`scripts/check-events-freshness.mjs` で 90 日前から CI 警告。
5
+ //
6
+ // 重要度: 1=★(参考)/ 2=★★(重要)/ 3=★★★(必読)。
7
+ // 日付は JST、時刻が示す場合は HH:MM JST。終日イベント(FOMC 結果等)は time 省略。
8
+ export const LAST_UPDATED = "2026-05-01";
9
+ export const ECONOMIC_EVENTS = [
10
+ // ============ 2026 年 5 月 ============
11
+ { date: "2026-05-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(4 月)", importance: 2 },
12
+ { date: "2026-05-01", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(4 月)", importance: 3 },
13
+ { date: "2026-05-02", time: "21:30", country: "US", name: "米 雇用統計(4 月)", importance: 3, note: "非農業部門雇用者数・失業率・平均時給" },
14
+ { date: "2026-05-05", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(4 月)", importance: 2 },
15
+ { date: "2026-05-09", time: "08:50", country: "JP", name: "日銀 金融政策決定会合 議事要旨", importance: 2 },
16
+ { date: "2026-05-13", time: "21:30", country: "US", name: "米 CPI(4 月)", importance: 3, note: "総合・コア前年比" },
17
+ { date: "2026-05-14", time: "21:30", country: "US", name: "米 PPI(4 月)", importance: 2 },
18
+ { date: "2026-05-15", time: "21:30", country: "US", name: "米 小売売上高(4 月)", importance: 2 },
19
+ { date: "2026-05-15", country: "JP", name: "日 GDP 一次速報(1-3 月期)", importance: 3 },
20
+ { date: "2026-05-22", time: "08:30", country: "JP", name: "日 CPI(4 月)", importance: 2 },
21
+ { date: "2026-05-29", time: "21:30", country: "US", name: "米 PCE 価格指数(4 月)", importance: 3, note: "FRB が重視するインフレ指標" },
22
+ // ============ 2026 年 6 月 ============
23
+ { date: "2026-06-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(5 月)", importance: 2 },
24
+ { date: "2026-06-01", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(5 月)", importance: 3 },
25
+ { date: "2026-06-03", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(5 月)", importance: 2 },
26
+ { date: "2026-06-05", time: "21:30", country: "US", name: "米 雇用統計(5 月)", importance: 3 },
27
+ { date: "2026-06-10", time: "21:30", country: "US", name: "米 CPI(5 月)", importance: 3 },
28
+ { date: "2026-06-11", time: "21:30", country: "US", name: "米 PPI(5 月)", importance: 2 },
29
+ { date: "2026-06-12", country: "JP", name: "日 SQ(先物・オプション特別清算指数)", importance: 1 },
30
+ { date: "2026-06-15", country: "JP", name: "日銀 金融政策決定会合(1 日目)", importance: 3 },
31
+ { date: "2026-06-16", country: "JP", name: "日銀 金融政策決定会合(結果発表)", importance: 3, note: "総裁会見あり" },
32
+ { date: "2026-06-16", country: "US", name: "FOMC(1 日目)", importance: 3 },
33
+ { date: "2026-06-17", time: "27:00", country: "US", name: "FOMC 結果発表 + 経済予測", importance: 3, note: "ドットチャート更新月" },
34
+ { date: "2026-06-17", time: "27:30", country: "US", name: "FRB 議長記者会見", importance: 3 },
35
+ { date: "2026-06-26", time: "21:30", country: "US", name: "米 PCE 価格指数(5 月)", importance: 3 },
36
+ // ============ 2026 年 7 月 ============
37
+ { date: "2026-07-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(6 月)", importance: 2 },
38
+ { date: "2026-07-01", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(6 月)", importance: 3 },
39
+ { date: "2026-07-01", time: "08:50", country: "JP", name: "日銀短観(4-6 月期)", importance: 3, note: "大企業製造業 DI 等" },
40
+ { date: "2026-07-03", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(6 月)", importance: 2 },
41
+ { date: "2026-07-04", country: "US", name: "米 独立記念日(市場休場)", importance: 1 },
42
+ { date: "2026-07-04", time: "21:30", country: "US", name: "米 雇用統計(6 月)", importance: 3, note: "祝日繰り上げ発表の可能性" },
43
+ { date: "2026-07-10", country: "JP", name: "日 SQ", importance: 1 },
44
+ { date: "2026-07-15", time: "21:30", country: "US", name: "米 CPI(6 月)", importance: 3 },
45
+ { date: "2026-07-15", time: "11:00", country: "CN", name: "中国 GDP(4-6 月期)", importance: 3 },
46
+ { date: "2026-07-16", time: "21:30", country: "US", name: "米 PPI(6 月)", importance: 2 },
47
+ { date: "2026-07-17", time: "21:30", country: "US", name: "米 小売売上高(6 月)", importance: 2 },
48
+ { date: "2026-07-30", country: "JP", name: "日銀 金融政策決定会合(1 日目)", importance: 3 },
49
+ { date: "2026-07-31", country: "JP", name: "日銀 金融政策決定会合(結果 + 展望レポート)", importance: 3, note: "総裁会見あり" },
50
+ { date: "2026-07-28", country: "US", name: "FOMC(1 日目)", importance: 3 },
51
+ { date: "2026-07-29", time: "27:00", country: "US", name: "FOMC 結果発表", importance: 3 },
52
+ { date: "2026-07-30", time: "21:30", country: "US", name: "米 GDP 速報値(4-6 月期)", importance: 3 },
53
+ { date: "2026-07-31", time: "21:30", country: "US", name: "米 PCE 価格指数(6 月)", importance: 3 },
54
+ // ============ 2026 年 8 月 ============
55
+ { date: "2026-08-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(7 月)", importance: 2 },
56
+ { date: "2026-08-03", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(7 月)", importance: 3 },
57
+ { date: "2026-08-05", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(7 月)", importance: 2 },
58
+ { date: "2026-08-07", time: "21:30", country: "US", name: "米 雇用統計(7 月)", importance: 3 },
59
+ { date: "2026-08-12", time: "21:30", country: "US", name: "米 CPI(7 月)", importance: 3 },
60
+ { date: "2026-08-13", time: "21:30", country: "US", name: "米 PPI(7 月)", importance: 2 },
61
+ { date: "2026-08-14", time: "21:30", country: "US", name: "米 小売売上高(7 月)", importance: 2 },
62
+ { date: "2026-08-14", country: "JP", name: "日 SQ", importance: 1 },
63
+ { date: "2026-08-17", time: "08:50", country: "JP", name: "日 GDP 一次速報(4-6 月期)", importance: 3 },
64
+ { date: "2026-08-21", time: "08:30", country: "JP", name: "日 CPI(7 月)", importance: 2 },
65
+ { date: "2026-08-27", country: "US", name: "ジャクソンホール会議(〜29)", importance: 3, note: "FRB 議長講演に注目" },
66
+ { date: "2026-08-28", time: "21:30", country: "US", name: "米 PCE 価格指数(7 月)", importance: 3 },
67
+ // ============ 2026 年 9 月 ============
68
+ { date: "2026-09-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(8 月)", importance: 2 },
69
+ { date: "2026-09-01", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(8 月)", importance: 3 },
70
+ { date: "2026-09-03", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(8 月)", importance: 2 },
71
+ { date: "2026-09-04", time: "21:30", country: "US", name: "米 雇用統計(8 月)", importance: 3 },
72
+ { date: "2026-09-11", time: "21:30", country: "US", name: "米 CPI(8 月)", importance: 3 },
73
+ { date: "2026-09-11", country: "JP", name: "日 SQ", importance: 1 },
74
+ { date: "2026-09-15", country: "US", name: "FOMC(1 日目)", importance: 3 },
75
+ { date: "2026-09-16", time: "27:00", country: "US", name: "FOMC 結果発表 + 経済予測", importance: 3, note: "ドットチャート更新月" },
76
+ { date: "2026-09-17", country: "JP", name: "日銀 金融政策決定会合(1 日目)", importance: 3 },
77
+ { date: "2026-09-18", country: "JP", name: "日銀 金融政策決定会合(結果発表)", importance: 3, note: "総裁会見あり" },
78
+ { date: "2026-09-25", time: "08:30", country: "JP", name: "日 CPI(8 月)", importance: 2 },
79
+ { date: "2026-09-26", time: "21:30", country: "US", name: "米 PCE 価格指数(8 月)", importance: 3 },
80
+ // ============ 2026 年 10 月 ============
81
+ { date: "2026-10-01", time: "08:50", country: "JP", name: "日銀短観(7-9 月期)", importance: 3 },
82
+ { date: "2026-10-01", time: "10:30", country: "CN", name: "中国 製造業 PMI(9 月)", importance: 2 },
83
+ { date: "2026-10-01", time: "23:00", country: "US", name: "米 ISM 製造業 PMI(9 月)", importance: 3 },
84
+ { date: "2026-10-02", time: "23:00", country: "US", name: "米 ISM 非製造業 PMI(9 月)", importance: 2 },
85
+ { date: "2026-10-02", time: "21:30", country: "US", name: "米 雇用統計(9 月)", importance: 3 },
86
+ { date: "2026-10-09", country: "JP", name: "日 SQ", importance: 1 },
87
+ { date: "2026-10-13", time: "21:30", country: "US", name: "米 CPI(9 月)", importance: 3 },
88
+ { date: "2026-10-14", time: "21:30", country: "US", name: "米 PPI(9 月)", importance: 2 },
89
+ { date: "2026-10-19", time: "11:00", country: "CN", name: "中国 GDP(7-9 月期)", importance: 3 },
90
+ { date: "2026-10-27", country: "US", name: "FOMC(1 日目)", importance: 3 },
91
+ { date: "2026-10-28", time: "27:00", country: "US", name: "FOMC 結果発表", importance: 3 },
92
+ { date: "2026-10-29", country: "JP", name: "日銀 金融政策決定会合(1 日目)", importance: 3 },
93
+ { date: "2026-10-30", country: "JP", name: "日銀 金融政策決定会合(結果 + 展望レポート)", importance: 3, note: "総裁会見あり" },
94
+ { date: "2026-10-30", time: "21:30", country: "US", name: "米 GDP 速報値(7-9 月期)", importance: 3 },
95
+ { date: "2026-10-30", time: "21:30", country: "US", name: "米 PCE 価格指数(9 月)", importance: 3 },
96
+ ];
97
+ // JST の年月日を yyyy-mm-dd 形式で返す(leaderboard/keys.ts と同一ロジック)。
98
+ export function jstDateKey(now = new Date()) {
99
+ const jstMs = now.getTime() + 9 * 3600 * 1000;
100
+ const d = new Date(jstMs);
101
+ const y = d.getUTCFullYear();
102
+ const m = String(d.getUTCMonth() + 1).padStart(2, "0");
103
+ const day = String(d.getUTCDate()).padStart(2, "0");
104
+ return `${y}-${m}-${day}`;
105
+ }
106
+ // JST 当日のイベントを返す(重要度降順)。
107
+ export function getEventsForDate(date, events = ECONOMIC_EVENTS) {
108
+ return events
109
+ .filter((e) => e.date === date)
110
+ .sort((a, b) => b.importance - a.importance ||
111
+ (a.time ?? "00:00").localeCompare(b.time ?? "00:00"));
112
+ }
113
+ // 当日を含む 7 日間(今日〜+6 日)のイベントを返す。
114
+ export function getEventsForWeek(fromDate, events = ECONOMIC_EVENTS) {
115
+ const start = new Date(fromDate + "T00:00:00+09:00");
116
+ const dates = [];
117
+ for (let i = 0; i < 7; i++) {
118
+ const d = new Date(start);
119
+ d.setDate(d.getDate() + i);
120
+ dates.push(jstDateKey(d));
121
+ }
122
+ const set = new Set(dates);
123
+ return events
124
+ .filter((e) => set.has(e.date))
125
+ .sort((a, b) => a.date.localeCompare(b.date) ||
126
+ b.importance - a.importance ||
127
+ (a.time ?? "00:00").localeCompare(b.time ?? "00:00"));
128
+ }
129
+ // 重要度フィルタ(最低重要度)。例: minImportance=2 で ★★ 以上のみ。
130
+ export function filterByImportance(events, minImportance) {
131
+ return events.filter((e) => e.importance >= minImportance);
132
+ }
133
+ export const COUNTRY_LABEL = {
134
+ JP: "🇯🇵 日本",
135
+ US: "🇺🇸 米国",
136
+ CN: "🇨🇳 中国",
137
+ EU: "🇪🇺 欧州",
138
+ GB: "🇬🇧 英国",
139
+ OTHER: "🌏 その他",
140
+ };
141
+ export const IMPORTANCE_STARS = {
142
+ 1: "★",
143
+ 2: "★★",
144
+ 3: "★★★",
145
+ };
146
+ //# sourceMappingURL=economic-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"economic-events.js","sourceRoot":"","sources":["../../src/lib/economic-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Indicator } from "./market-types.js";
2
+ export declare const INDICATORS: readonly Indicator[];
@@ -0,0 +1,14 @@
1
+ // MCP server で扱うマクロ指標 9 銘柄。
2
+ // Web 側 (lit-forge/app/lib/market/indicators.ts) と同期管理。
3
+ export const INDICATORS = [
4
+ { symbol: "JPY=X", displayName: "USD/JPY", category: "fx", unit: "円", decimals: 2, changeStyle: "ratio" },
5
+ { symbol: "EURJPY=X", displayName: "EUR/JPY", category: "fx", unit: "円", decimals: 2, changeStyle: "ratio" },
6
+ { symbol: "^N225", displayName: "日経平均", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
7
+ { symbol: "^TPX", fallback: "1305.T", displayName: "TOPIX", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
8
+ { symbol: "^GSPC", displayName: "S&P 500", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
9
+ { symbol: "^NDX", displayName: "NASDAQ 100", category: "equity", unit: "", decimals: 2, changeStyle: "ratio" },
10
+ { symbol: "^TNX", displayName: "米10年債利回り", category: "bond", unit: "%", decimals: 3, changeStyle: "bp" },
11
+ { symbol: "GC=F", displayName: "金(先物)", category: "commodity", unit: "USD/oz", decimals: 2, changeStyle: "ratio" },
12
+ { symbol: "CL=F", displayName: "原油 WTI", category: "commodity", unit: "USD/bbl", decimals: 2, changeStyle: "ratio" },
13
+ ];
14
+ //# sourceMappingURL=indicators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicators.js","sourceRoot":"","sources":["../../src/lib/indicators.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,wDAAwD;AAIxD,MAAM,CAAC,MAAM,UAAU,GAAyB;IAC9C,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;IACzG,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;IAC5G,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;IACzG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;IAC7H,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;IAC5G,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;IAC9G,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE;IACxG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;IAClH,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;CACrH,CAAC"}
@@ -0,0 +1,41 @@
1
+ export type IndicatorCategory = "fx" | "equity" | "bond" | "commodity";
2
+ export type ChangeStyle = "ratio" | "bp";
3
+ export type Indicator = {
4
+ symbol: string;
5
+ fallback?: string;
6
+ displayName: string;
7
+ category: IndicatorCategory;
8
+ unit: string;
9
+ decimals: number;
10
+ changeStyle: ChangeStyle;
11
+ };
12
+ export type Quote = {
13
+ symbol: string;
14
+ displayName: string;
15
+ category: IndicatorCategory;
16
+ price: number;
17
+ previousClose: number;
18
+ change: number;
19
+ changePercent: number;
20
+ changeBp: number;
21
+ unit: string;
22
+ fetchedAt: string;
23
+ };
24
+ export type QuoteResult = Quote | {
25
+ symbol: string;
26
+ error: string;
27
+ };
28
+ export type Snapshot = {
29
+ fetchedAt: string;
30
+ quotes: QuoteResult[];
31
+ };
32
+ export type EventImportance = 1 | 2 | 3;
33
+ export type Country = "JP" | "US" | "CN" | "EU" | "GB" | "OTHER";
34
+ export type EconomicEvent = {
35
+ date: string;
36
+ time?: string;
37
+ country: Country;
38
+ name: string;
39
+ importance: EventImportance;
40
+ note?: string;
41
+ };
@@ -0,0 +1,4 @@
1
+ // MCP server 用の市況データ型定義。
2
+ // Web 側 (lit-forge/app/lib/market/types.ts) と整合する形で同梱。
3
+ export {};
4
+ //# sourceMappingURL=market-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market-types.js","sourceRoot":"","sources":["../../src/lib/market-types.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,uDAAuD"}
@@ -0,0 +1,56 @@
1
+ export type NisaYearlyEntry = {
2
+ year: number;
3
+ contribution: number;
4
+ value: number;
5
+ };
6
+ export type NisaResult = {
7
+ totalContribution: number;
8
+ finalValue: number;
9
+ profit: number;
10
+ yearly: ReadonlyArray<NisaYearlyEntry>;
11
+ };
12
+ export declare function combinedFutureValue(lump: number, monthly: number, monthlyRate: number, months: number): number;
13
+ export declare function simulateNisa(params: {
14
+ monthly: number;
15
+ annualRate: number;
16
+ years: number;
17
+ }): NisaResult | null;
18
+ export type RiskTolerance = "conservative" | "balanced" | "aggressive";
19
+ export declare const SCENARIO_RATES: Record<RiskTolerance, [number, number, number]>;
20
+ export type PlannerProfile = {
21
+ age: number;
22
+ currentSavings: number;
23
+ monthlyContribution: number;
24
+ retirementAge: number;
25
+ monthlyRetirementSpend: number;
26
+ riskTolerance: RiskTolerance;
27
+ pensionMonthly: number;
28
+ lifeExpectancy: number;
29
+ };
30
+ export type ScenarioLabel = "悲観" | "現実" | "楽観";
31
+ export type ScenarioResult = {
32
+ label: ScenarioLabel;
33
+ annualRate: number;
34
+ totalContribution: number;
35
+ finalValue: number;
36
+ profit: number;
37
+ yearly: ReadonlyArray<NisaYearlyEntry>;
38
+ };
39
+ export type RetirementGap = {
40
+ yearsAfterRetirement: number;
41
+ totalNeeded: number;
42
+ pensionTotal: number;
43
+ netNeeded: number;
44
+ worstCovers: boolean;
45
+ realCovers: boolean;
46
+ bestCovers: boolean;
47
+ };
48
+ export type PlannerResult = {
49
+ profile: PlannerProfile;
50
+ years: number;
51
+ scenarios: [ScenarioResult, ScenarioResult, ScenarioResult];
52
+ retirementGap: RetirementGap;
53
+ requiredMonthlyForRealScenario: number | null;
54
+ };
55
+ export declare function planRetirement(profile: PlannerProfile): PlannerResult | null;
56
+ export declare const DEFAULT_PROFILE: PlannerProfile;
@@ -0,0 +1,163 @@
1
+ // つみたて NISA・iDeCo シミュレーション + 個人資産形成プランナー。
2
+ // 月次複利の積立年金 (annuity-immediate) をベースに、現在貯蓄の一括運用と
3
+ // 月次積立を合算した将来評価額・3 シナリオ比較・老後資金差額・必要月額逆算を扱う。
4
+ // 月次複利での積立年金 (annuity-immediate) 評価額。
5
+ // monthlyRate=0 の場合はゼロ除算回避で単純積み上げ。
6
+ function annuityFutureValue(monthly, monthlyRate, months) {
7
+ if (months <= 0)
8
+ return 0;
9
+ if (monthlyRate === 0)
10
+ return monthly * months;
11
+ return (monthly * (Math.pow(1 + monthlyRate, months) - 1)) / monthlyRate;
12
+ }
13
+ // 一括金の月次複利将来価値。
14
+ function lumpFutureValue(lump, monthlyRate, months) {
15
+ if (months <= 0)
16
+ return lump;
17
+ if (monthlyRate === 0)
18
+ return lump;
19
+ return lump * Math.pow(1 + monthlyRate, months);
20
+ }
21
+ // 一括 + 月次積立を合算した月次複利将来価値。
22
+ export function combinedFutureValue(lump, monthly, monthlyRate, months) {
23
+ return lumpFutureValue(lump, monthlyRate, months) +
24
+ annuityFutureValue(monthly, monthlyRate, months);
25
+ }
26
+ export function simulateNisa(params) {
27
+ const { monthly, annualRate, years } = params;
28
+ if (!Number.isFinite(monthly) ||
29
+ !Number.isFinite(annualRate) ||
30
+ !Number.isFinite(years)) {
31
+ return null;
32
+ }
33
+ if (monthly < 0 || annualRate < 0 || years < 0)
34
+ return null;
35
+ const monthlyRate = annualRate / 100 / 12;
36
+ const yearly = [];
37
+ for (let y = 1; y <= years; y++) {
38
+ const months = y * 12;
39
+ yearly.push({
40
+ year: y,
41
+ contribution: Math.round(monthly * months),
42
+ value: Math.round(annuityFutureValue(monthly, monthlyRate, months)),
43
+ });
44
+ }
45
+ const totalContribution = Math.round(monthly * years * 12);
46
+ const finalValue = Math.round(annuityFutureValue(monthly, monthlyRate, years * 12));
47
+ return {
48
+ totalContribution,
49
+ finalValue,
50
+ profit: finalValue - totalContribution,
51
+ yearly,
52
+ };
53
+ }
54
+ // リスク許容度ごとの想定年利。[悲観, 現実, 楽観] の 3 シナリオ。
55
+ // 過去の長期インデックス投資実績(S&P500 / 全世界株式インデックス)を踏まえた保守的な設定値。
56
+ // 投資判断には使えない参考値。
57
+ export const SCENARIO_RATES = {
58
+ conservative: [1, 3, 5],
59
+ balanced: [2, 4, 6],
60
+ aggressive: [3, 5, 8],
61
+ };
62
+ function buildScenario(label, annualRate, profile, years) {
63
+ const monthlyRate = annualRate / 100 / 12;
64
+ const months = years * 12;
65
+ const yearly = [];
66
+ for (let y = 1; y <= years; y++) {
67
+ const m = y * 12;
68
+ yearly.push({
69
+ year: y,
70
+ contribution: Math.round(profile.monthlyContribution * m),
71
+ value: Math.round(combinedFutureValue(profile.currentSavings, profile.monthlyContribution, monthlyRate, m)),
72
+ });
73
+ }
74
+ const totalContribution = Math.round(profile.monthlyContribution * months);
75
+ const finalValue = Math.round(combinedFutureValue(profile.currentSavings, profile.monthlyContribution, monthlyRate, months));
76
+ return {
77
+ label,
78
+ annualRate,
79
+ totalContribution,
80
+ finalValue,
81
+ profit: finalValue - totalContribution - profile.currentSavings,
82
+ yearly,
83
+ };
84
+ }
85
+ // 必要な月額を逆算(一括運用込み)。
86
+ // finalValue = lumpFV + monthly * annuityFactor
87
+ // monthly = (target - lumpFV) / annuityFactor
88
+ // target に届かなければ null(年利が低すぎ or 期間が短すぎ)。
89
+ function solveMonthlyForTarget(target, currentSavings, annualRate, years) {
90
+ if (years <= 0)
91
+ return null;
92
+ const monthlyRate = annualRate / 100 / 12;
93
+ const months = years * 12;
94
+ const lumpFV = lumpFutureValue(currentSavings, monthlyRate, months);
95
+ if (lumpFV >= target)
96
+ return 0;
97
+ const remaining = target - lumpFV;
98
+ const annuityFactor = monthlyRate === 0
99
+ ? months
100
+ : (Math.pow(1 + monthlyRate, months) - 1) / monthlyRate;
101
+ if (annuityFactor <= 0)
102
+ return null;
103
+ return Math.ceil(remaining / annuityFactor);
104
+ }
105
+ export function planRetirement(profile) {
106
+ const fields = [
107
+ profile.age,
108
+ profile.currentSavings,
109
+ profile.monthlyContribution,
110
+ profile.retirementAge,
111
+ profile.monthlyRetirementSpend,
112
+ profile.pensionMonthly,
113
+ profile.lifeExpectancy,
114
+ ];
115
+ if (fields.some((v) => !Number.isFinite(v) || v < 0))
116
+ return null;
117
+ if (profile.retirementAge <= profile.age)
118
+ return null;
119
+ if (profile.lifeExpectancy <= profile.retirementAge)
120
+ return null;
121
+ if (!SCENARIO_RATES[profile.riskTolerance])
122
+ return null;
123
+ const years = profile.retirementAge - profile.age;
124
+ const [worstRate, realRate, bestRate] = SCENARIO_RATES[profile.riskTolerance];
125
+ const scenarios = [
126
+ buildScenario("悲観", worstRate, profile, years),
127
+ buildScenario("現実", realRate, profile, years),
128
+ buildScenario("楽観", bestRate, profile, years),
129
+ ];
130
+ const yearsAfterRetirement = profile.lifeExpectancy - profile.retirementAge;
131
+ const monthsAfter = yearsAfterRetirement * 12;
132
+ const totalNeeded = profile.monthlyRetirementSpend * monthsAfter;
133
+ const pensionTotal = profile.pensionMonthly * monthsAfter;
134
+ const netNeeded = Math.max(0, totalNeeded - pensionTotal);
135
+ const requiredMonthlyForRealScenario = solveMonthlyForTarget(netNeeded, profile.currentSavings, realRate, years);
136
+ return {
137
+ profile,
138
+ years,
139
+ scenarios,
140
+ retirementGap: {
141
+ yearsAfterRetirement,
142
+ totalNeeded: Math.round(totalNeeded),
143
+ pensionTotal: Math.round(pensionTotal),
144
+ netNeeded: Math.round(netNeeded),
145
+ worstCovers: scenarios[0].finalValue >= netNeeded,
146
+ realCovers: scenarios[1].finalValue >= netNeeded,
147
+ bestCovers: scenarios[2].finalValue >= netNeeded,
148
+ },
149
+ requiredMonthlyForRealScenario,
150
+ };
151
+ }
152
+ // プランナーのデフォルトプロファイル(UI 初期値)。
153
+ export const DEFAULT_PROFILE = {
154
+ age: 35,
155
+ currentSavings: 1_000_000,
156
+ monthlyContribution: 30_000,
157
+ retirementAge: 65,
158
+ monthlyRetirementSpend: 250_000,
159
+ riskTolerance: "balanced",
160
+ pensionMonthly: 145_000,
161
+ lifeExpectancy: 85,
162
+ };
163
+ //# sourceMappingURL=nisa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nisa.js","sourceRoot":"","sources":["../../src/lib/nisa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Indicator, Quote, QuoteResult, Snapshot } from "./market-types.js";
2
+ export declare class YahooFinanceError extends Error {
3
+ readonly symbol: string;
4
+ readonly status: number;
5
+ constructor(symbol: string, status: number, message?: string);
6
+ }
7
+ export declare function fetchQuoteForIndicator(indicator: Indicator): Promise<QuoteResult>;
8
+ export declare function fetchQuoteBySymbol(symbol: string): Promise<Quote>;
9
+ export declare function fetchSnapshot(): Promise<Snapshot>;