Wakapi MCP Server
The Wakapi MCP Server provides development time tracking and productivity analytics by translating Wakapi REST API calls into MCP tools.
Core Capabilities:
User Statistics & Analytics - Retrieve comprehensive coding statistics for various time ranges (today, week, month, year, all time) with filtering by project, language, editor, OS, machine, or label
Project Management - List and filter user projects, and get detailed information about specific projects including creation dates and last activity
User Information - Fetch user profile data including username, email, timezone, last heartbeat, and account settings
Leaderboard Access - View ranked lists of users by coding activity with detailed breakdowns of total coding time, daily averages, and language usage
All-Time Summary - Get cumulative coding statistics since the user started tracking with human-readable time ranges
Recent Activity Logs - Retrieve recent development heartbeats with filtering by project, configurable date ranges, and limits, showing files edited, languages used, branches, and write operations
Connection Testing - Verify connectivity to the Wakapi server and validate API configuration
Key Features:
Compatible with Wakapi's WakaTime-compatible API endpoints
Secure authentication using API keys encoded as Base64 Bearer tokens
Flexible configuration via environment variables or configuration files (TOML/JSON)
Multiple transport modes: STDIO for direct MCP client integration or SSE (HTTP) for web access
Provides development time tracking tools by collecting logs from Wakapi REST API, including statistics, project details, leaderboards, and recent development activity logs
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Wakapi MCP Servershow me my coding stats from last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Wakapi MCP Server
This is an MCP (Model Context Protocol) server. It provides development time tracking tools by collecting logs from Wakapi REST API.
This repository is unofficial. Use at your own risk.
Quick Start
Prerequisites
Python 3.11 or higher
Wakapi server with API access
MCP Server Configuration Examples
Quickstart with Environment Variables
{
"mcpServers": {
"wakapi": {
"env": {
"WAKAPI_URL": "http://localhost:3000",
"WAKAPI_API_KEY": "your-api-key"
},
"command": "uv",
"args": [
"tool",
"run",
"--from",
"git+https://github.com/impure0xntk/mcp-wakapi",
"wakapi-mcp"
]
}
}
}Enhanced Security with Configuration File
{
"mcpServers": {
"wakapi": {
"command": "uv",
"args": [
"tool",
"run",
"--from",
"git+https://github.com/impure0xntk/mcp-wakapi",
"wakapi-mcp",
"--config",
"/path/to/config.toml"
]
}
}
}Related MCP server: WakaTime MCP Server
Features
Collects development time logs via the Wakapi API
Provides MCP tools for retrieving development data
Fast processing using FastMCP
Reproducible development environment with Nix flakes
Modular tool architecture
Improved testability through dependency injection
Design based on the single responsibility principle
Provided Tools
This server provides the following tools that can be used by MCP-compatible clients:
Note: {api_path} is configurable: by default, /compat/wakatime/v1.
Please see the Configuration section.
Tool Name | Description | API Endpoint |
Get Stats | Retrieve statistics for a given user over a specified time range | |
Get Projects | Retrieve and filter the user projects | |
Get User | Retrieve the given user information | |
Get Leaders | Retrieve leaderboard information | |
Get All Time Since Today | Retrieve all time information since today | |
Get Project Detail | Retrieve detailed information about a specific project | |
Get Recent Logs | Retrieve recent development logs | |
Test Connection | Test connection to the Wakapi server | None |
Configuration Details
Environment Variables Configuration
The most common way to configure the server is through environment variables:
export WAKAPI_URL="http://your-wakapi-server:3000"
export WAKAPI_API_KEY="your_actual_api_key_here"
export WAKAPI_API_PATH="/compat/wakatime/v1"Or pass to mcpServers:
{
"mcpServers": {
"wakapi": {
"env": {
"WAKAPI_URL": "http://localhost:3000",
"WAKAPI_API_KEY": "your-api-key"
},
...Configuration Files
You can also use configuration files in TOML or JSON format:
TOML format (config.toml):
[wakapi]
url = "http://your-wakapi-server:3000"
api_key = "your_actual_api_key_here"
api_path = "/compat/wakatime/v1"
timeout = 30
retry_count = 3
[server]
host = "0.0.0.0"
port = 8000
[logging]
level = "INFO"
format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"JSON format (config.json):
{
"wakapi": {
"url": "http://your-wakapi-server:3000",
"api_key": "your_actual_api_key_here",
"api_path": "/compat/wakatime/v1",
"timeout": 30,
"retry_count": 3
},
"server": {
"host": "0.0.0.0",
"port": 8000
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
}
}For Developers
Setup Development Environment
This project provides a reproducible development environment using Nix flakes:
# Start the development environment
nix develop
# Or start a shell
nix-shellAnd also use uv to activate, sync and run.
Starting the MCP Server from python command
# Set environment variables
export WAKAPI_URL="http://localhost:3000"
export WAKAPI_API_KEY="your_actual_api_key_here"
export WAKAPI_API_PATH="/compat/wakatime/v1"
# Start the server in STDIO mode (default)
python main.py --transport stdio
# Start the server in SSE (HTTP) mode
python main.py --transport sse --port 8001
# Start with a configuration file
python main.py --config /path/to/config.tomlAuthentication Method: The API key is automatically base64-encoded and sent as a Bearer token.
--transport stdio: Uses STDIO transport (default). Can be used directly with MCP clients like opencode--transport sse --port 8001: Uses SSE (HTTP) transport. Accessible via browser or HTTP
Testing
You can test the server using pytest:
# Run all tests
pytest
# Run specific tests
pytest tests/test_mcp_server.py -vLicense
Apache License 2.0
Contributing
Issues and Pull Requests are welcome.
Available Tools
8 toolsget_all_time_since_todayB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | current |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds useful context: it mimics a specific external API, requires authentication via ApiKeyAuth with a Basic header, and implies a read-only operation ('retrieve'). However, it doesn't disclose rate limits, error handling, or response format details beyond the schema reference, leaving gaps for a tool with authentication requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately concise but includes extraneous OpenAPI metadata (operationId, summary, tags, responses) that doesn't directly aid tool selection. The core purpose is front-loaded, but the additional details add noise without clear value. It could be more streamlined by focusing only on actionable information for the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter), no annotations, and the presence of an output schema (which handles return values), the description is reasonably complete. It covers authentication needs and parameter semantics adequately. However, it lacks error handling or rate limit info, which would enhance completeness for an authenticated API tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the input schema, which has 0% description coverage. It explains the 'user' parameter as 'User ID to fetch data for (or 'current')', clarifying the optional default and special value 'current'. This compensates well for the schema's lack of descriptions, though it doesn't detail format constraints or examples beyond this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieve' and resource 'summary for all time since today for the specified user', making the purpose evident. It distinguishes from siblings by specifying the time scope ('all time since today'), though it doesn't explicitly contrast with tools like get_stats or get_recent_logs. The purpose is specific but not fully differentiated from all alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_stats or get_recent_logs. It mentions the API endpoint it mimics but doesn't explain the context or prerequisites for choosing this specific summary retrieval. There's an implied usage based on the time scope, but no explicit when/when-not instructions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leadersB
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| page | Yes | |
| range | Yes | |
| language | Yes | |
| total_pages | Yes | |
| current_user | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does reveal important behavioral traits: it requires API key authentication with specific header formatting, and it returns a 200 response with a structured schema. However, it doesn't mention rate limits, pagination, error conditions, or whether this is a read-only operation (though 'list' implies read-only).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise but has structural issues. The first sentence clearly states the purpose, but then includes API documentation details (operationId, summary, tags, responses) that might be redundant. The authentication instructions are necessary but could be more integrated. Some information feels like it belongs in structured fields rather than the description text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this tool has 0 parameters, 100% schema coverage, and an output schema exists, the description provides adequate context. It explains what the tool does, mentions the API endpoint it mimics, specifies authentication requirements, and indicates the response structure. For a parameterless read operation with output schema, this is reasonably complete, though it could benefit from more behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% description coverage, so the schema already fully documents the parameter situation. The description appropriately doesn't waste space discussing non-existent parameters. It does mention the authentication requirement which could be considered a parameter-like concern, though it's handled via headers rather than input parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'List of users ranked by coding activity in descending order.' This specifies the verb ('list'), resource ('users'), and ranking criteria ('coding activity'), making it easy to understand what the tool does. However, it doesn't explicitly differentiate from sibling tools like 'get_stats' or 'get_user' which might also involve user data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. While it mentions mimicking a WakaTime API endpoint, it doesn't explain when this leaderboard tool is appropriate compared to other user-related tools like 'get_user' or 'get_stats'. There's no mention of prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_detailA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| user | No | current |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key traits: it's a read operation ('Retrieve'), requires authentication (ApiKeyAuth with specific header format), and mimics an undocumented endpoint. It doesn't cover rate limits, error handling, or pagination, but for a simple retrieval tool, this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (purpose, endpoint reference, authentication, args, returns) and uses bullet points for returns. It's appropriately sized for the tool's complexity, but the authentication details could be slightly more concise, and some sentences are a bit lengthy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, but with an output schema), the description is complete enough. It covers purpose, authentication, parameters, and return values in detail. The output schema is provided, so the description doesn't need to explain return values extensively, and it adds useful context like the endpoint mimicry.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for both parameters: 'id' is explained as 'Project ID to fetch', and 'user' is detailed as 'User ID to fetch data for (or 'current')', including the default value. This goes beyond the schema's basic titles, though it could provide more context on valid formats or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Retrieve') and resource ('a single project'), making the purpose unambiguous. It distinguishes this from sibling tools like 'get_projects' (plural) by specifying it fetches a single project. However, it doesn't explicitly contrast with other siblings like 'get_user' or 'get_stats', so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning it 'mimics undocumented endpoint related to https://wakatime.com/developers#projects', which provides context. However, it lacks explicit guidance on when to use this tool versus alternatives like 'get_projects' or other siblings, and doesn't specify prerequisites or exclusions beyond the authentication note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectsB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | current | |
| q | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses authentication requirements ('Requires ApiKeyAuth') and references the API endpoint, which is helpful. However, it doesn't mention rate limits, pagination behavior, error responses, or what happens when filtering returns no results—significant gaps for a tool with no annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose but includes extensive OpenAPI specification details (operationId, summary, parameters, responses) that duplicate information already in structured fields. This adds verbosity without proportional value, though the authentication note at the end is necessary and well-placed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no annotations, but with an output schema), the description is reasonably complete. It covers authentication, parameters, and references the external API, though it could better explain behavioral aspects like error handling. The presence of an output schema reduces the need to describe return values in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the 'user' parameter ('User ID to fetch data for (or 'current')') and 'q' parameter ('Query to filter projects by'), adding meaningful context beyond the bare schema. However, it doesn't clarify what 'current' means in practice or provide examples of valid query formats, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Retrieve and filter') and resource ('user's projects'), making the purpose evident. It distinguishes from some siblings like 'get_user' or 'get_stats' by focusing specifically on projects, though it doesn't explicitly differentiate from 'get_project_detail' which retrieves a single project versus this tool's list/filter functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_project_detail' for single project details or 'get_stats' for project statistics, leaving the agent to infer usage context from tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_logsA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | current | |
| project_name | No | ||
| days | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and delivers substantial behavioral information. It discloses authentication requirements (ApiKeyAuth with specific header format), describes the return format in detail, mentions sorting behavior ('Sorted by time descending'), and references the external API it mimics. It doesn't mention rate limits, error conditions, or pagination behavior, preventing a perfect score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections: purpose statement, API reference, authentication requirements, parameter documentation, and return format. Each sentence adds value. It could be slightly more concise by combining some return field explanations, but overall it's efficiently organized and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 parameters, 0% schema description coverage, no annotations, but with output schema details provided, the description is remarkably complete. It covers authentication, parameters, return format, sorting behavior, and API context. The detailed return type documentation compensates for the lack of output schema, making this description comprehensive for agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given 0% schema description coverage, the description fully compensates by providing detailed parameter documentation. Each of the 4 parameters is clearly explained with type, requirement status, defaults, and purpose. The description adds crucial semantic context beyond what the bare schema provides, such as 'user (or current)' clarification and filtering behavior for project_name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get heartbeats of user for recent days' with specific resource (heartbeats) and scope (recent days). It distinguishes from siblings by specifying it's an extension of heartbeats GET for multiple days, differentiating from tools like get_stats or get_user. However, it doesn't explicitly contrast with all siblings like get_projects or get_project_detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by mentioning it's an 'extension of heartbeats GET' and 'mimics' a specific API endpoint, suggesting when this tool might be preferred over simpler heartbeats queries. However, it doesn't provide explicit guidance on when to use this vs. alternatives like get_stats or get_projects, nor does it mention any prerequisites beyond authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statsC
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user | Yes | ||
| range | Yes | ||
| project | No | ||
| language | No | ||
| editor | No | ||
| operating_system | No | ||
| machine | No | ||
| label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions authentication requirements ('Requires ApiKeyAuth') and references an external API, which adds some behavioral context. However, it lacks details on rate limits, error handling, or response structure beyond the HTTP 200 code. The description doesn't contradict any annotations, as none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured but verbose, including OpenAPI-like details (operationId, tags, parameters, responses) that may be redundant with the input schema. The core purpose is stated upfront, but the additional technical specifications could be streamlined. It's not excessively long but includes elements that might not earn their place in a tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters with 0% schema coverage and an output schema present, the description partially compensates by listing parameters and noting authentication. However, it lacks context on sibling tool differentiation, error cases, or usage scenarios. The output schema existence reduces the need to describe return values, but overall completeness is moderate due to missing operational guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It lists all parameters with brief descriptions (e.g., 'User ID to fetch data for', 'Range interval identifier'), which adds meaning beyond the schema's titles. However, it doesn't explain parameter interactions, default behaviors, or provide examples, leaving gaps for the agent to infer usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve statistics for a given user.' It specifies the verb ('Retrieve') and resource ('statistics'), and mentions the user context. However, it doesn't explicitly differentiate from sibling tools like 'get_user' or 'get_project_detail', which might also retrieve user-related data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It mentions mimicking an external API reference but doesn't explain when to choose this over sibling tools like 'get_user' or 'get_projects'. There's no mention of prerequisites, such as authentication requirements, which are only noted in a separate section.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_userB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | current |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds some context by specifying authentication requirements (ApiKeyAuth with Basic header) and referencing the external API, but lacks details on error handling, rate limits, or response structure beyond the schema reference. This is adequate but has clear gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose but includes verbose OpenAPI-like details (e.g., operationId, tags, responses) that could be streamlined. Some sentences, like the API mimic reference, add value, but others repeat structured information, reducing efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter) and the presence of an output schema, the description is reasonably complete. It covers authentication, parameter semantics, and references the API, though it could benefit from more behavioral context like error cases or usage examples to be fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the 'user' parameter as 'User ID to fetch (or 'current')', which adds meaning beyond the schema's basic type and title. However, it doesn't detail format constraints or examples, leaving some ambiguity, so it meets the baseline for partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'retrieve' and the resource 'user', making the purpose evident. However, it does not explicitly differentiate this tool from sibling tools like 'get_stats' or 'get_leaders', which might also retrieve user-related data in different contexts, so it falls short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as whether it's for fetching basic user info compared to more detailed stats from sibling tools. It mentions the API endpoint it mimics but offers no context-specific usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_connectionA
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does disclose this is a read-only diagnostic operation that makes an API call. However, it doesn't mention potential side effects, authentication requirements, rate limits, or error handling specifics beyond what's in the return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with the purpose in the first sentence and return details in a clear bulleted format. Every sentence adds value without redundancy, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's diagnostic nature, 0 parameters, and the presence of an output schema (implied by the detailed return description), the description is mostly complete. However, it could benefit from mentioning typical use cases or prerequisites like server configuration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0 parameters and 100% schema description coverage, the baseline would be 4. The description appropriately notes there are no input parameters by not discussing any, which aligns perfectly with the empty input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Test Wakapi server connection') and method ('via simple API call to fetch projects'), distinguishing it from sibling tools that retrieve actual data rather than testing connectivity. It explicitly identifies the resource being accessed (Wakapi server) and the verification mechanism.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying this is for connection testing, suggesting it should be used to verify server accessibility before invoking other tools. However, it doesn't explicitly state when NOT to use it or name specific alternative tools for different purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a distinct purpose with clear boundaries: get_all_time_since_today for overall summary, get_stats for detailed statistics, get_projects/get_project_detail for project data, get_recent_logs for heartbeat logs, get_user for user info, get_leaders for rankings, and test_connection for connectivity. No overlap or ambiguity exists between these functions.
The naming follows a consistent 'verb_noun' pattern with 'get_' prefix for 7 out of 8 tools (e.g., get_stats, get_projects), which is highly predictable. The only deviation is test_connection, which breaks the pattern but remains clear in purpose.
With 8 tools, this server is well-scoped for a Wakatime/Wakapi analytics domain. It covers essential operations like retrieving stats, projects, user data, logs, and rankings without being overwhelming or sparse, fitting the typical 3-15 tool range for focused servers.
The toolset provides comprehensive read-only coverage for Wakatime/Wakapi analytics, including user stats, projects, logs, and leaderboards. A minor gap exists in write operations (e.g., creating or updating data), but this aligns with the server's apparent purpose as a data retrieval interface, and agents can work effectively within this scope.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Access and interact with anime and manga data seamlessly. Retrieve detailed information about your…
Code::Stats public coding-XP profiles (codestats.net)
Create projects and read their web analytics: views, referrers, countries, custom events.
Access the GitHub API, enabling file operations, repository management, search functionality, and…
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables users to measure, track, and compare response times of GitHub Copilot and other AI models. Provides statistical analysis and performance comparison tools for evaluating AI model efficiency.
- AlicenseNot gradedqualityDmaintenanceProvides access to WakaTime coding analytics data through MCP tools. Enables querying coding stats, activity summaries, project lists, and time tracking information from your WakaTime account.MIT
- AlicenseBqualityDmaintenanceEnables time tracking and project management through the Clockify API. Supports starting/stopping timers, logging time entries, managing projects and tasks, and generating reports with natural language commands.2118MIT
- AlicenseNot gradedqualityBmaintenanceEnables LLM agents to query and analyze ActivityWatch time tracking data, including window activity, web browsing, and category management with natural language time periods and automatic data aggregation.12GPL 3.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/impure0xntk/mcp-wakapi'
If you have feedback or need assistance with the MCP directory API, please join our Discord server