openworkdays について
OpenWorkdays は、エージェントなどが確定的な営業日計算を行うための日付演算 API です。営業日の加減算、期間内の日数計算、日付の判定に対応し、週末と祝日は呼び出し側が指定します。
主な機能
- 01営業日の加算・減算
- 02期間内の営業日数の計算
- 03日付が営業日かどうかの判定
- 04週末と祝日の指定
- 05UTC による日付計算と JSON 出力
活用シーン
- 01営業日ベースの期限計算
- 02日付範囲内の営業日数の集計
- 03独自の祝日リストによる日付確認
MCP 対応
リモート MCP サーバーは、ステートレスな Streamable HTTP で `businessdays` ツールを 1 つ公開します。引数から add、diff、is のモードを判定し、REST エンドポイントと同じデータを返します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://openworkdays.vercel.app/api/mcpclaude mcp add --transport http solvohq-openworkdays https://openworkdays.vercel.app/api/mcp{"mcpServers":{"solvohq-openworkdays":{"type":"http","url":"https://openworkdays.vercel.app/api/mcp"}}}Cursor で開く{"servers":{"solvohq-openworkdays":{"type":"http","url":"https://openworkdays.vercel.app/api/mcp"}}}VS Code で開く{"mcpServers":{"solvohq-openworkdays":{"type":"http","url":"https://openworkdays.vercel.app/api/mcp"}}}{"mcpServers":{"solvohq-openworkdays":{"serverUrl":"https://openworkdays.vercel.app/api/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
1| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| end | string | いいえ | 終了日 YYYY-MM-DD(diff モード) |
| date | string | いいえ | テストする日付 YYYY-MM-DD(is モード) |
| days | integer | いいえ | 加算する営業日数(add モード)。負数は減算を表します |
| start | string | いいえ | 開始日 YYYY-MM-DD(add および diff モード) |
| weekend | string | いいえ | 週末の日をカンマで区切ったリスト。例:"sat,sun"(デフォルトは sat,sun) |
| holidays | string | いいえ | 非稼働日として扱う YYYY-MM-DD 日付のカンマ区切りリスト |
詳細
OpenWorkdays
登録不要の営業日/稼働日の日付計算 API です。アカウントも API キーも不要で、GET リクエストを 1 回送るだけです。
稼働日の加算・減算、2 つの日付間の営業日のカウント、または日付が営業日かどうかの判定を、独自の休日リストを使って行えます。純粋な UTC の日付計算結果を JSON で返します。自律型 AI エージェントが決定論的な日付エンドポイントを利用できるように作られています。エージェントには登録手続きを行う人間がいません。また、LLM は日付計算が定量的に見ても不正確です。
公開先:https://openworkdays.vercel.app
クイックスタート
curl "https://openworkdays.vercel.app/api/businessdays?start=2026-05-15&days=5"
レスポンスの例:
{
"mode": "add",
"start": "2026-05-15",
"days": 5,
"result": "2026-05-22",
"resultWeekday": "fri",
"startIsBusinessDay": true,
"weekend": ["sat", "sun"],
"holidaysApplied": 0,
"engine": "date-utc-v0.1",
"computedAt": "2026-05-17T00:00:00.000Z"
}
エラーはすべて、error キーを含む JSON と適切な HTTP ステータスで返されます(不正なパラメーターは 400、レート制限は 429、誤ったメソッドは 405)。
3 つのモード
エンドポイントは常に GET /api/businessdays です。渡されたパラメーターからモードが推定されます。
add — 稼働日を加算/減算する
パラメーター:start=YYYY-MM-DD、days=N(整数。+/- 可、|N| <= 10000)、任意の weekend=、任意の holidays=。
curl "https://openworkdays.vercel.app/api/businessdays?start=2026-05-15&days=5"
N=0 の場合、start が非稼働日であっても、そのまま返されます。
diff — 2 つの日付間の営業日をカウントする
パラメーター:start=YYYY-MM-DD、end=YYYY-MM-DD、任意の weekend=、任意の holidays=。両方の端点を含みます。end が start より前の場合、結果は負になります。
curl "https://openworkdays.vercel.app/api/businessdays?start=2026-05-15&end=2026-06-15&holidays=2026-05-25"
is — この日付は営業日ですか?
パラメーター:date=YYYY-MM-DD、任意の weekend=、任意の holidays=。
curl "https://openworkdays.vercel.app/api/businessdays?date=2026-05-16"
isBusinessDay と、"weekend"、"holiday"、null のいずれかを示す reason を返します。
共通パラメーター
weekend(デフォルトはsat,sun)— カンマ区切りのリストです。{sun,mon,tue,wed,thu,fri,sat}のトークン(大文字・小文字は区別されません)、または0-6の数値を指定します。0=Sunday~6=Saturdayです(JS のgetUTCDay()に準拠)。7 日すべてを週末に指定することはできません。holidays— 非稼働日として扱うYYYY-MM-DD形式の日付のカンマ区切りリストです(最大 1000 件)。厳密に検証されます。
エラー
エラーは error キーを含む JSON で返されます。
400— 不正または不足しているパラメーター(missing start、invalid days (must be integer)、invalid weekend token、invalid holiday date、invalid date、specify a mode(usageオブジェクトを含む)など)429— レート制限(Retry-AfterヘッダーとretryAfterSec)405— 不正な HTTP メソッド(GET/OPTIONSのみ許可)
JavaScript
const base = "https://openworkdays.vercel.app";
const r = await fetch(
base + "/api/businessdays?start=2026-05-15&days=5"
);
const out = await r.json(); // { mode:"add", result:"2026-05-22", resultWeekday:"fri", ... }
MCP ツールとして使う(AI エージェント/Claude/Cursor/LLM クライアント)
OpenWorkdays はリモート MCP サーバーでもあるため、エージェントは登録、API キー、OAuth が不要で、ツールとして呼び出せます。
- エンドポイント:
https://openworkdays.vercel.app/api/mcp - トランスポート:ステートレスな Streamable HTTP(POST JSON-RPC 2.0、単一の
application/jsonレスポンス。セッションなし、SSE なし) - 公開するツールは 1 つのみ:
businessdays— 渡された引数からモード(add/diff/is)が推定され、REST エンドポイントと同じ JSON(structuredContentとしても返されます)が返されます。
以下を任意の MCP クライアント設定に追加してください(Claude Desktop、Cursor、または Streamable HTTP トランスポートに対応する任意のクライアント)。
{ "mcpServers": { "openworkdays": { "url": "https://openworkdays.vercel.app/api/mcp" } } }
簡単な動作確認:
curl -s -X POST https://openworkdays.vercel.app/api/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"businessdays","arguments":{"start":"2026-05-15","days":5}}}'
MCP 経由でアップストリームエラーが発生した場合、isError: true を含むツール結果として返されます。
理由
一般公開されている営業日 API は、いずれもアカウント登録または API キーを必要とします。
workingdays.org はテスト専用/サブスクリプション制です。API Ninjas と Holiday API は API キーが必要です。timeanddate は 299 ドルの製品です。RapidAPI の営業日 API には RapidAPI キーが必要です。Microsoft の「Calculate Working Day」コネクタは Power Platform のフレームワークに依存し、英国の銀行休業日のみを対象としています。OpenWorkdays は匿名で使える単一の GET で、登録もキーも不要です。登録を完了するために介在できる人間がいない自律型エージェントにとって、特に便利です。また、LLM は日付計算が定量的に見ても不正確なため、エージェントには推測ではなく、決定論的なエンドポイントが必要です。
制限事項
- 日付のみを対象とした純粋な UTC 演算 — 時刻、夏時間、タイムゾーンは扱いません (これは繰り返しルールの領域であり、意図的に v0.1 の対象外としています)。
- 祝日は呼び出し元が指定 — 国別の祝日データベースは組み込まれていません。これは意図的なものです。資金力のある既存サービスが優位な、7000 件の祝日データベースという軸で、見せかけの競争はしません。必要な
holidays=リストを渡してください。 - インスタンスごとのベストエフォートな IP レート制限 — 悪用を緩和するためのものであり、保証ではありません(サーバーレスインスタンスは一時的なもので、共有されません)。
- MIT ライセンスで、セルフホスト可能 — 以下をご覧ください。
セルフホスト — 依存関係のないファイルだけです
API 全体は、依存関係のない 2 つの単体 Node サーバーレス関数です:
api/businessdays.js(REST)と api/mcp.js
(リモート MCP)。npm install は不要で、依存関係は一切ありません。フォルダーを Vercel にデプロイするか(/api を自動検出)、ハンドラーを任意の Node サーバーレスランタイムに配置してください。
git clone https://github.com/SolvoHQ/openworkdays
cd openworkdays
npx vercel --prod
ライセンス
MIT — LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。