Time Management

Everhour MCP Server

Connect your account, then chat with AI to run tools.

Everhour is a time tracking platform with project budgeting, expense tracking, scheduling, and invoicing. Use it to record billable hours, manage project budgets, attach expenses, and generate timesheet reports across a team.

Managed
33 tools
Agent guide included

Opens MCPBundles Studio with this server selected. After sign-in, chat and run tools from the same thread.

Browse all tools

AI Skill
SKILL.md

Domain knowledge for Everhour — workflow patterns, data models, and gotchas for your AI agent.

Everhour

A workspace-per-API-key time tracking platform. Reads are organized around a strict project hierarchy; writes split into resource CRUD plus two parallel "live event" surfaces (timers and time records).

Resource hierarchy (top down)

  • Client → Project → Section → Task → Time record
  • Project → Time record (project-scoped feed)
  • User (member) → Time record, Timecard
  • Project → Expense (categorized via Expense Category)
  • Webhook (workspace-wide, optionally project-scoped)

A project can belong to at most one client; reassigning an already-attached project to a different client errors with HTTP 400. Tasks and sections are parent-scoped on create (POST under /projects/{id}/...) but updated and deleted on the flat /tasks/{id} and /sections/{id} paths. There is no workspace-wide tasks list endpoint — list tasks one project at a time.

ID formats (this catches people out)

  • Native Everhour resources (project, task) use string ids prefixed ev: — e.g. ev:195526947697395. Imported integration projects use as: (Asana), jira:, trello:. Only ev: projects accept POST / PUT / DELETE.
  • Numeric ids for clients, sections, tags, users, expenses, expense categories, webhooks, and time records.
  • Composite key for timecards: (user_id, date). Both are always required on read-single, upsert, and delete.

Time records

Read with one tool that branches on which scope arg you supply: nothing for the team feed, project_id for one project, task_id for one task (returns the aggregate plus per-history detail), user_id for one user. from_date and to_date (YYYY-MM-DD, inclusive) only narrow the team and user feeds.

Write surface is two explicit verbs: add (POST /tasks/{task_id}/time — minimum 60 seconds, maximum 36000 per call) and delete by record id (DELETE /time/{id}, where the id is the .id on a record, not an ev:... task id and not a row in .history[]). There is no PUT endpoint for individual records — the API models edits as more history rows on the same task/user/date aggregate, so the right way to "edit" is delete + re-add.

Timers

There is exactly one current timer per user. Starting a new timer auto-stops any running one for the same user and saves the accrued seconds as a TIMER history entry on the previous task. Stop is a no-op when no timer is running.

Money units

Currency amounts (project budget, hourly rate, expense amount, line item totals) are integers in the lowest currency unit (cents). Hours / durations are integers in seconds.

Permissions

The API key is scoped to a single user in a single workspace. Mutations run as that user. Admin-only operations (creating users, editing tag definitions, sending invoices) are not exposed via this API and remain in the Everhour admin UI.

Tools in this Server (33)

Everhour Create Time Entry

Add a manual time record to a task. POST to /tasks/{task_id}/time. Returns the task's time aggregate; the new history row's id (under .lastHistory.id)...

Everhour Delete Client

Delete a client by numeric id. Returns an empty body on success. Projects previously attached to the client are detached, not deleted.

Everhour Delete Expense

Delete an expense record by numeric id. Returns an empty body (HTTP 204) on success.

Everhour Delete Hook

Delete a webhook by numeric id. Returns an empty body on success. The targetUrl will no longer receive event POSTs.

Everhour Delete Project

Delete a native Everhour project ('ev:...' id). Cascades sections, tasks, and time entries inside the project. Integration-imported projects ('as:', '...

Everhour Delete Section

Delete a section by id (numeric). Tasks that were in the section are reassigned to the project's implicit 'isNoSection' catch-all rather than being de...

Everhour Delete Task

Delete a task by id ('ev:...'). Time entries logged against the task are removed too. Returns an empty body on success.

Everhour Delete Time Entry

Delete a time record by id. DELETE /time/{id}. Returns the aggregate after removal so the new total is visible. Pass the .id from a get_time response,...

Everhour Delete User Timecard

Delete a user's timecard for one date. DELETE /users/{user_id}/timecards/{date}. (user_id, date) is the composite key — both required.

Everhour Get Clients

Read clients in the Everhour workspace. Omit id to list every client (returns name, status, associated project ids, billing/invoice settings). Pass id...

Everhour Get Current Timer

Get the authenticated user's current running timer (/timers/current). Returns status (active or stopped), elapsed duration in seconds, the task being ...

Everhour Get Current User

Get the profile of the authenticated user (the user the API key is scoped to). Returns id, name, email, role, capacity, and the team they belong to. T...

Everhour Get Expense Categories

List expense categories (e.g. Travel, Meals, Office Supplies). Each category id is what to pass as 'category' to upsert_expense or get_expenses.

Everhour Get Expenses

List expense records from the workspace. Supports server-side filters: from_date / to_date (YYYY-MM-DD), user id, project id ('ev:...'), category id, ...

Everhour Get Hooks

Read configured webhooks. Omit id to list every hook in the workspace (each row carries targetUrl, subscribed events, active flag, project filter). Pa...

Everhour Get Invoices

List invoices in the workspace. Each row carries invoice number, client, project, currency, total, status (draft / sent / paid), and dates. Read-only ...

Everhour Get Projects

Read projects accessible to the API key. Omit id to list (supports server-side filters: query for name search, status = 'open' | 'archived' | 'all', p...

Everhour Get Sections

Read sections. Pass id (numeric) to fetch a single section. Omit id and pass project_id to list sections for that project. An entry with isNoSection=t...

Everhour Get Tags

List workspace tags. Each tag has id (numeric), name (e.g. 'high', 'low'), and color (hex). The id is what to pass in the tags array on upsert_task. T...

Everhour Get Tasks

Read tasks. Pass id ('ev:...') to fetch a single task with its assignees, section, status, and time aggregate. Omit id and pass project_id to list eve...

Everhour Get Team

Read workspace-wide team settings (singleton). Returns the workdays array, lock-time policy, future-tracking flag, plan + billing status, owner, enabl...

Everhour Get Team Users

List the members of the Everhour team. Each row carries id (numeric — the value to use as user / assignee in other tools), name, email, role (admin / ...

Everhour Get Time

Read Everhour time records. Pass nothing to read the team-wide feed (/team/time). Pass project_id for one project. Pass task_id for one task (returns ...

Everhour Get User Timecards

Read timecards (clock-in / clock-out / break records) for one user. user_id is required. Pass id (YYYY-MM-DD) to fetch one day's timecard with its his...

Everhour Start Timer

Start a new timer for the authenticated user. POST /timers. Any timer the user already had running stops first and its accrued seconds are saved to th...

Everhour Stop Timer

Stop the authenticated user's current running timer (DELETE /timers/current). The accrued seconds are saved as a TIMER history entry on the task. Retu...

Everhour Upsert Client

Create or update an Everhour client. Omit id to create (name required); pass id to update a subset of fields. status accepts 'active' or 'archived'. p...

Everhour Upsert Expense

Create or update an expense record. Omit id to create — project, date, and category are required, amount and quantity are typical. Pass id (numeric) t...

Everhour Upsert Hook

Create or update a webhook subscription. Omit id to create (events and targetUrl required; targetUrl must respond 200 to Everhour's validation request...

Everhour Upsert Project

Create or update an Everhour project. Omit id to create (name required; client optional, numeric client id from get_clients). Pass id ('ev:...' format...

Everhour Upsert Section

Create or update a section. Omit id to create — project_id and name are required, POST goes to /projects/{project_id}/sections. Pass id (numeric) to u...

Everhour Upsert Task

Create or update a task. Omit id to create (project_id and name required) — POST goes to /projects/{project_id}/tasks. Pass id ('ev:...') to update an...

Everhour Upsert User Timecard

Create or overwrite a user's timecard for one date. PUT /users/{user_id}/timecards/{date}. The (user_id, date) pair is the natural key, so both are re...

Frequently Asked Questions

What is the Everhour MCP server?

Everhour is a time tracking platform with project budgeting, expense tracking, scheduling, and invoicing. Use it to record billable hours, manage project budgets, attach expenses, and generate timesheet reports across a team. It provides 33 tools that AI agents can use through the Model Context Protocol (MCP).

How do I connect Everhour to my AI agent?

Add the MCPBundles server URL to your MCP client configuration (Claude Desktop, Cursor, VS Code, etc.). The URL format is: https://mcp.mcpbundles.com/bundle/everhour. Authentication is handled automatically.

How many tools does Everhour provide?

Everhour provides 33 tools that can be called by AI agents, along with a SKILL.md that gives your AI agent domain knowledge about when and how to use them.

What authentication does Everhour require?

Everhour uses API Key. Everhour requires credentials. Connect via MCPBundles and authentication is handled automatically.

Setup Instructions

Connect Everhour to any MCP client in minutes

https://mcp.mcpbundles.com/bundle/everhour

What is MCP?

Model Context Protocol lets AI tools call external capabilities securely through a single URL. This MCP server groups tools behind an endpoint that many clients can use.

Use this MCP server in 3 steps

  1. Copy the MCP URL above
  2. Open your AI tool and add a new MCP/connector
  3. Paste the URL and follow any auth prompts

Claude Desktop Users

Skip the manual setup! Use the .mcpb file format for one-click installation. Check the Claude Desktop tab for setup instructions.

Pick your tool tab for exact steps

Select ChatGPT, Cursor, Claude Code, or another tab for copy-paste config.

Ready to use Everhour?

Sign in to connect your credentials and start running tools from the chat.