com.teamwork/mcp
OCI · DOCKER.IO/TEAMWORK/MCP:V1.43.2 · 3 COMPONENTS · SCANNED SEP 20
The Teamwork.com official MCP server helps teams efficiently manage client projects with AI.
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. How we score → Why this is hard to score →
Supply Chain Security0
- Malware scan not yet available for this package.Unverified
- Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
Provenance & Transparency35
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: no license is declared. See how to fix → Fail
- Actively maintained (last published 4 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability73
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 39357 tokens (~183/item across 214 items; 213 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage96
- 93% of tools have a non-trivial description (not blank, and not just the tool's name).Partial
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (33% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 214 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
- Supports UI / widget rendering.Pass
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.
How do I install the com.teamwork/mcp server?
com.teamwork/mcp runs locally as a container image, launched with docker run --rm -i docker.io/teamwork/mcp:v1.43.2. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.
oci · docker.io/teamwork/mcp:v1.43.2
claude mcp add com-teamwork-mcp -- docker run --rm -i docker.io/teamwork/mcp:v1.43.2
{
"mcpServers": {
"com-teamwork-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"docker.io/teamwork/mcp:v1.43.2"
]
}
}
} {
"servers": {
"com-teamwork-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"docker.io/teamwork/mcp:v1.43.2"
]
}
}
} codex mcp add com-teamwork-mcp -- docker run --rm -i docker.io/teamwork/mcp:v1.43.2
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"com-teamwork-mcp": {
"type": "local",
"command": [
"docker",
"run",
"--rm",
"-i",
"docker.io/teamwork/mcp:v1.43.2"
],
"enabled": true
}
}
} mcp_servers:
com-teamwork-mcp:
command: "docker"
args: ["run", "--rm", "-i", "docker.io/teamwork/mcp:v1.43.2"] {
"McpServers": {
"com-teamwork-mcp": {
"Transport": "stdio",
"Command": "docker",
"Arguments": [
"run",
"--rm",
"-i",
"docker.io/teamwork/mcp:v1.43.2"
]
}
}
} {
"mcpServers": {
"com-teamwork-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"docker.io/teamwork/mcp:v1.43.2"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 15 Sept 26 38
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed oci/docker.io/teamwork/mcp:v1.43.2
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | oci |
| Reason | Verification failed |
| Discovered via | OCI referrers API |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
twprojects-add_project_file ~371
Store an uploaded file in a project's files area, where people find it outside any one task or comment. Upload it first with twprojects-create_upload_url, then pass the reference here. Returns a numeric file ID which, unlike a reference, survives being used: pass it in attachment_file_ids on twprojects-create_task or twprojects-update_task to attach the same file to as many tasks as needed. Attaching a reference to a task, comment or message already files it here, so use this tool to store a file on its own, to describe or categorise it, or when it has to reach more than one place.
| Name | Type | Req | Description |
|---|---|---|---|
| auto_new_version | boolean | – | Store it as a new version of an existing file with the same name in the project, rather than as a separate file. |
| category_id | integer | – | File it under an existing file category. Wins over category_name. |
| category_name | string | – | File it under a category with this name, creating one when the project has none. Ignored when category_id is given. |
| description | string | – | A description of the file. |
| name | string | – | Override the name the file was uploaded with, including its extension. |
| notify_current_user | boolean | – | Notify the user adding the file. Defaults to false. |
| private | boolean | – | Hide the file from client users. |
| project_id | integer | yes | The ID of the project whose files area will hold the file. |
| reference | string | yes | The reference of an uploaded file, as returned by twprojects-create_upload_url or twprojects-create_file. It is "tf_" followed by a UUID and the file extension, and can only be used once. |
| tag_ids | array | – | A list of tag IDs to associate with the file. |
No output schema declared.
No examples provided.
twprojects-add_project_member ~47
Add a user to a project.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | integer | yes | The ID of the project to add the member to. |
| user_ids | array | – | Users to add. |
No output schema declared.
No examples provided.
twprojects-clone_project ~345
Clone/copy an existing project or instantiate one from a template.
| Name | Type | Req | Description |
|---|---|---|---|
| company_id | integer | – | 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 | integer | – | 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 | string | – | The description of the new cloned project. If not provided, the description of the original project will be used. |
| id | integer | yes | The ID of the project to clone. |
| name | string | – | 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 | boolean | – | Indicates whether the new project should be a regular one created from a template. |
| target_date | string | – | 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 | string | – | 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 | boolean | – | Indicates whether the new project should be set as a template. |
No output schema declared.
No examples provided.
twprojects-complete_task ~31
Mark task complete.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The ID of the task to mark as complete. |
No output schema declared.
No examples provided.
twprojects-complete_timer ~45
Stop a timer permanently and convert it to a timelog. Use pause_timer to pause without converting.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The ID of the timer to complete. |
No output schema declared.
No examples provided.
twprojects-count_milestones ~272
Exact milestone count for any filter set: one call, one number, no rows. Use for "how many milestones" questions (per project, per tag, matching a term) instead of paging twprojects-list_milestones to count rows. Use twprojects-list_milestones when the rows are needed.
| Name | Type | Req | Description |
|---|---|---|---|
| due_after | string | – | Only include milestones with a deadline on or after this date. |
| due_before | string | – | Only include milestones with a deadline on or before this date. |
| match_all_tags | boolean | – | If true, match all tags; if false, match any. |
| project_id | integer | – | The ID of the project from which to retrieve milestones. Omit to list milestones across all projects. |
| search_term | string | – | 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… |
| show_completed | boolean | – | If false, only return milestones that are not completed yet. Included by default, unlike the task and tasklist lists. |
| tag_ids | array | – | A list of tag IDs to filter milestones by tags. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
No examples provided.
twprojects-count_projects ~593
Exact project count for any filter set: one call, one number, no rows. Use for "how many projects" questions (mine, late, per category, per tag, per company, per owner, matching a term) instead of paging twprojects-list_projects to count rows. Use twprojects-list_projects when the rows are needed.
| Name | Type | Req | Description |
|---|---|---|---|
| company_ids | array | – | Filter projects by the company that owns them. |
| hide_observed | boolean | – | If true, leave out the projects the calling user only observes, keeping the ones they actually work on. |
| include_archived | boolean | – | If true, return archived projects alongside the active ones; excluded by default. |
| include_subcategories | boolean | – | If true, project_category_ids also matches the categories nested under the ones given. |
| include_tentative | boolean | – | If true, return tentative projects alongside the normal ones; excluded by default. |
| match_all_tags | boolean | – | If true, match all tags; if false, match any. |
| only_admin_access | boolean | – | If true, only return the projects the calling user administers. |
| only_archived | boolean | – | If true, only return archived projects. |
| only_starred | boolean | – | If true, only return the projects the calling user has starred. |
| project_category_ids | array | – | Filter projects by category. |
| project_healths | array | – | Filter projects by the health rating set on them, matching any of the values given. "not_set" matches the projects nobody has rated. |
| project_owner_ids | array | – | Filter projects by the user who owns them. |
| project_statuses | array | – | Filter projects by progress state, matching any of the values given. "late" is past its end date and not yet completed, "upcoming" has not started yet, "current" is running now, and "active" is every… |
| search_term | string | – | A search term to filter projects by name or description. |
| tag_ids | array | – | A list of tag IDs to filter projects by tags. |
| team_ids | array | – | Filter projects by team, matching the projects any member of those teams belongs to. |
| updated_after | – | – | Only include projects whose last activity is strictly after this moment; the boundary itself does not match. Any activity in the project counts, not just edits to the project record. Accepts an RFC 3… |
| user_ids | array | – | Filter projects by the users holding an explicit membership of them. For "my projects", pass the ID returned by twprojects-get_user_me. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
No examples provided.
twprojects-count_tasks ~1,277
Exact task count for any filter set: one call, one number, no rows. Use for "how many" questions (totals, late, per person, per project, per tag, completed in a window) instead of paging twprojects-list_tasks to count rows. Note due_before excludes tasks with no due date, unless a related milestone due date matches. Use twprojects-list_tasks when the rows are needed.
| Name | Type | Req | Description |
|---|---|---|---|
| assignee_user_ids | array | – | Filter tasks by assignee. |
| completed_after | – | – | Only include tasks completed at or after this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YY… |
| completed_before | – | – | Only include tasks completed at or before this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain Y… |
| created_after | – | – | Only include tasks created at or after this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole… |
| created_before | – | – | Only include tasks created at or before this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole… |
| created_by_user_ids | array | – | Filter tasks by creator. |
| date_filter | string | – | Where the task's dates fall relative to today, in your own timezone. This is the filter for "late", "overdue", "due today", "started" and "upcoming"; omit it for no date restriction. overdue: due bef… |
| due_after | string | – | Only include tasks due after this date, excluding the day itself — unless due_before is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's. |
| due_before | string | – | Only include tasks due before this date, excluding the day itself — unless due_after is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's. |
| exclude_assignee_user_ids | array | – | Leave out tasks assigned to any of these users. A task is dropped when any one of the listed users is assigned to it, even when it also carries assignees you did not exclude. A user reached only thro… |
| match_all_tags | boolean | – | If true, match all tags; if false, match any. |
| only_completed | boolean | – | If true, return only completed tasks. It combines with every other filter, date_filter included — except date_filter=overdue, which never matches a completed task and so returns nothing. Tasks in com… |
| only_unassigned | boolean | – | If true, only return tasks that have no assignee. |
| only_unplanned | boolean | – | If true, only return tasks that are unplanned, meaning they are missing an assignee, a due date, or estimated time. |
| project_id | integer | – | The ID of the project from which to retrieve tasks. Omit to list tasks across all projects. |
| search_term | string | – | A search term to filter tasks by name. |
| show_completed | boolean | – | If true, include completed tasks and tasks belonging to completed tasklists; both excluded by default. |
| start_after | string | – | Only include tasks whose own start date falls on or after this date; the day itself matches. A task with no start date never matches — there is no milestone fallback. There is no upper bound on the s… |
| tag_ids | array | – | A list of tag IDs to filter tasks by tags. |
| tasklist_id | integer | – | The ID of the tasklist from which to retrieve tasks. Takes precedence over project_id. |
| updated_after | – | – | Only include tasks updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers t… |
| updated_before | – | – | Only include tasks updated strictly before this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers… |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
No examples provided.
twprojects-count_timelogs ~532
Exact count of time entries for any filter set: one call, one number, no rows. This counts entries, not hours — for logged, billable or billed time totals use twprojects-summarize_timelogs. Use for "how many time entries" questions (per project, per task, per person, in a date window) instead of paging twprojects-list_timelogs to count rows.
| Name | Type | Req | Description |
|---|---|---|---|
| assigned_company_ids | array | – | Filter timelogs by assigned company. |
| assigned_team_ids | array | – | Filter timelogs by assigned team. |
| assigned_user_ids | array | – | Filter timelogs by assigned user. |
| billable_type | string | – | Restrict the results to billable or non-billable timelogs. Omit, or pass all, to include both. For billable hours rather than the entries themselves, twprojects-summarize_timelogs reports them withou… |
| end_date | – | – | End of the timelog window; the boundary itself is included, and a plain date covers that whole day. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which… |
| invoiced_type | string | – | Restrict the results to timelogs that have or have not been added to an invoice. Omit, or pass all, to include both. Invoiced is not the same as billed: noninvoiced answers "what is still to be invoi… |
| match_all_tags | boolean | – | If true, match all tags; if false, match any. |
| project_id | integer | – | The ID of the project from which to retrieve timelogs. Omit to list timelogs across all projects. |
| start_date | – | – | Start of the timelog window; the boundary itself is included. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. |
| tag_ids | array | – | A list of tag IDs to filter timelogs by tags. |
| task_id | integer | – | The ID of the task from which to retrieve timelogs. Omit to list timelogs across all tasks. |
| ticketIds | array | – | Filter timelogs by associated desk ticket. |
| Name | Type | Req | Description |
|---|---|---|---|
| count | integer | yes | – |
No examples provided.
twprojects-create_allocation ~563
Commit a user's time to a project over a date range (a scheduler allocation). This is planned time, a separate plane from task estimates and logged time.
| Name | Type | Req | Description |
|---|---|---|---|
| assigned_user_id | integer | yes | The ID of the user whose time is committed. Accepts a real person or a placeholder user — a stand-in used to plan work before the person who will do it is known. Nothing in the response distinguishes… |
| color | string | yes | The allocation's colour as six hexadecimal digits, with or without a leading '#'. |
| description | string | – | An optional description of the allocation, at most 255 characters. |
| end_date | string | yes | The last day of the allocation (format: YYYY-MM-DD). Must not precede start_date. Extending it ADDS committed time rather than spreading the existing total: the per-day rate is what is held constant,… |
| ignore_collisions | boolean | – | Skip the capacity check altogether. Prefer inform_of_over_allocation: this one also lets the change through, but suppresses the over-allocation report with it, so nobody is told the person is over-bo… |
| inform_of_over_allocation | boolean | – | Accept a change that puts the user over their capacity and report it, rather than rejecting it. Defaults to true, and the result says so when it happens. Turning it off means an over-allocating chang… |
| is_billable | boolean | – | Whether the allocated time can be charged to a client. |
| linked_task_ids | array | – | The tasks to associate with the allocation. This REPLACES the whole set of linked tasks, so send every task that should stay linked. To add or remove one task without touching the rest, use twproject… |
| project_id | integer | yes | The ID of the project to commit the time to. |
| seconds_per_day | integer | yes | The time committed on each working day of the range, in SECONDS — 4 hours a day is 14400. Must be between 60 (one minute) and 86400 (24 hours). Seconds rather than hours because the hours form is a f… |
| start_date | string | yes | The first day of the allocation (format: YYYY-MM-DD). |
| title | string | yes | The name of the allocation, at most 100 characters. |
No output schema declared.
No examples provided.
twprojects-create_comment ~335
Create comment on a task, milestone, notebook, file, or link.
| Name | Type | Req | Description |
|---|---|---|---|
| attachment_refs | array | – | References of files to attach to the comment, as returned by twprojects-create_upload_url or twprojects-create_file. Each is "tf_" followed by a UUID and the file extension, and can only be used once… |
| body | string | yes | The content of the comment. The content can be added as text or HTML. |
| content_type | string | – | The content type of the comment. It can be either 'TEXT' or 'HTML'. |
| notify | – | – | Who to notify of the new comment. Omit it unless the user named who to notify: the default notifies every follower of the related entity, and a value here replaces that set rather than adding to it,… |
| notify_current_user | boolean | – | Whether the current user should be notified about the new comment. |
| object | object | yes | The object to create the comment for. It can be a tasks, milestones, files or notebooks. |
No output schema declared.
No examples provided.
twprojects-create_company ~274
Create company (aka client).
| Name | Type | Req | Description |
|---|---|---|---|
| address_one | string | – | The first line of the address of the company. |
| address_two | string | – | The second line of the address of the company. |
| city | string | – | The city of the company. |
| country_code | string | – | The country code of the company, e.g., 'US' for the United States. |
| email_one | string | – | The primary email address of the company. |
| email_three | string | – | The tertiary email address of the company. |
| email_two | string | – | The secondary email address of the company. |
| fax | string | – | The fax number of the company. |
| industry_id | integer | – | The ID of the industry the company belongs to. |
| manager_id | integer | – | The ID of the user who manages the company. |
| name | string | yes | The name of the company. |
| phone | string | – | The phone number of the company. |
| profile | string | – | A profile description for the company. |
| state | string | – | The state of the company. |
| tag_ids | array | – | A list of tag IDs to associate with the company. |
| website | string | – | The website of the company. |
| zip | string | – | The ZIP or postal code of the company. |
No output schema declared.
No examples provided.
twprojects-create_custom_field ~285
Create custom field.
| Name | Type | Req | Description |
|---|---|---|---|
| currency_code | string | – | The ISO currency code for 'currency' or 'financial' type custom fields. |
| description | string | – | An optional description for the custom field. |
| entity | string | yes | 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 | string | – | The formula expression for 'formula' type custom fields. |
| name | string | yes | 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 | integer | – | The ID of the project to scope the custom field to. When omitted, the custom field is created at the installation level. |
| required | boolean | – | Whether the custom field must have a value when set on an entity. |
| type | string | yes | The data type of the custom field. |
| unit | string | – | The unit associated with the custom field, when applicable. |
No output schema declared.
No examples provided.
twprojects-create_custom_field_value ~181
Set a custom field value on a task, project or company. The custom field must already exist and be applicable to the target entity.
| Name | Type | Req | Description |
|---|---|---|---|
| country_code | string | – | The country code for currency-type custom field values. |
| currency_code | string | – | The ISO currency code for currency-type custom field values. |
| custom_field_id | integer | yes | The ID of the custom field the value belongs to. |
| entity | string | yes | The type of entity the custom field value is attached to. |
| entity_id | integer | yes | The ID of the task, project or company the custom field value is attached 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). |
No output schema declared.
No examples provided.
twprojects-create_custom_item ~244
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.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | An optional human-readable description for the custom item type. |
| display_name | string | yes | The display name of the custom item type (e.g. "Contracts"). |
| label_plural | string | – | Plural label for many records (e.g. "Contracts"). Defaults to the display name when omitted. |
| label_singular | string | – | Singular label for one record (e.g. "Contract"). Defaults to the display name when omitted. |
| project_id | integer | yes | Project ID that will own the new custom item type. |
No output schema declared.
No examples provided.
twprojects-create_custom_item_field ~342
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.
| Name | Type | Req | Description |
|---|---|---|---|
| custom_item_id | integer | yes | Custom item type ID that will own the new field. |
| definition | object | – | 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 | yes | Human-readable name of the field (e.g. "Status"). |
| options | array | – | Choices for dropdown/multiselect fields. Each option is {label: "Active", color: "#22c55e"}. |
| position_after_id | integer | – | Place this field after the given field ID. Null appends to the end. |
| tw_type | string | – | Optional sub-classification for dropdown fields. Use "status" for a Status field. |
| type | string | yes | Field data type. |
No output schema declared.
No examples provided.
twprojects-create_custom_item_record ~345
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.
| Name | Type | Req | Description |
|---|---|---|---|
| custom_item_id | integer | yes | Custom item type ID that will own the new record. |
| field_values | array | – | 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 | yes | Display name of the record (e.g. "Acme Inc Contract"). |
| position_after_id | integer | – | Place the record after the given record ID. Null appends to the end. |
| section_id | integer | – | Optional section ID to place the record in. |
No output schema declared.
No examples provided.
twprojects-create_file ~224
Upload short text you are generating yourself, such as a plan, a spec or a CSV, so it can be attached to a task, comment or message. Returns a single-use reference; pass it in attachment_refs on twprojects-create_task, twprojects-update_task, twprojects-create_comment or twprojects-create_message. Content is sent inline as base64, which means you have to emit the whole file as text, so use twprojects-create_upload_url instead for anything that already exists as a file — it hands back a URL to send the bytes to directly, and is the only safe option for a document that must stay byte-for-byte identical.
| Name | Type | Req | Description |
|---|---|---|---|
| data | string | yes | The file content, base64-encoded with the standard alphabet. It must decode to between 1 byte and 5242880 bytes. |
| name | string | yes | The file name, including its extension, for example "plan.md". Teamwork.com works out how to display the file from the extension, so a name without one is harder to open. Any directory part is remove… |
No output schema declared.
No examples provided.
twprojects-create_jobrole ~28
Create job role.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | The name of the job role. |
No output schema declared.
No examples provided.
twprojects-create_link ~275
Create link.
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | The URL of the link. This is the actual web address that the link points to. |
| description | string | – | The description of the link. Longer text that provides detailed information about the link. |
| notify | – | – | Who to notify of the new link. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one si… |
| notify_current_user | boolean | – | Whether the current user should be notified about the new link. |
| project_id | integer | yes | The ID of the project to create the link in. |
| tag_ids | array | – | A list of tag IDs to associate with the link. |
| title | string | – | The title of the link, which provides a brief summary of the purpose of the link. |
No output schema declared.
No examples provided.
twprojects-create_message ~290
Create message in a project.
| Name | Type | Req | Description |
|---|---|---|---|
| attachment_refs | array | – | References of files to attach to the message, as returned by twprojects-create_upload_url or twprojects-create_file. Each is "tf_" followed by a UUID and the file extension, and can only be used once… |
| body | string | yes | The body of the message. |
| notify | – | – | Who to notify of the new message. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one… |
| notify_current_user | boolean | – | Whether the current user should be notified about the new message. |
| project_id | integer | yes | The ID of the project to create the message in. |
| title | string | yes | The title of the message. |
No output schema declared.
No examples provided.
twprojects-create_message_reply ~203
Create message reply.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | The body of the message reply. |
| message_id | integer | yes | The ID of the message to create the reply in. |
| notify | – | – | Who to notify of the new reply. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one s… |
| notify_current_user | boolean | – | Whether the current user should be notified about the new message reply. |
No output schema declared.
No examples provided.
twprojects-create_milestone ~139
Create milestone in a project.
| Name | Type | Req | Description |
|---|---|---|---|
| assignees | object | yes | Assignees for the milestone. |
| description | string | – | A description of the milestone. |
| due_date | string | yes | The due date of the milestone (format: YYYYMMDD). Used for related tasks without their own due date. |
| name | string | yes | The name of the milestone. |
| project_id | integer | yes | The ID of the project to create the milestone in. |
| tag_ids | array | – | A list of tag IDs to associate with the milestone. |
| tasklist_ids | array | – | Tasklists to associate with the milestone. |
No output schema declared.
No examples provided.
twprojects-create_notebook ~101
Create notebook in a project.
| Name | Type | Req | Description |
|---|---|---|---|
| contents | string | yes | The contents of the notebook. |
| description | string | – | A description of the notebook. |
| name | string | yes | The name of the notebook. |
| project_id | integer | yes | The ID of the project to create the notebook in. |
| tag_ids | array | – | A list of tag IDs to associate with the notebook. |
| type | string | yes | The type of the notebook. |
No output schema declared.
No examples provided.
twprojects-create_project ~145
Create project.
| Name | Type | Req | Description |
|---|---|---|---|
| category_id | integer | – | The ID of the category to which the project belongs. |
| company_id | integer | – | The ID of the company associated with the project. |
| description | string | – | The description of the project. |
| end_at | string | – | End date of the project (format: YYYYMMDD). |
| name | string | yes | The name of the project. |
| owned_id | integer | – | The ID of the user who owns the project. |
| start_at | string | – | Start date of the project (format: YYYYMMDD). |
| tag_ids | array | – | A list of tag IDs to associate with the project. |
No output schema declared.
No examples provided.
twprojects-create_project_category ~76
Create project category.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | – | The color of the project category in hex format (e.g., #FF5733). |
| name | string | yes | The name of the project category. |
| parent_id | integer | – | The ID of the parent project category, if any. This allows for nested categories. |
No output schema declared.
No examples provided.
twprojects-create_project_template ~155
Create project template.
| Name | Type | Req | Description |
|---|---|---|---|
| category_id | integer | – | The ID of the category to which the project template belongs. |
| company_id | integer | – | The ID of the company associated with the project template. |
| description | string | – | The description of the project template. |
| end_at | string | – | End date of the project template (format: YYYYMMDD). |
| name | string | yes | The name of the project template. |
| owned_id | integer | – | The ID of the user who owns the project template. |
| start_at | string | – | Start date of the project template (format: YYYYMMDD). |
| tag_ids | array | – | A list of tag IDs to associate with the project template. |
No output schema declared.
No examples provided.
twprojects-create_skill ~40
Create skill.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | The name of the skill. |
| user_ids | array | – | The user IDs associated with the skill. |
No output schema declared.
No examples provided.
twprojects-create_tag ~81
Create tag.
| Name | Type | Req | Description |
|---|---|---|---|
| color | string | – | The color of the tag. It must be a valid hex color code. |
| name | string | yes | The name of the tag. It must have less than 50 characters. |
| project_id | integer | – | The ID of the project to associate the tag with. This is for project-scoped tags. |
No output schema declared.
No examples provided.
twprojects-create_task ~588
Create task in a tasklist.
| Name | Type | Req | Description |
|---|---|---|---|
| assignees | object | – | Assignees for the task. |
| attachment_file_ids | array | – | IDs of files already in a project's files area to attach to the task, as returned by twprojects-add_project_file. Unlike a reference these can be used repeatedly, so this is how one file reaches seve… |
| attachment_refs | array | – | References of files to attach to the task, as returned by twprojects-create_upload_url or twprojects-create_file. Each is "tf_" followed by a UUID and the file extension, and can only be used once, s… |
| change_followers | object | – | Followers of any task changes. |
| comment_followers | object | – | Followers of any task comments. |
| complete_followers | object | – | Followers of any task completions. |
| description | string | – | The description of the task. Support for plain text and Markdown formatting. |
| due_date | string | – | The due date of the task. If omitted, falls back to the milestone due date when one is set. |
| estimated_minutes | integer | – | The estimated time to complete the task in minutes. |
| name | string | yes | The name of the task. |
| notify | boolean | – | Whether to notify the task's assignees and followers, which sends them an email. Defaults to true. Set it to false for bulk or housekeeping changes nobody needs to hear about. |
| parent_task_id | integer | – | The ID of the parent task if creating a subtask. |
| predecessors | array | – | Task dependencies that must be completed before this task can start. |
| priority | string | – | The priority of the task. |
| progress | integer | – | The progress of the task, as a percentage (0-100). Only whole numbers are allowed. |
| stage_id | integer | – | The ID of the workflow stage to place the new task in. Required together with workflow_id. Omit both to leave the task in the workflow's backlog. Use twprojects-list_workflow_stages to find one. |
| start_date | string | – | The start date of the task. |
| tag_ids | array | – | A list of tag IDs to associate with the task. |
| tasklist_id | integer | yes | Tasklist ID. Use twprojects-list_tasklists to find one. |
| workflow_id | integer | – | The ID of the workflow to place the new task in a stage of. Required together with stage_id, and must be a workflow attached to the task's own project: another one is ignored and the task lands in th… |
No output schema declared.
No examples provided.
twprojects-create_tasklist ~82
Create tasklist in a project.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | The description of the tasklist. |
| milestone_id | integer | – | The ID of the milestone to associate with the tasklist. |
| name | string | yes | The name of the tasklist. |
| project_id | integer | yes | The ID of the project to create the tasklist in. |
No output schema declared.
No examples provided.
twprojects-create_team ~158
Create team.
| Name | Type | Req | Description |
|---|---|---|---|
| company_id | integer | – | The ID of the company. This is used to create a team scoped for a specific company. |
| description | string | – | The description of the team. |
| handle | string | – | The handle of the team. It is a unique identifier for the team. It must not have spaces or special characters. |
| name | string | yes | The name of the team. |
| parent_team_id | integer | – | The ID of the parent team. This is used to create a hierarchy of teams. |
| project_id | integer | – | The ID of the project. This is used to create a team scoped for a specific project. |
| user_ids | array | – | Users to add to the team. |
No output schema declared.
No examples provided.
twprojects-create_timelog ~242
Create timelog entry against a project or task.
| Name | Type | Req | Description |
|---|---|---|---|
| billable | boolean | – | If true, the timelog is billable. |
| date | string | yes | The date of the timelog. |
| description | string | – | A description of the timelog. |
| hours | integer | yes | The number of hours spent on the timelog. Must be a positive integer. |
| is_utc | boolean | – | If true, the time is in UTC. |
| minutes | integer | yes | Minutes spent on the timelog. Must be a positive integer less than 60; otherwise increment hours instead. |
| project_id | integer | – | Project the timelog is logged against. Provide exactly one of project_id or task_id. |
| tag_ids | array | – | A list of tag IDs to associate with the timelog. |
| task_id | integer | – | Task the timelog is logged against. Provide exactly one of project_id or task_id. |
| time | string | yes | The time of the timelog in the format HH:MM:SS. |
| user_id | integer | – | User the timelog is logged for. Defaults to the authenticated user. |
No output schema declared.
No examples provided.
twprojects-create_timer ~137
Create and start a timer.
| Name | Type | Req | Description |
|---|---|---|---|
| billable | boolean | – | If true, the timer is billable. |
| description | string | – | A description of the timer. |
| project_id | integer | yes | The ID of the project to associate the timer with. |
| running | boolean | – | If true, the timer will start running immediately. |
| seconds | integer | – | The number of seconds to set the timer for. |
| stop_running_timers | boolean | – | If true, any other running timers will be stopped when this timer is created. |
| task_id | integer | – | The ID of the task to associate the timer with. |
No output schema declared.
No examples provided.
twprojects-create_upload_url ~219
Reserve an upload for a file and get back a short-lived URL to send its bytes to, plus a single-use reference. Use this for any file that already exists — a PDF, an image, a signed document — because the bytes go straight from you to storage and are never read into the conversation. Send the file with the returned method and URL, setting exactly the headers returned and no authorization of your own. Then pass the reference in attachment_refs on twprojects-create_task, twprojects-update_task, twprojects-create_comment or twprojects-create_message. Prefer twprojects-create_file only for short text you are generating yourself.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | The file name, including its extension, for example "contract.pdf". Teamwork.com works out how to display the file from the extension, so a name without one is harder to open. Any directory part is r… |
| size | integer | yes | The exact size of the file in bytes. The reservation is signed against this number, so an upload of any other length is rejected. |
No output schema declared.
No examples provided.
twprojects-create_user ~137
Create user.
| Name | Type | Req | Description |
|---|---|---|---|
| admin | boolean | – | Indicates whether the user is an administrator. |
| company_id | integer | – | The ID of the client/company to which the user belongs. |
| string | yes | The email address of the user. | |
| first_name | string | yes | The first name of the user. |
| last_name | string | yes | The last name of the user. |
| title | string | – | The job title of the user, such as 'Project Manager' or 'Senior Software Developer'. |
| type | string | – | The type of user, such as 'account', 'collaborator', or 'contact'. |
No output schema declared.
No examples provided.
twprojects-create_workflow ~26
Create workflow.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | The name of the workflow. |
No output schema declared.
No examples provided.
twprojects-create_workflow_stage ~47
Create workflow stage.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | yes | The name of the workflow stage. |
| workflow_id | integer | yes | The ID of the workflow to add the stage to. |
No output schema declared.
No examples provided.
twprojects-download_file ~141
Read the content of a file stored in Teamwork.com: text files come back as text, images as an image, and anything else as a base64 resource with its media type. Files over 10 MB are refused; point the user at the file's downloadURL from twprojects-get_file instead. The file ID is in a task's or message reply's attachments and a comment's files (each {id, type: "files"}), or comes from twprojects-list_files.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The ID of the file to download. |
| version | integer | – | The version number to download. Omit for the latest version. |
| Name | Type | Req | Description |
|---|---|---|---|
| mimeType | string | yes | – |
| name | string | yes | – |
| size | integer | yes | – |
No examples provided.
twprojects-get_allocation ~141
Get an allocation. linkedTaskEstimatedTime counts each linked task whole, and a task can sit behind more than one allocation, so it must not be summed across allocations.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | array | – | The attributes to return for each allocation, from the listed names. |
| id | integer | yes | The ID of the allocation to get. |
| include_financial_details | boolean | – | Include forecasted revenue and cost for the allocated time. Requires the scheduler rates entitlement and financial permission on the project; without either, the request still succeeds but the figure… |
| Name | Type | Req | Description |
|---|---|---|---|
| allocation | object | – | – |
| included | object | – | – |
No examples provided.
twprojects-get_comment ~46
Get comment.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | array | – | The attributes to return for each comment, from the listed names. |
| id | integer | yes | The ID of the comment to get. |
| Name | Type | Req | Description |
|---|---|---|---|
| comments | object | – | – |
No examples provided.
twprojects-get_company ~49
Get company (aka client).
| Name | Type | Req | Description |
|---|---|---|---|
| fields | array | – | The attributes to return for each company, from the listed names. |
| id | integer | yes | The ID of the company to get. |
| Name | Type | Req | Description |
|---|---|---|---|
| company | object | – | – |
| included | object | – | – |
No examples provided.
twprojects-get_custom_field ~30
Get custom field.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | The ID of the custom field to get. |
| Name | Type | Req | Description |
|---|---|---|---|
| customfield | object | yes | – |
No examples provided.
twprojects-get_custom_field_value ~85
Get a single custom field value from a task, project or company.
| Name | Type | Req | Description |
|---|---|---|---|
| entity | string | yes | The type of entity the custom field value is attached to. |
| entity_id | integer | yes | The ID of the task, project or company the custom field value belongs to. |
| value_id | integer | yes | The ID of the custom field value entry to retrieve. |
| Name | Type | Req | Description |
|---|---|---|---|
| customfieldValue | object | yes | – |
No examples provided.
twprojects-get_custom_item ~148
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.
| Name | Type | Req | Description |
|---|---|---|---|
| id | integer | yes | Custom item type ID to retrieve. |
| Name | Type | Req | Description |
|---|---|---|---|
| customItem | object | yes | – |
| included | object | yes | – |
No examples provided.
twprojects-get_custom_item_field ~148
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.
| Name | Type | Req | Description |
|---|---|---|---|
| custom_item_id | integer | yes | Custom item type ID the field belongs to. |
| id | integer | yes | Field ID. |
| Name | Type | Req | Description |
|---|---|---|---|
| customItemField | object | yes | – |
No examples provided.
twprojects-get_custom_item_record ~161
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.
| Name | Type | Req | Description |
|---|---|---|---|
| custom_item_id | integer | yes | Custom item type ID the record belongs to. |
| id | integer | yes | Record ID. |
| Name | Type | Req | Description |
|---|---|---|---|
| customItemRecord | object | yes | – |
No examples provided.
twprojects-get_file ~159
Get a file's details: name, size, uploader, version history, the tasks, messages and comments it is attached to, and its downloadURL. The downloadURL needs the caller's own Teamwork session, so hand it to a signed-in user rather than fetching it; use twprojects-download_file to read the content here.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | array | – | The attributes to return for each file, from the listed names. |
| id | integer | yes | The ID of the file to get. |
| include_versions | boolean | – | Whether to include the file's whole version history under versions. Defaults to false. |
| version | integer | – | The version number whose details, size and downloadURL are returned. Omit for the latest version. |
| Name | Type | Req | Description |
|---|---|---|---|
| file | object | – | – |
| included | object | – | – |
No examples provided.
twprojects-get_jobrole ~84
Get job role. The people assigned to the role come back under users, and those holding it as their primary role under primaryUsers; both are references, resolved to names under included.users.
| Name | Type | Req | Description |
|---|---|---|---|
| fields | array | – | The attributes to return for each job role, from the listed names. |
| id | integer | yes | The ID of the job role to get. |
| Name | Type | Req | Description |
|---|---|---|---|
| included | object | – | – |
| jobRole | object | – | – |
No examples provided.
What is the com.teamwork/mcp server?
com.teamwork/mcp is listed in the public MCP registry as com.teamwork/mcp. The Teamwork.com official MCP server helps teams efficiently manage client projects with AI. This page covers its container image (docker.io/teamwork/mcp:v1.43.2).
Is the com.teamwork/mcp server safe to use?
com.teamwork/mcp scores 38 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the com.teamwork/mcp server expose?
com.teamwork/mcp exposes 213 tools: twprojects-get_task, twprojects-list_tasks, twprojects-create_task, twprojects-list_comments, twprojects-update_task, and 208 more. Their descriptions and schemas cost roughly 39,338 tokens of context every time the server is loaded.
Is the com.teamwork/mcp server still maintained?
com.teamwork/mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.