mcpField
M
mycal

mycal

ローカル
github.com/Junhui20生産性32 日前に更新

mycal について

mycal は、州ごとの祝日、学校日程、営業日を確認したい人向けのマレーシアのカレンダー API と MCP サーバーです。休暇計画機能も備え、マレーシア政府の情報源に基づくデータを提供します。

主な機能

  1. 01州別の祝日
  2. 02週末と振替休日の規則
  3. 03営業日の計算
  4. 04学期・学校休暇・試験
  5. 05休暇と連休の計画

活用シーン

  1. 01特定日が営業日か確認
  2. 02州ごとの営業日数を計算
  3. 03学期や試験の日程を確認
  4. 04祝日に合わせて休暇を計画

MCP 対応

MCP サーバーは、MCP 対応 AI アシスタントに祝日、営業日、学校日程、休暇計画を扱う13種類のカレンダーツールを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"junhui20-mycal": {
"command": "npx",
"args": [
"-y",
"@catlabtech/mycal-mcp-server"
]
}
}
}
起動コマンドnpx -y @catlabtech/mycal-mcp-server

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@catlabtech/mycal-mcp-server0.1.4

ツール

13

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
typeenumいいえfederal | state | islamic | islamic_state | replacement | adhoc
yearintegerはい年(例:2026)
monthintegerいいえ
statestringいいえ州コードまたは別名(例:'selangor'、'KL'、'penang')
statusenumいいえconfirmed | tentative | announced | cancelled

詳細

マレーシアのカレンダー API

マレーシアで最も充実したカレンダー API — 祝日、学校カレンダー、試験日程、AI ツール向け MCP サーバーを提供します。

npm: mycal-core npm: mycal-sdk npm: mycal-mcp-server License: MIT Deploys on Cloudflare

データソース:政府の公式官報(JPM BKPP)、JAKIM、KPM、MPM。第三者のウェブサイトからスクレイピングしたデータではありません。

リンク

パッケージ

@catlabtech スコープで npm に公開されています。

パッケージ用途インストール
@catlabtech/mycal-core共通の型、Zod スキーマ、カレンダー/営業日のロジックnpm install @catlabtech/mycal-core
@catlabtech/mycal-sdkREST API 用の TypeScript クライアント SDKnpm install @catlabtech/mycal-sdk
@catlabtech/mycal-mcp-serverAI エージェント向けに 13 個のカレンダーツールを提供する MCP サーバーnpm install @catlabtech/mycal-mcp-server

機能

  • 2026 年の祝日 50 日分を公式官報(Warta Kerajaan)から収録 — 連邦および州固有の祝日
  • 13 州+3 連邦直轄領に別名を設定(KL、JB、Penang など)
  • 週末に対応 — Kedah/Kelantan/Terengganu は金曜~土曜(Kumpulan A)、その他の州は土曜~日曜(Kumpulan B)を週末とし、Johor の過去の変更履歴も記録
  • 州ごとの週末設定に基づき**振替休日(cuti ganti)**を自動計算
  • 営業日計算 — 州ごとに祝日を考慮
  • 学校カレンダー — 学期、休暇、KPM の祝祭日休暇(Lampiran A/B/C)
  • 試験日程 — SPM、STPM、MUET、PT3
  • iCal 購読フィード — 州ごとの .ics フィード
  • AI エージェント向け MCP サーバー — Claude、ChatGPT、その他のアシスタント向けに 13 個のツールを提供
  • 型付きレスポンスを備えた TypeScript SDK(@catlabtech/mycal-sdk)
  • OpenAPI 3.1 仕様+インタラクティブなドキュメント
  • 3 言語対応 — Bahasa Melayu、英語、中国語名(三语支持)

クイックスタート

# Clone and install
git clone https://github.com/Junhui20/malaysia-calendar-api.git
cd malaysia-calendar-api
pnpm install

# Build shared packages
pnpm --filter @catlabtech/mycal-core build
pnpm --filter @catlabtech/mycal-sdk build

# Run API locally (http://localhost:8787)
cd packages/api && npx wrangler dev

# Run web site locally (http://localhost:4321)
pnpm --filter @mycal/web dev

# Validate data
pnpm validate

# Run tests
pnpm test

API の例

ベース URL:https://mycal-api.huijun00100101.workers.dev/v1

祝日の一覧
# All holidays for Selangor in 2026
curl "https://mycal-api.huijun00100101.workers.dev/v1/holidays?year=2026&state=selangor"

# Islamic holidays only
curl "https://mycal-api.huijun00100101.workers.dev/v1/holidays?year=2026&type=islamic"

# March holidays for KL
curl "https://mycal-api.huijun00100101.workers.dev/v1/holidays?year=2026&state=KL&month=3"
日付を確認
# Is March 21 a holiday/weekend/working day?
curl "https://mycal-api.huijun00100101.workers.dev/v1/holidays/check?date=2026-03-21&state=KL"

レスポンス:

{
  "data": {
    "date": "2026-03-21",
    "dayOfWeek": "Saturday",
    "isHoliday": true,
    "isWeekend": true,
    "isWorkingDay": false,
    "isSchoolDay": false,
    "holidays": [
      {
        "id": "2026-hari-raya-aidilfitri-1",
        "name": { "ms": "Hari Raya Aidilfitri", "en": "Eid al-Fitr", "zh": "开斋节" },
        "type": "islamic",
        "status": "confirmed"
      }
    ]
  }
}
営業日
# Count working days in March for Selangor
curl "https://mycal-api.huijun00100101.workers.dev/v1/business-days?start=2026-03-01&end=2026-03-31&state=selangor"

# Add 10 business days to a date
curl "https://mycal-api.huijun00100101.workers.dev/v1/business-days/add?date=2026-03-01&days=10&state=selangor"
学校カレンダー
# Is this a school day?
curl "https://mycal-api.huijun00100101.workers.dev/v1/school/is-school-day?date=2026-03-21&state=selangor"

# School holidays for Kumpulan B
curl "https://mycal-api.huijun00100101.workers.dev/v1/school/holidays?year=2026&group=B"

# Exam schedule
curl "https://mycal-api.huijun00100101.workers.dev/v1/school/exams?year=2026&type=spm"
次の祝日
# Next holiday for Penang
curl "https://mycal-api.huijun00100101.workers.dev/v1/holidays/next?state=penang"
州の特定
# Resolve alias
curl "https://mycal-api.huijun00100101.workers.dev/v1/states/resolve?q=kl"
# -> { "data": { "canonical": "kuala-lumpur", "group": "B" } }

API リファレンス全文

エンドポイント説明
GET /v1/holidays祝日一覧(年、州、種類、ステータス、月で絞り込み)
GET /v1/holidays/checkこの日付は祝日/週末/営業日/登校日ですか?
GET /v1/holidays/today今日の祝日ステータス
GET /v1/holidays/next次に来る祝日
GET /v1/holidays/between指定した日付範囲の祝日
GET /v1/holidays/leave-optimizer最長の連休を得るために取得する年次休暇の日数を提案
GET /v1/business-days日付間の営業日数を数える
GET /v1/business-days/add日付に N 営業日を加算
GET /v1/states週末設定を含む、全 13 州と 3 連邦直轄地
GET /v1/states/resolveエイリアス(KL、penang、jb)を正規コードに解決
GET /v1/school/terms学期の日付と日数
GET /v1/school/holidays学校休暇と KPM の cuti perayaan
GET /v1/school/examsSPM、STPM、MUET、PT3 の日程
GET /v1/school/is-school-day登校日ですか?
GET /v1/feed/ical/:stateiCal サブスクリプションフィード
GET /v1/feed/csv/:state祝日の CSV/スプレッドシート形式のエクスポート
GET /v1/data/*キャッシュ可能なオープンデータの生スナップショット — manifest、states、holidays/:year、all(API キー不要)
GET /v1/prayer-times/:zoneゾーンの JAKIM 礼拝時刻(MYT 形式)。GET /v1/prayer-times/zones でゾーン一覧を取得
POST /v1/keysAPI キーを発行(現時点では管理者限定。GET /v1/keys/whoami で呼び出し元のティアを確認)

リクエスト/レスポンスのスキーマについては、完全な OpenAPI 3.1 仕様を参照してください。

SDK の使用方法

import { MyCalClient } from "@catlabtech/mycal-sdk";

const cal = new MyCalClient();

// Check if a date is a working day
const result = await cal.check("2026-03-21", "selangor");
console.log(result.isWorkingDay); // false

// List holidays
const holidays = await cal.holidays({ year: 2026, state: "KL" });

// Business days
const workDays = await cal.businessDays("2026-03-01", "2026-03-31", "selangor");
console.log(workDays.businessDays); // 22

// School calendar
const terms = await cal.school.terms({ year: 2026, group: "B" });
const exams = await cal.school.exams({ year: 2026, type: "spm" });
const isSchool = await cal.school.isSchoolDay("2026-03-21", "selangor");

MCP サーバー

Malaysia Calendar API を Claude、ChatGPT、または MCP 互換の AI アシスタントに接続します。

Claude Desktop/Claude Code でのセットアップ

MCP の設定に追加します。

{
  "mcpServers": {
    "malaysia-calendar": {
      "command": "npx",
      "args": ["@catlabtech/mycal-mcp-server"]
    }
  }
}
利用可能なツール(13)
ツール説明
get_malaysia_holidays祝日を取得(年、州、種類で絞り込み)
check_malaysia_holiday日付が祝日または営業日かどうかを確認
next_malaysia_holiday次に来る祝日を検索
malaysia_business_days2 つの日付間の営業日数を数える
malaysia_long_weekends連休(3 日以上)を検索
malaysia_leave_optimizer連続休暇日数を最大化できる、最も効率的な休暇取得日を検索
list_malaysia_states週末設定とともに全州を一覧表示
resolve_malaysia_stateエイリアス(KL、JB)を正規コードに解決
malaysia_holiday_changes最近のデータ変更
malaysia_school_terms学期の日付と日数
malaysia_school_holidays学校休暇(cuti penggal、cuti perayaan)
malaysia_examsSPM、STPM、MUET、PT3 の試験日程
malaysia_is_school_day日付が登校日かどうかを確認

州コード

コードエイリアスグループ週末
johorjhr, jbB土~日(2014~2024 年は金~土)
kedahkd, kdhA金~土
kelantankel, kbA金~土
terengganutrg, ktA金~土
perakprk, ipohB土~日
pulau-pinangpenang, pgB土~日
selangorsel, sgrB土~日
negeri-sembilanns, n9B土~日
melakamlk, malaccaB土~日
pahangphg, kuantanB土~日
perlispls, kangarB土~日
sabahsbh, kkB土~日
sarawakswk, kuchingB土~日
kuala-lumpurklB土~日
wp-putrajayaputrajaya, pjyB土~日
wp-labuanlabuan, lbnB土~日

州のエイリアスでは大文字と小文字が区別されません。GET /v1/states/resolve?q=kl を使うと、任意のエイリアスを正規コードに解決できます。

プロジェクト構成

malaysia-calendar-api/
├── data/                        # JSON data files (source of truth / 数据源)
│   ├── holidays/
│   │   ├── 2024.json            # Holiday data per year
│   │   ├── 2025.json
│   │   └── 2026.json
│   ├── school/
│   │   ├── terms-2026.json      # School terms (Kumpulan A + B)
│   │   ├── holidays-2026.json   # School holidays + KPM cuti perayaan
│   │   └── exams-2026.json      # SPM, STPM, MUET, PT3 schedules
│   ├── states.json              # 13 states + 3 FT, aliases, weekend history
│   └── known-fixed-holidays.json
├── packages/
│   ├── core/                    # Shared business logic (types, schemas, utils)
│   │   └── src/
│   │       ├── types.ts         # Holiday, State, SchoolTerm, Exam interfaces
│   │       ├── schemas.ts       # Zod validation schemas
│   │       ├── filter.ts        # Query filtering logic
│   │       ├── replacement.ts   # Cuti ganti calculation
│   │       ├── state-resolver.ts
│   │       ├── business-days.ts
│   │       └── school.ts        # School term/holiday/exam logic
│   ├── api/                     # Hono API on Cloudflare Workers
│   ├── mcp-server/              # MCP Server (13 tools)
│   ├── sdk/                     # TypeScript client SDK (@catlabtech/mycal-sdk)
│   └── web/                     # Astro + Starlight — marketing site, demos, docs
├── scripts/
│   ├── validate-data.ts         # 5-layer data validation pipeline
│   └── sync-to-kv.ts           # JSON -> Cloudflare KV denormalization
├── openapi.yaml                 # OpenAPI 3.1 spec (spec-first)
├── pnpm-workspace.yaml
└── turbo.json

データソース

すべてのデータは、マレーシア政府の公式刊行物から取得しています。

ソースデータURL
JPM BKPP官報/Warta Kerajaan(祝日)kabinet.gov.my
JAKIMタクウィーム・ヒジュリ・ミラディ(イスラム暦)e-solat.gov.my
KPM学年度カレンダー/学校カレンダー(Lampiran A/B/C)moe.gov.my
MPMSTPM および MUET の試験日程mpm.edu.my
州ポータル各州の祝日(13 州)*.gov.my

祝日データには、追跡可能性を確保するため、官報の参照情報(例:P.U.(B) 305/2025)が含まれています。

デプロイ

2 つの部分はそれぞれ独立してデプロイします。

API → Cloudflare Workers
pnpm --filter @catlabtech/mycal-core build
cd packages/api && npx wrangler deploy
ウェブサイト → Cloudflare Pages
pnpm --filter @catlabtech/mycal-core build
pnpm --filter @catlabtech/mycal-sdk build
pnpm --filter @mycal/web build

# Direct upload via wrangler (requires CLOUDFLARE_API_TOKEN + CLOUDFLARE_ACCOUNT_ID)
cd packages/web
npx wrangler pages deploy dist --project-name=mycal-web

初回の Pages 設定:

  1. Cloudflare ダッシュボードで mycal-web という名前の Pages プロジェクトを作成します。
  2. GitHub リポジトリを接続して自動ビルドするか、GitHub Actions ワークフロー(.github/workflows/deploy.yml)から wrangler pages deploy を実行します。
  3. 必要な GitHub シークレット:CLOUDFLARE_API_TOKEN、CLOUDFLARE_ACCOUNT_ID。
CI/CD

GitHub Actions は以下を処理します。

  1. PR ゲート — すべての PR での Zod スキーマ検証とソース間チェック
  2. デプロイ — main へのマージ時に、API を Workers に、ウェブサイトを Pages に並行してビルドおよびデプロイ
  3. 毎日のスクレイピング — 更新情報を確認するための政府ポータル監視
  4. Rukyah モニター — イスラム暦の日付確認の追跡

貢献

以下の方法については、CONTRIBUTING.md を参照してください。

  • 祝日または cuti peristiwa の不足を報告する
  • データの誤りを修正する
  • 新機能を追加する

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。