MCP Server
The bilauitmcuti MCP server lets AI assistants read the UiTM academic calendar and Malaysia public holidays in plain language. It is read-only and sits on top of the public API, so there is no API key and nothing can be changed.
For example, ask “When does lecture week 1 start for session B-20264?” or “List the public holidays in Selangor for 2026.”
Quick start
The server is hosted — there is nothing to install. Point your MCP client at the URL:
In a client that uses a JSON config (like Cursor), add the server by URL:
{
"mcpServers": {
"bilauitmcuti": {
"type": "http",
"url": "https://mcp.bilauitmcuti.com/mcp"
}
}
}When it connects, try one of the example prompts.
Auth & limits
No API key. The server is public and read-only — tools only issue GET requests. Calls share the same public API rate limits (500 requests / minute per IP, plus a heavy bucket for full-dataset queries). GET /mcp/health is not rate limited. See Rate limits for details.
Legal: Privacy Policy · Terms of Use · hello@bilauitmcuti.com
Add to Claude (custom connector)
- Open Settings → Connectors (or the + menu in chat → Connectors) and choose Add custom connector.
- Set Connector name to
Bila UiTM Cuti, Server URL tohttps://mcp.bilauitmcuti.com/mcp, leave OAuth fields empty, and click Add. - In a chat, open Connectors, enable Bila UiTM Cuti, and ask a question (for example public holidays in Selangor for 2026).
What is MCP?
The Model Context Protocol is an open protocol for connecting AI assistants to outside data and tools. Through this server, your assistant can read:
- Academic calendar — sessions, activities, breaks, and exam weeks for groups A and B.
- Lecture weeks — the 14 teaching weeks in a session.
- Today — what is on for a given date.
- Public holidays — Malaysia holidays by year, coverage, and state.
How it works
The server runs remotely over the Streamable HTTP transport at /mcp. Your client connects to the URL, and the server turns each request into a GET call to /api/v1/* and hands back the result. There is nothing to install or run locally. Source: bilauitmcuti/mcp.
Available tools
Each tool calls one endpoint. Boolean query flags accept real booleans. get_calendar and get_public_holidays also accept limit / compact to trim large payloads. For endpoint field details, see the Academic calendar and Public holidays pages.
| Tool | Endpoint | Description |
|---|---|---|
get_academic_meta | GET /api/v1/meta | List UiTM sessions & programs — use first for valid session IDs (group A/B or all). |
get_calendar | GET /api/v1/calendar | Get academic calendar activities — lectures, breaks, exams for a session or group. |
get_today_status | GET /api/v1/today | Check if a date is a class day, break, exam week, or study week (group required). |
get_lecture_weeks | GET /api/v1/lecture-weeks | Get lecture week dates (Week 1–14) for one session. |
get_public_holiday_meta | GET /api/v1/public-holiday/meta | List public holiday filters — years, coverage, and state slugs. |
get_public_holidays | GET /api/v1/public-holiday | List Malaysia public holidays by year, coverage, and state. |
Example call
A typical tools/call request (Streamable HTTP POST body) looks like this:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_today_status",
"arguments": {
"group": "B",
"date": "2026-03-09"
}
}
}The tool returns both a text block (stringified JSON) and structuredContent for clients that prefer typed results:
{
"content": [
{
"type": "text",
"text": "{ \"date\": \"2026-03-09\", \"group\": \"B\", ... }"
}
],
"structuredContent": {
"date": "2026-03-09",
"group": "B"
}
}Verify it works
Use the MCP Inspector against the hosted URL:
npx @modelcontextprotocol/inspector https://mcp.bilauitmcuti.com/mcpOr list tools with curl (POST only — a bare GET /mcp returns 405, which is expected):
curl -s -X POST 'https://mcp.bilauitmcuti.com/mcp' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Uptime monitors (Better Stack) should GET https://mcp.bilauitmcuti.com/mcp/health and expect HTTP 200 — not GET /mcp.
Configuration
Any client that supports a remote (Streamable HTTP) MCP server works. Point it at https://mcp.bilauitmcuti.com/mcp — setup for common clients is below.
Cursor
Add the server to .cursor/mcp.json, then switch it on under Cursor Settings → MCP:
{
"mcpServers": {
"bilauitmcuti": {
"type": "http",
"url": "https://mcp.bilauitmcuti.com/mcp"
}
}
}Claude Code
Add it from the CLI:
claude mcp add --transport http bilauitmcuti https://mcp.bilauitmcuti.com/mcpOr commit it to a project by adding this to .mcp.json — remote servers need "type": "http":
{
"mcpServers": {
"bilauitmcuti": {
"type": "http",
"url": "https://mcp.bilauitmcuti.com/mcp"
}
}
}Claude Desktop and Claude web/mobile use custom connectors instead of this CLI — see ChatGPT & Claude below.
VS Code
VS Code (GitHub Copilot) uses a servers key in .vscode/mcp.json:
{
"servers": {
"bilauitmcuti": {
"type": "http",
"url": "https://mcp.bilauitmcuti.com/mcp"
}
}
}Codex
Add it from the CLI:
codex mcp add bilauitmcuti --url https://mcp.bilauitmcuti.com/mcpOr edit ~/.codex/config.toml yourself, then restart Codex:
[mcp_servers.bilauitmcuti]
url = "https://mcp.bilauitmcuti.com/mcp"OpenCode
Add it from the CLI:
opencode mcp add bilauitmcuti --url https://mcp.bilauitmcuti.com/mcpOr under the mcp key in opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"bilauitmcuti": {
"type": "remote",
"url": "https://mcp.bilauitmcuti.com/mcp",
"enabled": true
}
}
}ChatGPT & Claude (web & mobile)
Both add remote servers as custom connectors. In ChatGPT, turn on Developer mode under Settings → Apps & Connectors → Advanced settings, then Create a connector with this URL and set authentication to None — this server is public and read-only. In Claude (Desktop, web, or mobile), add a custom connector the same way. A connector you add on the web shows up in the mobile apps too.
ChatGPT custom connectors need a paid plan (Plus, Pro, Business, Enterprise, or Edu); on Business/Enterprise/Edu an admin enables Developer mode first.
Official setup guides from each provider:
- ChatGPT — Developer mode & custom connectors and Connect from ChatGPT (Apps SDK).
- Claude — Get started with custom connectors using remote MCP.
- Other clients — the MCP Connect to remote MCP servers guide covers how any MCP-compatible client adds a remote server.
Example prompts
Once it is connected, ask things like:
- When does lecture week 1 start for session B-20264?
- Is 2026-03-09 a class day for Group B Diploma?
- List Malaysia public holidays in Selangor for 2026.
- What UiTM sessions are available for Group A?
Troubleshooting
- Tools don't show up — remove any existing
bilauitmcutiMCP server or connector, add it again withhttps://mcp.bilauitmcuti.com/mcp, then restart the client and refresh the tools list. Tool schemas are sanitized for Claude, Cursor, ChatGPT, and VS Code (no$schemakey). - Can't connect / fetch failed — use Streamable HTTP with
type: "http"where supported, and double-check the URL is exactlyhttps://mcp.bilauitmcuti.com/mcp. GET /mcpreturns 405 — expected. UsePOST(or the Inspector) for Streamable HTTP.- Rate limited (429) — you are sending too many requests. Wait the seconds in the
Retry-Afterheader, then retry. - Still stuck? — run the Verify steps with MCP Inspector.
Changelog
- 1.0.2 — remote Streamable HTTP server with calendar and public-holiday tools, resources, prompts, and structured tool results.