# com.teamwork/mcp (oci · docker.io/teamwork/mcp:v1.26.4)

The Teamwork.com official MCP server helps teams efficiently manage client projects with AI.

- Trust score: 37/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.ai.teamwork.com`: 75/100, [markdown](https://verifymcp.io/servers/com-teamwork-mcp/mcp.md), [page](https://verifymcp.io/servers/com-teamwork-mcp/mcp)
- remote · `mcp.ai.teamwork.com`: 18/100, [markdown](https://verifymcp.io/servers/com-teamwork-mcp/mcp-2.md), [page](https://verifymcp.io/servers/com-teamwork-mcp/mcp-2)
- oci · `docker.io/teamwork/mcp:v1.26.4`: 37/100 (this document), [markdown](https://verifymcp.io/servers/com-teamwork-mcp/docker-io-teamwork-mcp-v1-26-4.md), [page](https://verifymcp.io/servers/com-teamwork-mcp/docker-io-teamwork-mcp-v1-26-4)

## Channel facts

- Registry: `oci`
- Package: `docker.io/teamwork/mcp:v1.26.4`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 0/100
  - Malware scan not yet available for this package.
  - CVE data not yet available for this package.
  - Install-script risk not yet assessed.
  - Dependency-health data not yet available.
- **Provenance & Transparency**: 32/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - License check failed: no license is declared.
  - Actively maintained (last published 2 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 79/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 20972 tokens (~109/item across 191 items; 190 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 96/100
  - 93% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (32% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).
  - Supports UI / widget rendering.

**Unverified: 2 categories.** Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add com-teamwork-mcp -- docker run --rm -i docker.io/teamwork/mcp:v1.26.4
```

### Codex

```bash
codex mcp add com-teamwork-mcp -- docker run --rm -i docker.io/teamwork/mcp:v1.26.4
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-teamwork-mcp": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "docker.io/teamwork/mcp:v1.26.4"
      ],
      "enabled": true
    }
  }
}
```

### Hermes

```yaml
mcp_servers:
  com-teamwork-mcp:
    command: "docker"
    args: ["run", "--rm", "-i", "docker.io/teamwork/mcp:v1.26.4"]
```

### Other

```json
{
  "mcpServers": {
    "com-teamwork-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "docker.io/teamwork/mcp:v1.26.4"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-01 (score 37, +31)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] Tool coverage: unverified → 93
- [functional improvement] MCP protocol: unverified → pass
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 32
- [functional] First check of Capabilities: pass
- [functional] First check of Schema quality: fail
- [functional] First check of Schema quality: good
- [functional] First check of Tool coverage: 100

### 2026-07-31 (score 6)

First indexed and scored.

## MCP tools (190)

### `twprojects-get_task` (~27 tokens)

Get task.

Input parameters:

- `id` (integer, required): The ID of the task to get.

Output parameters:

- `included` (object)
- `task` (object)

### `twprojects-list_tasks` (~354 tokens)

List tasks with structured filters (tasklist_id, project_id, or site-wide). For keyword search use search.

Input parameters:

- `assignee_user_ids`: Filter tasks by assignee.
- `completed_after`: Filter tasks completed after.
- `completed_before`: Filter tasks completed before.
- `created_after`: Filter tasks created after.
- `created_before`: Filter tasks created before.
- `created_by_user_ids`: Filter tasks by creator.
- `due_after`: Filter tasks due after.
- `due_before`: Filter tasks due before.
- `match_all_tags`: If true, match all tags; if false, match any.
- `only_unassigned`: If true, only return tasks that have no assignee.
- `only_unplanned`: If true, only return tasks that are unplanned, meaning they are missing an assignee, a due date, or estimated time.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_id`: The ID of the project from which to retrieve tasks. Omit to list tasks across all projects.
- `search_term`: A search term to filter tasks by name.
- `show_completed`: If true, include completed tasks and tasks belonging to completed tasklists; both excluded by default.
- `tag_ids`: A list of tag IDs to filter tasks by tags.
- `tasklist_id`: The ID of the tasklist from which to retrieve tasks. Takes precedence over project_id.
- `updated_after`: Filter tasks updated after.
- `updated_before`: Filter tasks updated before.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `included` (object)
- `meta` (object)
- `tasks` (null|array)

### `twprojects-create_task` (~257 tokens)

Create task in a tasklist.

Input parameters:

- `assignees`: Assignees for the task.
- `change_followers`: Followers of any task changes.
- `comment_followers`: Followers of any task comments.
- `complete_followers`: Followers of any task completions.
- `description`: The description of the task. Support for plain text and Markdown formatting.
- `due_date`: The due date of the task. If omitted, falls back to the milestone due date when one is set.
- `estimated_minutes`: The estimated time to complete the task in minutes.
- `name` (string, required): The name of the task.
- `parent_task_id`: The ID of the parent task if creating a subtask.
- `predecessors`: Task dependencies that must be completed before this task can start.
- `priority`: The priority of the task.
- `progress`: The progress of the task, as a percentage (0-100). Only whole numbers are allowed.
- `start_date`: The start date of the task.
- `tag_ids`: A list of tag IDs to associate with the task.
- `tasklist_id` (integer, required): Tasklist ID. Use twprojects-list_tasklists to find one.

### `twprojects-list_comments` (~244 tokens)

List comments. Scope by one of task_id, milestone_id, notebook_id, link_id, or file_version_id; omit all for site-wide.

Input parameters:

- `file_version_id`: The ID of the file version to retrieve comments for. Each file can have multiple versions, and comments can be associated with specific versions.
- `link_id`: The ID of the link to retrieve comments for. Provide this to scope comments to a link.
- `milestone_id`: The ID of the milestone to retrieve comments for. Provide this to scope comments to a milestone.
- `notebook_id`: The ID of the notebook to retrieve comments for. Provide this to scope comments to a notebook.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `search_term`: A search term to filter comments by name.
- `task_id`: The ID of the task to retrieve comments for. Provide this to scope comments to a task.
- `updated_after`: Filter comments updated after. Defaults to the last 3 months.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `comments` (null|array)
- `meta` (object)

### `twprojects-update_task` (~307 tokens)

Update task.

Input parameters:

- `assignees`: Assignees for the task. To remove all assignees, use clear_assignees instead.
- `change_followers`: Followers of any task changes.
- `clear_assignees`: If true, removes all assignees from the task, leaving it unassigned. Cannot be combined with a non-empty assignees value.
- `comment_followers`: Followers of any task comments.
- `complete_followers`: Followers of any task completions.
- `description`: The description of the task. Support for plain text and Markdown formatting.
- `due_date`: The due date of the task. If omitted, falls back to the milestone due date when one is set.
- `estimated_minutes`: The estimated time to complete the task in minutes.
- `id` (integer, required): The ID of the task to update.
- `name`: The name/title of the task.
- `parent_task_id`: The ID of the parent task if creating a subtask.
- `predecessors`: Task dependencies that must be completed before this task can start.
- `priority`: The priority of the task.
- `progress`: The progress of the task, as a percentage (0-100). Only whole numbers are allowed.
- `start_date`: The start date of the task.
- `tag_ids`: A list of tag IDs to associate with the task.
- `tasklist_id`: The ID of the tasklist.

### `twprojects-list_projects` (~118 tokens)

List projects.

Input parameters:

- `match_all_tags`: If true, match all tags; if false, match any.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_category_ids`: Filter projects by category.
- `search_term`: A search term to filter projects by name or description.
- `tag_ids`: A list of tag IDs to filter projects by tags.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `included` (object)
- `meta` (object)
- `projects` (null|array)

### `twprojects-create_timelog` (~228 tokens)

Create timelog entry against a project or task.

Input parameters:

- `billable`: If true, the timelog is billable.
- `date` (string, required): The date of the timelog.
- `description`: A description of the timelog.
- `hours` (integer, required): The number of hours spent on the timelog. Must be a positive integer.
- `is_utc`: If true, the time is in UTC.
- `minutes` (integer, required): Minutes spent on the timelog. Must be a positive integer less than 60; otherwise increment hours instead.
- `project_id`: Project the timelog is logged against. Provide exactly one of project_id or task_id.
- `tag_ids`: A list of tag IDs to associate with the timelog.
- `task_id`: Task the timelog is logged against. Provide exactly one of project_id or task_id.
- `time` (string, required): The time of the timelog in the format HH:MM:SS.
- `user_id`: User the timelog is logged for. Defaults to the authenticated user.

### `twprojects-list_timelogs` (~249 tokens)

List timelogs. Scope by project_id or task_id, or omit for site-wide.

Input parameters:

- `assigned_company_ids`: Filter timelogs by assigned company.
- `assigned_team_ids`: Filter timelogs by assigned team.
- `assigned_user_ids`: Filter timelogs by assigned user.
- `end_date`: End of the timelog window.
- `match_all_tags`: If true, match all tags; if false, match any.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_id`: The ID of the project from which to retrieve timelogs. Omit to list timelogs across all projects.
- `start_date`: Start of the timelog window.
- `tag_ids`: A list of tag IDs to filter timelogs by tags.
- `task_id`: The ID of the task from which to retrieve timelogs. Omit to list timelogs across all tasks.
- `ticketIds`: Filter timelogs by associated desk ticket.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `meta` (object)
- `timelogs` (null|array)

### `twprojects-search` (~130 tokens)

Cross-entity keyword search across projects, tasks, files, messages, and more.

Input parameters:

- `cursor`: Cursor for pagination of results.
- `extended_search`: Whether to perform an extended search, which includes items updated more than 5 years ago.
- `include_completed_items`: Whether to include completed items in the search results.
- `limit`: Number of results per page for pagination.
- `project_id`: The ID of the project to limit the search to.
- `search_term` (required): A search term to to look for items.
- `updated_after`: Only include items updated after this date.

Output parameters:

- `included` (object)
- `meta` (object)
- `search` (null|array)

### `twprojects-list_tasklists` (~127 tokens)

List tasklists. Scope by project_id or omit for site-wide.

Input parameters:

- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_id`: The ID of the project from which to retrieve tasklists. Omit to list tasklists across all projects.
- `search_term`: A search term to filter tasklists by name.
- `show_completed`: If true, include completed tasklists; excluded by default.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `meta` (object)
- `tasklists` (null|array)

### `twprojects-create_comment` (~126 tokens)

Create comment on a task, milestone, notebook, file, or link.

Input parameters:

- `body` (string, required): The content of the comment. The content can be added as text or HTML.
- `content_type`: The content type of the comment. It can be either 'TEXT' or 'HTML'.
- `notify`: Who to notify of the new comment.
- `notify_current_user`: Whether the current user should be notified about the new comment.
- `object` (object, required): The object to create the comment for. It can be a tasks, milestones, files or notebooks.

### `twprojects-get_tasklist` (~30 tokens)

Get tasklist.

Input parameters:

- `id` (integer, required): The ID of the tasklist to get.

Output parameters:

- `tasklist` (object)

### `twprojects-get_project` (~27 tokens)

Get project.

Input parameters:

- `id` (integer, required): The ID of the project to get.

Output parameters:

- `included` (object)
- `project` (object)

### `twdesk-get_ticket` (~55 tokens)

Get ticket.

Input parameters:

- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `id` (integer, required): The ID of the ticket to retrieve.

### `twprojects-update_timelog` (~229 tokens)

Update timelog.

Input parameters:

- `billable`: If true, the timelog is billable.
- `date`: The date of the timelog.
- `description`: A description of the timelog.
- `hours`: The number of hours spent on the timelog. Must be a positive integer.
- `id` (integer, required): The ID of the timelog to update.
- `is_utc`: If true, the time is in UTC.
- `minutes`: Minutes spent on the timelog. Must be a positive integer less than 60; otherwise increment hours instead.
- `project_id`: Project the timelog is logged against. Provide exactly one of project_id or task_id.
- `tag_ids`: A list of tag IDs to associate with the timelog.
- `task_id`: Task the timelog is logged against. Provide exactly one of project_id or task_id.
- `time`: The time of the timelog in the format HH:MM:SS.
- `user_id`: User the timelog is logged for. Defaults to the authenticated user.

### `twprojects-list_activities` (~127 tokens)

List recent activity events. Scope by project_id or omit for site-wide.

Input parameters:

- `end_date`: End of the activity window.
- `log_item_types`: Filter activities by item types.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_id`: The ID of the project to retrieve activities from. Omit to list activities across all projects.
- `start_date`: Start of the activity window.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `activities` (null|array)
- `meta` (object)

### `twprojects-move_task_to_workflow_stage` (~75 tokens)

Move a task to a workflow stage.

Input parameters:

- `stage_id` (integer, required): The ID of the workflow stage to move the task to.
- `task_id` (integer, required): The ID of the task to move.
- `workflow_id` (integer, required): The ID of the workflow that contains the target stage.

### `twprojects-complete_task` (~31 tokens)

Mark task complete.

Input parameters:

- `id` (integer, required): The ID of the task to mark as complete.

### `twdesk-search_tickets` (~254 tokens)

Search tickets. Filter by inbox, customer, company, tag, status, priority, or user.

Input parameters:

- `companyIDs` (required): Filter by company. Use twdesk-list_companies to discover.
- `customerIDs` (required): Filter by customer. Use twdesk-list_customers to discover.
- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `inboxIDs` (required): Filter by inbox. Use twdesk-list_inboxes to discover.
- `orderBy` (required): The field to order the results by.
- `orderDirection` (required): The direction to order the results by (asc, desc).
- `page` (required): Page number for pagination of results.
- `pageSize` (required): Number of results per page for pagination.
- `priorityIDs` (required): Filter by priority. Use twdesk-list_priorities to discover.
- `search` (required): Search term matched against subject, body, and other ticket fields.
- `statusIDs` (required): Filter by status. Use twdesk-list_statuses to discover.
- `tagIDs` (required): Filter by tag. Use twdesk-list_tags to discover.
- `userIDs` (required): Filter by user. Use twdesk-list_users to discover.

### `twprojects-list_users` (~173 tokens)

List users. Scope by project_id or filter by type (account/collaborator/contact).

Input parameters:

- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_id`: The ID of the project from which to retrieve users. Omit to list users across all projects.
- `search_term`: A search term to filter users by first or last names, or e-mail. The user will be selected if each word of the term matches the first or last name, or e-mail, not requiring that the word matches are…
- `type`: Type of user to filter by. The available options are account, collaborator or contact.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `meta` (object)
- `people` (null|array)

### `twchat-get_conversation` (~36 tokens)

Get a single Teamwork Chat conversation by ID.

Input parameters:

- `conversation_id` (integer, required): The ID of the conversation to retrieve.

### `twchat-get_current_user` (~35 tokens)

Get the current authenticated Teamwork Chat user, including identity, counts (unread conversations/messages, mentions), and settings.

### `twchat-get_or_create_dm` (~73 tokens)

Get the 1:1 direct-message conversation with a person, creating it if it does not exist yet. Returns the conversation (use its id with send_message). Use list_people to find user_id.

Input parameters:

- `user_id` (integer, required): The ID of the person to get the direct-message conversation with.

### `twchat-list_conversations` (~134 tokens)

List Teamwork Chat conversations the current user is a member of.

Input parameters:

- `include_message_data`: Include the latest message in each conversation.
- `page_limit`: Number of conversations to return (max 10).
- `page_offset`: The index position to start retrieving results from (not a page number).
- `search_term`: A search term to filter conversations by title.
- `sort`: Sort order for the returned conversations.
- `status`: Filter by conversation status.
- `type`: Filter by conversation type: "rooms" for group/channel conversations, "pair" for 1:1 direct messages.

### `twchat-list_messages` (~137 tokens)

List messages within a Teamwork Chat conversation. Requires conversation_id.

Input parameters:

- `after_message_id`: Return messages newer than this message ID (cursor).
- `before_message_id`: Return messages older than this message ID (cursor).
- `conversation_id` (integer, required): The ID of the conversation to read messages from.
- `created_after`: Return messages created after this time.
- `created_before`: Return messages created before this time.
- `page`: Page number for pagination of results.
- `page_size`: Number of messages per page (1-200).
- `search_term`: A search term to filter messages by text content.

### `twchat-list_people` (~73 tokens)

List people in the Teamwork Chat installation. Useful for resolving names to user IDs.

Input parameters:

- `page_limit`: Number of people to return.
- `page_offset`: The index position to start retrieving results from (not a page number).
- `search_term`: A search term to filter people by name or email.

### `twchat-send_dm` (~77 tokens)

Send a direct message to a person, resolving (or creating) the 1:1 conversation automatically. Requires user_id and body. Use list_people to find user_id.

Input parameters:

- `body` (string, required): The message text. Supports Markdown.
- `user_id` (integer, required): The ID of the person to send the direct message to.

### `twchat-send_message` (~57 tokens)

Send a message to a Teamwork Chat conversation. Requires conversation_id and body.

Input parameters:

- `body` (string, required): The message text. Supports Markdown.
- `conversation_id` (integer, required): The ID of the conversation to post the message to.

### `twdesk-create_company` (~107 tokens)

Create Desk company.

Input parameters:

- `description` (required): The description of the company.
- `details` (required): The details of the company.
- `domains` (required): The domains for the company.
- `industry` (required): The industry of the company.
- `kind` (required): The kind of the company.
- `name` (string, required): The name of the company.
- `note` (required): The note for the company.
- `permission` (required): The permission level of the company.
- `website` (required): The website of the company.

### `twdesk-create_customer` (~160 tokens)

Create customer.

Input parameters:

- `address` (required): The address of the customer.
- `email` (required): The email of the customer.
- `extraData` (required): The extra data of the customer.
- `facebookURL` (required): The Facebook URL of the customer.
- `firstName` (required): The first name of the customer.
- `jobTitle` (required): The job title of the customer.
- `lastName` (required): The last name of the customer.
- `linkedinURL` (required): The LinkedIn URL of the customer.
- `mobile` (required): The mobile number of the customer.
- `notes` (required): The notes of the customer.
- `organization` (required): The organization of the customer.
- `phone` (required): The phone number of the customer.
- `twitterHandle` (required): The Twitter handle of the customer.

### `twdesk-create_file` (~77 tokens)

Upload file. Attach the returned ID to tickets or messages.

Input parameters:

- `data` (string, required): The content of the file as a base64-encoded string.
- `disposition` (required): The disposition of the file.
- `mimeType` (string, required): The MIME type of the file.
- `name` (string, required): The name of the file.

### `twdesk-create_helpdoc_article` (~108 tokens)

Create a new help doc article.

Input parameters:

- `contents` (required): The body content of the article.
- `description` (required): A short description / summary of the article.
- `isPrivate` (required): Set to true to make the article private.
- `siteID` (integer, required): The ID of the help doc site to create the article in.
- `status` (required): Publication status of the article (e.g. "published", "draft").
- `title` (string, required): The title of the article.

### `twdesk-create_priority` (~36 tokens)

Create ticket priority.

Input parameters:

- `color` (required): The color of the priority.
- `name` (string, required): The name of the priority.

### `twdesk-create_status` (~48 tokens)

Create ticket status.

Input parameters:

- `color` (required): The color of the status.
- `displayOrder` (required): The display order of the status.
- `name` (string, required): The name of the status.

### `twdesk-create_tag` (~36 tokens)

Create Desk tag.

Input parameters:

- `color` (required): The color of the tag.
- `name` (string, required): The name of the tag.

### `twdesk-create_ticket` (~256 tokens)

Create ticket.

Input parameters:

- `agentId` (required): Agent the ticket is assigned to. Use twdesk-list_users to discover.
- `bcc` (required): Email addresses to BCC.
- `body` (string, required): The body of the ticket.
- `cc` (required): Email addresses to CC.
- `customerEmail` (required): Customer email; required when customerId is not given. Existing customers are matched, otherwise a new customer is created.
- `customerId` (required): Customer of the ticket. Use twdesk-list_customers to discover.
- `files` (required): File IDs to attach. Use twdesk-create_file to upload.
- `inboxId` (integer, required): Inbox of the ticket. Use twdesk-list_inboxes to discover.
- `notifyCustomer` (required): Set to true if the customer should be sent a copy of the ticket.
- `priorityId` (required): Priority of the ticket. Use twdesk-list_priorities to discover.
- `statusId` (required): Status of the ticket. Use twdesk-list_statuses to discover.
- `subject` (string, required): The subject of the ticket.
- `tags` (required): Tags to associate with the ticket. Use twdesk-list_tags to discover.
- `typeId` (required): Ticket type. Use twdesk-list_ticket_types to discover.

### `twdesk-create_ticket_type` (~58 tokens)

Create ticket type.

Input parameters:

- `displayOrder` (required): The display order of the type.
- `enabledForFutureInboxes` (required): Whether the type is enabled for future inboxes.
- `name` (string, required): The name of the ticket type.

### `twdesk-get_company` (~59 tokens)

Get Desk company (customer organization).

Input parameters:

- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `id` (integer, required): The ID of the company to retrieve.

### `twdesk-get_customer` (~55 tokens)

Get customer.

Input parameters:

- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `id` (integer, required): The ID of the customer to retrieve.

### `twdesk-get_helpdoc_article` (~64 tokens)

Get a help doc article by ID.

Input parameters:

- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `id` (integer, required): The ID of the help doc article to retrieve.

### `twdesk-get_inbox` (~56 tokens)

Get inbox.

Input parameters:

- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `id` (integer, required): The ID of the inbox to retrieve.

### `twdesk-get_priority` (~56 tokens)

Get ticket priority.

Input parameters:

- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `id` (integer, required): The ID of the priority to retrieve.

### `twdesk-get_status` (~56 tokens)

Get ticket status.

Input parameters:

- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `id` (integer, required): The ID of the status to retrieve.

### `twdesk-get_tag` (~56 tokens)

Get Desk tag.

Input parameters:

- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `id` (integer, required): The ID of the tag to retrieve.

### `twdesk-get_ticket_type` (~58 tokens)

Get ticket type.

Input parameters:

- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `id` (integer, required): The ID of the ticket type to retrieve.

### `twdesk-get_user` (~56 tokens)

Get support agent.

Input parameters:

- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `id` (integer, required): The ID of the user to retrieve.

### `twdesk-list_companies` (~145 tokens)

List Desk companies. Filter by name, domains, or kind.

Input parameters:

- `domains` (required): The domains of the company to filter by.
- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `kind` (required): The kind of the company to filter by.
- `name` (required): The name of the company to filter by.
- `orderBy` (required): The field to order the results by.
- `orderDirection` (required): The direction to order the results by (asc, desc).
- `page` (required): Page number for pagination of results.
- `pageSize` (required): Number of results per page for pagination.

### `twdesk-list_customers` (~143 tokens)

List customers. Filter by company or email.

Input parameters:

- `companyIDs` (required): The IDs of the companies to filter by.
- `companyNames` (required): The names of the companies to filter by.
- `emails` (required): The emails of the customers to filter by.
- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `orderBy` (required): The field to order the results by.
- `orderDirection` (required): The direction to order the results by (asc, desc).
- `page` (required): Page number for pagination of results.
- `pageSize` (required): Number of results per page for pagination.

### `twdesk-list_inboxes` (~129 tokens)

List inboxes. Filter by name or email.

Input parameters:

- `email` (required): The email of the inbox to filter by.
- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `name` (required): The name of the inbox to filter by.
- `orderBy` (required): The field to order the results by.
- `orderDirection` (required): The direction to order the results by (asc, desc).
- `page` (required): Page number for pagination of results.
- `pageSize` (required): Number of results per page for pagination.

### `twdesk-list_priorities` (~129 tokens)

List ticket priorities. Filter by name or color.

Input parameters:

- `color` (required): The color of the priority to filter by.
- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `name` (required): The name of the priority to filter by.
- `orderBy` (required): The field to order the results by.
- `orderDirection` (required): The direction to order the results by (asc, desc).
- `page` (required): Page number for pagination of results.
- `pageSize` (required): Number of results per page for pagination.

### `twdesk-list_statuses` (~145 tokens)

List ticket statuses. Filter by name, color, or code.

Input parameters:

- `code` (required): The code of the status to filter by.
- `color` (required): The color of the status to filter by.
- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `name` (required): The name of the status to filter by.
- `orderBy` (required): The field to order the results by.
- `orderDirection` (required): The direction to order the results by (asc, desc).
- `page` (required): Page number for pagination of results.
- `pageSize` (required): Number of results per page for pagination.

### `twdesk-list_tags` (~146 tokens)

List Desk tags. Filter by name, color, or inbox.

Input parameters:

- `color` (required): The color of the tag to filter by.
- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `inboxIDs` (required): The IDs of the inboxes to filter by.
- `name` (required): The name of the tag to filter by.
- `orderBy` (required): The field to order the results by.
- `orderDirection` (required): The direction to order the results by (asc, desc).
- `page` (required): Page number for pagination of results.
- `pageSize` (required): Number of results per page for pagination.

### `twdesk-list_ticket_types` (~134 tokens)

List ticket types. Filter by name or inbox.

Input parameters:

- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `inboxIDs` (required): Filter by inbox. Use twdesk-list_inboxes to discover.
- `name` (required): The name of the type to filter by.
- `orderBy` (required): The field to order the results by.
- `orderDirection` (required): The direction to order the results by (asc, desc).
- `page` (required): Page number for pagination of results.
- `pageSize` (required): Number of results per page for pagination.

### `twdesk-list_users` (~181 tokens)

List support agents. For customers, use twdesk-list_customers.

Input parameters:

- `email` (required): The email addresses of the users to filter by.
- `fields` (required): Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields.
- `firstName` (required): The first names of the users to filter by.
- `inboxIDs` (required): The IDs of the inboxes to filter by.
- `isPartTime` (required): Whether to include part-time users in the results.
- `lastName` (required): The last names of the users to filter by.
- `orderBy` (required): The field to order the results by.
- `orderDirection` (required): The direction to order the results by (asc, desc).
- `page` (required): Page number for pagination of results.
- `pageSize` (required): Number of results per page for pagination.

### `twdesk-reply_ticket` (~101 tokens)

Reply to a ticket. Use threadType=note for internal agent notes.

Input parameters:

- `bcc` (required): Email addresses to BCC.
- `body` (string, required): The body of the message.
- `cc` (required): Email addresses to CC.
- `threadType` (required): 'message' is a customer-facing reply; 'note' is an internal agent note.
- `ticketID` (integer, required): The ID of the ticket that the message will be sent to.

### `twdesk-search_helpdoc_articles` (~107 tokens)

Search help doc articles. Filter by search term, status, site, or category.

Input parameters:

- `categoryID` (required): Filter by help doc category ID.
- `page` (required): Page number (1-based).
- `pageSize` (required): Number of results per page.
- `search` (required): Free-text search term matched against article title and content.
- `siteID` (required): Filter by help doc site ID.
- `status` (required): Filter by article status (e.g. "published", "draft").

### `twdesk-update_company` (~128 tokens)

Update Desk company.

Input parameters:

- `description` (required): The new description of the company.
- `details` (required): The new details of the company.
- `domains` (required): The new domains for the company.
- `id` (integer, required): The ID of the company to update.
- `industry` (required): The new industry of the company.
- `kind` (required): The new kind of the company.
- `name` (required): The new name of the company.
- `note` (required): The new note for the company.
- `permission` (required): The new permission level of the company.
- `website` (required): The new website of the company.

### `twdesk-update_customer` (~187 tokens)

Update customer.

Input parameters:

- `address` (required): The new address of the customer.
- `email` (required): The new email of the customer.
- `extraData` (required): The new extra data of the customer.
- `facebookURL` (required): The new Facebook URL of the customer.
- `firstName` (required): The new first name of the customer.
- `id` (integer, required): The ID of the customer to update.
- `jobTitle` (required): The new job title of the customer.
- `lastName` (required): The new last name of the customer.
- `linkedinURL` (required): The new LinkedIn URL of the customer.
- `mobile` (required): The new mobile number of the customer.
- `notes` (required): The new notes of the customer.
- `organization` (required): The new organization of the customer.
- `phone` (required): The new phone number of the customer.
- `twitterHandle` (required): The new Twitter handle of the customer.

### `twdesk-update_helpdoc_article` (~101 tokens)

Update an existing help doc article.

Input parameters:

- `contents` (required): The new body content of the article.
- `description` (required): A short description / summary of the article.
- `id` (integer, required): The ID of the help doc article to update.
- `isPrivate` (required): Set to true to make the article private.
- `status` (required): Publication status (e.g. "published", "draft").
- `title` (required): The new title of the article.

### `twdesk-update_priority` (~49 tokens)

Update ticket priority.

Input parameters:

- `color` (required): The color of the priority.
- `id` (integer, required): The ID of the priority to update.
- `name` (required): The new name of the priority.

### `twdesk-update_status` (~61 tokens)

Update ticket status.

Input parameters:

- `color` (required): The color of the status.
- `displayOrder` (required): The display order of the status.
- `id` (integer, required): The ID of the status to update.
- `name` (required): The new name of the status.

### `twdesk-update_tag` (~49 tokens)

Update Desk tag.

Input parameters:

- `color` (required): The color of the tag.
- `id` (integer, required): The ID of the tag to update.
- `name` (required): The new name of the tag.

### `twdesk-update_ticket` (~200 tokens)

Update ticket.

Input parameters:

- `agentId` (required): Agent the ticket is assigned to. Use twdesk-list_users to discover.
- `bcc` (required): Email addresses to BCC.
- `body` (required): The body of the ticket.
- `cc` (required): Email addresses to CC.
- `deleteTags` (required): Tags to remove from the ticket. Use twdesk-list_tags to discover.
- `id` (integer, required): The ID of the ticket to update.
- `inboxId` (required): Inbox of the ticket. Use twdesk-list_inboxes to discover.
- `priorityId` (required): Priority of the ticket. Use twdesk-list_priorities to discover.
- `statusId` (required): Status of the ticket. Use twdesk-list_statuses to discover.
- `subject` (required): The subject of the ticket.
- `tags` (required): Tags to associate with the ticket. Use twdesk-list_tags to discover.
- `typeId` (required): Ticket type. Use twdesk-list_ticket_types to discover.

### `twdesk-update_ticket_type` (~71 tokens)

Update ticket type.

Input parameters:

- `displayOrder` (required): The display order of the type.
- `enabledForFutureInboxes` (required): Whether the type is enabled for future inboxes.
- `id` (integer, required): The ID of the ticket type to update.
- `name` (required): The new name of the type.

### `twprojects-add_project_member` (~45 tokens)

Add a user to a project.

Input parameters:

- `project_id` (integer, required): The ID of the project to add the member to.
- `user_ids`: Users to add.

### `twprojects-clone_project` (~329 tokens)

Clone/copy an existing project or instantiate one from a template.

Input parameters:

- `company_id`: The ID of the company associated with the new cloned project. If not provided, the company of the original project will be used.
- `days_offset`: DaysOffset is the number of days to shift all scheduled dates in the cloned project relative to the base date. When cloning from a template, it defines the project duration span. When copying an exis…
- `description`: The description of the new cloned project. If not provided, the description of the original project will be used.
- `id` (integer, required): The ID of the project to clone.
- `name`: The name of the new cloned project. If not provided, the name of the original project will be used with an incremental suffix (e.g., 'Project Name (1)').
- `new_from_template`: Indicates whether the new project should be a regular one created from a template.
- `target_date`: Desired start or end date for the cloned project (chosen by template_date_target). Only applies when new_from_template=true. Format: YYYYMMDD. Defaults to today.
- `template_date_target`: Specifies whether target_date represents the project's start or end date. When 'end', the start date is calculated by subtracting the template project's duration from target_date. Only applicable whe…
- `to_template`: Indicates whether the new project should be set as a template.

### `twprojects-complete_timer` (~45 tokens)

Stop a timer permanently and convert it to a timelog. Use pause_timer to pause without converting.

Input parameters:

- `id` (integer, required): The ID of the timer to complete.

### `twprojects-create_company` (~242 tokens)

Create company (aka client).

Input parameters:

- `address_one`: The first line of the address of the company.
- `address_two`: The second line of the address of the company.
- `city`: The city of the company.
- `country_code`: The country code of the company, e.g., 'US' for the United States.
- `email_one`: The primary email address of the company.
- `email_three`: The tertiary email address of the company.
- `email_two`: The secondary email address of the company.
- `fax`: The fax number of the company.
- `industry_id`: The ID of the industry the company belongs to.
- `manager_id`: The ID of the user who manages the company.
- `name` (string, required): The name of the company.
- `phone`: The phone number of the company.
- `profile`: A profile description for the company.
- `state`: The state of the company.
- `tag_ids`: A list of tag IDs to associate with the company.
- `website`: The website of the company.
- `zip`: The ZIP or postal code of the company.

### `twprojects-create_custom_field` (~273 tokens)

Create custom field.

Input parameters:

- `currency_code`: The ISO currency code for 'currency' or 'financial' type custom fields.
- `description`: An optional description for the custom field.
- `entity` (string, required): The type of entity this custom field can be applied to. Use 'all' for installation-level custom fields that are available across the workspace.
- `formula`: The formula expression for 'formula' type custom fields.
- `name` (string, required): The display name of the custom field.
- `options`: Type-specific options for the custom field. For 'dropdown' and 'multiselect' types, provide {"choices": [{"value": "...", "color": "#rrggbb"}, ...]}. For 'rating' type, provide {"icon": "star|heart|.…
- `project_id`: The ID of the project to scope the custom field to. When omitted, the custom field is created at the installation level.
- `required`: Whether the custom field must have a value when set on an entity.
- `type` (string, required): The data type of the custom field.
- `unit`: The unit associated with the custom field, when applicable.

### `twprojects-create_custom_field_value` (~177 tokens)

Set a custom field value on a task, project or company. The custom field must already exist and be applicable to the target entity.

Input parameters:

- `country_code`: The country code for currency-type custom field values.
- `currency_code`: The ISO currency code for currency-type custom field values.
- `custom_field_id` (integer, required): The ID of the custom field the value belongs to.
- `entity` (string, required): The type of entity the custom field value is attached to.
- `entity_id` (integer, required): The ID of the task, project or company the custom field value is attached to.
- `value` (required): The value to assign, typed per the field: string (text), number (number), boolean (checkbox), choice value string (dropdown/status; array for multiselect), ISO-8601 string (date).

### `twprojects-create_custom_item` (~238 tokens)

Create a new custom item type (e.g. Contracts, Leads, Deals) on a project. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `description`: An optional human-readable description for the custom item type.
- `display_name` (string, required): The display name of the custom item type (e.g. "Contracts").
- `label_plural`: Plural label for many records (e.g. "Contracts"). Defaults to the display name when omitted.
- `label_singular`: Singular label for one record (e.g. "Contract"). Defaults to the display name when omitted.
- `project_id` (integer, required): Project ID that will own the new custom item type.

### `twprojects-create_custom_item_field` (~334 tokens)

Add a field (column) to a custom item type. Field types include text, number, dropdown, multiselect, checkbox, url, user, date, time and datetime. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `custom_item_id` (integer, required): Custom item type ID that will own the new field.
- `definition`: Optional type-specific configuration as a JSON object. Examples: for number-decimal fields {"precision": "2", "unit": {"type": "currency"}}; for user fields {"limit": 1, "source": "workspace"}. See t…
- `display_name` (string, required): Human-readable name of the field (e.g. "Status").
- `options`: Choices for dropdown/multiselect fields. Each option is {label: "Active", color: "#22c55e"}.
- `position_after_id`: Place this field after the given field ID. Null appends to the end.
- `tw_type`: Optional sub-classification for dropdown fields. Use "status" for a Status field.
- `type` (string, required): Field data type.

### `twprojects-create_custom_item_record` (~339 tokens)

Create a record (row) on a custom item type. For example, add a Contract on the Contracts type. Pass field values by name; the tool resolves names to the API's internal IDs. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `custom_item_id` (integer, required): Custom item type ID that will own the new record.
- `field_values`: Field values to set on the record. Each entry is {field_name, value}. Field names are matched case-insensitively against the custom item type's fields. Values are coerced by field type: dropdown/mult…
- `name` (string, required): Display name of the record (e.g. "Acme Inc Contract").
- `position_after_id`: Place the record after the given record ID. Null appends to the end.
- `section_id`: Optional section ID to place the record in.

### `twprojects-create_jobrole` (~28 tokens)

Create job role.

Input parameters:

- `name` (string, required): The name of the job role.

### `twprojects-create_link` (~143 tokens)

Create link.

Input parameters:

- `code` (string, required): The URL of the link. This is the actual web address that the link points to.
- `description`: The description of the link. Longer text that provides detailed information about the link.
- `notify`: Who to notify of the new link.
- `notify_current_user`: Whether the current user should be notified about the new link.
- `project_id` (integer, required): The ID of the project to create the link in.
- `tag_ids`: A list of tag IDs to associate with the link.
- `title`: The title of the link, which provides a brief summary of the purpose of the link.

### `twprojects-create_message` (~88 tokens)

Create message in a project.

Input parameters:

- `body` (string, required): The body of the message.
- `notify`: Who to notify of the new message.
- `notify_current_user`: Whether the current user should be notified about the new message.
- `project_id` (integer, required): The ID of the project to create the message in.
- `title` (string, required): The title of the message.

### `twprojects-create_message_reply` (~77 tokens)

Create message reply.

Input parameters:

- `body` (string, required): The body of the message reply.
- `message_id` (integer, required): The ID of the message to create the reply in.
- `notify`: Who to notify of the new reply.
- `notify_current_user`: Whether the current user should be notified about the new message reply.

### `twprojects-create_milestone` (~133 tokens)

Create milestone in a project.

Input parameters:

- `assignees` (object, required): Assignees for the milestone.
- `description`: A description of the milestone.
- `due_date` (string, required): The due date of the milestone (format: YYYYMMDD). Used for related tasks without their own due date.
- `name` (string, required): The name of the milestone.
- `project_id` (integer, required): The ID of the project to create the milestone in.
- `tag_ids`: A list of tag IDs to associate with the milestone.
- `tasklist_ids`: Tasklists to associate with the milestone.

### `twprojects-create_notebook` (~97 tokens)

Create notebook in a project.

Input parameters:

- `contents` (string, required): The contents of the notebook.
- `description`: A description of the notebook.
- `name` (string, required): The name of the notebook.
- `project_id` (integer, required): The ID of the project to create the notebook in.
- `tag_ids`: A list of tag IDs to associate with the notebook.
- `type` (string, required): The type of the notebook.

### `twprojects-create_project` (~131 tokens)

Create project.

Input parameters:

- `category_id`: The ID of the category to which the project belongs.
- `company_id`: The ID of the company associated with the project.
- `description`: The description of the project.
- `end_at`: End date of the project (format: YYYYMMDD).
- `name` (string, required): The name of the project.
- `owned_id`: The ID of the user who owns the project.
- `start_at`: Start date of the project (format: YYYYMMDD).
- `tag_ids`: A list of tag IDs to associate with the project.

### `twprojects-create_project_category` (~72 tokens)

Create project category.

Input parameters:

- `color`: The color of the project category in hex format (e.g., #FF5733).
- `name` (string, required): The name of the project category.
- `parent_id`: The ID of the parent project category, if any. This allows for nested categories.

### `twprojects-create_project_template` (~141 tokens)

Create project template.

Input parameters:

- `category_id`: The ID of the category to which the project template belongs.
- `company_id`: The ID of the company associated with the project template.
- `description`: The description of the project template.
- `end_at`: End date of the project template (format: YYYYMMDD).
- `name` (string, required): The name of the project template.
- `owned_id`: The ID of the user who owns the project template.
- `start_at`: Start date of the project template (format: YYYYMMDD).
- `tag_ids`: A list of tag IDs to associate with the project template.

### `twprojects-create_skill` (~38 tokens)

Create skill.

Input parameters:

- `name` (string, required): The name of the skill.
- `user_ids`: The user IDs associated with the skill.

### `twprojects-create_tag` (~58 tokens)

Create tag.

Input parameters:

- `name` (string, required): The name of the tag. It must have less than 50 characters.
- `project_id`: The ID of the project to associate the tag with. This is for project-scoped tags.

### `twprojects-create_tasklist` (~78 tokens)

Create tasklist in a project.

Input parameters:

- `description`: The description of the tasklist.
- `milestone_id`: The ID of the milestone to associate with the tasklist.
- `name` (string, required): The name of the tasklist.
- `project_id` (integer, required): The ID of the project to create the tasklist in.

### `twprojects-create_team` (~146 tokens)

Create team.

Input parameters:

- `company_id`: The ID of the company. This is used to create a team scoped for a specific company.
- `description`: The description of the team.
- `handle`: The handle of the team. It is a unique identifier for the team. It must not have spaces or special characters.
- `name` (string, required): The name of the team.
- `parent_team_id`: The ID of the parent team. This is used to create a hierarchy of teams.
- `project_id`: The ID of the project. This is used to create a team scoped for a specific project.
- `user_ids`: Users to add to the team.

### `twprojects-create_timer` (~125 tokens)

Create and start a timer.

Input parameters:

- `billable`: If true, the timer is billable.
- `description`: A description of the timer.
- `project_id` (integer, required): The ID of the project to associate the timer with.
- `running`: If true, the timer will start running immediately.
- `seconds`: The number of seconds to set the timer for.
- `stop_running_timers`: If true, any other running timers will be stopped when this timer is created.
- `task_id`: The ID of the task to associate the timer with.

### `twprojects-create_user` (~129 tokens)

Create user.

Input parameters:

- `admin`: Indicates whether the user is an administrator.
- `company_id`: The ID of the client/company to which the user belongs.
- `email` (string, required): The email address of the user.
- `first_name` (string, required): The first name of the user.
- `last_name` (string, required): The last name of the user.
- `title`: The job title of the user, such as 'Project Manager' or 'Senior Software Developer'.
- `type`: The type of user, such as 'account', 'collaborator', or 'contact'.

### `twprojects-create_workflow` (~26 tokens)

Create workflow.

Input parameters:

- `name` (string, required): The name of the workflow.

### `twprojects-create_workflow_stage` (~47 tokens)

Create workflow stage.

Input parameters:

- `name` (string, required): The name of the workflow stage.
- `workflow_id` (integer, required): The ID of the workflow to add the stage to.

### `twprojects-get_comment` (~27 tokens)

Get comment.

Input parameters:

- `id` (integer, required): The ID of the comment to get.

Output parameters:

- `comments` (object)

### `twprojects-get_company` (~30 tokens)

Get company (aka client).

Input parameters:

- `id` (integer, required): The ID of the company to get.

Output parameters:

- `company` (object)
- `included` (object)

### `twprojects-get_custom_field` (~30 tokens)

Get custom field.

Input parameters:

- `id` (integer, required): The ID of the custom field to get.

Output parameters:

- `customfield` (object)

### `twprojects-get_custom_field_value` (~85 tokens)

Get a single custom field value from a task, project or company.

Input parameters:

- `entity` (string, required): The type of entity the custom field value is attached to.
- `entity_id` (integer, required): The ID of the task, project or company the custom field value belongs to.
- `value_id` (integer, required): The ID of the custom field value entry to retrieve.

Output parameters:

- `customfieldValue` (object)

### `twprojects-get_custom_item` (~148 tokens)

Get a custom item type with its fields and sections inline, so you can see its schema before creating or updating records. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `id` (integer, required): Custom item type ID to retrieve.

Output parameters:

- `customItem` (object)
- `included` (object)

### `twprojects-get_custom_item_field` (~148 tokens)

Get a single field on a custom item type. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `custom_item_id` (integer, required): Custom item type ID the field belongs to.
- `id` (integer, required): Field ID.

Output parameters:

- `customItemField` (object)

### `twprojects-get_custom_item_record` (~161 tokens)

Get a single record. Field values come back keyed by display name with dropdown values translated to their human-readable labels. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `custom_item_id` (integer, required): Custom item type ID the record belongs to.
- `id` (integer, required): Record ID.

Output parameters:

- `customItemRecord` (object)

### `twprojects-get_jobrole` (~30 tokens)

Get job role.

Input parameters:

- `id` (integer, required): The ID of the job role to get.

Output parameters:

- `jobRole` (object)

### `twprojects-get_link` (~27 tokens)

Get link.

Input parameters:

- `id` (integer, required): The ID of the link to get.

Output parameters:

- `link` (object)

### `twprojects-get_message` (~27 tokens)

Get message.

Input parameters:

- `id` (integer, required): The ID of the message to get.

Output parameters:

- `message` (object)

### `twprojects-get_message_reply` (~30 tokens)

Get message reply.

Input parameters:

- `id` (integer, required): The ID of the message reply to get.

Output parameters:

- `messageReply` (object)

### `twprojects-get_milestone` (~29 tokens)

Get milestone.

Input parameters:

- `id` (integer, required): The ID of the milestone to get.

Output parameters:

- `milestone` (object)

### `twprojects-get_notebook` (~28 tokens)

Get notebook.

Input parameters:

- `id` (integer, required): The ID of the notebook to get.

Output parameters:

- `notebook` (object)

### `twprojects-get_project_category` (~30 tokens)

Get project category.

Input parameters:

- `id` (integer, required): The ID of the project category to get.

Output parameters:

- `projectCategory` (object)

### `twprojects-get_skill` (~27 tokens)

Get skill.

Input parameters:

- `id` (integer, required): The ID of the skill to get.

Output parameters:

- `skill` (object)

### `twprojects-get_tag` (~27 tokens)

Get tag.

Input parameters:

- `id` (integer, required): The ID of the tag to get.

Output parameters:

- `tag` (object)

### `twprojects-get_team` (~27 tokens)

Get team.

Input parameters:

- `id` (integer, required): The ID of the team to get.

Output parameters:

- `team` (object)

### `twprojects-get_timelog` (~30 tokens)

Get timelog.

Input parameters:

- `id` (integer, required): The ID of the timelog to get.

Output parameters:

- `timelog` (object)

### `twprojects-get_timer` (~27 tokens)

Get timer.

Input parameters:

- `id` (integer, required): The ID of the timer to get.

Output parameters:

- `timer` (object)

### `twprojects-get_user` (~27 tokens)

Get user.

Input parameters:

- `id` (integer, required): The ID of the user to get.

Output parameters:

- `person` (object)

### `twprojects-get_user_me` (~17 tokens)

Get the currently authenticated user.

Output parameters:

- `person` (object)

### `twprojects-get_workflow` (~28 tokens)

Get workflow.

Input parameters:

- `id` (integer, required): The ID of the workflow to get.

Output parameters:

- `workflow` (object)

### `twprojects-get_workflow_stage` (~48 tokens)

Get workflow stage.

Input parameters:

- `id` (integer, required): The ID of the workflow stage to get.
- `workflow_id` (integer, required): The ID of the workflow that owns the stage.

Output parameters:

- `stage` (object)

### `twprojects-link_project_to_workflow` (~63 tokens)

Link a project to a workflow so its tasks track through workflow stages.

Input parameters:

- `project_id` (integer, required): The ID of the project to link to the workflow.
- `workflow_id` (integer, required): The ID of the workflow to link the project to.

### `twprojects-list_calendar_events` (~168 tokens)

List events from a calendar, including time-blocking events that link a calendar slot to a Teamwork project, task or timelog. Use twprojects-list_calendars to find the calendar ID; the calendar of type 'blocked_time' holds the account's time-blocking events.

Input parameters:

- `calendar_id` (integer, required): The ID of the calendar to list events from.
- `cursor`: Cursor for fetching the next page of results.
- `ended_before_date`: Filter events that end before this date (format: YYYY-MM-DD).
- `limit`: Maximum number of events to return.
- `started_after_date`: Filter events that start after this date (format: YYYY-MM-DD).
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `events` (null|array)
- `included` (object)
- `meta` (object)

### `twprojects-list_calendars` (~93 tokens)

List calendars. Calendars hold events such as meetings, out-of-office periods and time-blocking entries; the calendar of type 'blocked_time' holds the account's time-blocking events.

Input parameters:

- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `calendars` (null|array)
- `meta` (object)

### `twprojects-list_companies` (~124 tokens)

List companies (aka clients).

Input parameters:

- `match_all_tags`: If true, match all tags; if false, match any.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `search_term`: A search term to filter companies by name. Each word from the search term is used to match against the company name.
- `tag_ids`: A list of tag IDs to filter companies by tags.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `companies` (null|array)
- `included` (object)
- `meta` (object)

### `twprojects-list_custom_field_values` (~119 tokens)

List the custom field values of a task, project or company.

Input parameters:

- `custom_field_ids`: Filter by custom field.
- `entity` (string, required): The type of entity to list custom field values for.
- `entity_id` (integer, required): The ID of the task, project or company to list custom field values for.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `customfieldValues` (null|array)
- `meta` (object)

### `twprojects-list_custom_fields` (~195 tokens)

List custom fields.

Input parameters:

- `entities`: Filter custom fields by entity type.
- `ids`: Custom field IDs to retrieve.
- `include_site_level`: Whether to also include installation-level custom fields when filtering by project.
- `only_project_level`: Whether to return only project-level custom fields.
- `only_site_level`: Whether to return only installation-level custom fields.
- `order_by`: The field to sort the results by.
- `order_mode`: The direction to sort the results in.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_ids`: Filter custom fields by project.
- `search_term`: A search term to filter custom fields by name.
- `show_deleted`: Whether to include deleted custom fields in the results.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `customfields` (null|array)
- `meta` (object)

### `twprojects-list_custom_item_fields` (~228 tokens)

List fields on a custom item type. Each entry includes the twId you need when writing record values. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `custom_item_id` (integer, required): Custom item type ID to list fields for.
- `ids`: Restrict to these field IDs.
- `order_mode`: The direction to order the results by (asc, desc).
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `search_term`: A search term to filter custom item fields by display name.
- `show_deleted`: Include deleted fields.

Output parameters:

- `customItemFields` (null|array)
- `meta` (object)

### `twprojects-list_custom_item_records` (~260 tokens)

List records on a custom item type. Returns each record with field values keyed by display name. Use the section_ids filter to scope to a specific section. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `custom_item_id` (integer, required): Custom item type ID to list records for.
- `ids`: Restrict to these record IDs.
- `order_by`: Field to sort by.
- `order_mode`: The direction to order the results by (asc, desc).
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `search_term`: A search term to filter custom item records by name.
- `section_ids`: Restrict to records in these sections.
- `show_deleted`: Include deleted records.

Output parameters:

- `customItemRecords` (null|array)
- `meta` (object)

### `twprojects-list_custom_items` (~254 tokens)

List the custom item types defined on a project. Returns each type's id, display name and labels — call get_custom_item to see a type's fields and sections. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `ids`: Restrict to these custom item type IDs.
- `order_by`: Field to sort by.
- `order_mode`: The direction to order the results by (asc, desc).
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_id` (integer, required): Project ID to list custom item types for.
- `search_term`: A search term to filter custom items by display name or labels.
- `show_deleted`: Include deleted custom item types.

Output parameters:

- `customItems` (null|array)
- `included` (object)
- `meta` (object)

### `twprojects-list_industries` (~21 tokens)

List supported company (aka client) industries.

Output parameters:

- `industries` (null|array)

### `twprojects-list_jobroles` (~113 tokens)

List job roles.

Input parameters:

- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `search_term`: A search term to filter job roles by name, or assigned users. The job role will be selected if each word of the term matches the name, or assigned user first or last name, not requiring that the word…
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `jobRoles` (null|array)
- `meta` (object)

### `twprojects-list_links` (~169 tokens)

List links.

Input parameters:

- `match_all_tags`: If true, match all tags; if false, match any.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_id`: The ID of the project to filter links by.
- `search_term`: A search term to filter links by title or description. Each word from the search term is used to match against the link title or description. The link will be selected if each word of the term matche…
- `tag_ids`: A list of tag IDs to filter links by tags.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `links` (null|array)

### `twprojects-list_message_replies` (~155 tokens)

List replies under a message thread. Filter by message_ids or project_ids.

Input parameters:

- `message_ids`: Filter by message.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_ids`: Filter by project.
- `search_term`: A search term to filter message replies by body or title. Each word from the search term is used to match against the message reply body or title. The message reply will be selected if each word of t…
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `messageReplies` (null|array)
- `meta` (object)

### `twprojects-list_messages` (~180 tokens)

List project messages (top-level posts). Use twprojects-list_message_replies for thread replies.

Input parameters:

- `match_all_tags`: If true, match all tags; if false, match any.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_ids`: Filter messages by project.
- `search_term`: A search term to filter messages by body or title. Each word from the search term is used to match against the message body or title. The message will be selected if each word of the term matches the…
- `tag_ids`: A list of tag IDs to filter messages by tags.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `messages` (null|array)
- `meta` (object)

### `twprojects-list_milestones` (~189 tokens)

List milestones. Scope by project_id or omit for site-wide.

Input parameters:

- `match_all_tags`: If true, match all tags; if false, match any.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_id`: The ID of the project from which to retrieve milestones. Omit to list milestones across all projects.
- `search_term`: A search term to filter milestones by name. Each word from the search term is used to match against the milestone name and description. The milestone will be selected if each word of the term matches…
- `tag_ids`: A list of tag IDs to filter milestones by tags.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `meta` (object)
- `milestones` (null|array)

### `twprojects-list_notebooks` (~163 tokens)

List notebooks.

Input parameters:

- `include_contents`: If true, include notebook contents in the response.
- `match_all_tags`: If true, match all tags; if false, match any.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_ids`: Filter notebooks by project.
- `search_term`: A search term to filter notebooks by name or description. The notebook will be selected if each word of the term matches the notebook name or description, not requiring that the word matches are in t…
- `tag_ids`: A list of tag IDs to filter notebooks by tags.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `meta` (object)
- `notebooks` (null|array)

### `twprojects-list_project_budgets` (~105 tokens)

List project budgets (top-level project financial budgets). Filter by project_ids or status.

Input parameters:

- `cursor`: Cursor for fetching the next page of results.
- `limit`: Maximum number of budgets to return.
- `page_size`: Number of results per page for pagination.
- `project_ids`: Filter budgets by project.
- `status`: Filter budgets by status.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `budgets` (null|array)
- `included` (object)
- `meta` (object)

### `twprojects-list_project_categories` (~73 tokens)

List project categories.

Input parameters:

- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `search_term`: A search term to filter project categories by name.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `meta` (object)
- `projectCategories` (null|array)

### `twprojects-list_project_templates` (~104 tokens)

List project templates.

Input parameters:

- `match_all_tags`: If true, match all tags; if false, match any.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_category_ids`: Filter project templates by category.
- `search_term`: A search term to filter project templates by name or description.
- `tag_ids`: A list of tag IDs to filter project templates by tags.

Output parameters:

- `included` (object)
- `meta` (object)
- `projects` (null|array)

### `twprojects-list_skills` (~110 tokens)

List skills.

Input parameters:

- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `search_term`: A search term to filter skills by name, or assigned users. The skill will be selected if each word of the term matches the name, or assigned user first or last name, not requiring that the word match…
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `meta` (object)
- `skills` (null|array)

### `twprojects-list_tags` (~105 tokens)

List tags.

Input parameters:

- `item_type`: Filter tags by item type.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_ids`: Filter by project.
- `search_term`: A search term to filter tags by name. Each word from the search term is used to match against the tag name.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `meta` (object)
- `tags` (null|array)

### `twprojects-list_tasklist_budgets` (~93 tokens)

List tasklist budgets nested under a project budget. Requires project_budget_id.

Input parameters:

- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_budget_id` (integer, required): The ID of the project budget to list tasklist budgets for.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `included` (object)
- `meta` (object)
- `tasklistBudgets` (null|array)

### `twprojects-list_teams` (~137 tokens)

List teams. Scope by company_id or project_id, or omit for site-wide.

Input parameters:

- `company_id`: The ID of the company from which to retrieve teams. Omit to list teams across all companies.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_id`: The ID of the project from which to retrieve teams. Omit to list teams across all projects.
- `search_term`: A search term to filter teams by name or handle.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `teams` (null|array)

### `twprojects-list_timers` (~148 tokens)

List timers.

Input parameters:

- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_id`: The ID of the project to filter timers by. Only timers associated with this project will be returned.
- `running_timers_only`: If true, only running timers are returned.
- `task_id`: The ID of the task to filter timers by. Only timers associated with this task will be returned.
- `user_id`: The ID of the user to filter timers by. Only timers associated with this user will be returned.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `meta` (object)
- `timers` (null|array)

### `twprojects-list_workflow_stages` (~77 tokens)

List workflow stages.

Input parameters:

- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `verbose`: If false, returns id + name only — useful when scanning many results.
- `workflow_id` (integer, required): The ID of the workflow whose stages to list.

Output parameters:

- `meta` (object)
- `stages` (null|array)

### `twprojects-list_workflows` (~71 tokens)

List workflows.

Input parameters:

- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `search_term`: A search term to filter workflows by name.
- `verbose`: If false, returns id + name only — useful when scanning many results.

Output parameters:

- `meta` (object)
- `workflows` (null|array)

### `twprojects-pause_timer` (~42 tokens)

Pause a running timer; can be resumed later. Use complete_timer to stop permanently.

Input parameters:

- `id` (integer, required): The ID of the timer to pause.

### `twprojects-resume_timer` (~33 tokens)

Resume a paused timer back to running.

Input parameters:

- `id` (integer, required): The ID of the timer to resume.

### `twprojects-summarize_timelogs` (~356 tokens)

Deterministic, complete time-tracking totals for a date window, grouped by user or project. Returns every group in one call with exact minute sums and 2-decimal hours — no pagination for the caller, any model tier. Use this instead of twprojects-list_timelogs whenever the question is about totals, sums, or breakdowns (e.g. "how many hours did X log", "time per project this month", billable vs billed vs unbilled); use list_timelogs only when you need the individual timelog entries. Minutes are exact and authoritative; hours are minutes ÷ 60 rounded to 2 decimals. unbilledBillable = billable − billed. The sum of the group columns equals the totals block exactly (reconcile in minutes, not hours).

Input parameters:

- `company_ids`: Filter to timelogs on projects of these companies/clients.
- `end_date` (string, required): Inclusive end of the report window (YYYY-MM-DD).
- `group_by` (string): Dimension to group totals by. Defaults to user.
- `include_archived_projects`: Include time from archived projects. Defaults to false.
- `project_ids`: Filter to timelogs on these projects.
- `start_date` (string, required): Inclusive start of the report window (YYYY-MM-DD).
- `task_ids`: Filter to timelogs on these tasks.
- `tasklist_ids`: Filter to timelogs on these task lists.
- `team_ids`: Filter to timelogs logged by members of these teams.
- `timelog_tag_ids`: Filter to timelogs carrying these tags.
- `user_ids`: Filter to timelogs logged for these users.

Output parameters:

- `groups` (null|array)
- `scope` (object)
- `totals` (object)

### `twprojects-update_comment` (~102 tokens)

Update comment.

Input parameters:

- `body` (string, required): The content of the comment. The content can be added as text or HTML.
- `content_type`: The content type of the comment. It can be either 'TEXT' or 'HTML'.
- `id` (integer, required): The ID of the comment to update.
- `notify`: Who to notify of the comment change.
- `notify_current_user`: Whether the current user should be notified about the comment change.

### `twprojects-update_company` (~254 tokens)

Update company (aka client).

Input parameters:

- `address_one`: The first line of the address of the company.
- `address_two`: The second line of the address of the company.
- `city`: The city of the company.
- `country_code`: The country code of the company, e.g., 'US' for the United States.
- `email_one`: The primary email address of the company.
- `email_three`: The tertiary email address of the company.
- `email_two`: The secondary email address of the company.
- `fax`: The fax number of the company.
- `id` (integer, required): The ID of the company to update.
- `industry_id`: The ID of the industry the company belongs to.
- `manager_id`: The ID of the user who manages the company.
- `name`: The name of the company.
- `phone`: The phone number of the company.
- `profile`: A profile description for the company.
- `state`: The state of the company.
- `tag_ids`: A list of tag IDs to associate with the company.
- `website`: The website of the company.
- `zip`: The ZIP or postal code of the company.

### `twprojects-update_custom_field` (~208 tokens)

Update custom field.

Input parameters:

- `currency_code`: The ISO currency code for 'currency' or 'financial' type custom fields.
- `description`: An optional description for the custom field.
- `formula`: The formula expression for 'formula' type custom fields.
- `id` (integer, required): The ID of the custom field to update.
- `name`: The display name of the custom field.
- `options`: Type-specific options for the custom field. For 'dropdown' and 'multiselect' types, provide {"choices": [{"value": "...", "color": "#rrggbb"}, ...]}. For 'rating' type, provide {"icon": "star|heart|.…
- `required`: Whether the custom field must have a value when set on an entity.
- `unit`: The unit associated with the custom field, when applicable.

### `twprojects-update_custom_field_value` (~180 tokens)

Update a custom field value on a task, project or company.

Input parameters:

- `country_code`: The country code for currency-type custom field values.
- `currency_code`: The ISO currency code for currency-type custom field values.
- `custom_field_id` (integer, required): The ID of the custom field the value belongs to.
- `entity` (string, required): The type of entity the custom field value is attached to.
- `entity_id` (integer, required): The ID of the task, project or company the custom field value belongs to.
- `value`: The value to assign, typed per the field: string (text), number (number), boolean (checkbox), choice value string (dropdown/status; array for multiselect), ISO-8601 string (date).
- `value_id` (integer, required): The ID of the custom field value entry to update.

### `twprojects-update_custom_item` (~183 tokens)

Update a custom item type's display name, description, or labels. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `description`: New description for the custom item type.
- `display_name`: New display name for the custom item type.
- `id` (integer, required): Custom item type ID to update.
- `label_plural`: New plural label.
- `label_singular`: New singular label.

### `twprojects-update_custom_item_field` (~186 tokens)

Update a field on a custom item type. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `custom_item_id` (integer, required): Custom item type ID the field belongs to.
- `definition`: Replacement type-specific configuration as a JSON object.
- `display_name`: New display name.
- `id` (integer, required): Field ID to update.
- `position_after_id`: Move this field after the given field ID.

### `twprojects-update_custom_item_record` (~360 tokens)

Update a record on a custom item type. Only the fields you supply are changed; others are left as-is. Set section_id to null to remove the record from any section. Custom items are user-defined entity types — Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.

Input parameters:

- `clear_section`: Set to true to explicitly clear the record's section. Use this instead of section_id when you want null semantics.
- `custom_item_id` (integer, required): Custom item type ID the record belongs to.
- `field_values`: Field values to set on the record. Each entry is {field_name, value}. Field names are matched case-insensitively against the custom item type's fields. Values are coerced by field type: dropdown/mult…
- `id` (integer, required): Record ID to update.
- `name`: New display name for the record.
- `position_after_id`: Move the record after the given record ID.
- `section_id`: New section ID, or null to remove the record from any section.

### `twprojects-update_jobrole` (~41 tokens)

Update job role.

Input parameters:

- `id` (integer, required): The ID of the job role to update.
- `name`: The name of the job role.

### `twprojects-update_link` (~137 tokens)

Update link.

Input parameters:

- `code`: The URL of the link. This is the actual web address that the link points to.
- `description`: The description of the link. Longer text that provides detailed information about the link.
- `id` (integer, required): The ID of the link to update.
- `notify`: Who to notify of the link update.
- `notify_current_user`: Whether the current user should be notified about the new link.
- `tag_ids`: A list of tag IDs to associate with the link.
- `title`: The title of the link, which provides a brief summary of the purpose of the link.

### `twprojects-update_message` (~93 tokens)

Update message.

Input parameters:

- `body`: The body of the message.
- `id` (integer, required): The ID of the message to update.
- `notify`: Who to notify of the message update.
- `notify_current_user`: Whether the current user should be notified about the new message.
- `project_id`: The ID of the project to create the message in.
- `title`: The title of the message.

### `twprojects-update_message_reply` (~72 tokens)

Update message reply.

Input parameters:

- `body`: The body of the message reply.
- `id` (integer, required): The ID of the message reply to update.
- `notify`: Who to notify of the reply update.
- `notify_current_user`: Whether the current user should be notified about the new messageReply.

### `twprojects-update_milestone` (~120 tokens)

Update milestone.

Input parameters:

- `assignees`: Assignees for the milestone.
- `description`: A description of the milestone.
- `due_date`: The due date of the milestone (format: YYYYMMDD). Used for related tasks without their own due date.
- `id` (integer, required): The ID of the milestone to update.
- `name`: The name of the milestone.
- `tag_ids`: A list of tag IDs to associate with the milestone.
- `tasklist_ids`: Tasklists to associate with the milestone.

### `twprojects-update_notebook` (~84 tokens)

Update notebook.

Input parameters:

- `contents`: The contents of the notebook.
- `description`: A description of the notebook.
- `id` (integer, required): The ID of the notebook to update.
- `name`: The name of the notebook.
- `tag_ids`: A list of tag IDs to associate with the notebook.
- `type`: The type of the notebook.

### `twprojects-update_project` (~153 tokens)

Update project.

Input parameters:

- `category_id`: The ID of the category to which the project belongs.
- `company_id`: The ID of the company associated with the project.
- `description`: The description of the project.
- `end_at`: End date of the project (format: YYYYMMDD).
- `id` (integer, required): The ID of the project to update.
- `name`: The name of the project.
- `owned_id`: The ID of the user who owns the project.
- `start_at`: Start date of the project (format: YYYYMMDD).
- `status`: The status of the project.
- `tag_ids`: A list of tag IDs to associate with the project.

### `twprojects-update_project_category` (~85 tokens)

Update project category.

Input parameters:

- `color`: The color of the project category in hex format (e.g., #FF5733).
- `id` (integer, required): The ID of the project category to update.
- `name`: The name of the project category.
- `parent_id`: The ID of the parent project category, if any. This allows for nested categories.

### `twprojects-update_skill` (~50 tokens)

Update skill.

Input parameters:

- `id` (integer, required): The ID of the skill to update.
- `name`: The name of the skill.
- `user_ids`: The user IDs associated with the skill.

### `twprojects-update_tag` (~70 tokens)

Update tag.

Input parameters:

- `id` (integer, required): The ID of the tag to update.
- `name`: The name of the tag. It must have less than 50 characters.
- `project_id`: The ID of the project to associate the tag with. This is for project-scoped tags.

### `twprojects-update_tasklist` (~69 tokens)

Update tasklist.

Input parameters:

- `description`: The description of the tasklist.
- `id` (integer, required): The ID of the tasklist to update.
- `milestone_id`: The ID of the milestone to associate with the tasklist.
- `name`: The name of the tasklist.

### `twprojects-update_team` (~158 tokens)

Update team.

Input parameters:

- `company_id`: The ID of the company. This is used to create a team scoped for a specific company.
- `description`: The description of the team.
- `handle`: The handle of the team. It is a unique identifier for the team. It must not have spaces or special characters.
- `id` (integer, required): The ID of the team to update.
- `name`: The name of the team.
- `parent_team_id`: The ID of the parent team. This is used to create a hierarchy of teams.
- `project_id`: The ID of the project. This is used to create a team scoped for a specific project.
- `user_ids`: Users to add to the team.

### `twprojects-update_timer` (~97 tokens)

Update timer.

Input parameters:

- `billable`: If true, the timer is billable.
- `description`: A description of the timer.
- `id` (integer, required): The ID of the timer to update.
- `project_id`: The ID of the project to associate the timer with.
- `running`: If true, the timer will start running immediately.
- `task_id`: The ID of the task to associate the timer with.

### `twprojects-update_user` (~137 tokens)

Update user.

Input parameters:

- `admin`: Indicates whether the user is an administrator.
- `company_id`: The ID of the client/company to which the user belongs.
- `email`: The email address of the user.
- `first_name`: The first name of the user.
- `id` (integer, required): The ID of the user to update.
- `last_name`: The last name of the user.
- `title`: The job title of the user, such as 'Project Manager' or 'Senior Software Developer'.
- `type`: The type of user, such as 'account', 'collaborator', or 'contact'.

### `twprojects-update_workflow` (~39 tokens)

Update workflow.

Input parameters:

- `id` (integer, required): The ID of the workflow to update.
- `name`: The new name of the workflow.

### `twprojects-update_workflow_stage` (~60 tokens)

Update workflow stage.

Input parameters:

- `id` (integer, required): The ID of the workflow stage to update.
- `name`: The new name of the workflow stage.
- `workflow_id` (integer, required): The ID of the workflow that owns the stage.

### `twprojects-users_workload` (~124 tokens)

Get task allocation across users for a date range. (workload of users)

Input parameters:

- `end_date` (string, required): End of the workload period.
- `page`: Page number for pagination of results.
- `page_size`: Number of results per page for pagination.
- `project_ids`: Filter workload by project.
- `start_date` (string, required): Start of the workload period.
- `user_company_ids`: Filter workload by users' client/company.
- `user_ids`: Filter workload by user.
- `user_team_ids`: Filter workload by users' team.

Output parameters:

- `included` (object)
- `meta` (object)
- `workload` (object)

### `twspaces-create_category` (~46 tokens)

Create space category.

Input parameters:

- `color`: A hex color code for the category (e.g. "#FF5733").
- `name` (string, required): The name of the category.

### `twspaces-create_comment` (~102 tokens)

Create comment on a page. Use parentId for replies.

Input parameters:

- `content` (string, required): The content of the comment.
- `isPrivate`: Set to true to create a private comment visible only to space members.
- `pageId` (integer, required): The ID of the page to comment on.
- `parentId`: The ID of the parent comment (for creating a reply).
- `spaceId` (integer, required): The ID of the space containing the page.

### `twspaces-create_page` (~167 tokens)

Create page in a space.

Input parameters:

- `changeMessage`: A message describing the changes made in this version.
- `content`: The HTML content of the page.
- `isFullWidth`: Display the page in full-width layout.
- `isPublish`: Set to true to publish the page immediately (default: draft).
- `isRequiredReading`: Mark this page as required reading for space members.
- `parentId`: The ID of the parent page (for creating a sub-page).
- `readerInlineCommentsEnabled`: Allow readers to add inline comments on this page.
- `slug`: A URL-friendly slug for the page.
- `spaceId` (integer, required): The ID of the space to create the page in.
- `title` (string, required): The title of the page.

### `twspaces-create_space` (~131 tokens)

Create space.

Input parameters:

- `categoryId`: Category to assign. Use twspaces-list_categories to discover.
- `code` (string, required): A short unique code/identifier for the space (e.g. "ENG", "DOCS").
- `icon`: An icon identifier for the space.
- `projectId`: The ID of a Teamwork project to link to this space.
- `purpose`: A brief description of the space's purpose.
- `spaceColor`: A hex color code for the space (e.g. "#FF5733").
- `title` (string, required): The title of the space.

### `twspaces-create_tags` (~31 tokens)

Create one or more Spaces tags in a single request.

Input parameters:

- `tags` (array, required): Tags to create.

### `twspaces-duplicate_page` (~95 tokens)

Duplicate page with a new title.

Input parameters:

- `pageId` (integer, required): The ID of the page to duplicate.
- `parentId`: The ID of the parent page for the duplicate (defaults to same parent).
- `slug`: A URL-friendly slug for the duplicated page.
- `spaceId` (integer, required): The ID of the space containing the page.
- `title` (string, required): The title for the duplicated page.

### `twspaces-get_category` (~28 tokens)

Get space category.

Input parameters:

- `id` (integer, required): The ID of the category to retrieve.

### `twspaces-get_comment` (~61 tokens)

Get page comment.

Input parameters:

- `commentId` (integer, required): The ID of the comment to retrieve.
- `pageId` (integer, required): The ID of the page containing the comment.
- `spaceId` (integer, required): The ID of the space containing the page.

### `twspaces-get_homepage` (~35 tokens)

Get a space's homepage.

Input parameters:

- `spaceId` (integer, required): The ID of the space to retrieve the homepage for.

### `twspaces-get_page` (~55 tokens)

Get page. Returns content, metadata, tags, and revision info.

Input parameters:

- `pageId` (integer, required): The ID of the page to retrieve.
- `spaceId` (integer, required): The ID of the space containing the page.

### `twspaces-get_space` (~27 tokens)

Get space.

Input parameters:

- `id` (integer, required): The ID of the space to retrieve.

### `twspaces-get_tag` (~28 tokens)

Get Spaces tag.

Input parameters:

- `id` (integer, required): The ID of the tag to retrieve.

### `twspaces-list_categories` (~46 tokens)

List space categories.

Input parameters:

- `pageOffset`: The index position to start retrieving results from (not a page number).
- `pageSize`: Number of results per page for pagination.

### `twspaces-list_comments` (~88 tokens)

List comments on a page. Returns top-level comments with replies.

Input parameters:

- `pageId` (integer, required): The ID of the page to list comments for.
- `pageOffset`: The index position to start retrieving results from (not a page number).
- `pageSize`: Number of results per page for pagination.
- `spaceId` (integer, required): The ID of the space containing the page.

### `twspaces-list_pages` (~69 tokens)

List pages in a space as a hierarchical tree.

Input parameters:

- `pageOffset`: The index position to start retrieving results from (not a page number).
- `pageSize`: Number of results per page for pagination.
- `spaceId` (integer, required): The ID of the space to list pages for.

### `twspaces-list_space_collaborators` (~37 tokens)

List space collaborators (users and teams).

Input parameters:

- `id` (integer, required): The ID of the space to retrieve collaborators for.

### `twspaces-list_spaces` (~45 tokens)

List spaces.

Input parameters:

- `pageOffset`: The index position to start retrieving results from (not a page number).
- `pageSize`: Number of results per page for pagination.

### `twspaces-list_tags` (~46 tokens)

List Spaces tags.

Input parameters:

- `pageOffset`: The index position to start retrieving results from (not a page number).
- `pageSize`: Number of results per page for pagination.

### `twspaces-search` (~93 tokens)

Full-text search across pages. Filter by space.

Input parameters:

- `includeDeleted`: Include deleted pages in search results.
- `pageOffset`: The index position to start retrieving results from (not a page number).
- `pageSize`: Number of results per page for pagination.
- `query` (string, required): The search query string.
- `spaceIds`: Limit search to specific spaces. Use twspaces-list_spaces to discover.

### `twspaces-update_category` (~52 tokens)

Update space category.

Input parameters:

- `color`: A new hex color code for the category.
- `id` (integer, required): The ID of the category to update.
- `name`: The new name for the category.

### `twspaces-update_comment` (~105 tokens)

Update page comment.

Input parameters:

- `commentId` (integer, required): The ID of the comment to update.
- `content`: The new content of the comment.
- `isPrivate`: Change the privacy setting of the comment.
- `pageId` (integer, required): The ID of the page containing the comment.
- `spaceId` (integer, required): The ID of the space containing the page.
- `state`: The new state of the comment (e.g. "active", "resolved").

### `twspaces-update_page` (~291 tokens)

Update page. Note: content and publish changes update the published page only, not the live collaborative editor draft; if the page has an active editor draft, re-publishing from the Spaces web editor can overwrite these changes (known Spaces limitation).

Input parameters:

- `changeMessage`: A message describing the changes made in this version.
- `content`: The new HTML content of the page.
- `draftVersion`: Optimistic concurrency token for the page's draft content. Required when updating `content`; optional otherwise. Obtain the current value from the `draftVersion` field with twspaces-get_page or twspa…
- `isFullWidth`: Toggle full-width layout for this page.
- `isMinorChange`: Mark this update as a minor change (won't notify watchers).
- `isPublish`: Set to true to publish the page, false to revert to draft.
- `isRequiredReading`: Mark or unmark this page as required reading.
- `pageId` (integer, required): The ID of the page to update.
- `parentId`: The ID of the new parent page (to move the page).
- `readerInlineCommentsEnabled`: Allow or disallow readers from adding inline comments.
- `slug`: A new URL-friendly slug for the page.
- `spaceId` (integer, required): The ID of the space containing the page.
- `title`: The new title of the page.

### `twspaces-update_space` (~148 tokens)

Update space.

Input parameters:

- `categoryId`: Category to assign. Use twspaces-list_categories to discover.
- `code`: A new short unique code/identifier for the space.
- `icon`: A new icon identifier for the space.
- `id` (integer, required): The ID of the space to update.
- `projectId`: The ID of a Teamwork project to link to this space.
- `purpose`: A new brief description of the space's purpose.
- `spaceColor`: A new hex color code for the space.
- `state`: The state of the space (e.g. "active", "archived").
- `title`: The new title of the space.

### `twspaces-update_tag` (~52 tokens)

Update Spaces tag.

Input parameters:

- `color`: A new hex color code for the tag.
- `id` (integer, required): The ID of the tag to update.
- `name`: The new name for the tag.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/com-teamwork-mcp/docker-io-teamwork-mcp-v1-26-4#diagnostics

## Score history

- 2026-08-03: 37
- 2026-08-02: 37
- 2026-08-01: 37
- 2026-07-31: 6

## Links

- Repository: https://github.com/teamwork/mcp
- Changelog RSS feed: https://verifymcp.io/servers/com-teamwork-mcp/docker-io-teamwork-mcp-v1-26-4/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-teamwork-mcp/docker-io-teamwork-mcp-v1-26-4/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-teamwork-mcp/docker-io-teamwork-mcp-v1-26-4
