The Wakapi MCP server provides 8 tools with descriptions extracted from OpenAPI-like annotations, but exhibits significant gaps in schema completeness, parameter descriptions, and error handling. While tool names follow verb conventions (get_*, test_), input schemas are partially visible but inconsistently documented. Most tools lack explicit error recovery guidance and field-level output schema documentation. The server relies on external API documentation rather than self-contained tool definitions. STDIO transport limits remote accessibility.
Retrieve summary for all time since today for the specified user. operationId: get-all-time summary: Retrieve summary for all time description: Mimics https://wakatime.com/developers#all_time_since_today tags: [wakatime] parameters: - name: user in: path description: User ID to fetch data for (or 'current') required: true schema: type: string responses: 200: description: OK schema: v1.AllTimeViewModel Requires ApiKeyAuth: Set header `Authorization` to your API Key encoded as Base64 and prefixed with `Basic`.
List of users ranked by coding activity in descending order. operationId: get-wakatime-leaders summary: List of users ranked by coding activity in descending order. description: Mimics https://wakatime.com/developers#leaders tags: [wakatime] responses: 200: description: OK schema: v1.LeadersViewModel Requires ApiKeyAuth: Set header `Authorization` to your API Key encoded as Base64 and prefixed with `Basic`.
Retrieve a single project. Mimics undocumented endpoint related to https://wakatime.com/developers#projects. Requires ApiKeyAuth: Set header `Authorization` to your API Key encoded as Base64 and prefixed with `Basic`. Args: id (str, required): Project ID to fetch. user (str, required, default="current"): User ID to fetch data for (or 'current'). Returns: v1.ProjectViewModel: - data (Project): - id (str): Project ID. - name (str): Project name. - urlencoded_name (str): URL encoded name. - created_at (str): Creation timestamp. - last_heartbeat_at (str): Last activity timestamp. - human_readable_last_heartbeat_at (str): Human readable last activity.
Output schemas not explicitly documented. Tools reference external OpenAPI schemas (v1.StatsViewModel, v1.ProjectsViewModel, etc.) but MCP clients receive no machine-readable schema definition. Agents cannot predict response structure to plan downstream calls.
No error handling guidance in tool descriptions. Tools do not document failure modes, recovery steps, or what to do if API calls fail (invalid credentials, rate limiting, network errors). Agents have no way to recover from failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 41 | - | v1 |
Retrieve and filter the user's projects. operationId: get-wakatime-projects summary: Retrieve and filter the user's projects description: Mimics https://wakatime.com/developers#projects tags: [wakatime] parameters: - name: user in: path description: User ID to fetch data for (or 'current') required: true schema: type: string - name: q in: query description: Query to filter projects by schema: type: string responses: 200: description: OK schema: v1.ProjectsViewModel Requires ApiKeyAuth: Set header `Authorization` to your API Key encoded as Base64 and prefixed with `Basic`.
Get heartbeats of user for recent days (extension of heartbeats GET). Mimics https://wakatime.com/api/v1/users/{user}/heartbeats for multiple days. Requires ApiKeyAuth: Set header `Authorization` to your API Key encoded as Base64 and prefixed with `Basic`. Args: user (str, required, default="current"): Username (or current). project_name (str, optional): Filter by project. days (int, default=7): Number of days to retrieve. limit (int, default=1000): Maximum number of heartbeats. Returns: List of HeartbeatEntry: Each with id (str), project (str), language (str), entity (str), time (number), is_write (bool), branch (str), category (str), cursorpos (int), line_additions (int), line_deletions (int), lineno (int), lines (int), type (str), user_agent_id (str), user_id (str), machine_name_id (str), created_at (str). Sorted by time descending.
Retrieve statistics for a given user. operationId: get-wakatime-stats summary: Retrieve statistics for a given user description: Mimics https://wakatime.com/developers#stats tags: [wakatime] parameters: - name: user in: path description: User ID to fetch data for (or 'current') required: true schema: type: string - name: range in: path description: Range interval identifier required: true schema: type: string enum: [ "today", "yesterday", "week", "month", "year", "7_days", "last_7_days", "30_days", "last_30_days", "6_months", "last_6_months", "12_months", "last_12_months", "last_year", "any", "all_time" ] - name: project in: query description: Project to filter by schema: type: string - name: language in: query description: Language to filter by schema: type: string - name: editor in: query description: Editor to filter by schema: type: string - name: operating_system in: query description: OS to filter by schema: type: str - name: machine in: query description: Machine to filter by schema: type: string - name: label in: query description: Project label to filter by schema: type: string responses: 200: description: OK schema: v1.StatsViewModel Requires ApiKeyAuth: Set header `Authorization` to your API Key encoded as Base64 and prefixed with `Basic`.
Retrieve the given user. operationId: get-wakatime-user summary: Retrieve the given user description: Mimics https://wakatime.com/developers#users tags: [wakatime] parameters: - name: user in: path description: User ID to fetch (or 'current') required: true schema: type: string responses: 200: description: OK schema: v1.UserViewModel Requires ApiKeyAuth: Set header `Authorization` to your API Key encoded as Base64 and prefixed with `Basic`.
Test Wakapi server connection via simple API call to fetch projects. Returns: A dictionary with the connection test result, including: - status (str): 'success' or 'error'. - message (str): Description of the result. - projects_count (int, optional): Number of projects if successful. - server_url (str): The Wakapi server URL. - api_path (str): The API path used for requests. - error (str, optional): Error message if failed.
Credentials passed via server-side injection but no explicit documentation. Tools reference 'ApiKeyAuth' set via header 'Authorization' (Base64 Basic), but mechanism is not visible in tool definitions. If agents or users attempt to pass credentials as parameters, they risk logging secrets.
Parameter descriptions generic or missing detail. 'user' param documented as 'User ID to fetch data for (or 'current')' but no mention of format, validation rules, or that 'current' is special. 'range' param has enum but no guidance on which range to use for common scenarios (daily stats vs yearly trends).
get_stats 'operating_system' parameter has type 'str' instead of 'string' in schema. Inconsistent type definitions; some params use 'string', others 'str'. This may cause schema validation failures.
No pagination or result-limiting guidance. get_projects, get_recent_logs (default limit=1000) and others do not document max result counts or pagination tokens. Agents could request unlimited results and exhaust context windows.
Tool composition unclear. No documentation of which tools to call in sequence to accomplish user goals (e.g. 'search for a project, then fetch its stats'). Agents must infer multi-step sequences without guidance.
get_leaders and get_stats descriptions do not mention permissions or prerequisites (e.g. are these public endpoints or require authentication? Can the LLM call them without explicit user identity?).