Lazy Toggl MCP Server — Toggl API Time Tracking
Track time using Lazy Toggl's simple unofficial MCP server via the Toggl API for fast, reliable time tracking and project logging.
npx -y @movstox/lazy-toggl-mcpOverview
Lazy Toggl MCP Server is a lightweight, unofficial Model Context Protocol (MCP) server that forwards simple time-tracking commands to the Toggl API. It provides a compact HTTP interface intended for tooling, chat assistants, or automation scripts that need fast and reliable start/stop/project logging without handling the full Toggl REST surface directly.
By exposing a small set of MCP-style tools (start/stop/status/list projects), the server lets developers and assistants control Toggl time entries with minimal configuration. It is useful when you want a single, dependable bridge between an automation client (or AI agent) and Toggl for consistent, auditable time tracking.
Features
- Minimal MCP-compatible HTTP interface for time tracking workflows
- Start and stop Toggl time entries with a single JSON call
- Project and tag lookup to attach metadata to time entries
- Lightweight deployment: run locally, in a container, or behind a reverse proxy
- Simple environment-based configuration using your Toggl API token
- Fast, idempotent operations suitable for automation and AI toolchains
Installation / Configuration
Clone the repository and choose a deployment method. The repository contains a small server; it can be run from source or packaged as a container.
- Clone the repository
- Environment variables Set at least your Toggl API token and the server port. Example variables:
- TOGGL_API_TOKEN — your Toggl personal access token
- PORT — port to listen on (default: 8080)
- MCP_SECRET — optional secret to secure MCP calls
- LOG_LEVEL — optional logging verbosity (info, debug)
Example .env file:
TOGGL_API_TOKEN=your_toggl_api_token_here
PORT=8080
MCP_SECRET=some-secret-key
LOG_LEVEL=info
3a) Run with Docker
# Build image (if the repo contains a Dockerfile)
# Run container with env vars
3b) Run from source (example pattern) If the project provides an NPM or Python start command, run it after installing dependencies. Replace with the appropriate command in the repository.
# Node.js (example)
# Python (example)
Available Tools / Resources
The server exposes a concise set of tools to operate on Toggl data. Typical tool names and inputs:
- time.start
- Input: description, project_id (optional), tags (optional), billable (optional)
- Output: time_entry object (id, start, description, project_id)
- time.stop
- Input: time_entry_id
- Output: time_entry object (id, stop, duration)
- time.status
- Input: none
- Output: running time_entry (if any)
- projects.list
- Input: workspace_id (optional)
- Output: list of projects (id, name, client)
Example: Start a timer via curl (replace URL and secret as configured)
Expected result (JSON): a started time entry with id and start timestamp.
To stop the current entry:
Common Issues & Solutions
You received an automated GitHub issue saying your project is listed on Spark with a link and instructions to "claim" the listing; you're unsure if the message is legitimate or what steps to take to claim it.
I ran into this too! It turned out to be a legitimate listing from spark.entire.vc — I verified the URL, then followed the claim flow: sign in with GitHub, accept the OAuth scopes, confirm I had push access to the repo, and click the claim button. After claiming, I edited the listing metadata, added the "Listed on Spark" badge to my README and pushed a tiny changelog commit. If the OAuth dialog requests too many permissions or the domain looks wrong, cancel and contact Howard at [email protected] and remove any granted app access from your GitHub settings. Worked fine for me.