Date Math について
Date Mathは、正確な日付・時刻計算を必要とするエージェント向けのHTTP/MCPサービスです。営業日、タイムゾーン、繰り返し日程などを扱い、MCPツールを毎日25回まで無料で呼び出せます。
主な機能
- 01祝日を考慮した営業日計算
- 02日付の加算と期間計算
- 03夏時間対応のタイムゾーン変換
- 04CronとRRULEの日程処理
- 05都市時刻と給与支払日の確認
活用シーン
- 01営業日と祝日をまたぐ期限の算出
- 02会議可能な勤務時間帯の特定
- 03繰り返し日程を具体的な日付に展開
MCP 対応
ステートレスなStreamable HTTP MCPエンドポイントで、日付・時刻計算ツールを提供します。ツール呼び出しは毎日25回まで無料で、それ以降はx402による支払いが必要です。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://date-math.datemath.workers.dev/mcpclaude mcp add --transport http jowendelapena-date-math https://date-math.datemath.workers.dev/mcp{"mcpServers":{"jowendelapena-date-math":{"type":"http","url":"https://date-math.datemath.workers.dev/mcp"}}}Cursor で開く{"servers":{"jowendelapena-date-math":{"type":"http","url":"https://date-math.datemath.workers.dev/mcp"}}}VS Code で開く{"mcpServers":{"jowendelapena-date-math":{"type":"http","url":"https://date-math.datemath.workers.dev/mcp"}}}{"mcpServers":{"jowendelapena-date-math":{"serverUrl":"https://date-math.datemath.workers.dev/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Date Math
AI エージェント向けの正確な日付・時刻計算。呼び出しごとの従量課金です。 LLM は営業日、夏時間、定期スケジュール、祝日カレンダーの計算が苦手です。Date Math は HTTP または MCP 経由で、確定的な回答を提供します。
- 料金: x402 経由で Base 上の USDC による、呼び出し 1 回あたり $0.001
- 無料でお試し: 1 日 25 回まで MCP ツールの呼び出しが無料。あらゆる MCP アプリ(Claude Desktop、Cursor、...)で利用できます
- アクセス: サインアップ不要、API キー不要
- ベース URL:
https://date-math.datemath.workers.dev - MCP エンドポイント:
https://date-math.datemath.workers.dev/mcp(Streamable HTTP) - エージェント向けドキュメント:
/llms.txt·/openapi.json
ツール
HTTP(POST、JSON ボディ) | MCP ツール | 機能 |
|---|---|---|
/v1/diff | date_diff | 2 つの日付間の日数、週数、月数、営業日数を計算します。祝日を除外するには country を、月曜から金曜以外の週を指定するには workdays を渡します。 |
/v1/add | date_add | 日付の前後に N 日、週、月、または営業日を加えた日付を返します |
/v1/convert | timezone_convert | IANA タイムゾーン間で時刻を変換します(夏時間に対応) |
/v1/info | date_info | 曜日、ISO 週、四半期、年通算日、うるう年を返します |
/v1/holidays | public_holidays | 207 か国の祝日を 2000 年から 2050 年まで返します |
/v1/overlap | working_hours_overlap | タイムゾーンをまたいで勤務時間が重なる時間帯を返します(会議の時間枠) |
/v1/cron | cron_schedule | cron 式を説明し、任意のタイムゾーンで次回の実行日時を一覧表示します |
/v1/parse | parse_date_text | 「next Friday at 3pm」を正確な ISO 日時に変換します |
/v1/city | city_time | 都市名からタイムゾーンと現地時刻を返します(7,000 以上の都市) |
/v1/recurrence | recurring_dates | iCal RRULE(「毎月第 2 火曜日」など)を日付の一覧に展開します |
/v1/business_hours | business_hours_deadline | 今から N 営業時間後の SLA 期限、または経過した勤務時間を返します |
/v1/business_day | business_day | 日付が営業日かどうか、営業日でない場合はその理由(週末または該当する祝日)を返します。また、次または前の営業日や、その月の営業日一覧も返します |
/v1/pay_dates | pay_dates | 給与および請求の日付(月次、15 日と月末、隔週、週次)を、週末や祝日を避けて返します |
アプリでの利用方法
以下のすべてで、1 日あたり最初の 25 回のツール呼び出しは無料です。サインアップも API キーも不要です。
Claude Code
claude mcp add --transport http date-math https://date-math.datemath.workers.dev/mcp
Claude Desktop / claude.ai: Settings → Connectors → Add custom connector を選択し、https://date-math.datemath.workers.dev/mcp を貼り付けます。または、claude_desktop_config.json でローカルパッケージを使用します。
{ "mcpServers": { "date-math": { "command": "npx", "args": ["-y", "date-math-mcp"] } } }
Cursor(~/.cursor/mcp.json)
{ "mcpServers": { "date-math": { "url": "https://date-math.datemath.workers.dev/mcp" } } }
VS Code(.vscode/mcp.json)
{ "servers": { "date-math": { "type": "http", "url": "https://date-math.datemath.workers.dev/mcp" } } }
Windsurf(~/.codeium/windsurf/mcp_config.json)
{ "mcpServers": { "date-math": { "serverUrl": "https://date-math.datemath.workers.dev/mcp" } } }
Cline(MCP Servers → Configure)
{ "mcpServers": { "date-math": { "type": "streamableHttp", "url": "https://date-math.datemath.workers.dev/mcp" } } }
ローカルコマンドのみを実行するアプリ: npx -y date-math-mcp(npm パッケージ)を使用します。DATE_MATH_PRIVATE_KEY に Base 上の USDC を保有するウォレットを設定すると、無料枠を超えた呼び出しの料金が自動で支払われます。
Vercel AI SDK
import { createMCPClient } from "@ai-sdk/mcp";
const mcp = await createMCPClient({ transport: { type: "http", url: "https://date-math.datemath.workers.dev/mcp" } });
const tools = await mcp.tools(); // pass to generateText / streamText
LangChain / LangGraph(Python)
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({"date-math": {"transport": "streamable_http", "url": "https://date-math.datemath.workers.dev/mcp"}})
tools = await client.get_tools()
営業日関連のツールでは、異なる週の勤務日を指定するために workdays(曜日番号。0 = 日曜日)を指定できます。例:日曜から木曜の場合は [0,1,2,3,4]、月曜から土曜の場合は [1,2,3,4,5,6] です。
すべてのレスポンスは JSON オブジェクトです。エラーは {"error":{"code","message","example"}} の形式で、example はそのツールで有効なリクエストボディです。スキーマと例の全体は /openapi.json をご覧ください。
例
# Unpaid call → HTTP 402 with payment terms in the PAYMENT-REQUIRED header
curl -i -X POST https://date-math.datemath.workers.dev/v1/business_hours \
-H "Content-Type: application/json" \
-d '{"start":"2026-11-06T16:00","hours":2,"timezone":"Asia/Manila","country":"PH"}'
| リクエスト本文 | 結果 |
|---|---|
/v1/business_hours {"start":"2026-11-06T16:00","hours":2,"timezone":"Asia/Manila"} | "deadline":"2026-11-09T10:00:00+08:00"(月曜日) |
/v1/add {"date":"2026-12-22","business_days":5,"country":"PH"} | "result":"2026-12-31"(クリスマスとリサール記念日を除外) |
/v1/overlap {"timezones":["Asia/Manila","Europe/London"],"date":"2026-11-10","work_end":"18:00"} | 1つの時間帯:09:00–10:00Z |
/v1/recurrence {"rrule":"FREQ=MONTHLY;BYDAY=2TU","start":"2026-01-01T10:00","timezone":"Asia/Manila","count":3} | 1月13日、2月10日、3月10日の10:00 +08:00 |
/v1/business_day {"date":"2026-12-25","country":"PH"} | 営業日ではありません:"holiday":"Christmas Day"、次の営業日は2026-12-28 |
/v1/pay_dates {"schedule":"semi_monthly","from":"2027-01-01","count":2} | 1月15日、その次は1月31日(日曜日)の振替日である1月29日(金曜日) |
コードからの支払い
x402 クライアントならどれでも自動的に支払いを行います。公式の TypeScript クライアントを使用する場合:
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
const pay = wrapFetchWithPaymentFromConfig(fetch, {
schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(privateKeyToAccount(process.env.KEY as `0x${string}`)) }],
});
const res = await pay("https://date-math.datemath.workers.dev/v1/city", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ cities: ["Cebu", "London"] }),
});
console.log(await res.json());
ウォレットには Base 上の USDC が必要です。ガス代はファシリテーターが支払うため、ETH は不要です。
MCP 経由での利用
- エンドポイント:
https://date-math.datemath.workers.dev/mcp(Streamable HTTP、ステートレス) - ツールの一覧表示(
tools/list)は無料です。 - 1日あたり最初の25回のツール呼び出しは無料です(IPごとに適用され、00:00 UTCにリセットされます)。無料の各結果には
_meta["date-math/free_calls_remaining"]が含まれます。 - それ以降の各ツール呼び出しには、x402 MCP 経由で$0.001かかります。支払い情報はツール呼び出しの
_metaに含まれ、x402対応クライアントが自動的に処理します:
import { createx402MCPClient } from "@x402/mcp";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const client = createx402MCPClient({
name: "my-agent", version: "1.0.0",
schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
autoPayment: true,
});
await client.connect(new StreamableHTTPClientTransport(new URL("https://date-math.datemath.workers.dev/mcp")));
const r = await client.callTool("public_holidays", { country: "US", year: 2026 });
x402に対応していない MCP クライアントも、1日あたりの無料呼び出しを利用できます。無料枠を使い切ると、呼び出しは「Payment required」を返します。支払い情報を添付したクライアントは、無料呼び出しを消費しません。
無料枠は MCP のみです。x402のディスカバリーサービスが確認するため、通常の HTTP 呼び出しには常に支払いが必要です(未払いの呼び出しは402を返します)。
独自のコピーを実行する
このサービスは単一の Cloudflare Worker で構成され、無料プランで利用できます。各ツールの呼び出しにかかる CPU 時間は0~6ミリ秒です。
cd worker
npm install
npm test # 189 tests, including end-to-end payments with the real x402 clients
npx wrangler login
npx wrangler deploy
worker/wrangler.tomlで独自のウォレットと価格を設定します:
| 設定 | 意味 |
|---|---|
PAY_TO | ウォレットアドレスです。空欄にすると、すべてのエンドポイントが無料になります。 |
PRICE | 呼び出しごとの価格。例:$0.001 |
X402_NETWORK | eip155:8453(Base)またはeip155:84532(Base Sepolia、テスト用) |
FACILITATOR_URL | デフォルトはPayAIです。キーは不要で、ガス代も支払われます |
FREE_CALLS_PER_DAY | IPごとの1日あたり無料 MCP ツール呼び出し回数(デフォルトは25、0にすると無効になります)。カウンターはFREE_QUOTA Durable Objectに保存されます。 |
任意のシークレット(npx wrangler secret putで設定):
CDP_API_KEY_ID、CDP_API_KEY_SECRET: まずCoinbaseのファシリテーター経由で決済します。POCKET_PREFIX: 信頼できるリレー向けの、非公開かつ未払いのパスです。
デプロイをx402scanのディスカバリールールに照らして確認するには、node tools/x402scan-audit.mjs https://your-worker.workers.devを実行します。
実際に支払い(エージェントの支払い方法と同じ HTTP および MCP 経由の支払い)を受け付けられることを確認するには、API_URL=https://your-worker.workers.dev EXPECTED_PAY_TO=0xYourWallet node worker/scripts/payment-monitor.mjsを実行します。
構築方法
- スタック: Cloudflare Workers 上の Hono と、
@x402/hono、@x402/mcpを使用しています。 - 検出:
x-payment-infoを含む OpenAPI、/.well-known/x402、すべての 402 レスポンスに含まれる x402 Bazaar メタデータ、llms.txt、および/.well-known/ai-catalog.jsonに登録された/mcp/server-cardの MCP サーバーカード を提供しています。 - 事前計算データ: 祝日と都市のテーブルはビルド時に構築されるため(
worker/scripts/build-*.mjs)、各リクエストでの検索は O(1) です。 - タイムゾーン: UTC オフセットは、キャッシュされた
Intlフォーマッターと週単位のセグメントキャッシュから取得します。複雑なタイムゾーン(モロッコ、ロードハウ島、チャタム諸島)について、直接検索した結果と照合してテストしています。 - Cron: 組み込みエンジン(
worker/src/cron.ts)を、400 個のランダムな式でcron-parserと照合しています。 - Workers 固有のシム: x402 の Bazaar ルートバリデーターは Ajv のコード生成(
new Function)を使用しますが、Workers ではブロックされます。wrangler.tomlでこれを何もしないシム(worker/src/shims/bazaar.ts)にエイリアスしています。
データとライセンス
- コード: MIT。詳細は LICENSE をご覧ください。サードパーティデータに関する通知は NOTICE に記載されています。
- 祝日データ: date-holidays(CC BY 3.0)に基づいています。太陰暦に基づく日付や政府が宣言する日付は、ルールに基づく推定値です。
- 都市データ: Natural Earth(パブリックドメイン)に基づく city-timezones(MIT)に由来します。
お問い合わせ先:/openapi.json の info.contact をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。