Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

com.teamwork/mcp

REMOTE · MCP.AI.TEAMWORK.COM · 3 COMPONENTS · SCANNED SEP 20

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

0 this week 86 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security78
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
  • HTTPS enforcement could not be verified: the plaintext port answered with HTTP 404, which proves neither a plaintext path nor enforcement. View diagnostics → Unverified
  • HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
  • DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
  • The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
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 Management100
  • No destabilizing schema changes in the last 30 days.Pass
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
Install

How do I install the com.teamwork/mcp server?

com.teamwork/mcp is a hosted endpoint at https://mcp.ai.teamwork.com/, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.ai.teamwork.com

# add to Claude Code
claude mcp add --transport http com-teamwork-mcp 'https://mcp.ai.teamwork.com/'
// .cursor/mcp.json
{
  "mcpServers": {
    "com-teamwork-mcp": {
      "url": "https://mcp.ai.teamwork.com/"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "com-teamwork-mcp": {
      "type": "http",
      "url": "https://mcp.ai.teamwork.com/"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.com-teamwork-mcp]
url = "https://mcp.ai.teamwork.com/"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-teamwork-mcp": {
      "type": "remote",
      "url": "https://mcp.ai.teamwork.com/",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add com-teamwork-mcp --url 'https://mcp.ai.teamwork.com/' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  com-teamwork-mcp:
    url: "https://mcp.ai.teamwork.com/"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "com-teamwork-mcp": {
      "Transport": "http",
      "Url": "https://mcp.ai.teamwork.com/"
    }
  }
}
# add to Vellum
assistant mcp add com-teamwork-mcp -t streamable-http -u 'https://mcp.ai.teamwork.com/'
// mcp.json
{
  "mcpServers": {
    "com-teamwork-mcp": {
      "type": "http",
      "url": "https://mcp.ai.teamwork.com/"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

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 0
    • Server version: 1.43.1 → 1.43.2 functional
  • 14 Sept 26 0
    • Tool “twprojects-get_jobrole” rewrote its description, which is the text the model reads security
    • Tool “twprojects-list_jobroles” rewrote its description, which is the text the model reads security
    • Tool “twspaces-list_pages” rewrote its description, which is the text the model reads security
    • Server version: 1.43.0 → 1.43.1 functional
    • Server version: 1.42.0 → 1.43.0 functional
    • Server version: 1.41.1 → 1.42.0 functional
    • Server version: 1.41.0 → 1.41.1 functional
    • “twspaces-list_pages” added an optional parameter “includePrivate” cosmetic
    • “twspaces-list_pages” reworded the description of “pageOffset” cosmetic
    • “twspaces-list_pages” reworded the description of “pageSize” cosmetic
  • 11 Sept 26 0
    • Server version: 1.40.1 → 1.41.0 functional
    • New tool “twprojects-get_file” functional
    • New tool “twprojects-list_files” functional
    • New tool “twprojects-download_file” functional
  • 10 Sept 26 0
    • Stability: fail → pass security
    • Server version: 1.40.0 → 1.40.1 functional
  • 9 Sept 26 0

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

    • Server version: 1.39.3 → 1.40.0 functional
    • “twprojects-create_task” added an optional parameter “notify” cosmetic
    • “twprojects-update_task” added an optional parameter “notify” cosmetic
    • “twdesk-list_ticket_types” made “fields” optional cosmetic
    • “twdesk-list_helpdoc_sites” made “subdomain” optional cosmetic
    • “twdesk-list_inboxes” made “email” optional cosmetic
    • “twdesk-list_inboxes” made “fields” optional cosmetic
    • “twdesk-list_inboxes” made “name” optional cosmetic
    • “twdesk-list_inboxes” made “orderBy” optional cosmetic
    • “twdesk-list_inboxes” made “orderDirection” optional cosmetic
    • “twdesk-list_inboxes” made “page” optional cosmetic
    • “twdesk-list_inboxes” made “pageSize” optional cosmetic
    • “twdesk-list_priorities” made “color” optional cosmetic
    • “twdesk-list_priorities” made “fields” optional cosmetic
    • “twdesk-list_priorities” made “name” optional cosmetic
    • “twdesk-list_priorities” made “orderBy” optional cosmetic
    • “twdesk-list_priorities” made “orderDirection” optional cosmetic
    • “twdesk-list_priorities” made “page” optional cosmetic
    • “twdesk-list_priorities” made “pageSize” optional cosmetic
    • “twdesk-list_statuses” made “code” optional cosmetic
    • “twdesk-list_statuses” made “color” optional cosmetic
    • “twdesk-list_statuses” made “fields” optional cosmetic
    • “twdesk-list_statuses” made “name” optional cosmetic
    • “twdesk-list_statuses” made “orderBy” optional cosmetic
    • “twdesk-list_statuses” made “orderDirection” optional cosmetic
    • “twdesk-list_statuses” made “page” optional cosmetic
    • “twdesk-list_statuses” made “pageSize” optional cosmetic
    • “twdesk-list_tags” made “color” optional cosmetic
    • “twdesk-list_tags” made “fields” optional cosmetic
    • “twdesk-list_tags” made “inboxIDs” optional cosmetic
    • “twdesk-list_tags” made “name” optional cosmetic
    • “twdesk-list_tags” made “orderBy” optional cosmetic
    • “twdesk-list_tags” made “orderDirection” optional cosmetic
    • “twdesk-list_tags” made “page” optional cosmetic
    • “twdesk-list_tags” made “pageSize” optional cosmetic
    • “twdesk-list_ticket_types” made “inboxIDs” optional cosmetic
    • “twdesk-list_ticket_types” made “name” optional cosmetic
    • “twdesk-list_ticket_types” made “orderBy” optional cosmetic
    • “twdesk-list_ticket_types” made “orderDirection” optional cosmetic
    • “twdesk-list_ticket_types” made “page” optional cosmetic
    • “twdesk-list_ticket_types” made “pageSize” optional cosmetic
    • “twdesk-list_users” made “email” optional cosmetic
    • “twdesk-list_users” made “fields” optional cosmetic
    • “twdesk-list_users” made “firstName” optional cosmetic
    • “twdesk-list_users” made “inboxIDs” optional cosmetic
    • “twdesk-list_users” made “isPartTime” optional cosmetic
    • “twdesk-list_users” made “lastName” optional cosmetic
    • “twdesk-list_users” made “orderBy” optional cosmetic
    • “twdesk-list_users” made “orderDirection” optional cosmetic
    • “twdesk-list_users” made “page” optional cosmetic
    • “twdesk-list_users” made “pageSize” optional cosmetic
    • “twdesk-reply_ticket” made “bcc” optional cosmetic
    • “twdesk-reply_ticket” made “cc” optional cosmetic
    • “twdesk-reply_ticket” made “threadType” optional cosmetic
    • “twdesk-search_helpdoc_articles” made “categoryID” optional cosmetic
    • “twdesk-search_helpdoc_articles” made “page” optional cosmetic
    • “twdesk-search_helpdoc_articles” made “pageSize” optional cosmetic
    • “twdesk-search_helpdoc_articles” made “search” optional cosmetic
    • “twdesk-search_helpdoc_articles” made “siteID” optional cosmetic
    • “twdesk-search_helpdoc_articles” made “status” optional cosmetic
    • “twdesk-search_tickets” made “companyIDs” optional cosmetic
    • “twdesk-search_tickets” made “createdAfter” optional cosmetic
    • “twdesk-search_tickets” made “createdBefore” optional cosmetic
    • “twdesk-search_tickets” made “customerIDs” optional cosmetic
    • “twdesk-search_tickets” made “fields” optional cosmetic
    • “twdesk-search_tickets” made “inboxIDs” optional cosmetic
    • “twdesk-search_tickets” made “omitMerged” optional cosmetic
    • “twdesk-search_tickets” made “orderBy” optional cosmetic
    • “twdesk-search_tickets” made “orderDirection” optional cosmetic
    • “twdesk-search_tickets” made “page” optional cosmetic
    • “twdesk-search_tickets” made “pageSize” optional cosmetic
    • “twdesk-search_tickets” made “priorityIDs” optional cosmetic
    • “twdesk-search_tickets” made “search” optional cosmetic
    • “twdesk-search_tickets” made “statusIDs” optional cosmetic
    • “twdesk-search_tickets” made “tagIDs” optional cosmetic
    • “twdesk-search_tickets” made “userIDs” optional cosmetic
    • “twdesk-update_company” made “description” optional cosmetic
    • “twdesk-update_company” made “details” optional cosmetic
    • “twdesk-update_company” made “domains” optional cosmetic
    • “twdesk-update_company” made “industry” optional cosmetic
    • “twdesk-update_company” made “kind” optional cosmetic
    • “twdesk-update_company” made “name” optional cosmetic
    • “twdesk-update_company” made “note” optional cosmetic
    • “twdesk-update_company” made “permission” optional cosmetic
    • “twdesk-update_company” made “website” optional cosmetic
    • “twdesk-update_customer” made “address” optional cosmetic
    • “twdesk-update_customer” made “email” optional cosmetic
    • “twdesk-update_customer” made “extraData” optional cosmetic
    • “twdesk-update_customer” made “facebookURL” optional cosmetic
    • “twdesk-update_customer” made “firstName” optional cosmetic
    • “twdesk-update_customer” made “jobTitle” optional cosmetic
    • “twdesk-update_customer” made “lastName” optional cosmetic
    • “twdesk-update_customer” made “linkedinURL” optional cosmetic
    • “twdesk-update_customer” made “mobile” optional cosmetic
    • “twdesk-update_customer” made “notes” optional cosmetic
    • “twdesk-update_customer” made “organization” optional cosmetic
    • “twdesk-update_customer” made “phone” optional cosmetic
    • “twdesk-update_customer” made “twitterHandle” optional cosmetic
    • “twdesk-update_helpdoc_article” made “contents” optional cosmetic
    • “twdesk-update_helpdoc_article” made “description” optional cosmetic
    • “twdesk-update_helpdoc_article” made “isPrivate” optional cosmetic
    • “twdesk-update_helpdoc_article” made “status” optional cosmetic
    • “twdesk-update_helpdoc_article” made “title” optional cosmetic
    • “twdesk-update_priority” made “color” optional cosmetic
    • “twdesk-update_priority” made “name” optional cosmetic
    • “twdesk-update_status” made “color” optional cosmetic
    • “twdesk-update_status” made “displayOrder” optional cosmetic
    • “twdesk-create_company” made “description” optional cosmetic
    • “twdesk-create_company” made “details” optional cosmetic
    • “twdesk-create_company” made “domains” optional cosmetic
    • “twdesk-create_company” made “industry” optional cosmetic
    • “twdesk-create_company” made “kind” optional cosmetic
    • “twdesk-create_company” made “note” optional cosmetic
    • “twdesk-create_company” made “permission” optional cosmetic
    • “twdesk-create_company” made “website” optional cosmetic
    • “twdesk-create_customer” made “address” optional cosmetic
    • “twdesk-create_customer” made “email” optional cosmetic
    • “twdesk-create_customer” made “extraData” optional cosmetic
    • “twdesk-create_customer” made “facebookURL” optional cosmetic
    • “twdesk-create_customer” made “firstName” optional cosmetic
    • “twdesk-create_customer” made “jobTitle” optional cosmetic
    • “twdesk-create_customer” made “lastName” optional cosmetic
    • “twdesk-create_customer” made “linkedinURL” optional cosmetic
    • “twdesk-create_customer” made “mobile” optional cosmetic
    • “twdesk-create_customer” made “notes” optional cosmetic
    • “twdesk-create_customer” made “organization” optional cosmetic
    • “twdesk-create_customer” made “phone” optional cosmetic
    • “twdesk-create_customer” made “twitterHandle” optional cosmetic
    • “twdesk-create_file” made “disposition” optional cosmetic
    • “twdesk-create_helpdoc_article” made “contents” optional cosmetic
    • “twdesk-create_helpdoc_article” made “description” optional cosmetic
    • “twdesk-create_helpdoc_article” made “isPrivate” optional cosmetic
    • “twdesk-create_helpdoc_article” made “status” optional cosmetic
    • “twdesk-create_priority” made “color” optional cosmetic
    • “twdesk-create_status” made “color” optional cosmetic
    • “twdesk-create_status” made “displayOrder” optional cosmetic
    • “twdesk-create_tag” made “color” optional cosmetic
    • “twdesk-create_ticket” made “agentId” optional cosmetic
    • “twdesk-create_ticket” made “bcc” optional cosmetic
    • “twdesk-create_ticket” made “cc” optional cosmetic
    • “twdesk-create_ticket” made “customerEmail” optional cosmetic
    • “twdesk-create_ticket” made “customerId” optional cosmetic
    • “twdesk-create_ticket” made “files” optional cosmetic
    • “twdesk-create_ticket” made “notifyCustomer” optional cosmetic
    • “twdesk-create_ticket” made “priorityId” optional cosmetic
    • “twdesk-create_ticket” made “statusId” optional cosmetic
    • “twdesk-create_ticket” made “tags” optional cosmetic
    • “twdesk-create_ticket” made “typeId” optional cosmetic
    • “twdesk-create_ticket_type” made “displayOrder” optional cosmetic
    • “twdesk-create_ticket_type” made “enabledForFutureInboxes” optional cosmetic
    • “twdesk-get_company” made “fields” optional cosmetic
    • “twdesk-get_customer” made “fields” optional cosmetic
    • “twdesk-get_helpdoc_article” made “fields” optional cosmetic
    • “twdesk-get_helpdoc_site” made “fields” optional cosmetic
    • “twdesk-get_inbox” made “fields” optional cosmetic
    • “twdesk-get_priority” made “fields” optional cosmetic
    • “twdesk-get_status” made “fields” optional cosmetic
    • “twdesk-get_tag” made “fields” optional cosmetic
    • “twdesk-get_ticket” made “fields” optional cosmetic
    • “twdesk-get_ticket_type” made “fields” optional cosmetic
    • “twdesk-get_user” made “fields” optional cosmetic
    • “twdesk-list_companies” made “domains” optional cosmetic
    • “twdesk-list_companies” made “fields” optional cosmetic
    • “twdesk-list_companies” made “kind” optional cosmetic
    • “twdesk-list_companies” made “name” optional cosmetic
    • “twdesk-list_companies” made “orderBy” optional cosmetic
    • “twdesk-list_companies” made “orderDirection” optional cosmetic
    • “twdesk-list_companies” made “page” optional cosmetic
    • “twdesk-list_companies” made “pageSize” optional cosmetic
    • “twdesk-list_customers” made “companyIDs” optional cosmetic
    • “twdesk-list_customers” made “companyNames” optional cosmetic
    • “twdesk-list_customers” made “emails” optional cosmetic
    • “twdesk-list_customers” made “fields” optional cosmetic
    • “twdesk-list_customers” made “orderBy” optional cosmetic
    • “twdesk-list_customers” made “orderDirection” optional cosmetic
    • “twdesk-list_customers” made “page” optional cosmetic
    • “twdesk-list_customers” made “pageSize” optional cosmetic
    • “twdesk-list_helpdoc_sites” made “fields” optional cosmetic
    • “twdesk-list_helpdoc_sites” made “name” optional cosmetic
    • “twdesk-list_helpdoc_sites” made “orderBy” optional cosmetic
    • “twdesk-list_helpdoc_sites” made “orderDirection” optional cosmetic
    • “twdesk-list_helpdoc_sites” made “page” optional cosmetic
    • “twdesk-list_helpdoc_sites” made “pageSize” optional cosmetic
  • 26 Aug 26 +1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

  • 23 Aug 26 +1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

  • 22 Aug 26 84

    First indexed and scored.

Diagnostics

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 · Probed https://mcp.ai.teamwork.com

TLS valid

Negotiated TLS 1.2 with TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=*.eks.us.teamworkops.com CN=Amazon RSA 2048 M04,O=Amazon,C=US 21 Jun 2026 4 Jan 2027 RSA 2048 SHA256-RSA 55ecd7796e6cd7996d2683854dc6516
SANs: *.eks.us.teamworkops.com, *.teamwork.com, *.helpdocsite.com, *.us.teamworkops.com, *.helpdocs.com, *.teamworkdesk.com, *.ai.teamwork.com
CN=Amazon RSA 2048 M04,O=Amazon,C=US (CA) CN=Amazon Root CA 1,O=Amazon,C=US 23 Aug 2022 23 Aug 2030 RSA 2048 SHA256-RSA 773124f2a952e3ed18a58bdb85d1bc0ce5f27
CN=Amazon Root CA 1,O=Amazon,C=US (CA) CN=Starfield Services Root Certificate Authority - G2,O=Starfield Technologies\, Inc.,L=Scottsdale,ST=Arizona,C=US 25 May 2015 31 Dec 2037 RSA 2048 SHA256-RSA 67f944a2a27cdf3fac2ae2b01f908eeb9c4c6

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.ai.teamwork.com. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
teamwork.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://mcp.ai.teamwork.com/.well-known/oauth-protected-resource"

Bearer resource_metadata="https://mcp.ai.teamwork.com/.well-known/oauth-protected-resource"

Protected resource metadata

Document https://mcp.ai.teamwork.com/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://mcp.ai.teamwork.com
Authorisation server https://teamwork.com

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.ai.teamwork.com Verified 200
http (plaintext) http://mcp.ai.teamwork.com Inconclusive 404
MCP tools · 213 exposed · ~39,338 tokens

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 →

Tool Tokens
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.

NameTypeReqDescription
auto_new_versionbooleanStore it as a new version of an existing file with the same name in the project, rather than as a separate file.
category_idintegerFile it under an existing file category. Wins over category_name.
category_namestringFile it under a category with this name, creating one when the project has none. Ignored when category_id is given.
descriptionstringA description of the file.
namestringOverride the name the file was uploaded with, including its extension.
notify_current_userbooleanNotify the user adding the file. Defaults to false.
privatebooleanHide the file from client users.
project_idintegeryesThe ID of the project whose files area will hold the file.
referencestringyesThe 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_idsarrayA 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.

NameTypeReqDescription
project_idintegeryesThe ID of the project to add the member to.
user_idsarrayUsers to add.

No output schema declared.

No examples provided.

twprojects-clone_project ~345

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

NameTypeReqDescription
company_idintegerThe ID of the company associated with the new cloned project. If not provided, the company of the original project will be used.
days_offsetintegerDaysOffset 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…
descriptionstringThe description of the new cloned project. If not provided, the description of the original project will be used.
idintegeryesThe ID of the project to clone.
namestringThe 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_templatebooleanIndicates whether the new project should be a regular one created from a template.
target_datestringDesired 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_targetstringSpecifies 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_templatebooleanIndicates whether the new project should be set as a template.

No output schema declared.

No examples provided.

twprojects-complete_task ~31

Mark task complete.

NameTypeReqDescription
idintegeryesThe 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.

NameTypeReqDescription
idintegeryesThe 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.

NameTypeReqDescription
due_afterstringOnly include milestones with a deadline on or after this date.
due_beforestringOnly include milestones with a deadline on or before this date.
match_all_tagsbooleanIf true, match all tags; if false, match any.
project_idintegerThe ID of the project from which to retrieve milestones. Omit to list milestones across all projects.
search_termstringA 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_completedbooleanIf false, only return milestones that are not completed yet. Included by default, unlike the task and tasklist lists.
tag_idsarrayA list of tag IDs to filter milestones by tags.
NameTypeReqDescription
countintegeryes

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.

NameTypeReqDescription
company_idsarrayFilter projects by the company that owns them.
hide_observedbooleanIf true, leave out the projects the calling user only observes, keeping the ones they actually work on.
include_archivedbooleanIf true, return archived projects alongside the active ones; excluded by default.
include_subcategoriesbooleanIf true, project_category_ids also matches the categories nested under the ones given.
include_tentativebooleanIf true, return tentative projects alongside the normal ones; excluded by default.
match_all_tagsbooleanIf true, match all tags; if false, match any.
only_admin_accessbooleanIf true, only return the projects the calling user administers.
only_archivedbooleanIf true, only return archived projects.
only_starredbooleanIf true, only return the projects the calling user has starred.
project_category_idsarrayFilter projects by category.
project_healthsarrayFilter projects by the health rating set on them, matching any of the values given. "not_set" matches the projects nobody has rated.
project_owner_idsarrayFilter projects by the user who owns them.
project_statusesarrayFilter 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_termstringA search term to filter projects by name or description.
tag_idsarrayA list of tag IDs to filter projects by tags.
team_idsarrayFilter projects by team, matching the projects any member of those teams belongs to.
updated_afterOnly 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_idsarrayFilter projects by the users holding an explicit membership of them. For "my projects", pass the ID returned by twprojects-get_user_me.
NameTypeReqDescription
countintegeryes

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.

NameTypeReqDescription
assignee_user_idsarrayFilter tasks by assignee.
completed_afterOnly 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_beforeOnly 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_afterOnly 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_beforeOnly 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_idsarrayFilter tasks by creator.
date_filterstringWhere 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_afterstringOnly 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_beforestringOnly 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_idsarrayLeave 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_tagsbooleanIf true, match all tags; if false, match any.
only_completedbooleanIf 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_unassignedbooleanIf true, only return tasks that have no assignee.
only_unplannedbooleanIf true, only return tasks that are unplanned, meaning they are missing an assignee, a due date, or estimated time.
project_idintegerThe ID of the project from which to retrieve tasks. Omit to list tasks across all projects.
search_termstringA search term to filter tasks by name.
show_completedbooleanIf true, include completed tasks and tasks belonging to completed tasklists; both excluded by default.
start_afterstringOnly 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_idsarrayA list of tag IDs to filter tasks by tags.
tasklist_idintegerThe ID of the tasklist from which to retrieve tasks. Takes precedence over project_id.
updated_afterOnly 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_beforeOnly 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…
NameTypeReqDescription
countintegeryes

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.

NameTypeReqDescription
assigned_company_idsarrayFilter timelogs by assigned company.
assigned_team_idsarrayFilter timelogs by assigned team.
assigned_user_idsarrayFilter timelogs by assigned user.
billable_typestringRestrict 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_dateEnd 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_typestringRestrict 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_tagsbooleanIf true, match all tags; if false, match any.
project_idintegerThe ID of the project from which to retrieve timelogs. Omit to list timelogs across all projects.
start_dateStart 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_idsarrayA list of tag IDs to filter timelogs by tags.
task_idintegerThe ID of the task from which to retrieve timelogs. Omit to list timelogs across all tasks.
ticketIdsarrayFilter timelogs by associated desk ticket.
NameTypeReqDescription
countintegeryes

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.

NameTypeReqDescription
assigned_user_idintegeryesThe 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…
colorstringyesThe allocation's colour as six hexadecimal digits, with or without a leading '#'.
descriptionstringAn optional description of the allocation, at most 255 characters.
end_datestringyesThe 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_collisionsbooleanSkip 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_allocationbooleanAccept 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_billablebooleanWhether the allocated time can be charged to a client.
linked_task_idsarrayThe 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_idintegeryesThe ID of the project to commit the time to.
seconds_per_dayintegeryesThe 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_datestringyesThe first day of the allocation (format: YYYY-MM-DD).
titlestringyesThe 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.

NameTypeReqDescription
attachment_refsarrayReferences 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…
bodystringyesThe content of the comment. The content can be added as text or HTML.
content_typestringThe content type of the comment. It can be either 'TEXT' or 'HTML'.
notifyWho 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_userbooleanWhether the current user should be notified about the new comment.
objectobjectyesThe 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).

NameTypeReqDescription
address_onestringThe first line of the address of the company.
address_twostringThe second line of the address of the company.
citystringThe city of the company.
country_codestringThe country code of the company, e.g., 'US' for the United States.
email_onestringThe primary email address of the company.
email_threestringThe tertiary email address of the company.
email_twostringThe secondary email address of the company.
faxstringThe fax number of the company.
industry_idintegerThe ID of the industry the company belongs to.
manager_idintegerThe ID of the user who manages the company.
namestringyesThe name of the company.
phonestringThe phone number of the company.
profilestringA profile description for the company.
statestringThe state of the company.
tag_idsarrayA list of tag IDs to associate with the company.
websitestringThe website of the company.
zipstringThe ZIP or postal code of the company.

No output schema declared.

No examples provided.

twprojects-create_custom_field ~285

Create custom field.

NameTypeReqDescription
currency_codestringThe ISO currency code for 'currency' or 'financial' type custom fields.
descriptionstringAn optional description for the custom field.
entitystringyesThe type of entity this custom field can be applied to. Use 'all' for installation-level custom fields that are available across the workspace.
formulastringThe formula expression for 'formula' type custom fields.
namestringyesThe display name of the custom field.
optionsType-specific options for the custom field. For 'dropdown' and 'multiselect' types, provide {"choices": [{"value": "...", "color": "#rrggbb"}, ...]}. For 'rating' type, provide {"icon": "star|heart|.…
project_idintegerThe ID of the project to scope the custom field to. When omitted, the custom field is created at the installation level.
requiredbooleanWhether the custom field must have a value when set on an entity.
typestringyesThe data type of the custom field.
unitstringThe 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.

NameTypeReqDescription
country_codestringThe country code for currency-type custom field values.
currency_codestringThe ISO currency code for currency-type custom field values.
custom_field_idintegeryesThe ID of the custom field the value belongs to.
entitystringyesThe type of entity the custom field value is attached to.
entity_idintegeryesThe ID of the task, project or company the custom field value is attached to.
valueThe 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.

NameTypeReqDescription
descriptionstringAn optional human-readable description for the custom item type.
display_namestringyesThe display name of the custom item type (e.g. "Contracts").
label_pluralstringPlural label for many records (e.g. "Contracts"). Defaults to the display name when omitted.
label_singularstringSingular label for one record (e.g. "Contract"). Defaults to the display name when omitted.
project_idintegeryesProject 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.

NameTypeReqDescription
custom_item_idintegeryesCustom item type ID that will own the new field.
definitionobjectOptional 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_namestringyesHuman-readable name of the field (e.g. "Status").
optionsarrayChoices for dropdown/multiselect fields. Each option is {label: "Active", color: "#22c55e"}.
position_after_idintegerPlace this field after the given field ID. Null appends to the end.
tw_typestringOptional sub-classification for dropdown fields. Use "status" for a Status field.
typestringyesField 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.

NameTypeReqDescription
custom_item_idintegeryesCustom item type ID that will own the new record.
field_valuesarrayField 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…
namestringyesDisplay name of the record (e.g. "Acme Inc Contract").
position_after_idintegerPlace the record after the given record ID. Null appends to the end.
section_idintegerOptional 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.

NameTypeReqDescription
datastringyesThe file content, base64-encoded with the standard alphabet. It must decode to between 1 byte and 5242880 bytes.
namestringyesThe 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.

NameTypeReqDescription
namestringyesThe name of the job role.

No output schema declared.

No examples provided.

twprojects-create_link ~275

Create link.

NameTypeReqDescription
codestringyesThe URL of the link. This is the actual web address that the link points to.
descriptionstringThe description of the link. Longer text that provides detailed information about the link.
notifyWho 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_userbooleanWhether the current user should be notified about the new link.
project_idintegeryesThe ID of the project to create the link in.
tag_idsarrayA list of tag IDs to associate with the link.
titlestringThe 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.

NameTypeReqDescription
attachment_refsarrayReferences 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…
bodystringyesThe body of the message.
notifyWho 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_userbooleanWhether the current user should be notified about the new message.
project_idintegeryesThe ID of the project to create the message in.
titlestringyesThe title of the message.

No output schema declared.

No examples provided.

twprojects-create_message_reply ~203

Create message reply.

NameTypeReqDescription
bodystringyesThe body of the message reply.
message_idintegeryesThe ID of the message to create the reply in.
notifyWho 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_userbooleanWhether 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.

NameTypeReqDescription
assigneesobjectyesAssignees for the milestone.
descriptionstringA description of the milestone.
due_datestringyesThe due date of the milestone (format: YYYYMMDD). Used for related tasks without their own due date.
namestringyesThe name of the milestone.
project_idintegeryesThe ID of the project to create the milestone in.
tag_idsarrayA list of tag IDs to associate with the milestone.
tasklist_idsarrayTasklists to associate with the milestone.

No output schema declared.

No examples provided.

twprojects-create_notebook ~101

Create notebook in a project.

NameTypeReqDescription
contentsstringyesThe contents of the notebook.
descriptionstringA description of the notebook.
namestringyesThe name of the notebook.
project_idintegeryesThe ID of the project to create the notebook in.
tag_idsarrayA list of tag IDs to associate with the notebook.
typestringyesThe type of the notebook.

No output schema declared.

No examples provided.

twprojects-create_project ~145

Create project.

NameTypeReqDescription
category_idintegerThe ID of the category to which the project belongs.
company_idintegerThe ID of the company associated with the project.
descriptionstringThe description of the project.
end_atstringEnd date of the project (format: YYYYMMDD).
namestringyesThe name of the project.
owned_idintegerThe ID of the user who owns the project.
start_atstringStart date of the project (format: YYYYMMDD).
tag_idsarrayA list of tag IDs to associate with the project.

No output schema declared.

No examples provided.

twprojects-create_project_category ~76

Create project category.

NameTypeReqDescription
colorstringThe color of the project category in hex format (e.g., #FF5733).
namestringyesThe name of the project category.
parent_idintegerThe 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.

NameTypeReqDescription
category_idintegerThe ID of the category to which the project template belongs.
company_idintegerThe ID of the company associated with the project template.
descriptionstringThe description of the project template.
end_atstringEnd date of the project template (format: YYYYMMDD).
namestringyesThe name of the project template.
owned_idintegerThe ID of the user who owns the project template.
start_atstringStart date of the project template (format: YYYYMMDD).
tag_idsarrayA list of tag IDs to associate with the project template.

No output schema declared.

No examples provided.

twprojects-create_skill ~40

Create skill.

NameTypeReqDescription
namestringyesThe name of the skill.
user_idsarrayThe user IDs associated with the skill.

No output schema declared.

No examples provided.

twprojects-create_tag ~81

Create tag.

NameTypeReqDescription
colorstringThe color of the tag. It must be a valid hex color code.
namestringyesThe name of the tag. It must have less than 50 characters.
project_idintegerThe 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.

NameTypeReqDescription
assigneesobjectAssignees for the task.
attachment_file_idsarrayIDs 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_refsarrayReferences 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_followersobjectFollowers of any task changes.
comment_followersobjectFollowers of any task comments.
complete_followersobjectFollowers of any task completions.
descriptionstringThe description of the task. Support for plain text and Markdown formatting.
due_datestringThe due date of the task. If omitted, falls back to the milestone due date when one is set.
estimated_minutesintegerThe estimated time to complete the task in minutes.
namestringyesThe name of the task.
notifybooleanWhether 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_idintegerThe ID of the parent task if creating a subtask.
predecessorsarrayTask dependencies that must be completed before this task can start.
prioritystringThe priority of the task.
progressintegerThe progress of the task, as a percentage (0-100). Only whole numbers are allowed.
stage_idintegerThe 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_datestringThe start date of the task.
tag_idsarrayA list of tag IDs to associate with the task.
tasklist_idintegeryesTasklist ID. Use twprojects-list_tasklists to find one.
workflow_idintegerThe 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.

NameTypeReqDescription
descriptionstringThe description of the tasklist.
milestone_idintegerThe ID of the milestone to associate with the tasklist.
namestringyesThe name of the tasklist.
project_idintegeryesThe ID of the project to create the tasklist in.

No output schema declared.

No examples provided.

twprojects-create_team ~158

Create team.

NameTypeReqDescription
company_idintegerThe ID of the company. This is used to create a team scoped for a specific company.
descriptionstringThe description of the team.
handlestringThe handle of the team. It is a unique identifier for the team. It must not have spaces or special characters.
namestringyesThe name of the team.
parent_team_idintegerThe ID of the parent team. This is used to create a hierarchy of teams.
project_idintegerThe ID of the project. This is used to create a team scoped for a specific project.
user_idsarrayUsers to add to the team.

No output schema declared.

No examples provided.

twprojects-create_timelog ~242

Create timelog entry against a project or task.

NameTypeReqDescription
billablebooleanIf true, the timelog is billable.
datestringyesThe date of the timelog.
descriptionstringA description of the timelog.
hoursintegeryesThe number of hours spent on the timelog. Must be a positive integer.
is_utcbooleanIf true, the time is in UTC.
minutesintegeryesMinutes spent on the timelog. Must be a positive integer less than 60; otherwise increment hours instead.
project_idintegerProject the timelog is logged against. Provide exactly one of project_id or task_id.
tag_idsarrayA list of tag IDs to associate with the timelog.
task_idintegerTask the timelog is logged against. Provide exactly one of project_id or task_id.
timestringyesThe time of the timelog in the format HH:MM:SS.
user_idintegerUser 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.

NameTypeReqDescription
billablebooleanIf true, the timer is billable.
descriptionstringA description of the timer.
project_idintegeryesThe ID of the project to associate the timer with.
runningbooleanIf true, the timer will start running immediately.
secondsintegerThe number of seconds to set the timer for.
stop_running_timersbooleanIf true, any other running timers will be stopped when this timer is created.
task_idintegerThe 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.

NameTypeReqDescription
namestringyesThe 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…
sizeintegeryesThe 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.

NameTypeReqDescription
adminbooleanIndicates whether the user is an administrator.
company_idintegerThe ID of the client/company to which the user belongs.
emailstringyesThe email address of the user.
first_namestringyesThe first name of the user.
last_namestringyesThe last name of the user.
titlestringThe job title of the user, such as 'Project Manager' or 'Senior Software Developer'.
typestringThe type of user, such as 'account', 'collaborator', or 'contact'.

No output schema declared.

No examples provided.

twprojects-create_workflow ~26

Create workflow.

NameTypeReqDescription
namestringyesThe name of the workflow.

No output schema declared.

No examples provided.

twprojects-create_workflow_stage ~47

Create workflow stage.

NameTypeReqDescription
namestringyesThe name of the workflow stage.
workflow_idintegeryesThe 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.

NameTypeReqDescription
idintegeryesThe ID of the file to download.
versionintegerThe version number to download. Omit for the latest version.
NameTypeReqDescription
mimeTypestringyes
namestringyes
sizeintegeryes

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.

NameTypeReqDescription
fieldsarrayThe attributes to return for each allocation, from the listed names.
idintegeryesThe ID of the allocation to get.
include_financial_detailsbooleanInclude 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…
NameTypeReqDescription
allocationobject
includedobject

No examples provided.

twprojects-get_comment ~46

Get comment.

NameTypeReqDescription
fieldsarrayThe attributes to return for each comment, from the listed names.
idintegeryesThe ID of the comment to get.
NameTypeReqDescription
commentsobject

No examples provided.

twprojects-get_company ~49

Get company (aka client).

NameTypeReqDescription
fieldsarrayThe attributes to return for each company, from the listed names.
idintegeryesThe ID of the company to get.
NameTypeReqDescription
companyobject
includedobject

No examples provided.

twprojects-get_custom_field ~30

Get custom field.

NameTypeReqDescription
idintegeryesThe ID of the custom field to get.
NameTypeReqDescription
customfieldobjectyes

No examples provided.

twprojects-get_custom_field_value ~85

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

NameTypeReqDescription
entitystringyesThe type of entity the custom field value is attached to.
entity_idintegeryesThe ID of the task, project or company the custom field value belongs to.
value_idintegeryesThe ID of the custom field value entry to retrieve.
NameTypeReqDescription
customfieldValueobjectyes

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.

NameTypeReqDescription
idintegeryesCustom item type ID to retrieve.
NameTypeReqDescription
customItemobjectyes
includedobjectyes

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.

NameTypeReqDescription
custom_item_idintegeryesCustom item type ID the field belongs to.
idintegeryesField ID.
NameTypeReqDescription
customItemFieldobjectyes

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.

NameTypeReqDescription
custom_item_idintegeryesCustom item type ID the record belongs to.
idintegeryesRecord ID.
NameTypeReqDescription
customItemRecordobjectyes

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.

NameTypeReqDescription
fieldsarrayThe attributes to return for each file, from the listed names.
idintegeryesThe ID of the file to get.
include_versionsbooleanWhether to include the file's whole version history under versions. Defaults to false.
versionintegerThe version number whose details, size and downloadURL are returned. Omit for the latest version.
NameTypeReqDescription
fileobject
includedobject

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.

NameTypeReqDescription
fieldsarrayThe attributes to return for each job role, from the listed names.
idintegeryesThe ID of the job role to get.
NameTypeReqDescription
includedobject
jobRoleobject

No examples provided.

Common questions

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 hosted endpoint (https://mcp.ai.teamwork.com).

Is the com.teamwork/mcp server safe to use?

com.teamwork/mcp scores 86 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.

Does the com.teamwork/mcp server require authentication?

Yes. com.teamwork/mcp asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

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.