everhour-mcp-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| EVERHOUR_API_KEY | Yes | Personal Everhour API key |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| everhour_get_current_userA | Returns the Everhour user account associated with the configured EVERHOUR_API_KEY. Use this to discover the caller's user ID, which is required by some endpoints (e.g. when listing time records for "me") and to verify the API key is valid before logging time. Args:
Returns: JSON shape: { "id": number, "name": string, "email": string, "role": string, "status": string, "headline"?: string, "capacity"?: number // weekly capacity in seconds } Examples:
Error Handling:
|
| everhour_list_usersA | List the workspace's team members with their Everhour user IDs. Admin access required. Use this to resolve a person's name to their numeric Everhour user ID, which you then pass as 'user_id' to everhour_log_time / everhour_log_time_batch to log time on their behalf (admins only). Args:
Returns an array of user objects: { id, name, email, role, status, ... }. Examples:
Error Handling:
|
| everhour_list_projectsA | List or search Everhour projects, optionally filtered by source platform (e.g. Asana). Useful for:
Args:
Returns: JSON shape: { "total": number, "count": number, "offset": number, "items": [{ "id": "as:...", "name": string, "platform": string, "status": string, "client"?: { "name": string }, ... }], "has_more": boolean, "next_offset"?: number } Examples:
Error Handling:
|
| everhour_get_projectA | Fetch a single project by its Everhour project ID. Args:
Returns the full project record including name, platform, status, workspace, billing, budget, and members. Examples:
Error Handling:
|
| everhour_search_tasksA | Search tasks in Everhour by name, optionally scoped to a project. This is the primary way to find an Everhour task that mirrors an Asana ticket when you only know the ticket name. Asana-synced tasks appear with IDs like 'as:'. Args:
Returns: { "total": number, "count": number, "offset": number, "items": [{ "id": "as:...", "name": string, "url": string, "status"?: string, "projects"?: string[] }], "has_more": boolean, "next_offset"?: number } Examples:
Error Handling:
|
| everhour_get_taskA | Fetch a single Everhour task by ID, including total tracked time, estimate, and per-user time breakdown. Args:
Returns the full task object with name, projects, status, estimate (seconds), time.total (seconds), URL, etc. Examples:
Error Handling:
|
| everhour_find_task_by_asana_idA | Look up an Everhour task by the underlying Asana task GID. Everhour syncs Asana tasks with IDs of the form 'as:'. This tool builds that ID and fetches the task in one step. Use this before logging time when the user gives you an Asana ticket URL or GID. Args:
Returns the full Everhour task record (same as everhour_get_task). Examples:
Error Handling:
|
| everhour_log_timeA | Log (add) tracked time against an Everhour task. This is the primary tool for recording hours worked. Args:
Returns the created time record: { "id": number, "date": "YYYY-MM-DD", "user": number, "time": number, // seconds "comment": string | null, "task": { "id": string, "name"?: string }, "createdAt": "ISO-8601" } Examples:
Error Handling:
|
| everhour_log_time_for_asana_taskA | Workflow tool: log time on the Everhour task that mirrors a given Asana task GID. Equivalent to calling everhour_log_time with task_id='as:', but spares you having to construct the ID. Use this when the user gives you an Asana ticket URL/GID and asks to log hours. Args:
Returns the created time record (same shape as everhour_log_time). Examples:
Error Handling:
|
| everhour_log_time_batchA | Log a batch of time records in a single call — one entry per (task, date). Built for the log-everhour daily/weekly/monthly workflow: pass already-resolved task IDs and already-rephrased comments. Each entry is logged sequentially. A single row failing (404 not synced, 409 already exists, etc.) does NOT abort the batch unless stop_on_error is true — failures are reported per row. Durations are normalized to increment_hours (default 30 min). Comments are checked against absolute rules; a forbidden word or empty comment rejects that row unless allow_rule_violations is true. Args:
Returns: { "results": [{ "ok": boolean, "task_id": string, "date": string, "hours": number, "rounded"?: boolean, "warnings"?: string[], "record_id"?: number, "error"?: string }], "summary": { "logged": number, "failed": number, "totalHours": number } } Examples:
Error Handling:
|
| everhour_list_time_recordsA | List time records for a user across an optional date range, with optional project/task filters. Use this to review what's already been logged before adding more, or to build a timesheet. Args:
Returns: { "total": number, "count": number, "offset": number, "items": [{ "id": number, "date": string, "time": number, "comment": string|null, "task": { "id": string, "name"?: string } }], "has_more": boolean, "next_offset"?: number } Markdown output also shows a 'total tracked' summary. Examples:
Error Handling:
|
| everhour_update_time_recordA | Modify an existing time record (change duration, date, or comment). Args:
Returns the updated time record. Examples:
Error Handling:
|
| everhour_delete_time_recordA | Permanently delete a time record. Cannot be undone. Args:
Returns a confirmation message on success. Examples:
Error Handling:
|
| everhour_start_timerA | Start the active timer on an Everhour task. Only one timer can run at a time per user; starting a new one stops the previous. Args:
You must provide exactly one of task_id or asana_task_gid. Returns the timer state (status='active', task, startedAt, today seconds, duration). Examples:
Error Handling:
|
| everhour_stop_timerA | Stop the currently running timer for the authenticated user. Everhour will commit the elapsed time as a time record on the task. Args:
Returns the timer state after stopping (status='stopped', today total seconds). Examples:
Error Handling:
|
| everhour_get_current_timerA | Return the state of the authenticated user's timer. Args:
Returns:
Examples:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- 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/jais2402/ever-hour-mcp-for-jais'
If you have feedback or need assistance with the MCP directory API, please join our Discord server