toggl-mcp-server

abhinav24jha/toggl-mcp-server

3.4

If you are the rightful owner of toggl-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

The Toggl MCP Server allows MCP clients to interact with Toggl Track for time tracking, project management, and workspace operations using natural language.

Tools
10
Resources
0
Prompts
0

Toggl MCP Server

Allows MCP clients to interact with Toggl Track, enabling time tracking, project management, and workspace operations through natural language.

Features

Tools

Project Management
  • create_project

    • Description: Creates a new project in a specified Toggl workspace.
    • Input:
      • name (str): The name of the project to be created. This is a required field.
      • workspace_name (str, optional): The name of the workspace where the project will be created. If not provided, it defaults to the user's default workspace.
      • active (bool, optional): Specifies whether the project is active. Defaults to True.
      • billable (bool, optional): Specifies whether the project is billable. Defaults to False.
      • client_id (int, optional): The ID of the client associated with the project.
      • color (str, optional): The hex color code assigned to the project (e.g., "#FF0000").
      • is_private (bool, optional): Specifies whether the project is private. Defaults to True.
      • start_date (str, optional): The start date of the project in ISO 8601 format (e.g., "YYYY-MM-DD").
      • end_date (str, optional): The end date of the project in ISO 8601 format (e.g., "YYYY-MM-DD").
      • estimated_hours (int, optional): The estimated number of hours for the project.
      • template (bool, optional): Specifies whether the project is a template. Defaults to False.
      • template_id (int, optional): The ID of the template to use for creating the project.
    • Output: JSON response containing the data of the newly created project.
  • delete_project

    • Description: Deletes a project identified by its name within a specified workspace.
    • Input:
      • project_name (str): The exact name of the project to be deleted. This is a required field.
      • workspace_name (str, optional): The name of the workspace containing the project. If not provided, it defaults to the user's default workspace.
    • Output: A confirmation message (str) indicating the successful deletion of the project.
  • update_projects

    • Description: Performs bulk updates on multiple projects within a specified workspace using patch operations.
    • Input:
      • project_names (List[str]): A list containing the names of the projects to be updated. This is a required field.
      • operations (List[dict]): A list of patch operations to apply to the selected projects. Each operation is a dictionary specifying the operation type (op), the field path (path), and the new value (value) (e.g., {"op": "replace", "path": "/active", "value": false}). This is a required field.
      • workspace_name (str, optional): The name of the workspace containing the projects. If not provided, it defaults to the user's default workspace.
    • Output: JSON response containing the data of the updated projects.
  • get_all_projects

    • Description: Retrieves a list of all projects within a specified workspace.
    • Input:
      • workspace_name (str, optional): The name of the workspace from which to retrieve projects. If not provided, it defaults to the user's default workspace.
    • Output: JSON response containing a list of project data objects found in the specified workspace.
Time Entry Management
  • new_time_entry

    • Description: Creates a new time entry. Can be used to start a timer (if only start is provided or neither start nor duration are provided) or log a completed time entry (if start and stop, or start and duration are provided).
    • Input:
      • description (str): The description for the time entry.
      • workspace_name (str, optional): Name of the workspace. Defaults to the user's default workspace.
      • project_name (str, optional): Name of the project to associate the time entry with.
      • tags (List[str], optional): A list of tag names to apply to the time entry.
      • start (str, optional): The start time of the entry in ISO 8601 format (e.g., "2023-10-26T10:00:00Z"). Defaults to the current time if creating a running entry.
      • stop (str, optional): The stop time of the entry in ISO 8601 format. If provided, creates a completed entry.
      • duration (int, optional): The duration of the entry in seconds. If start is provided but stop is not, duration determines the stop time. If start is not provided, a negative duration starts a running timer.
      • billable (bool, optional): Whether the time entry should be marked as billable. Defaults to False.
      • created_with (str, optional): The name of the application creating the entry. Defaults to "MCP".
    • Output: JSON response containing the data of the created time entry.
  • stop_time_entry

    • Description: Stops the currently running time entry.
    • Input:
      • workspace_name (str, optional): Name of the workspace where the entry is running. Defaults to the user's default workspace.
    • Output: JSON response containing the data of the stopped time entry.
  • delete_time_entry

    • Description: Deletes a specific time entry by its description and start time.
    • Input:
      • time_entry_description (str): The exact description of the time entry to delete.
      • start_time (str): The exact start time of the entry in ISO 8601 format used for identification.
      • workspace_name (str, optional): Name of the workspace containing the entry. Defaults to the user's default workspace.
    • Output: Success confirmation message (str) upon successful deletion.
  • get_current_time_entry

    • Description: Fetches the details of the currently running time entry.
    • Input: None (implicitly uses the user's context).
    • Output: JSON response containing the data of the currently running time entry, or None if no time entry is currently running.
  • update_time_entry

    • Description: Updates attributes of an existing time entry identified by its description and start time.
    • Input:
      • time_entry_description (str): The current description of the time entry to update.
      • start_time (str): The exact start time of the entry in ISO 8601 format used for identification.
      • workspace_name (str, optional): Name of the workspace containing the entry. Defaults to the user's default workspace.
      • new_description (str, optional): New description for the time entry.
      • project_name (str, optional): New project name to associate with the entry. Set to empty string "" to remove project association.
      • tags (List[str], optional): A new list of tag names. This will replace all existing tags. Provide an empty list [] to remove all tags.
      • new_start (str, optional): New start time in ISO 8601 format.
      • new_stop (str, optional): New stop time in ISO 8601 format.
      • billable (bool, optional): New billable status.
    • Output: JSON response containing the data of the updated time entry.
  • get_time_entries_for_range

    • Description: Retrieves time entries within a specified date range, defined by offsets from the current day.
    • Input:
      • from_day_offset (int): The start day offset from today (e.g., 0 for today, -1 for yesterday, -7 for a week ago).
      • to_day_offset (int): The end day offset from today (e.g., 0 for today, 1 for tomorrow). The range includes both the start and end dates.
      • workspace_name (str, optional): Name of the workspace to fetch entries from. Defaults to the user's default workspace.
    • Output: JSON response containing a list of time entries found within the specified date range.

Getting Started

Prerequisites

  • Python 3.11+
  • Toggl Track account
  • uv installed for dependency management

Environment Variables

Create a .env file inside of the mcp_toggl_server folder with:

EMAIL=your_toggl_email
PASSWORD=your_toggl_password

Installation

First install uv: - For MacOS/Linux: bash curl -LsSf https://astral.sh/uv/install.sh | sh - For Windows: bash powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Make sure to restart your terminal afterwards to ensure that the uv command gets picked up.

Now let's clone the repository and set up the project:

git clone [repository-url]
cd mcp_toggl_server
uv venv
uv pip install --all

Integration with Development Tools

VS Code + GitHub Copilot Setup
  1. Configure the MCP Server in .vscode/mcp.json:
"servers": {
  "toggl": {
    "type": "stdio",
    "command": "uv",
    "args": [
      "--directory",
      "/ABSOLUTE/PATH/TO/PARENT/FOLDER/mcp_toggl_server",
      "run",
      "toggl_mcp_server.py"],
    "envFile": "${workspaceFolder}/mcp_toggl_server/.env"
  }
}
  1. Update the configuration:

    • Replace /ABSOLUTE/PATH/TO/PARENT/FOLDER/mcp_toggl_server with the absolute path to the server
    • You may need to put the full path to the uv executable in the command field. You can get this by running which uv on MacOS/Linux or where uv on Windows
  2. Enable the server:

    • Look for the start button when hovering over the server configuration /.vscode/mcp.json
    • Click start to let Copilot discover available tools
    • Switch to agent mode in Copilot

For detailed setup instructions, see:

Additional MCP Client Integration

The Toggl MCP Server works with any MCP-compatible client. For integration steps:

  1. For Claude Desktop, visit the MCP Quick Start Guide
  2. For other MCP clients, consult their respective documentation for server configuration

Note: Configuration typically involves specifying the server path and environment variables similar to the VS Code setup above.

Testing with MCP Inspector

To run in development:

EMAIL=your_toggl_email PASSWORD=your_toggl_password mcp dev toggl_mcp_server.py

License

This MCP server is licensed under the MIT License.