lit-forge-mcp 0.4.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/lib/__tests__/sessions.test.js +47 -6
- package/dist/lib/__tests__/sessions.test.js.map +1 -1
- package/dist/lib/sessions.d.ts +4 -2
- package/dist/lib/sessions.js +33 -2
- package/dist/lib/sessions.js.map +1 -1
- package/dist/tools/get-market-sessions.js +6 -3
- package/dist/tools/get-market-sessions.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -36,7 +36,7 @@ Claude Desktop / Claude Code / Cursor など、MCP に対応した任意の AI
|
|
|
36
36
|
| `get_market_thermometer` | VIX・S&P 500・米10年金利・ドル指数を合成した 0-100 のリスクオン/オフ・スコア + 過去 30 営業日推移 |
|
|
37
37
|
| `get_performance_ranking` | 28 銘柄を `1d`/`1w`/`1m` のパフォーマンスでソート、上位/下位 N 件を返す |
|
|
38
38
|
| `get_yield_spread` | 米10年-5年イールドスプレッド(プラス=順イールド / マイナス=逆イールド) |
|
|
39
|
-
| `get_market_sessions` | 主要 4 市場(東京・上海・ロンドン・NY
|
|
39
|
+
| `get_market_sessions` | 主要 4 市場(東京・上海・ロンドン・NY)の現在の取引時間ステータス(open / pre-open / closed / **holiday**、v0.5.0 で祝日対応) |
|
|
40
40
|
| `get_sector_heatmap` | 米株セクター ETF(SPDR、11 セクター)の前日比一覧 |
|
|
41
41
|
|
|
42
42
|
> ⚠ **HTTP 通信について**: 市況・分析系ツールは **Yahoo Finance API(query1.finance.yahoo.com)** へ HTTPS リクエストを送信します。実行 PC のネットワークから外部に出る通信が発生する点にご留意ください。データは約 1 時間遅れの参考値で、**投資助言ではなく情報集約**として提供しています。
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
2
|
import { getSessionStatuses } from "../sessions.js";
|
|
3
3
|
// JST 時刻指定用ヘルパ:JST H 時の UTC 換算時刻を作る
|
|
4
|
+
// 注意: GW (5/4-5/6) は祝日テストと衝突するため、5/11 以降を基準にする
|
|
4
5
|
function atJst(hourJst, dow = "mon") {
|
|
5
|
-
// 2026-05-04 (月) 00:00 JST = 2026-05-03 15:00 UTC
|
|
6
6
|
const baseDates = {
|
|
7
|
-
mon: "2026-05-
|
|
8
|
-
tue: "2026-05-
|
|
9
|
-
fri: "2026-05-
|
|
10
|
-
sat: "2026-05-
|
|
11
|
-
sun: "2026-05-
|
|
7
|
+
mon: "2026-05-11T00:00:00+09:00",
|
|
8
|
+
tue: "2026-05-12T00:00:00+09:00",
|
|
9
|
+
fri: "2026-05-15T00:00:00+09:00",
|
|
10
|
+
sat: "2026-05-16T00:00:00+09:00",
|
|
11
|
+
sun: "2026-05-17T00:00:00+09:00",
|
|
12
12
|
};
|
|
13
13
|
const base = new Date(baseDates[dow]).getTime();
|
|
14
14
|
return new Date(base + hourJst * 3600 * 1000);
|
|
@@ -43,5 +43,46 @@ describe("getSessionStatuses", () => {
|
|
|
43
43
|
for (const s of out)
|
|
44
44
|
expect(s.state).toBe("closed");
|
|
45
45
|
});
|
|
46
|
+
// ============ 祝日対応(v0.5.0〜) ============
|
|
47
|
+
it("2026-05-06(振替休日)水曜 12:00 JST:東京は holiday", () => {
|
|
48
|
+
// 2026-05-06 (Wed) は GW 振替休日
|
|
49
|
+
const date = new Date("2026-05-06T03:00:00Z"); // = 12:00 JST
|
|
50
|
+
const out = getSessionStatuses(date);
|
|
51
|
+
const tokyo = out.find((s) => s.session.id === "tokyo");
|
|
52
|
+
expect(tokyo?.state).toBe("holiday");
|
|
53
|
+
expect(tokyo?.holidayName).toContain("振替休日");
|
|
54
|
+
});
|
|
55
|
+
it("2026-12-25(Christmas)金曜 23:00 JST:NY と London が holiday", () => {
|
|
56
|
+
// 2026-12-25 (Fri) Christmas = NY/London 共に休場
|
|
57
|
+
const date = new Date("2026-12-25T14:00:00Z"); // = 23:00 JST
|
|
58
|
+
const out = getSessionStatuses(date);
|
|
59
|
+
expect(out.find((s) => s.session.id === "ny")?.state).toBe("holiday");
|
|
60
|
+
expect(out.find((s) => s.session.id === "london")?.state).toBe("holiday");
|
|
61
|
+
// 東京・上海は通常営業時間外 (closed)
|
|
62
|
+
expect(out.find((s) => s.session.id === "tokyo")?.state).toBe("closed");
|
|
63
|
+
});
|
|
64
|
+
it("2026-04-03(Good Friday)金曜 22:30 JST:NY は holiday(取引時間中でも override)", () => {
|
|
65
|
+
const date = new Date("2026-04-03T13:30:00Z"); // = 22:30 JST
|
|
66
|
+
const out = getSessionStatuses(date);
|
|
67
|
+
const ny = out.find((s) => s.session.id === "ny");
|
|
68
|
+
expect(ny?.state).toBe("holiday");
|
|
69
|
+
expect(ny?.holidayName).toBe("Good Friday");
|
|
70
|
+
});
|
|
71
|
+
it("2026-11-27(Thanksgiving 翌日)金曜 03:00 JST:NY は前日 11/26 の holiday を継承", () => {
|
|
72
|
+
// 2026-11-26 (Thu) Thanksgiving。NY 22:30 11/26 - 05:00 11/27 JST が休場
|
|
73
|
+
// 11/27 03:00 JST は 11/26 NY 取引日内の早朝 → 前日祝日として holiday を返す
|
|
74
|
+
const date = new Date("2026-11-26T18:00:00Z"); // = 11/27 03:00 JST
|
|
75
|
+
const out = getSessionStatuses(date);
|
|
76
|
+
const ny = out.find((s) => s.session.id === "ny");
|
|
77
|
+
expect(ny?.state).toBe("holiday");
|
|
78
|
+
expect(ny?.holidayName).toBe("Thanksgiving Day");
|
|
79
|
+
});
|
|
80
|
+
it("2026-02-17(春節)火曜 12:00 JST:上海は holiday", () => {
|
|
81
|
+
const date = new Date("2026-02-17T03:00:00Z"); // = 12:00 JST
|
|
82
|
+
const out = getSessionStatuses(date);
|
|
83
|
+
const shanghai = out.find((s) => s.session.id === "shanghai");
|
|
84
|
+
expect(shanghai?.state).toBe("holiday");
|
|
85
|
+
expect(shanghai?.holidayName).toContain("春節");
|
|
86
|
+
});
|
|
46
87
|
});
|
|
47
88
|
//# sourceMappingURL=sessions.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/sessions.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,oCAAoC;AACpC,SAAS,KAAK,CAAC,OAAe,EAAE,MAA6C,KAAK;IAChF,
|
|
1
|
+
{"version":3,"file":"sessions.test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/sessions.test.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/sessions.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
export type MarketId = "tokyo" | "london" | "ny" | "shanghai";
|
|
1
2
|
export type MarketSession = {
|
|
2
|
-
id:
|
|
3
|
+
id: MarketId;
|
|
3
4
|
label: string;
|
|
4
5
|
openHourJst: number;
|
|
5
6
|
closeHourJst: number;
|
|
@@ -7,8 +8,9 @@ export type MarketSession = {
|
|
|
7
8
|
export declare const MARKET_SESSIONS: readonly MarketSession[];
|
|
8
9
|
export type SessionStatus = {
|
|
9
10
|
session: MarketSession;
|
|
10
|
-
state: "open" | "closed" | "pre-open";
|
|
11
|
+
state: "open" | "closed" | "pre-open" | "holiday";
|
|
11
12
|
hoursUntilOpen?: number;
|
|
12
13
|
hoursUntilClose?: number;
|
|
14
|
+
holidayName?: string;
|
|
13
15
|
};
|
|
14
16
|
export declare function getSessionStatuses(now?: Date): SessionStatus[];
|
package/dist/lib/sessions.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// 主要市場の取引時間帯を JST 基準で判定する純関数。
|
|
2
2
|
// 東京・ロンドン・ニューヨーク・上海の取引時間を JST 換算してオープン/クローズ判定する。
|
|
3
|
-
//
|
|
3
|
+
// 祝日対応は market-holidays.ts に手動キュレーションされたデータを参照(v0.5.0〜)。
|
|
4
|
+
// サマータイム移行や臨時休場までは追わない。
|
|
5
|
+
import { getMarketHoliday, jstDateKey } from "./market-holidays.js";
|
|
4
6
|
// 通常取引時間(JST、サマータイム未考慮)。
|
|
5
7
|
// 東京: 9:00-15:30 JST
|
|
6
8
|
// 上海: 10:30-16:00 JST
|
|
@@ -13,7 +15,7 @@ export const MARKET_SESSIONS = [
|
|
|
13
15
|
{ id: "ny", label: "NY", openHourJst: 22.5, closeHourJst: 29 },
|
|
14
16
|
];
|
|
15
17
|
// JST 時刻(now)から各市場のステータスを判定。
|
|
16
|
-
// open: 取引中、pre-open: 30 分以内にオープン、closed: それ以外。
|
|
18
|
+
// open: 取引中、pre-open: 30 分以内にオープン、holiday: 祝日休場、closed: それ以外。
|
|
17
19
|
export function getSessionStatuses(now = new Date()) {
|
|
18
20
|
const jstMs = now.getTime() + 9 * 3600 * 1000;
|
|
19
21
|
const jst = new Date(jstMs);
|
|
@@ -27,6 +29,11 @@ export function getSessionStatuses(now = new Date()) {
|
|
|
27
29
|
// 週末は基本クローズ(厳密には金曜深夜の NY セッション越境はあるが省略)
|
|
28
30
|
return { session: s, state: "closed" };
|
|
29
31
|
}
|
|
32
|
+
// 祝日チェック(NY/London は翌 JST 日早朝までセッションが続くため前日も参照)
|
|
33
|
+
const holiday = lookupHolidayForSession(s.id, now);
|
|
34
|
+
if (holiday) {
|
|
35
|
+
return { session: s, state: "holiday", holidayName: holiday.name };
|
|
36
|
+
}
|
|
30
37
|
// 取引時間判定(hour と hour+24 の両方をチェック)
|
|
31
38
|
let state = "closed";
|
|
32
39
|
let hoursUntilOpen;
|
|
@@ -47,4 +54,28 @@ export function getSessionStatuses(now = new Date()) {
|
|
|
47
54
|
return { session: s, state, hoursUntilOpen, hoursUntilClose };
|
|
48
55
|
});
|
|
49
56
|
}
|
|
57
|
+
// 指定市場・時刻の祝日該当性を判定。
|
|
58
|
+
// NY/London は取引時間が翌 JST 日にまたがるため、JST 早朝 (NY: 0-5h, London: 0-2h) は前日も参照する。
|
|
59
|
+
function lookupHolidayForSession(market, now) {
|
|
60
|
+
const todayKey = jstDateKey(now);
|
|
61
|
+
const todayHoliday = getMarketHoliday(market, todayKey);
|
|
62
|
+
if (todayHoliday)
|
|
63
|
+
return todayHoliday;
|
|
64
|
+
if (market === "ny" || market === "london") {
|
|
65
|
+
const jst = new Date(now.getTime() + 9 * 3600 * 1000);
|
|
66
|
+
const hour = jst.getUTCHours();
|
|
67
|
+
// NY: 22:30-29:00 JST → 翌 JST 0-5 時は前日扱い
|
|
68
|
+
// London: 17:00-25:30 JST → 翌 JST 0-2 時は前日扱い
|
|
69
|
+
const lookBackHourLimit = market === "ny" ? 5 : 2;
|
|
70
|
+
if (hour < lookBackHourLimit) {
|
|
71
|
+
const yesterday = new Date(jst.getTime() - 24 * 3600 * 1000);
|
|
72
|
+
const y = yesterday.getUTCFullYear();
|
|
73
|
+
const m = String(yesterday.getUTCMonth() + 1).padStart(2, "0");
|
|
74
|
+
const d = String(yesterday.getUTCDate()).padStart(2, "0");
|
|
75
|
+
const yesterdayKey = `${y}-${m}-${d}`;
|
|
76
|
+
return getMarketHoliday(market, yesterdayKey);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
50
81
|
//# sourceMappingURL=sessions.js.map
|
package/dist/lib/sessions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/lib/sessions.ts"],"names":[],"mappings":"AAAA,8BAA8B;AAC9B,iDAAiD;AACjD,
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/lib/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// 主要市場(東京・上海・ロンドン・NY)の現在の取引時間ステータスを返す。
|
|
2
|
-
// AI が「今は NY
|
|
2
|
+
// AI が「今は NY が動いている時間」「東京はもうすぐオープン」「今日は祝日休場」のような時間軸の context を取れる。
|
|
3
|
+
import { MARKET_HOLIDAYS_LAST_UPDATED } from "../lib/market-holidays.js";
|
|
3
4
|
import { getSessionStatuses } from "../lib/sessions.js";
|
|
4
5
|
import { jsonReply } from "./types.js";
|
|
5
6
|
export const getMarketSessionsTool = {
|
|
6
7
|
name: "get_market_sessions",
|
|
7
8
|
title: "主要市場の取引時間ステータス",
|
|
8
|
-
description: "東京(9:00-15:30 JST)/ 上海(10:30-16:00 JST)/ ロンドン(17:00-25:30 JST)/ NY(22:30-29:00 JST)の現在の取引時間ステータス(open / pre-open / closed)を返します。土日は全て closed
|
|
9
|
+
description: "東京(9:00-15:30 JST)/ 上海(10:30-16:00 JST)/ ロンドン(17:00-25:30 JST)/ NY(22:30-29:00 JST)の現在の取引時間ステータス(open / pre-open / closed / holiday)を返します。土日は全て closed、祝日は holiday(holidayName 付)。各市場の祝日カレンダーは手動キュレーション(米英祝日・日本国民の祝日 + TSE 規程・中国の春節等の長期休場)。サマータイム移行や臨時休場は未対応の概算。",
|
|
9
10
|
inputSchema: {},
|
|
10
11
|
handler: async () => {
|
|
11
12
|
const statuses = getSessionStatuses();
|
|
@@ -19,8 +20,10 @@ export const getMarketSessionsTool = {
|
|
|
19
20
|
closeHourJst: s.session.closeHourJst,
|
|
20
21
|
hoursUntilOpen: s.hoursUntilOpen,
|
|
21
22
|
hoursUntilClose: s.hoursUntilClose,
|
|
23
|
+
holidayName: s.holidayName,
|
|
22
24
|
})),
|
|
23
|
-
|
|
25
|
+
holidaysLastUpdated: MARKET_HOLIDAYS_LAST_UPDATED,
|
|
26
|
+
note: "通常営業時間ベースの概算 + 手動キュレーションの祝日休場。サマータイム移行や臨時休場は未対応。",
|
|
24
27
|
});
|
|
25
28
|
},
|
|
26
29
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-market-sessions.js","sourceRoot":"","sources":["../../src/tools/get-market-sessions.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,
|
|
1
|
+
{"version":3,"file":"get-market-sessions.js","sourceRoot":"","sources":["../../src/tools/get-market-sessions.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,mEAAmE;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAC;AAE1D,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,IAAI,EAAE,qBAAqB;IAC3B,KAAK,EAAE,gBAAgB;IACvB,WAAW,EACT,kQAAkQ;IACpQ,WAAW,EAAE,EAAE;IACf,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;QACtC,OAAO,SAAS,CAAC;YACf,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC7B,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7B,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;gBAChB,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;gBACtB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW;gBAClC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY;gBACpC,cAAc,EAAE,CAAC,CAAC,cAAc;gBAChC,eAAe,EAAE,CAAC,CAAC,eAAe;gBAClC,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAC;YACH,mBAAmB,EAAE,4BAA4B;YACjD,IAAI,EAAE,kDAAkD;SACzD,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "lit-forge-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.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.), economic event calendar.",
|
|
6
6
|
"type": "module",
|