Mudah MCP Server

MCP Server Documentation

Connect AI assistants to Timemoz via the Model Context Protocol (MCP). Query projects, tasks, time tracking, reports, and calendar events — without leaving the chat interface.

Streamable HTTPOAuth 2.0 / PATRead-only

Overview

Mudah MCP is a Model Context Protocol (MCP) server that connects AI assistants to Timemoz — a time tracking platform for teams. It exposes read-only tools for querying projects, tasks, time tracking entries, reports, and calendar events, enabling AI assistants to surface productivity insights and generate reports without leaving the chat interface.

  • Transport: Streamable HTTP
  • Authentication: OAuth 2.0 (Authorization Code + PKCE) or Personal Access Token (PAT)
  • All tools are read-only — no data is created, modified, or deleted
Authentication

Two Ways to Authenticate

Option 1 — OAuth 2.0

Recommended

Authorization Code flow with PKCE. The OAuth metadata discovery endpoint follows RFC 8414.

EndpointURL
OAuth Metadata/.well-known/oauth-authorization-server
Authorization/mcp-api/oauth/authorize
Token/mcp-api/oauth/token
Registration/mcp-api/oauth/register
Revocation/mcp-api/oauth/revoke

After completing the OAuth flow, include the token in every request:

Authorization: Bearer mcp_oauth_<token>

Option 2 — Personal Access Token

Generate a PAT from your Timemoz account settings and include it in the request header. Suitable for personal scripts and integrations where the full OAuth flow is not required.

Add this to your request header:

Authorization: Bearer mcp_pat_<token>

Tip: Treat PATs like passwords. Revoke any token you suspect has been exposed from Timemoz → Settings → Tokens.

MCP Endpoint

POST /mcp

The server accepts MCP messages via HTTP POST. All tools follow the MCP Specification.

Tools

Available Tools

Every tool exposed by the Mudah MCP server. All read-only.

get_me

Get information about the currently authenticated user.

Parameters: none

Returns: User name, username, role, and company.
list_projects

List all projects in the company with optional filtering.

ParameterTypeRequiredDescription
searchstringNoFilter by project name
statusactive | archivedNoProject status (default: active)
clientUuidstringNoFilter by client UUID
pagenumberNoPage number (default: 1)
perPagenumberNoItems per page, max 100 (default: 20)
Returns: Paginated list of projects.
get_project_detail

Get full details of a single project.

ParameterTypeRequiredDescription
uuidstringYesProject UUID
Returns: Budget, member list, task count, and client info.
get_tracking_summary

Get a summary of tracked hours within a date range, grouped by day, user, project, or task.

ParameterTypeRequiredDescription
dateFromstringYesStart date (YYYY-MM-DD)
dateTostringYesEnd date (YYYY-MM-DD), max range 366 days
projectUuidstringNoFilter by project
userUuidstringNoUser UUID; omit for current user, pass "all" for entire team
groupByuser | project | task | dayNoGroup results by (default: day)
Returns: Aggregated hours broken down by the selected group dimension.
get_recent_trackings

Get the latest time tracking entries with project and task details.

ParameterTypeRequiredDescription
limitnumberNoNumber of entries, max 100 (default: 20)
userUuidstringNoUser UUID (default: current user; MANAGER+ can view others)
Returns: Recent time entries with associated project and task context.
list_tasks

List tasks across projects with optional filtering. Includes tasks synced from Jira and ClickUp integrations.

ParameterTypeRequiredDescription
projectUuidstringNoFilter by project
assigneeUuidstringNoFilter by assignee
statusstringNoTask status: open, in_progress, done, etc.
keywordstringNoSearch by task name
pagenumberNoPage number (default: 1)
perPagenumberNoItems per page, max 100 (default: 20)
Returns: Paginated list of tasks.
get_project_report

Get a full report for a single project including total hours, contributors, budget usage, and breakdown by user, task, and day.

ParameterTypeRequiredDescription
uuidstringYesProject UUID
dateFromstringNoStart date (YYYY-MM-DD), default: 30 days ago
dateTostringNoEnd date (YYYY-MM-DD), default: today
Returns: Comprehensive project report with time and budget analysis.
get_team_report

Get a team productivity report with total hours, projects, and per-member breakdown.

Role required: MANAGER or above.

ParameterTypeRequiredDescription
dateFromstringYesStart date (YYYY-MM-DD)
dateTostringYesEnd date (YYYY-MM-DD)
userUuidsstring[]NoFilter by specific user UUIDs
Returns: Team-wide productivity metrics and per-member breakdown.
list_calendar_events

List Google Calendar events within a date range. Events are sourced from synced Google Calendar data.

ParameterTypeRequiredDescription
startDatestringYesStart date (ISO 8601, e.g. 2026-05-01T00:00:00Z)
endDatestringYesEnd date (ISO 8601, e.g. 2026-05-31T23:59:59Z)
sourcecompany | personal | allNoEvent source filter (default: all)
skipnumberNoPagination offset (default: 0)
takenumberNoNumber of events, max 100 (default: 20)
Returns: Calendar events with title, time, and source information.
Example Prompts

Try Asking Your AI Assistant

Once connected, you can ask your AI assistant things like:

"How many hours did I track this week?"

"Show me all active projects."

"Generate a report for project Alpha for last month."

"What tasks are currently in progress for the backend project?"

"Give me a team productivity summary for Q1 2026."

"What company events are scheduled this week?"

Health Check

GET /healthz

Returns the following payload when the server is running:

{ "ok": true, "service": "mudah-mcp", "timestamp": "..." }

Tool Behavior Notes

How every Mudah MCP tool behaves by default.

Read-only

All tools are read-only (readOnlyHint: true, destructiveHint: false).

Idempotent

Calling them multiple times returns the same result for the same inputs.

Company-scoped

Data is scoped to the authenticated user's company — cross-company access is not supported.

Role-based access

get_team_report requires MANAGER+; get_recent_trackings can view other users only at MANAGER+.

Ready to Connect Your AI?

Generate a Personal Access Token in your Timemoz settings or start the OAuth flow, then point your MCP-compatible AI assistant at our endpoint.