worksection-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AUTH_MODE | No | Authentication mode: 'admin_key' (no browser flow) or 'oauth' (per-user browser login). | admin_key |
| LOG_LEVEL | No | Standard Python logging level. | INFO |
| STATE_DIR | No | Where tokens, certificates, cache and offloaded responses are stored. | ~/.worksection-mcp |
| FERNET_KEY | No | Key used to encrypt stored OAuth tokens (oauth mode). | |
| MAX_RETRIES | No | Retry attempts for retryable HTTP failures. | 3 |
| CACHE_ENABLED | No | Set to 'true' to enable the in-process response cache. | true |
| RATE_LIMIT_RPS | No | Outbound request rate limit. | 3 |
| OAUTH_CLIENT_ID | No | OAuth2 application client id (oauth mode). | |
| CACHE_TTL_SECONDS | No | Cache entry lifetime in seconds. | 60 |
| FILE_WORKSPACE_DIR | No | Absolute path to the only directory upload_file may read from. | |
| OAUTH_CLIENT_SECRET | No | OAuth2 application client secret (oauth mode). | |
| OAUTH_REDIRECT_PORT | No | Loopback port the login listener binds to; '0' picks a free ephemeral port (oauth mode). | 18030 |
| WORKSECTION_ACCOUNT | No | Bare account slug from https://<slug>.worksection.com (admin_key mode). | |
| WORKSECTION_API_KEY | No | Admin API key (admin_key mode). | |
| OFFLOAD_THRESHOLD_BYTES | No | Responses larger than this are written to disk instead of returned inline. | 50000 |
| REQUEST_TIMEOUT_SECONDS | No | HTTP request timeout in seconds. | 30 |
| ALLOW_DESTRUCTIVE_OPERATIONS | No | Set to 'true' to register delete_task, delete_comment and delete_costs. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| activate_projectB | Restore an archived project to active status. |
| add_costsC | Log time (and optionally money) against a task. |
| add_task_tagsA | Add tags to a task, keeping the tags it already has. |
| archive_projectA | Close a project and move it to the archive. Reversible with activate_project. |
| auth_statusA | Report the active authentication mode and, in oauth mode, whether the server has stored login credentials. This reflects whether credentials are on file, not whether the access token happens to be fresh right now - an expired token is refreshed automatically as long as a refresh token is stored. Never returns token values. |
| complete_taskB | Mark a task as done, closing it in Worksection. |
| create_projectB | Create a project, optionally with a manager, description and dates. |
| create_subtaskB | Create a subtask under an existing task. |
| create_taskC | Create a task in a project, optionally assigned, dated and prioritised. |
| download_fileA | Fetch one attachment and return it inline as base64. Refuses files larger than max_bytes instead of writing anywhere on disk. |
| get_activity_logA | List recent account or project activity events over a date range. |
| get_all_tasksA | List tasks across every project the account can see. Status and assignee filters are re-applied locally because the API's own filtering is unreliable for some combinations. |
| get_commentsA | List the comments on a task, oldest first. |
| get_contactsA | List external contacts (clients) registered in the account. |
| get_costsB | List logged time and cost entries, optionally scoped to a project or task, a date range, or one person. |
| get_memberA | Find one account member by email or id. |
| get_member_groupsB | List the member groups (teams) configured for the account. |
| get_membersA | List the people in the account with their ids, emails and roles. |
| get_overdue_tasksA | List open tasks whose due date has passed, most overdue first. |
| get_projectA | Fetch a single project by id, including its status and dates. |
| get_project_groupsA | List the task groups (folders) configured inside a project. |
| get_project_membersA | List the people who have access to one project. |
| get_project_statsA | Count a project's tasks by status and priority bucket. |
| get_projectsC | List projects visible to the authenticated account. |
| get_running_timersA | List every timer currently running in the account. |
| get_subtasksC | List the subtasks of a task. |
| get_tagsA | List the tag groups and tags configured for the account. |
| get_taskB | Fetch one task, optionally with its description text, files and subtasks. |
| get_task_filesA | List the files attached to a task, with their ids, names and sizes. |
| get_task_tagsA | List the tag names currently applied to a task. |
| get_tasksA | List tasks inside one project, with local status and assignee filtering. |
| get_tasks_by_priorityC | Group tasks into high, normal and low priority buckets. |
| get_tasks_by_statusB | Group tasks by status, with counts and the tasks in each group. |
| get_team_workloadA | Group open and completed tasks by assignee across the account or one project. |
| get_time_reportA | Summarise logged time and money for an account, project or task over a date range, totalled per person. |
| health_checkB | Verify that the configured credentials can reach the Worksection API. Returns a status report instead of raising when the call fails. |
| list_workspace_filesB | List the files available in the configured workspace directory. Returns an empty list when FILE_WORKSPACE_DIR is not set. |
| post_commentA | Add a comment to a task. |
| read_offloaded_responseA | Read one bounded chunk of a response that was too large to return inline. Use the resource_uri and total_chunks from the offload summary. |
| reopen_taskC | Reopen a previously completed task. |
| search_tasksA | Search tasks by text, status, assignee, priority and due date, across the account or inside one project. Filtering is applied locally for reliability. |
| set_task_tagsA | Replace every tag on a task with the given list. |
| start_timerC | Start a running timer on a task. |
| stop_timerA | Stop the running timer on a task and store the elapsed time. |
| update_commentA | Replace the text of an existing comment. |
| update_costsB | Change the hours, comment, date or amount of an existing time entry. |
| update_projectC | Change a project's title, description, manager or dates. |
| update_subtaskB | Change the title, description, assignee, due date or priority of a subtask. |
| update_taskB | Change the title, description, assignee, dates or priority of a task. |
| upload_fileB | Attach a file to a task. Provide the content inline as base64, or name a file inside the configured workspace directory. Arbitrary filesystem paths are rejected. |
| validate_configurationA | Report the server's effective configuration and the result of every local startup check. Contacts no external service and never returns secret values. |
| worksection_loginA | Start the OAuth2 browser login. Opens the authorization page, waits for the loopback redirect, and stores the resulting tokens encrypted on disk. Has nothing to do in admin_key mode and reports that instead of failing. |
| worksection_logoutA | Delete the stored OAuth tokens from disk. Only local credentials are removed; nothing in Worksection itself is affected. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 53 tools
The read surface is dense: get_tasks, get_all_tasks, get_tasks_by_status, get_tasks_by_priority, get_overdue_tasks, and search_tasks all return task lists with overlapping filters/grouping, and get_costs/get_time_report plus auth_status/health_check/validate_configuration occupy similar niches. Descriptions are detailed enough to separate them, but an agent can easily pick the wrong variant.
The vast majority use a clear verb_noun pattern (get_*, create_*, update_*), with state changes as verb_noun (complete_task, reopen_task, archive_project). Minor deviations like post_comment instead of create_comment, add_costs instead of create_cost, and noun-style auth_status/health_check keep it from a perfect 5.
53 tools is far above the 3-15 well-scoped range and even above the 25+ 'too many' threshold; it is an extreme count for an MCP server. Many variants could be consolidated (e.g., task listing/grouping/search).
The surface covers the main Worksection workflow: projects, tasks, subtasks, comments, tags, files, time/costs, timers, members, and activity. The main gap is the lack of delete operations (tasks, projects, comments, files) and no ability to move a task between projects, but these are workable rather than blocking.