toggl-mcp
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., "@toggl-mcpLog 1 hour for design review from 2pm to 3pm ET with tag #design"
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.
Toggl MCP
An MCP (Model Context Protocol) server that lets AI assistants log time entries to Toggl Track.
What it does
Exposes three tools to MCP clients (e.g. Claude):
get_tags— lists existing Toggl tags (cached daily)get_entry_descriptions— lists existing time entry descriptions (cached daily)create_time_entry— logs a new time entry with a start time, end time, description, and tag
Also exposes toggl://tags, toggl://entries, and toggl://now as MCP resources.
Time input is in Eastern Time (America/New_York) and converted to UTC before submission.
Related MCP server: Lazy Toggl MCP Server
Setup
Copy
.env.exampleto.envand fill in your values:
BASEURL=https://api.track.toggl.com/api/v9/
CACHE_FOLDER=cache
TOGGL_APIKEY=<your api key>
WORKSPACE_ID=<your workspace id>To find your workspace ID, call the /me endpoint with your API key.
Install dependencies (requires Python 3.10+):
uv syncRun the server:
uv run main.pyMCP Client Config
To use with Claude Desktop, add to your MCP config:
{
"mcpServers": {
"toggl": {
"command": "uv",
"args": ["run", "/path/to/toggl/main.py"]
}
}
}Running Tests
uv run pytestTests live in the tests/ directory. The dev dependency group includes pytest.
Where to get Toggl API Key
Log in to Toggl Track
Go to Profile Settings (click your avatar in the bottom-left)
Scroll to the bottom — your API token is listed under API Token
Click Click to reveal and copy the token
Available Tools
4 toolscreate_time_entryA
Logs a new time entry into Toggl.
LLM Notes:
- Always use the get_tags tool first to find a matching existing tag before calling this tool.
- Always check with get_entry_descriptions tool to see if there's a very similar description that exists and use that as the description.
@param start_time the start datetime in ET (New York) e.g., "2026-03-07T07:30:00"
@param end_time the end datetime in ET (New York) e.g., "2026-03-07T07:30:00"
@param description the activity performed e.g., "Walked dog"
@param tag the tag associated with the entry e.g., "chore"
@returns a time entry object. Make sure to review it for what was actually added.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| end_time | Yes | ||
| start_time | Yes | ||
| description | Yes |
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 must carry the full burden of behavioral disclosure. It adds value by specifying the ET timezone for start_time/end_time and by instructing the agent to review the returned time entry for what was actually added, hinting at possible modifications. However, it does not mention potential validation errors, permission requirements, or constraints like overlapping entries, leaving some behavioral aspects opaque.
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: a one-sentence purpose statement, two essential LLM Notes, and clear parameter/return documentation. Each section earns its place with no redundant or filler content.
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 create tool with an output schema, the description covers all necessary context: purpose, prerequisite steps (tag and description lookups), timezone expectations, parameter meanings, and a note to review the returned object. It is complete and actionable for the agent.
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 provides zero descriptions and only property names (tag, end_time, start_time, description). The description compensates fully by documenting each parameter with a human-readable explanation and a concrete example, including the timezone format. This adds substantial meaning beyond the raw 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 begins with 'Logs a new time entry into Toggl,' which is a specific action (create) targeting a clear resource (time entry into Toggl). This clearly distinguishes it from sibling tools like get_tags and get_entry_descriptions, which are read-oriented.
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 LLM Notes explicitly instruct the agent to always call get_tags first and to check get_entry_descriptions for similar descriptions before using this tool. This provides concrete when-to-use guidance and names the alternative tools to consult first, going beyond generic context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_entry_descriptionsA
Get a list of existing time entry descriptions being used in Toggl. Cached daily.
| Name | Required | Description | Default |
|---|---|---|---|
No 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. It discloses a key behavioral trait—'Cached daily'—which informs the agent that results may not be real-time. However, it does not mention permissions, read-only nature, or output structure, leaving some 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?
The description is a single, front-loaded sentence that conveys both the tool's purpose and an important caching behavior. Every word contributes value, with no redundancy or filler.
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 simple tool with no parameters and no output schema, the description is largely complete. It specifies what is returned (a list of existing time entry descriptions) and notes the caching behavior. However, it does not explicitly state the return format (e.g., array of strings), which could be further clarified given the absence of an output schema.
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 tool has zero parameters, and the input schema is empty. Per the rubric, a zero-parameter tool receives a baseline of 4. The description adds no parameter details, which is appropriate since there are none to explain.
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 function: 'Get a list of existing time entry descriptions being used in Toggl.' It uses a specific verb (get), a specific resource (time entry descriptions), and context (in Toggl), distinguishing it from siblings like get_tags (tags) and create_time_entry (creation).
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 the tool is for retrieving existing time entry descriptions, but it does not explicitly state when to use it versus alternatives, nor does it mention any exclusions or prerequisites. Since there is no alternative guidance, the usage context is only implicitly clear from the purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tagsA
Get a list of existing tags being used in Toggl. Cached daily.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It discloses a key behavioral trait: 'Cached daily,' which informs users about potential staleness. However, it does not mention authentication, rate limits, or other side effects, so coverage is limited.
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 concise sentence with no unnecessary words. It efficiently conveys both the purpose and the caching behavior.
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 simplicity (no parameters) and the presence of an output schema, the description is largely complete. It covers the main purpose and caching, though it lacks usage guidance. Overall adequate for the complexity level.
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 tool has zero parameters, so the baseline is 4. The description does not need to add parameter information, and the schema coverage is trivially 100%.
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 'Get' and the resource 'tags' within the Toggl context. This distinguishes it from sibling tools like create_time_entry and get_entry_descriptions, which serve different functions.
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?
No explicit guidance is provided on when to use this tool versus alternatives. The note 'Cached daily' implies data may be stale, but it does not explicitly state when to choose this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nowA
Get a list of existing tags being used in Toggl. Cached daily.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It adds the caching behavior ('Cached daily') which is useful context for an agent. However, it does not explicitly confirm the operation is read-only or mention any other side effects, limitations, or error states.
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 two concise sentences, with no filler or redundant information. It is appropriately sized for the tool's simplicity and front-loads 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?
Given the tool's simplicity (no parameters) and the presence of an output schema (which description needn't replicate), the description is reasonably complete. It reveals caching behavior and the resource scope, though it could mention potential staleness implications more explicitly.
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 tool has zero parameters, so the schema already fully covers all inputs. The description does not need to add parameter details, and the baseline for zero-parameter tools is a score of 4.
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 retrieves a list of existing tags in Toggl, using a specific verb and resource. However, it does not differentiate from the sibling tool get_tags, which likely serves a similar purpose, so it cannot receive a 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?
No guidance is provided on when to use this tool versus alternatives like get_tags. The description mentions 'Cached daily' but does not explicitly state that it is for when stale data is acceptable or that real-time queries should use another tool.
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.
4 tool updates
v0.1.0- First observed
create_time_entry - First observed
get_entry_descriptions - First observed
get_tags - First observed
now
TDQS
The tool 'now' has a description identical to 'get_tags', making them indistinguishable. An agent cannot tell which tool to use without further context, and the purpose of 'now' is unclear.
Most tools follow a verb_noun pattern (get_tags, get_entry_descriptions, create_time_entry), but 'now' breaks the pattern with a vague, single-word name. The mixed conventions make the set feel unpolished.
With only 4 tools, and one being a duplicate, the server feels thin for a Toggl integration. However, the focus on time entry creation and reference data is somewhat coherent, so the count is not egregiously low.
The server supports creating time entries and reading tags/descriptions, but there are no operations to list, update, or delete time entries, nor to manage tags. Significant CRUD operations are missing, which will frustrate agents needing full lifecycle management.
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
Track time on usetimebook.com - start/stop timers, log entries, list projects/clients.
Read and write Mission Control state via MCP — projects, tasks, subtasks, templates, status updates.
Read time entries, projects, clients, tasks and invoices; log and update tracked time.
Create, update, and publish changelog entries on your Patchlog changelog from any MCP client.
Related MCP Servers
AlicenseBqualityBmaintenanceEnables natural language control of the Timesheet API for timer management, task tracking, and project management through MCP tools.50741MIT- FlicenseAqualityFmaintenanceProvides tools to start/stop time tracking, list workspaces, and view current entry in Toggl.44-
- AlicenseCqualityCmaintenanceEnables interacting with Clockify time-tracking data through natural language, providing tools to manage workspaces, projects, time entries, reports, and more via the MCP protocol.481MIT
- AlicenseNot gradedqualityBmaintenanceEnables natural language time tracking and booking for WorkTracker via MCP tools, allowing users to assign time, list projects, and manage daily schedules through conversational commands.MIT
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/saaqibz/toggl-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server