Clockify MCP Server
Provides tools for interacting with the Clockify API to manage time entries, start and stop timers, and perform team management tasks like analyzing weekly summaries and identifying overtime or undertime users.
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., "@Clockify MCP ServerShow me all time logged to the 'Website Redesign' project this 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.
WARNING
β οΈ THIS HAS MOSTLY BEEN CODED VIA AI - PROCEED AT YOUR OWN RISKβ οΈ
Clockify MCP Server
A Model Context Protocol (MCP) server that provides seamless integration with the Clockify time tracking API. This server enables AI assistants to interact with Clockify for time tracking, reporting, and team management tasks.
Features
Core Functionality
π Find time entries by user, project, or search phrase
β±οΈ Start and stop timers with project association
β Add time entries for any user with flexible parameters
π High-level analysis tools for team management
π Weekly summaries and overtime detection
High-Level Tools
Find overtime users: Identify team members working >40 hours/week
Find undertime users: Identify team members logging <20 hours/week
Weekly summaries: Get detailed breakdowns of hours by week
Project analytics: See who's working on what and for how long
Related MCP server: Clockify MCP Server
Installation
Prerequisites
Python 3.10 or higher
Clockify API key (Get one here)
Quick Install with uvx
The easiest way to use this server is with uvx (bundled with uv):
# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
# Run the server directly (it will be cached)
uvx clockify-mcp-serverManual Installation
# Clone the repository
git clone https://github.com/yourusername/clockify-mcp-server.git
cd clockify-mcp-server
# Install with pip
pip install -e .
# Or install from PyPI (once published)
pip install clockify-mcp-serverConfiguration
Environment Variables
Set your Clockify API key as an environment variable:
export CLOCKIFY_API_KEY="your_api_key_here"You can get your API key from Clockify User Settings under "API" section.
MCP Client Configuration
Add this to your MCP client configuration file:
For Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"clockify": {
"command": "uvx",
"args": ["clockify-mcp-server"],
"env": {
"CLOCKIFY_API_KEY": "your_api_key_here"
}
}
}
}For Opencode
{
"mcp": {
"clockify": {
"command": ["uvx", "clockify-mcp-server"]
"environment": {
"CLOCKIFY_API_KEY": "your_api_key_here"
}
}
}
}Available Tools
1. find_user_time_entries
Find all time entries for a specific user.
Parameters:
user_name(required): Name of the user (partial match, case-insensitive)start_date(optional): Start date in YYYY-MM-DD format (default: 30 days ago)end_date(optional): End date in YYYY-MM-DD format (default: today)limit(optional): Maximum entries to display (default: 50, use 0 for unlimited)workspace_id(optional): Workspace ID (default: user's default workspace)
Example:
Find all time entries for John Doe from the last 30 days2. find_project_time_entries
Find all time entries for a specific project.
Parameters:
project_name(required): Name of the project (partial match, case-insensitive)start_date(optional): Start date in YYYY-MM-DD format (default: 30 days ago)end_date(optional): End date in YYYY-MM-DD format (default: today)limit(optional): Maximum entries to display (default: 30, use 0 for unlimited)workspace_id(optional): Workspace ID
Example:
Show me all time logged to the "Website Redesign" project this month3. search_time_entries
Search time entries by description phrase.
Parameters:
search_phrase(required): Phrase to search for in descriptionsuser_name(optional): Limit search to specific userstart_date(optional): Start date in YYYY-MM-DD format (default: 30 days ago)end_date(optional): End date in YYYY-MM-DD format (default: today)limit(optional): Maximum entries to display (default: 50, use 0 for unlimited)workspace_id(optional): Workspace ID
Example:
Find all time entries containing "meeting" in the description4. add_time_entry
Add a time entry for a specific user.
Parameters:
user_name(required): Name of the userdescription(required): Description of the workstart_time(required): Start time in ISO format (e.g., 2024-01-29T09:00:00)end_time(required): End time in ISO format (e.g., 2024-01-29T17:00:00)project_name(optional): Project to associate withtask_name(optional): Task within the project (requires project_name)billable(optional): Whether time is billable (default: true)workspace_id(optional): Workspace ID
Example:
Add a time entry for Jane Smith: 8 hours today on "Client Project" for meetings5. start_timer
Start a timer for the current user.
Parameters:
description(required): What you're working onproject_name(optional): Project to associate withtask_name(optional): Task within the project (requires project_name)workspace_id(optional): Workspace ID
Example:
Start a timer for "Writing documentation" on the "Internal Tools" project6. stop_timer
Stop the currently running timer.
Parameters:
workspace_id(optional): Workspace ID
Example:
Stop my current timer7. find_overtime_users
Find users working more than specified hours per week.
Parameters:
hours_threshold(optional): Hours per week threshold (default: 40)weeks(optional): Number of weeks to analyze (default: 4)workspace_id(optional): Workspace ID
Example:
Show me team members who worked more than 40 hours in any week this month8. find_undertime_users
Find users who didn't log minimum hours per week.
Parameters:
hours_threshold(optional): Minimum hours threshold (default: 20)weeks(optional): Number of weeks to analyze (default: 1)workspace_id(optional): Workspace ID
Example:
Who didn't log at least 20 hours last week?9. get_user_weekly_summary
Get a weekly breakdown of hours for a user.
Parameters:
user_name(required): Name of the userweeks(optional): Number of weeks to analyze (default: 4)workspace_id(optional): Workspace ID
Example:
Show me John's weekly hours for the past monthUsage Examples
With Claude Desktop
Once configured, you can ask Claude natural language questions:
"Find all time entries for Sarah Johnson from last week"
"Show me everyone who logged time to the Mobile App project this month"
"Start a timer for code review on the Backend API project"
"Who on the team worked more than 45 hours in the past month?"
"Add a time entry for Mike: 4 hours yesterday on Client Presentation"Programmatic Usage
from clockify_mcp import ClockifyClient
import asyncio
async def main():
client = ClockifyClient(api_key="your_api_key")
# Get current user
user = await client.get_current_user()
print(f"Logged in as: {user['name']}")
# Get default workspace
workspace = await client.get_default_workspace()
# Find a user
user = await client.find_user_by_name(workspace['id'], "John")
# Get their time entries
entries = await client.get_time_entries(
workspace_id=workspace['id'],
user_id=user['id']
)
print(f"Found {len(entries)} time entries")
await client.close()
asyncio.run(main())Development
Setup Development Environment
# Clone the repository
git clone https://github.com/KeithHanson/clockify-mcp
cd clockify-mcp-server
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install in development mode
pip install -e ".[dev]"Running Tests
pytest tests/Code Formatting
# Format code
black src/
# Lint code
ruff check src/Project Structure
clockify-mcp-server/
βββ src/
β βββ clockify_mcp/
β βββ __init__.py
β βββ client.py # Clockify API client
β βββ server.py # MCP server implementation
βββ docs/ # Full API documentation
β βββ 00_INDEX.md
β βββ 01_USER_API.md
β βββ 02_WORKSPACE_API.md
β βββ 03_TIME_ENTRY_API.md
β βββ 04_PROJECT_API.md
β βββ 05_REPORTS_API.md
β βββ 06_WEBHOOKS_API.md
β βββ 07_QUICK_REFERENCE.md
βββ tests/ # Test suite
βββ pyproject.toml # Project configuration
βββ README.md # This file
βββ LICENSE # MIT LicenseAPI Documentation
Complete API documentation is available in the docs/ directory:
00_INDEX.md - Overview and quick reference
01_USER_API.md - User management endpoints
02_WORKSPACE_API.md - Workspace configuration
03_TIME_ENTRY_API.md - Time tracking operations
04_PROJECT_API.md - Project management
05_REPORTS_API.md - Reporting and analytics
06_WEBHOOKS_API.md - Webhook configuration (not implemented in MCP server)
07_QUICK_REFERENCE.md - Code snippets and examples
Limitations
User-specific operations: Some operations (like adding time entries for other users) may require workspace admin permissions
Rate limiting: The server respects Clockify's rate limits (50 requests/second for addon tokens)
Workspace selection: Defaults to user's default workspace if not specified
Webhooks: Not implemented (not needed for MCP use case)
Troubleshooting
"CLOCKIFY_API_KEY environment variable is required"
Make sure you've set the API key in your environment or MCP configuration:
export CLOCKIFY_API_KEY="your_key_here""User not found"
User names are matched using partial, case-insensitive search. Try:
Using just the first or last name
Checking spelling
Using the email address instead
"No workspaces found"
Ensure your API key is valid and you have access to at least one workspace in Clockify.
Connection Issues
If you're having connection issues:
Check your internet connection
Verify your API key is correct
Ensure you're not behind a proxy that blocks API requests
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Make your changes
Add tests if applicable
Submit a pull request
License
MIT License - see LICENSE file for details
Acknowledgments
Built on the Model Context Protocol
Integrates with Clockify time tracking
Documentation derived from official Clockify API docs
Support
Issues: GitHub Issues
Discussions: GitHub Discussions
Clockify API: docs.clockify.me
Changelog
v0.1.0 (Initial Release)
Core time entry operations
User and project search
Timer start/stop functionality
High-level analysis tools
Overtime/undertime detection
Weekly summaries
Available Tools
9 toolsadd_time_entryC
Add a time entry for a specific user. Creates a completed time entry with start and end times.
| Name | Required | Description | Default |
|---|---|---|---|
| user_name | Yes | Name of the user to add time for | |
| description | Yes | Description of the work performed | |
| start_time | Yes | Start time in ISO format (e.g., 2024-01-29T09:00:00) | |
| end_time | Yes | End time in ISO format (e.g., 2024-01-29T17:00:00) | |
| project_name | No | Optional: project name to associate with the entry | |
| task_name | No | Optional: task name within the project (requires project_name) | |
| billable | No | Whether the time is billable (default: true) | |
| workspace_id | No | Workspace ID (optional, uses default workspace if not provided) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states the tool creates a completed time entry, implying a write operation, but doesn't disclose permissions needed, error conditions, whether entries are editable after creation, or any rate limits. The description is insufficient for a mutation tool with zero 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 concise with two sentences that directly state the tool's purpose. However, it could be more front-loaded by immediately clarifying it's for completed entries versus ongoing tracking, and the second sentence slightly repeats information from the first.
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 mutation tool with 8 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what happens after creation (e.g., success response, error handling), doesn't mention dependencies between parameters (like task_name requiring project_name), and provides no context about the system's time entry model.
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 100%, so parameters are well-documented in the schema. The description adds no additional parameter semantics beyond implying that start/end times define a completed entry, which is already clear from parameter names and schema descriptions. Baseline 3 is appropriate when schema does the heavy lifting.
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 action ('Add a time entry') and resource ('for a specific user'), specifying it creates a completed entry with start/end times. However, it doesn't differentiate from sibling tools like 'start_timer' or 'stop_timer' which likely handle time tracking differently.
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 'start_timer' for ongoing tracking or 'search_time_entries' for retrieval, nor does it specify prerequisites or appropriate contexts for creating completed entries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_overtime_usersB
Find users who have logged more than a specified number of hours per week in the past month. Useful for identifying overworked team members.
| Name | Required | Description | Default |
|---|---|---|---|
| hours_threshold | No | Hours threshold per week (default: 40) | |
| weeks | No | Number of weeks to analyze (default: 4) | |
| workspace_id | No | Workspace ID (optional, uses default workspace if not provided) |
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 of behavioral disclosure. It mentions the tool's purpose and usefulness but lacks details on permissions required, rate limits, whether it's read-only or mutative, or what the output format looks like. For a tool with no annotations, this is a significant gap in transparency.
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 concise and front-loaded: two sentences with zero waste. The first sentence clearly states the purpose, and the second adds contextual value without redundancy. It's appropriately sized for the tool's complexity.
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 no annotations and no output schema, the description is incomplete. It doesn't explain behavioral aspects like permissions or rate limits, and it lacks details on return values (e.g., what data is returned about users). For a tool with 3 parameters and no structured coverage beyond the input schema, more context is needed.
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 100%, meaning the input schema already documents all parameters thoroughly. The description adds no additional parameter semantics beyond what the schema provides (e.g., it doesn't explain the 'hours_threshold' beyond 'specified number of hours'). Baseline score of 3 is appropriate when the schema does the heavy lifting.
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: 'Find users who have logged more than a specified number of hours per week in the past month.' It specifies the verb ('find'), resource ('users'), and criteria ('logged more than a specified number of hours per week in the past month'). However, it doesn't explicitly differentiate from sibling tools like 'find_undertime_users' or 'find_user_time_entries', which prevents a score of 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 provides implied usage context: 'Useful for identifying overworked team members.' This suggests when to use the tool, but it doesn't explicitly state when not to use it or name alternatives among sibling tools (e.g., 'find_undertime_users' for underworked users). No explicit exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_project_time_entriesA
Find all time entries for a specific project. Returns time entries from all users who have logged time to the project.
| Name | Required | Description | Default |
|---|---|---|---|
| project_name | Yes | Name of the project (partial match, case-insensitive) | |
| start_date | No | Start date in YYYY-MM-DD format (optional, defaults to 30 days ago) | |
| end_date | No | End date in YYYY-MM-DD format (optional, defaults to today) | |
| limit | No | Maximum number of entries to display (optional, defaults to 30, use 0 for unlimited) | |
| workspace_id | No | Workspace ID (optional, uses default workspace if not provided) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions the return scope ('from all users') but lacks critical behavioral details: whether this is a read-only operation, if it requires specific permissions, pagination behavior beyond the 'limit' parameter, or rate limits. For a tool with 5 parameters and no annotations, this is insufficient.
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?
Two concise sentences that efficiently communicate the tool's purpose and scope. The first sentence states the core function, and the second clarifies the return scope. No wasted words or redundant information.
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 5 parameters, no annotations, and no output schema, the description is adequate but has clear gaps. It explains what the tool does but lacks behavioral context (permissions, side effects) and output format details. The schema handles parameters well, but overall completeness is minimal viable.
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 100%, providing full parameter documentation. The description adds no parameter-specific information beyond what's in the schema. According to scoring rules, with high schema coverage (>80%), the baseline is 3 even with no param info in description.
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 'Find' and resource 'time entries for a specific project', specifying it returns entries from all users. This distinguishes it from sibling tools like 'find_user_time_entries' (user-specific) and 'search_time_entries' (general search).
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 'for a specific project' and 'from all users', which helps differentiate from user-focused alternatives. However, it doesn't explicitly state when NOT to use this tool or name specific alternatives like 'find_user_time_entries' for user-specific queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_undertime_usersB
Find users who have not logged at least a specified number of hours per week. Useful for identifying team members who may need support.
| Name | Required | Description | Default |
|---|---|---|---|
| hours_threshold | No | Minimum hours threshold per week (default: 20) | |
| weeks | No | Number of weeks to analyze (default: 1) | |
| workspace_id | No | Workspace ID (optional, uses default workspace if not provided) |
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 states the tool finds users based on hours threshold, but doesn't reveal key behaviors: whether it's a read-only operation, what permissions are needed, how results are returned (e.g., list format, pagination), or any rate limits. The description adds minimal context beyond the basic purpose, missing critical operational details for an agent to use it effectively.
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 appropriately sized with two sentences: the first states the purpose clearly, and the second adds a usage hint. It's front-loaded with the core functionality, and both sentences earn their place by providing purpose and context. However, it could be slightly more structured by explicitly mentioning parameters or alternatives, keeping it efficient but not maximally informative.
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 complexity of a tool with 3 parameters, no annotations, and no output schema, the description is incomplete. It lacks details on behavioral aspects (e.g., read/write nature, auth needs), output format, and how to interpret results. While the purpose is clear, the absence of annotations and output schema means the description should do more to compensate, which it doesn't, leaving significant gaps for an agent to rely on.
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 100%, with all three parameters ('hours_threshold', 'weeks', 'workspace_id') well-documented in the schema, including defaults and optionality. The description adds no additional parameter semantics beyond what the schema provides, such as explaining how 'weeks' interacts with the analysis or what 'workspace_id' entails. Given the high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't need to.
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: 'Find users who have not logged at least a specified number of hours per week.' This is a specific verb ('find') and resource ('users') with a clear criterion ('not logged at least a specified number of hours per week'). It distinguishes from some siblings like 'find_overtime_users' by focusing on undertime, but doesn't explicitly differentiate from others like 'find_user_time_entries' or 'get_user_weekly_summary' that might overlap in user analysis.
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 implied usage with 'Useful for identifying team members who may need support,' suggesting it's for monitoring and support scenarios. However, it lacks explicit guidance on when to use this tool versus alternatives like 'find_overtime_users' for opposite analysis or 'get_user_weekly_summary' for individual summaries. No exclusions or prerequisites are mentioned, leaving gaps in decision-making context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_user_time_entriesA
Find all time entries for a specific user by their name. Searches across a date range (defaults to last 30 days) and returns all time entries with descriptions, projects, and durations.
| Name | Required | Description | Default |
|---|---|---|---|
| user_name | Yes | Name of the user (partial match, case-insensitive) | |
| start_date | No | Start date in YYYY-MM-DD format (optional, defaults to 30 days ago) | |
| end_date | No | End date in YYYY-MM-DD format (optional, defaults to today) | |
| limit | No | Maximum number of entries to display (optional, defaults to 50, use 0 for unlimited) | |
| workspace_id | No | Workspace ID (optional, uses default workspace if not provided) |
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 discloses key behavioral traits: it searches across a date range with defaults (last 30 days), returns specific fields (descriptions, projects, durations), and uses partial/case-insensitive matching for user names. However, it doesn't mention pagination, rate limits, authentication needs, or error handling, leaving gaps for a read operation.
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 in the first sentence, followed by additional context in the second. Both sentences are essential: the first defines the tool's function, and the second clarifies scope and output. There is no wasted verbiage or redundancy.
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 no annotations and no output schema, the description is moderately complete for a read tool with 5 parameters. It covers the purpose, basic behavior, and output fields, but lacks details on return structure, pagination, or error cases. For a tool with 100% schema coverage but no output schema, it's adequate but has clear gaps in 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?
Schema description coverage is 100%, so the schema fully documents all 5 parameters. The description adds minimal value beyond the schema: it implies date-range filtering and mentions default timeframes, but doesn't provide additional syntax or format details. With high schema coverage, the baseline score of 3 is appropriate.
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 ('Find all time entries'), target resource ('for a specific user by their name'), and scope ('Searches across a date range... returns all time entries with descriptions, projects, and durations'). It distinguishes from siblings like 'find_project_time_entries' (which filters by project) and 'search_time_entries' (which likely has broader search criteria).
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 clear context for when to use this tool: when searching for time entries by user name across a date range. It doesn't explicitly state when not to use it or name alternatives among siblings (e.g., 'search_time_entries' might be better for non-user-based searches), but the context is sufficiently clear for an agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_user_weekly_summaryC
Get a summary of hours logged by a user for each week in the past month.
| Name | Required | Description | Default |
|---|---|---|---|
| user_name | Yes | Name of the user | |
| weeks | No | Number of weeks to analyze (default: 4) | |
| workspace_id | No | Workspace ID (optional, uses default workspace if not provided) |
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 implies a read-only operation but doesn't specify permissions, rate limits, or what the summary includes (e.g., format, data fields). This is inadequate for a tool with potential complexity in data retrieval.
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 a single, clear sentence that efficiently conveys the core functionality without any wasted words. It's front-loaded and appropriately sized for the tool's purpose, earning full marks for conciseness.
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 lack of annotations and output schema, the description is incomplete. It doesn't explain what the summary returns (e.g., structured data, totals per week), behavioral aspects like error handling, or how it integrates with sibling tools, leaving gaps for the agent to infer.
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 schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional meaning beyond implying a time range ('past month'), which aligns with the 'weeks' parameter but doesn't provide extra context like default behavior or constraints, meeting the baseline.
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 with a specific verb ('Get') and resource ('summary of hours logged by a user'), making it easy to understand what it does. However, it doesn't explicitly differentiate from sibling tools like 'find_user_time_entries' or 'search_time_entries', which might also retrieve time-related data, so it doesn't reach the highest 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. It doesn't mention sibling tools or contexts where other tools might be more appropriate, such as using 'find_user_time_entries' for detailed entries instead of summaries, leaving the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_time_entriesA
Search time entries by description phrase. Searches across all users and returns entries containing the search phrase.
| Name | Required | Description | Default |
|---|---|---|---|
| search_phrase | Yes | Phrase to search for in time entry descriptions | |
| user_name | No | Optional: limit search to specific user | |
| start_date | No | Start date in YYYY-MM-DD format (optional, defaults to 30 days ago) | |
| end_date | No | End date in YYYY-MM-DD format (optional, defaults to today) | |
| limit | No | Maximum number of entries to display (optional, defaults to 50, use 0 for unlimited) | |
| workspace_id | No | Workspace ID (optional, uses default workspace if not provided) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the search behavior (phrase matching, cross-user scope) but doesn't mention important behavioral traits like pagination, rate limits, authentication requirements, or what happens with empty results. The description doesn't contradict annotations (none exist), but leaves significant behavioral aspects unspecified.
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?
Two concise sentences that efficiently communicate the core functionality. The first sentence states the purpose and primary parameter, the second clarifies scope and behavior. No wasted words or redundant information.
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 search tool with 6 parameters, 100% schema coverage, but no annotations and no output schema, the description is adequate but incomplete. It covers the what and basic how, but lacks information about return format, error conditions, or behavioral constraints that would be important for an agent to use it effectively.
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 100%, so the schema already documents all 6 parameters thoroughly. The description adds minimal value beyond the schema - it mentions 'search phrase' which aligns with the required search_phrase parameter, but doesn't provide additional semantic context about parameter interactions or usage patterns.
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 ('search time entries'), resource ('time entries'), and scope ('by description phrase', 'across all users', 'containing the search phrase'). It distinguishes from siblings like find_user_time_entries (user-specific) and find_project_time_entries (project-specific) by emphasizing cross-user search capability.
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 clear context about when to use this tool: for searching time entries by description phrase across all users. It doesn't explicitly state when NOT to use it or name alternatives, but the cross-user scope differentiates it from user-specific sibling tools like find_user_time_entries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_timerC
Start a timer for the current user. Creates a running time entry without an end time.
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | Description of what you're working on | |
| project_name | No | Optional: project name to associate with the timer | |
| task_name | No | Optional: task name within the project (requires project_name) | |
| workspace_id | No | Workspace ID (optional, uses default workspace if not provided) |
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 mentions that the tool 'creates a running time entry without an end time', which implies a write operation, but lacks details on permissions, rate limits, error handling, or what happens if a timer is already running. This is inadequate for a mutation tool with zero 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 a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and every part earns its place, making it highly concise and well-structured.
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 is a mutation tool with no annotations and no output schema, the description is insufficient. It lacks information on behavioral traits, error conditions, return values, and how it interacts with sibling tools. For a tool that modifies state, more context is needed to ensure safe and correct usage.
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 100% description coverage, so the schema already documents all parameters thoroughly. The description does not add any additional meaning or context beyond what the schema provides, such as explaining interdependencies (e.g., task_name requires project_name) or usage examples. Baseline 3 is appropriate when the schema does the heavy lifting.
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 action ('Start a timer') and the resource ('for the current user'), specifying that it creates a running time entry without an end time. However, it does not explicitly differentiate from sibling tools like 'stop_timer' or 'add_time_entry', which would require more specific scope or usage context.
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 'stop_timer' or 'add_time_entry', nor does it mention prerequisites or exclusions. It simply states what the tool does without contextual usage information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_timerB
Stop the currently running timer for the current user.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_id | No | Workspace ID (optional, uses default workspace if not provided) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits like whether stopping a timer requires specific permissions, what happens if no timer is running (error behavior), or if the action is reversible. This leaves significant gaps for a mutation tool.
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 a single, clear sentence with zero wasted words. It's front-loaded with the core action and appropriately sized for the tool's simplicity, making it highly efficient.
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 no annotations and no output schema, the description is incomplete for a mutation tool. It doesn't explain what happens after stopping (e.g., does it return the stopped time entry?), error conditions, or integration with sibling tools, leaving the agent with insufficient context for reliable use.
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 schema description coverage is 100%, so the schema already documents the optional workspace_id parameter. The description adds no parameter-specific information beyond what's in the schema, but with only one parameter and high coverage, the baseline is appropriate. No additional value is provided, but no compensation is needed.
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 action ('Stop') and target ('currently running timer for the current user'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'add_time_entry' or 'start_timer' beyond the obvious action difference, missing nuanced comparison.
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 when a timer is running but provides no explicit guidance on when to use this tool versus alternatives (e.g., when to stop vs. add time entries). There's no mention of prerequisites (e.g., must have a timer started) or exclusions, leaving usage context vague.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v0.1.0- First observed
add_time_entry - First observed
find_overtime_users - First observed
find_project_time_entries - First observed
find_undertime_users - First observed
find_user_time_entries - First observed
get_user_weekly_summary - First observed
search_time_entries - First observed
start_timer - First observed
stop_timer
TDQS
Each tool has a clearly distinct purpose with no overlap: adding entries, starting/stopping timers, finding entries by project/user/search, identifying overtime/undertime users, and getting weekly summaries. The descriptions make it easy to differentiate between similar-sounding tools like find_user_time_entries and get_user_weekly_summary.
All tools follow a consistent snake_case pattern with clear verb_noun combinations (e.g., add_time_entry, find_project_time_entries, start_timer). The naming is predictable and readable throughout, with no deviations in style or convention.
With 9 tools, this server is well-scoped for time tracking and management. Each tool serves a specific, necessary function in the domain, from core operations like adding entries and managing timers to analytics features like finding overtime users and weekly summaries, without being overly sparse or bloated.
The tool set provides complete coverage for time tracking workflows: creating entries (add_time_entry, start_timer, stop_timer), retrieving entries by various criteria (find_project_time_entries, find_user_time_entries, search_time_entries), and analytics (find_overtime_users, find_undertime_users, get_user_weekly_summary). There are no obvious gaps, enabling agents to handle full CRUD-like operations and reporting.
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
Manage Avaza projects, tasks, timesheets, expenses, invoices, and scheduling from AI assistants.
Read time entries, projects, clients, tasks and invoices; log and update tracked time.
Track billable time from your AI chat: timers, entries, reports, CSV export. All data stays local.
Time tracking and invoicing for AI agents and their humans: track, log and bill work by agent.
Related MCP Servers
- AlicenseBqualityCmaintenanceProvides comprehensive integration with the Clockify time tracking API, enabling automated time entry management, project organization, task tracking, and reporting through a standardized interface.29136MIT
- AlicenseNot gradedqualityDmaintenanceIntegrates with Clockify time tracking API to retrieve user information, manage projects, and log time entries with flexible time specifications across workspaces.MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Clockify time tracking API to manage time entries, projects, tasks, and workspaces through natural language commands.355ISC
- 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
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/KeithHanson/clockify-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server