Skip to main content
Glama

Timelog MCP Server

An MCP server that exposes the Timelog time registration API as tools for agentic use. It lets you view, create, and manage time registrations, absences, and timesheet approvals through natural language.

Capabilities

  • View time registrations — by week or arbitrary date range, including financial/billable data

  • Create, update, and delete time registrations on any task you have access to

  • Absence management — search absence codes and register vacation, sick leave, etc.

  • Timesheet approval — check submission status and submit timesheets, with filtering by employee, department, approver, or legal entity

  • Organization — look up legal entities and the current user profile

  • Task search — find tasks to register time on by name or number

  • Projects — search, view, and create projects, and create tasks/phases on them

  • Contracts & rates — view project contracts, hourly rates, and fixed-price contract details

Related MCP server: Tripletex MCP Server

Tools

User & Organization

  • get_current_user — get the authenticated user's profile

  • get_legal_entities — list legal entities

Projects & Tasks

  • search_projects — find projects by name or number

  • get_project — get project details by ID

  • get_project_tasks — list tasks/phases on a project

  • create_task — create a task or sub-task on a project

  • search_customers — find customers by name

  • get_project_templates — list project templates

  • create_project — create a project from a template

Contracts & Rates

  • get_project_contracts — list contracts for a project

  • get_contract_hourly_rates — list hourly rates on a contract

  • get_fixed_price_contract_details — get value, payments, and rates for a fixed-price contract

  • get_hourly_rates — search hourly rates across the organization

Time Registrations

  • get_weekly_registrations — view a week's registrations

  • get_registrations_by_date_range — view registrations in a date range, with optional filtering by project/task

  • get_financial_data — view billable/invoice status for a date range

  • search_tasks — find tasks you can register time on

  • create_time_registration — log time on a task

  • update_time_registration — edit a registration

  • delete_time_registration — remove a registration

Absence

  • search_absence_codes — find absence codes (vacation, sick leave, etc.)

  • create_absence_registration — register an absence

Timesheet Approval

  • get_timesheet_status — check submission/approval status (yourself or, as a manager, your team)

  • submit_timesheet — submit a timesheet for approval, for yourself or on behalf of an employee

Setup

Add to your Claude Code .mcp.json or Claude Desktop config:

{
  "mcpServers": {
    "timelog": {
      "command": "npx",
      "args": ["-y", "timelog-mcp"],
      "env": {
        "TIMELOG_PAT": "<your-personal-access-token>",
        "TIMELOG_BASE_URL": "https://app[X].timelog.com/<your-account>/api"
      }
    }
  }
}

From source

git clone git@github.com:Amoeslund/Timelog-MCP-server.git
cd Timelog-MCP-server
npm install
npm run build

Then point your MCP config at the built file:

{
  "mcpServers": {
    "timelog": {
      "command": "node",
      "args": ["/path/to/Timelog-MCP-server/dist/index.js"],
      "env": {
        "TIMELOG_PAT": "<your-personal-access-token>",
        "TIMELOG_BASE_URL": "https://app[X].timelog.com/<your-account>/api"
      }
    }
  }
}

Configuration

Personal Access Token

Generate a PAT at https://login.timelog.com/personaltoken.

Base URL

Your URL follows the pattern https://app[X].timelog.com/<your-account>/api where [X] is a server number (1–10) and <your-account> is your Timelog account name. See the Timelog API docs for details.

Environment Variables

Variable

Required

Description

TIMELOG_PAT

Yes

Personal Access Token (see above)

TIMELOG_BASE_URL

Yes

API base URL (see above)

License

ISC

Available Tools

21 tools
create_absence_registrationA

Create an absence registration (e.g. vacation, sick leave). Use search_absence_codes to find the AbsenceCodeID. Registers a full day by default; specify Hours for partial days.

Inputs: Date (required), AbsenceCodeID (required), Hours, Comment.

create_taskB

Create a new task (phase) on a project. Use search_projects to find the ProjectID first.

Inputs: EndDate (required), TaskName (required), ProjectID (required), StartDate (required), +7 more.

create_time_registrationA

Create a new time registration on a task. Use search_tasks first to find the TaskID.

Inputs: Date (required), Hours (required), TaskID (required), JiraId, +2 more.

delete_time_registrationB

Delete a time registration by its GUID.

Inputs: id (required).

get_contract_hourly_ratesA

Get all hourly rates configured on a specific contract. Returns rate name (role), amount, currency, type, and active status. Use get_project_contracts first to find the contractId.

Inputs: contractId (required).

get_current_userA

Get the currently authenticated Timelog user (name, email, department).

Inputs: no named parameters.

get_financial_dataB

Get financial data (billable/invoice status) for time registrations in a date range.

Inputs: endDate (required), startDate (required).

get_fixed_price_contract_detailsA

Get complete details for a fixed-price contract: contract value (from payment plan), payment schedule, linked fixed-price tasks/phases, and configured hourly rates. The contract value is the total price agreed with the client. For FP contracts, hourly rates are typically 0 (billing isn't per-hour) — use the overall project financial data to compute effective rates.

Inputs: projectId (required), contractId (required).

get_hourly_ratesA

Get hourly rates defined in Timelog. Returns rate name, amount, currency, customer, and active status. Use searchText to filter by name. Results are paginated.

Inputs: pageSize, pageNumber, searchText.

get_projectA

Get project details by project ID. Returns name, project number, customer, project manager, budget, dates, and type.

Inputs: projectId (required).

get_project_contractsA

Get all contracts for a project. Returns contract ID, name, type (Fixed Price / Time & Material), status, and whether it's the main contract. Use the contractId with get_contract_hourly_rates to see rates.

Inputs: projectId (required).

get_project_tasksA

Get all tasks (phases) for a project. Returns task IDs, names, parent hierarchy, fixed-price status, and billable defaults. Use the projectId from get_project or from time registrations.

Inputs: projectId (required), pageSize, pageNumber.

get_registrations_by_date_rangeB

Get time registrations between two dates.

Inputs: endDate (required), startDate (required).

get_timesheet_statusB

Get weekly timesheet status. Defaults to the authenticated user. Pass userId to check a specific employee, or omit to get all employees (manager view). Can also filter by departmentId, approverId, or legalEntityId.

Inputs: endDate (required), startDate (required), userId, approverId, +2 more.

get_weekly_registrationsA

Get time registrations for a specific week. Provide the Monday date of the week.

Inputs: startDate (required).

search_absence_codesA

Search for absence codes (e.g. Ferie, Sygdom). Returns AbsenceCodeID needed for create_absence_registration.

Inputs: searchText.

search_projectsA

Search for projects by name or number. Returns project IDs, names, numbers, and customer info.

Inputs: searchText.

search_tasksA

Search for tasks the user can register time on. Returns task IDs needed for creating time registrations. Use searchText to filter by task or project name.

Inputs: searchAll, searchText.

submit_timesheetB

Submit timesheet for approval for a date range (e.g. a full week).

Inputs: endDate (required), startDate (required), comment, employeeUserId.

update_time_registrationA

Update an existing time registration (hours, comment, date, billable status).

Inputs: TaskID (required), TimeRegistrationID (required), Date, Hours, +3 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 21 tools

    Disambiguation4/5

    Most tools target distinct resources (time registrations, absence, projects, contracts, rates), but there is potential overlap between get_weekly_registrations and get_registrations_by_date_range, and between get_hourly_rates and get_contract_hourly_rates. Descriptions clarify the differences, so only minor confusion risk exists.

    Naming Consistency5/5

    All tools follow a consistent verb_noun snake_case pattern (e.g., get_project, create_time_registration, search_tasks, update_time_registration, submit_timesheet). The naming convention is uniform and predictable, with no mixed styles or vague verbs.

    Tool Count4/5

    21 tools is on the higher end but appropriate for a comprehensive time tracking and project management domain. The server covers time registration, absence, projects, contracts, rates, financials, and users, so the tool count is justified without being bloated.

    Completeness4/5

    The tool surface covers core CRUD for time registrations, timesheet submission and status, project and task search, contract and rate queries, and financial data. Minor gaps exist, such as lack of update/delete for absence registrations and no direct query for absence registrations, but these are workable.

    Related MCP Connectors

    Related MCP Servers