JMoak-chrono-mcp について
JMoak-chrono-mcpは、タイムゾーンを考慮した日時計算、繰り返し規則の展開、タイムスタンプ分析を行うMCPサーバーです。バッチ処理に対応し、各応答に簡潔な時間コンテキストを含めます。
主な機能
- 01IANAタイムゾーン間の時刻変換
- 02日時の加算、減算、比較、並べ替え
- 03RRULEと繰り返し間隔の展開
- 04大量のタイムスタンプと統計の分析
- 05バッチ処理内の無効な項目を報告
- 06応答に経過時間のコンテキストを付加
活用シーン
- 01分散チーム向けにイベント時刻を変換
- 02夏時間をまたぐカレンダー規則を展開
- 03大量のタイムスタンプを分析
- 04呼び出し間の経過時間をエージェントに示す
MCP 対応
日時変換、計算、繰り返し規則の展開、タイムスタンプ分析のツールを提供します。ツール応答には、現在時刻や前回呼び出しからの経過時間を含む時間コンテキストを追加できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://server.smithery.ai/@JMoak/chrono-mcp/mcpclaude mcp add --transport http ai-smithery-jmoak-chrono https://server.smithery.ai/@JMoak/chrono-mcp/mcp{"mcpServers":{"ai-smithery-jmoak-chrono":{"type":"http","url":"https://server.smithery.ai/@JMoak/chrono-mcp/mcp"}}}Cursor で開く{"servers":{"ai-smithery-jmoak-chrono":{"type":"http","url":"https://server.smithery.ai/@JMoak/chrono-mcp/mcp"}}}VS Code で開く{"mcpServers":{"ai-smithery-jmoak-chrono":{"type":"http","url":"https://server.smithery.ai/@JMoak/chrono-mcp/mcp"}}}{"mcpServers":{"ai-smithery-jmoak-chrono":{"serverUrl":"https://server.smithery.ai/@JMoak/chrono-mcp/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://server.smithery.ai/@JMoak/chrono-mcp/mcp認証が必要ツール
詳細
chrono-mcp
大規模な時間計算のための MCP サーバーです。 1 回のツール呼び出しで最大 100,000 件のタイムスタンプを一括処理し、業界標準の時間相互運用規格(RFC 9557 IXDTF、RFC 5545 RRULE、ISO 8601 反復間隔)に対応します。また、応答のたびにエージェントへ時間の経過を受動的に知らせます。Luxon を活用し、設計上 DST に正しく対応しています。すべての上限はベンチマークに裏付けられています。
クイックスタート
npx @jmoak/chrono-mcp
ローカル HTTP サーバーとして実行
npm install
npm run build
npm run start:http
# Server listens on http://localhost:8000/mcp (health check at /health)
MCP クライアントの設定
MCP クライアントを設定し、npx 経由で chrono-mcp を起動します。以下にクライアントごとの例を示します。
Claude Code
Claude に尋ねてください。設定方法は次のとおりです。
{
"mcpServers": {
"chrono-mcp": {
"command": "npx",
"args": ["-y", "@jmoak/chrono-mcp@latest"]
}
}
}
Cursor
{
"mcpServers": {
"chrono-mcp": {
"command": "npx",
"args": ["-y", "@jmoak/chrono-mcp@latest"]
},
"chrono-mcp-http": {
"type": "http",
"url": "http://localhost:8000/mcp"
}
}
}
chrono-mcp を選ぶ理由
LLM は時間の扱いが非常に苦手です。曜日の数え間違いや、ターン間の経過時間の把握漏れ、DST 計算の失敗がよく起こります。chrono-mcp はこれら 3 つの問題をすべて解決し、業界ですでに使われている形式で、大量のデータも処理できます。
- 一括処理を前提に設計 - 項目ごとの処理では 1 リクエストあたり 10,000 件、純粋な集計値を返す
statsでは 100,000 件のタイムスタンプを処理できます。すべての上限は、誰でも実行できるベンチマーク(npm run bench)で実証されています。項目ごとの操作は上限件数でも 100ms 未満、100,000 件のstatsは約 460ms で完了します - RFC 9557(IXDTF)による相互運用 - すべての日時入力で、Temporal と互換性のあるオフセット整合性検証を伴う、角括弧付き IANA タイムゾーン注釈(
2026-08-09T15:00:00-04:00[America/New_York])を受け付けます。また、JS Temporal API のシリアライズ標準であるixdtf出力形式にも対応しています - 反復の展開 -
expandは RFC 5545 RRULE(Google Calendar、Outlook、Apple Calendar が保存形式として使用)と ISO 8601 反復間隔を、具体的な発生日時に変換します。DST に正しく対応し、期間を指定でき、切り捨てが発生した場合は明示的に報告します - 時間コンテキストのエンベロープ - すべてのツール応答の末尾には、現在時刻、曜日、エージェントの前回の呼び出しからの経過時間、セッション経過時間、tzdb バージョンを含む簡潔な行が付加されます。あらゆるやり取りで、時間を受動的に認識できます
- バッチエラーの分離 - 1 件のタイムスタンプが不正でも、10,000 件のバッチ全体は失敗しません。不正な項目はスキップされ、報告されます(
invalid_countとサンプル)。黙って破棄されることはありません - トークン効率に優れた出力 - 情報密度を高めながらトークン使用量を抑えるよう、応答の形を動的に調整します
- 世界各地のタイムゾーンに対応 - すべての IANA タイムゾーン識別子に加え、ISO、RFC2822、SQL、ロケール対応の書式設定をサポートします
- 型安全性 - すべてのパラメーターを Zod で検証し、MCP 準拠のエラーを返します。TypeScript も全体で厳密に適用しています
ドキュメント
- API リファレンス - すべてのツール、パラメーター、例に関する完全なドキュメント
- アーキテクチャ - システムアーキテクチャと設計原則
- 例 - 実用的な使用例とパターン
利用可能なツール
時刻を取得
現在の時刻の取得や、柔軟な形式でのタイムゾーン間の時刻変換を行います。
パラメーター:
datetime(文字列、任意):ISO 日時文字列。デフォルトは現在の時刻ですtimezones(配列、任意):変換先のタイムゾーン名のリストformats(配列、任意):出力形式(iso、rfc2822、sql、local、localeString、short、medium、long、full)locale(文字列、任意):書式設定に使用するロケール(例:en-US、fr-FR、ja-JP)includeOffsets(ブール値、任意):出力に UTC オフセットを含めます
例:
入力
{
"datetime": "2024-01-01T12:00:00Z",
"timezones": ["America/New_York", "Asia/Tokyo"],
"includeOffsets": true
}
出力
{
"baseTime": "2024-01-01T12:00:00.000Z",
"America/New_York": "2024-01-01T07:00:00.000-05:00",
"Asia/Tokyo": "2024-01-01T21:00:00.000+09:00"
}
時刻計算
単一の変換から 10 万件の一括分析まで、あらゆる規模の時刻計算を実行します。
操作:
add- 日時に期間を加算しますsubtract- 日時から期間を減算しますdiff- さまざまな単位で単純な差を計算しますduration_between- 2 つの時刻の間の期間を詳細に分解しますstats- 時系列と期間を統計的に分析します(1 回の呼び出しにつき最大 100,000 件のタイムスタンプ)sort- タイムスタンプを時系列順に並べ替えますexpand- RFC 5545 の RRULE または ISO 8601 の繰り返し間隔を、発生時刻に展開します
各操作では、単一の値だけでなく配列も使用できます。interaction_mode で、ベース配列と比較配列の組み合わせ方(pairwise、cross_product、single_to_many、…)を制御します。一括処理で無効な項目はスキップされ、報告されます。暗黙に破棄されることも、致命的なエラーになることもありません。
展開の例:
入力
{
"operation": "expand",
"recurrence": "FREQ=WEEKLY;BYDAY=TU;COUNT=4",
"base_time": "2026-02-24T09:00:00[America/New_York]",
"occurrence_format": "ixdtf"
}
出力(結果の抜粋 — DST の切り替わりをまたいでも、壁時計上の時刻が維持されることに注目してください)
{
"rule_type": "rrule",
"count": 4,
"truncated": false,
"occurrences": [
"2026-02-24T09:00:00.000-05:00[America/New_York]",
"2026-03-03T09:00:00.000-05:00[America/New_York]",
"2026-03-10T09:00:00.000-04:00[America/New_York]",
"2026-03-17T09:00:00.000-04:00[America/New_York]"
]
}
ISO 8601 の繰り返し間隔(R5/2026-03-01T14:00:00Z/P1D)、window_start/window_end による範囲指定、および max_occurrences による上限(デフォルトは 100、最大 10,000)も指定でき、切り捨てが発生した場合は truncated で明示的に報告されます。
一括統計の例 — イベントログ全体を渡しても、タイムスタンプの数(最大 100,000 件)にかかわらず、応答はごく小さく保たれます:
{
"operation": "stats",
"base_time": ["2026-01-01T00:00:00Z", "...99,998 more...", "2026-01-02T03:46:39Z"]
}
出力(集計値のみ — 10 万件のタイムスタンプを指定し、約 500 ミリ秒で完了した実際の呼び出しからの抜粋)
{
"input_analysis": { "base_time_count": 100000 },
"timestamp_analysis": {
"earliest": "2026-01-01T00:00:00.000Z",
"latest": "2026-01-02T03:46:39.000Z",
"total_span_human": "1 day, 3 hours, 46 minutes, 39 seconds",
"std_deviation_ms": 28867513
},
"interval_analysis": {
"interval_count": 99999,
"mean_interval_human": "1 second"
}
}
パラメーター:
operation(必須):計算の種類interaction_mode(任意):auto_detect|single_to_many|many_to_single|pairwise|cross_product|aggregate。デフォルトはauto_detectです。base_time(任意):ベースとなる ISO 日時。文字列または配列です。デフォルトは現在の時刻です。compare_time(任意):diff/duration_between用の比較対象となる ISO 日時。文字列または配列です。timezone(任意):base_timeのタイムゾーンcompare_time_timezone(任意):compare_timeのタイムゾーンyears、months、days、hours、minutes、seconds(任意):期間の値
例:
入力
{
"operation": "add",
"base_time": "2024-12-25T10:00:00Z",
"days": 5,
"hours": 3
}
出力
{
"operation": "add",
"interaction_mode": "single_to_single",
"input": {
"base_time": "2024-12-25T10:00:00.000Z",
"duration": { "days": 5, "hours": 3 }
},
"result": "2024-12-30T13:00:00.000Z",
"result_timezone": "UTC"
}
時間的コンテキストエンベロープ
すべてのツール応答には、2 つ目のコンテンツブロックが含まれます。呼び出し元のエージェントに受動的な時間認識を与える、約 20 トークンの 1 行です。
⏱ now 2026-08-09T15:02:11.123-04:00 (Sun) · first call this session
⏱ now 2026-08-09T15:49:03.456-04:00 (Sun) · +46m52s since last call · session 47m1s · call #2
LLM にはターン間の経過時間を生来認識する能力がありません。このエンベロープにより、サーバーとのすべてのやり取りで時間の経過を確認できます。モデルが誤算することの多い曜日も含まれます。サーバー環境で CHRONO_ENVELOPE=off を設定すると無効になります。
開発
前提条件
- Node.js >= 22.0.0
- npm または yarn
セットアップ
git clone https://github.com/yourusername/chrono-mcp.git
cd chrono-mcp
npm install
ビルド
npm run build
テストとインスペクター
npm test
npm run test:ui
npm run test:mcp
npm run inspector
npm run bench
npm test— ツールハンドラーの Vitest ユニットテストnpm run bench—MAX_OPERATIONSの上限(10,000 件)で、すべての一括操作が 100 ミリ秒を大幅に下回る時間で完了することを検証する Vitest ベンチマークnpm run test:mcp— Vibrissa(npm:@jmoak/vibrissa)の MCP プロトコルケース(先にnpm run buildの実行が必要です。Python は不要です)- プロトコルコントラクトは
tests/contracts/*.tddにあり、ローカルでは tdd-dsl を介してtests/integration/vibrissa/cases/に出力されます(tdd-dslが PATH にある場合はnpm run contracts:emitを実行)。CI ではコミット済みの JSON のみをvib runで実行します。
Web インスペクター UI は http://localhost:6274 で開きます。
サポートされているタイムゾーン
次のような、すべての IANA タイムゾーン識別子をサポートしています。
- アメリカ大陸:
America/New_York、America/Los_Angeles、America/Torontoなど - ヨーロッパ:
Europe/London、Europe/Paris、Europe/Berlinなど - アジア:
Asia/Tokyo、Asia/Shanghai、Asia/Dubaiなど - オーストラリア:
Australia/Sydney、Australia/Melbourneなど - その他 400 以上…
謝辞
このプロジェクトは、堅牢なタイムゾーン処理と日付演算を提供する優れた DateTime ライブラリ、Luxon を基盤としています。信頼性の高い時間処理の基盤を作り上げた Luxon チームに感謝します。
ライセンス
MIT ライセンス。詳細は LICENSE ファイルをご覧ください。
リリース
変更の詳細は GitHub Releases をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。