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-list_projects ~794

List projects with structured filters (membership, progress state, health, category, tag, company, owner). For "my projects" pass user_ids with the ID from twprojects-get_user_me, or only_starred. For projects that have slipped pass project_statuses=["late"] — a project row carries no late flag, so this filter is the only way to ask.

NameTypeReqDescription
company_idsarrayFilter projects by the company that owns them.
count_onlybooleanIf true, return only {"count": N}: the exact number of matching projects, no rows — use for "how many". Ignores page, page_size, verbose, fields.
fieldsarrayThe attributes to return for each project, from the listed names.
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.
order_bystringThe field to sort the projects by. Omit to keep the ordering the API applies by default.
order_by_custom_field_idintegerThe custom field to sort the projects by. Required when order_by is "customfield", and ignored otherwise.
order_modestringThe direction to sort the results in.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
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.
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
countintegerExact number of matches across every page. Returned instead of the rows when count_only.
includedobject
metaobject
projectsnull|array
suggestionsarrayPresent only when search_term was supplied and the result list came back empty. Entities whose name matches the term, most relevant first, so the term can be recognised instead of treated as unknown.…

No examples provided.

twprojects-list_skills ~204

List skills.

NameTypeReqDescription
count_onlybooleanIf true, return only {"count": N}: the exact number of matching skills, no rows — use for "how many". Ignores page, page_size, verbose, fields.
fieldsarrayThe attributes to return for each skill, from the listed names.
order_modestringThe direction to sort the results in.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
search_termstringA search term to filter skills by name, or assigned users. The skill will be selected if each word of the term matches the name, or assigned user first or last name, not requiring that the word match…
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
countintegerExact number of matches across every page. Returned instead of the rows when count_only.
metaobject
skillsnull|array

No examples provided.

twprojects-list_tags ~230

List tags.

NameTypeReqDescription
count_onlybooleanIf true, return only {"count": N}: the exact number of matching tags, no rows — use for "how many". Ignores page, page_size, verbose, fields.
fieldsarrayThe attributes to return for each tag, from the listed names.
item_typestringFilter tags by item type.
order_bystringThe field to sort the tags by. Omit to keep the ordering the API applies by default.
order_modestringThe direction to sort the results in.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
project_idsarrayFilter by project.
search_termstringA search term to filter tags by name. Each word from the search term is used to match against the tag name.
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
countintegerExact number of matches across every page. Returned instead of the rows when count_only.
metaobject
tagsnull|array

No examples provided.

twprojects-list_tasklist_budgets ~218

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

NameTypeReqDescription
count_onlybooleanIf true, return only {"count": N}: the exact number of matching tasklist budgets, no rows — use for "how many". Ignores page, page_size, verbose, fields.
fieldsarrayThe attributes to return for each tasklist budget, from the listed names.
order_bystringThe field to sort the task list budgets by. Omit to keep the ordering the API applies by default.
order_modestringThe direction to sort the results in.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
project_budget_idintegeryesThe ID of the project budget to list tasklist budgets for.
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
countintegerExact number of matches across every page. Returned instead of the rows when count_only.
includedobject
metaobject
tasklistBudgetsnull|array

No examples provided.

twprojects-list_tasklists ~255

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

NameTypeReqDescription
count_onlybooleanIf true, return only {"count": N}: the exact number of matching tasklists, no rows — use for "how many". Ignores page, page_size, verbose, fields.
fieldsarrayThe attributes to return for each tasklist, from the listed names.
order_bystringThe field to sort the task lists by. Omit to keep the ordering the API applies by default.
order_modestringThe direction to sort the results in.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
project_idintegerThe ID of the project from which to retrieve tasklists. Omit to list tasklists across all projects.
search_termstringA search term to filter tasklists by name.
show_completedbooleanIf true, include completed tasklists; excluded by default.
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
countintegerExact number of matches across every page. Returned instead of the rows when count_only.
metaobject
suggestionsarrayPresent only when search_term was supplied and the result list came back empty. Entities whose name matches the term, most relevant first, so the term can be recognised instead of treated as unknown.…
tasklistsnull|array

No examples provided.

twprojects-list_tasks ~1,488

List tasks with structured filters (tasklist_id, project_id, or site-wide). For keyword search use search. Completed tasks and tasks in completed tasklists are excluded unless show_completed is true, so an empty result may mean the matching work is already done rather than missing. Ask for "late", "overdue", "due today", "started" or "upcoming" work through date_filter, and leave people out through exclude_assignee_user_ids, rather than reading rows and filtering them yourself.

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…
count_onlybooleanIf true, return only {"count": N}: the exact number of matching tasks, no rows — use for "how many". Ignores page, page_size, verbose, fields.
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…
fieldsarrayThe attributes to return for each task, from the listed names.
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.
order_bystringThe field to sort the tasks by. Omit to keep the ordering the API applies by default.
order_by_custom_field_idintegerThe custom field to sort the tasks by. Required when order_by is "customfield", and ignored otherwise.
order_modestringThe direction to sort the results in.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
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…
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
countintegerExact number of matches across every page. Returned instead of the rows when count_only.
includedobject
metaobject
suggestionsarrayPresent only when search_term was supplied and the result list came back empty. Entities whose name matches the term, most relevant first, so the term can be recognised instead of treated as unknown.…
tasksnull|array

No examples provided.

twprojects-list_teams ~217

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

NameTypeReqDescription
company_idintegerThe ID of the company from which to retrieve teams. Omit to list teams across all companies.
fieldsarrayThe attributes to return for each team, from the listed names.
order_bystringThe field to sort the teams by. Omit to keep the ordering the API applies by default.
order_modestringThe direction to sort the results in.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
project_idintegerThe ID of the project from which to retrieve teams. Omit to list teams across all projects.
search_termstringA search term to filter teams by name or handle.
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
teamsnull|array

No examples provided.

twprojects-list_timelogs ~636

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

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…
count_onlybooleanIf true, return only {"count": N}: the exact number of matching timelogs, no rows — use for "how many". Ignores page, page_size, verbose, fields.
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…
fieldsarrayThe attributes to return for each timelog, from the listed names.
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.
order_bystringThe field to sort the timelogs by. Omit to keep the ordering the API applies by default.
order_modestringThe direction to sort the results in.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
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.
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
countintegerExact number of matches across every page. Returned instead of the rows when count_only.
metaobject
timelogsnull|array

No examples provided.

twprojects-list_timers ~233

List timers.

NameTypeReqDescription
count_onlybooleanIf true, return only {"count": N}: the exact number of matching timers, no rows — use for "how many". Ignores page, page_size, verbose, fields.
fieldsarrayThe attributes to return for each timer, from the listed names.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
project_idintegerThe ID of the project to filter timers by. Only timers associated with this project will be returned.
running_timers_onlybooleanIf true, only running timers are returned.
task_idintegerThe ID of the task to filter timers by. Only timers associated with this task will be returned.
user_idintegerThe ID of the user to filter timers by. Only timers associated with this user will be returned.
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
countintegerExact number of matches across every page. Returned instead of the rows when count_only.
metaobject
timersnull|array

No examples provided.

twprojects-list_users ~298

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

NameTypeReqDescription
count_onlybooleanIf true, return only {"count": N}: the exact number of matching users, no rows — use for "how many". Ignores page, page_size, verbose, fields.
fieldsarrayThe attributes to return for each user, from the listed names.
order_bystringThe field to sort the users by. Omit to keep the ordering the API applies by default.
order_modestringThe direction to sort the results in.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
project_idintegerThe ID of the project from which to retrieve users. Omit to list users across all projects.
search_termstringA search term to filter users by first or last names, or e-mail. The user will be selected if each word of the term matches the first or last name, or e-mail, not requiring that the word matches are…
typestringType of user to filter by. The available options are account, collaborator or contact.
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
countintegerExact number of matches across every page. Returned instead of the rows when count_only.
metaobject
peoplenull|array

No examples provided.

twprojects-list_workflow_stages ~199

List workflow stages.

NameTypeReqDescription
count_onlybooleanIf true, return only {"count": N}: the exact number of matching workflow stages, no rows — use for "how many". Ignores page, page_size, verbose, fields.
fieldsarrayThe attributes to return for each workflow stage, from the listed names.
order_bystringThe field to sort the workflow stages by. Omit to keep the ordering the API applies by default.
order_modestringThe direction to sort the results in.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
verbosebooleanIf false, returns id + name only — useful when scanning many results.
workflow_idintegeryesThe ID of the workflow whose stages to list.
NameTypeReqDescription
countintegerExact number of matches across every page. Returned instead of the rows when count_only.
metaobject
stagesnull|array

No examples provided.

twprojects-list_workflows ~150

List workflows.

NameTypeReqDescription
count_onlybooleanIf true, return only {"count": N}: the exact number of matching workflows, no rows — use for "how many". Ignores page, page_size, verbose, fields.
fieldsarrayThe attributes to return for each workflow, from the listed names.
pageintegerPage number for pagination of results (1-based).
page_sizeintegerNumber of results per page for pagination (1-500).
search_termstringA search term to filter workflows by name.
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
countintegerExact number of matches across every page. Returned instead of the rows when count_only.
metaobject
workflowsnull|array

No examples provided.

twprojects-move_task_to_workflow_stage ~110

Move one or more tasks to a workflow stage.

NameTypeReqDescription
stage_idintegeryesThe ID of the workflow stage to move the tasks to.
task_idsarrayThe IDs of the tasks to move. At least one is needed; each is appended to the end of the stage in the order given. The workflow must be attached to the project the task belongs to.
workflow_idintegeryesThe ID of the workflow that contains the target stage.

No output schema declared.

No examples provided.

twprojects-move_tasks ~113

Move tasks and all their subtasks to another tasklist, preserving the parent/child structure. Subtasks move with their parent automatically, so only the topmost task of each subtree needs to be listed. A task whose parent is not part of the move is detached from it, becoming a top-level task in the destination.

NameTypeReqDescription
task_idsarrayyesThe IDs of the tasks to move. Subtasks are moved automatically.
tasklist_idintegeryesThe ID of the destination tasklist.

No output schema declared.

No examples provided.

twprojects-pause_timer ~42

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

NameTypeReqDescription
idintegeryesThe ID of the timer to pause.

No output schema declared.

No examples provided.

twprojects-restore_allocation ~55

Restore a deleted allocation. Find the ID first with twprojects-list_allocations and show_deleted set, since a deleted allocation is otherwise not returned.

NameTypeReqDescription
idintegeryesThe ID of the allocation to restore.

No output schema declared.

No examples provided.

twprojects-resume_timer ~33

Resume a paused timer back to running.

NameTypeReqDescription
idintegeryesThe ID of the timer to resume.

No output schema declared.

No examples provided.

twprojects-search ~415

Cross-entity keyword search across projects, tasks, messages, comments, users and more; restrict which entity types are searched with types. Long content fields in the sideloaded records are truncated at 500 characters and marked where they are cut; the marker names the tool that returns the full record. Completed items are excluded unless include_completed_items is true, so an empty result may mean the matching work is already done rather than missing.

NameTypeReqDescription
cursorstringCursor for pagination of results.
extended_searchbooleanWhether to perform an extended search, which includes items updated more than 5 years ago.
include_completed_itemsbooleanWhether to include completed items in the search results. Excluded by default.
include_highlightsbooleanWhether to return why each result matched, as fragments under its meta.highlights. Unavailable on an extended search.
limitintegerNumber of results per page for pagination.
project_idintegerThe ID of the project to limit the search to.
search_termstringA search term to to look for items.
sideloadarrayWhich of the matched records are expanded into full records under the response's included section. It never changes which records are found — use types for that. Defaults to every type listed; a hit…
typesarrayEntity types to search. Only records of these types are found. Omit it to search every type.
updated_afterOnly include items 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…
verbosebooleanIf false, returns id + name only — useful when scanning many results.
NameTypeReqDescription
includedobject
metaobject
searchnull|array

No examples provided.

twprojects-summarize_timelogs ~486

Complete time totals for a date window, grouped by user, project or task (rows in groups) or by day, week or month (rows in periods). One call returns every row, in exact minutes and hours to 2 decimals. Prefer it over twprojects-list_timelogs for any total, sum or breakdown; list_timelogs is for individual entries. Minutes are authoritative, unbilledBillable = billable − billed, and rows sum to totals. One dimension per call: for hours per user per week, call once per user with user_ids. Task rows omit project-level and subtask time, so never add totals across group_by values. Period rows cover every period in order, zeros included, first and last clipped to the window; weeks follow the caller's start-of-week setting, so buckets can differ per user, and a weekend-only week with no time is dropped.

NameTypeReqDescription
company_idsarrayFilter to timelogs on projects of these companies/clients.
end_datestringyesInclusive end of the report window (YYYY-MM-DD).
group_bystringDimension to group by. Defaults to user. user, project and task fill groups; day, week and month fill periods. Filter a task grouping on a busy account.
include_archived_projectsbooleanInclude time from archived projects. Defaults to false.
order_bystringThe field to sort the summary rows by. Omit to keep the ordering the API applies by default. Rejected for day, week and month: period rows are chronological.
order_modestringThe direction to sort the results in. Rejected for day, week and month: period rows are chronological.
project_idsarrayFilter to timelogs on these projects.
start_datestringyesInclusive start of the report window (YYYY-MM-DD).
task_idsarrayFilter to timelogs on these tasks.
tasklist_idsarrayFilter to timelogs on these task lists.
team_idsarrayFilter to timelogs logged by members of these teams.
timelog_tag_idsarrayFilter to timelogs carrying these tags.
user_idsarrayFilter to timelogs logged for these users.
NameTypeReqDescription
groupsnull|arrayyesEntity rows; empty for a day, week or month grouping.
periodsnull|arrayyesPeriod rows, chronological; empty for an entity grouping.
scopeobjectyes
totalsobjectyes

No examples provided.

twprojects-unlink_task_from_allocation ~83

Remove the link between one task and an allocation. Only the association is removed: both the task and the allocation are left in place. This removes a single link and leaves the allocation's other links alone.

NameTypeReqDescription
allocation_idintegeryesThe ID of the allocation.
task_idintegeryesThe ID of the task to unlink.

No output schema declared.

No examples provided.

twprojects-update_allocation ~578

Update an allocation. Changing end_date ADDS or REMOVES committed time rather than redistributing it, because the per-day rate is what is held constant.

NameTypeReqDescription
assigned_user_idintegerThe 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…
colorstringThe allocation's colour as six hexadecimal digits, with or without a leading '#'.
descriptionstringAn optional description of the allocation, at most 255 characters.
end_datestringThe 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,…
idintegeryesThe ID of the allocation to update.
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_idintegerThe ID of the project to commit the time to.
seconds_per_dayintegerThe 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_datestringThe first day of the allocation (format: YYYY-MM-DD).
titlestringThe name of the allocation, at most 100 characters.

No output schema declared.

No examples provided.

twprojects-update_comment ~235

Update comment.

NameTypeReqDescription
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'.
idintegeryesThe ID of the comment to update.
notifyWho to notify of the comment change. 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 i…
notify_current_userbooleanWhether the current user should be notified about the comment change.

No output schema declared.

No examples provided.

twprojects-update_company ~288

Update 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.
idintegeryesThe ID of the company to update.
industry_idintegerThe ID of the industry the company belongs to.
manager_idintegerThe ID of the user who manages the company.
namestringThe 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-update_custom_field ~220

Update custom field.

NameTypeReqDescription
currency_codestringThe ISO currency code for 'currency' or 'financial' type custom fields.
descriptionstringAn optional description for the custom field.
formulastringThe formula expression for 'formula' type custom fields.
idintegeryesThe ID of the custom field to update.
namestringThe 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|.…
requiredbooleanWhether the custom field must have a value when set on an entity.
unitstringThe unit associated with the custom field, when applicable.

No output schema declared.

No examples provided.

twprojects-update_custom_field_value ~184

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

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 belongs 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).
value_idintegeryesThe ID of the custom field value entry to update.

No output schema declared.

No examples provided.

twprojects-update_custom_item ~191

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

NameTypeReqDescription
descriptionstringNew description for the custom item type.
display_namestringNew display name for the custom item type.
idintegeryesCustom item type ID to update.
label_pluralstringNew plural label.
label_singularstringNew singular label.

No output schema declared.

No examples provided.

twprojects-update_custom_item_field ~192

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

NameTypeReqDescription
custom_item_idintegeryesCustom item type ID the field belongs to.
definitionobjectReplacement type-specific configuration as a JSON object.
display_namestringNew display name.
idintegeryesField ID to update.
position_after_idintegerMove this field after the given field ID.

No output schema declared.

No examples provided.

twprojects-update_custom_item_record ~370

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

NameTypeReqDescription
clear_sectionbooleanSet to true to explicitly clear the record's section. Use this instead of section_id when you want null semantics.
custom_item_idintegeryesCustom item type ID the record belongs to.
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…
idintegeryesRecord ID to update.
namestringNew display name for the record.
position_after_idintegerMove the record after the given record ID.
section_idintegerNew section ID, or null to remove the record from any section.

No output schema declared.

No examples provided.

twprojects-update_jobrole ~43

Update job role.

NameTypeReqDescription
idintegeryesThe ID of the job role to update.
namestringThe name of the job role.

No output schema declared.

No examples provided.

twprojects-update_link ~271

Update link.

NameTypeReqDescription
codestringThe 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.
idintegeryesThe ID of the link to update.
notifyWho to notify of the link update. 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 link.
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-update_message ~207

Update message.

NameTypeReqDescription
bodystringThe body of the message.
idintegeryesThe ID of the message to update.
notifyWho to notify of the message update. 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…
notify_current_userbooleanWhether the current user should be notified about the new message.
titlestringThe title of the message.

No output schema declared.

No examples provided.

twprojects-update_message_reply ~200

Update message reply.

NameTypeReqDescription
bodystringThe body of the message reply.
idintegeryesThe ID of the message reply to update.
notifyWho to notify of the reply update. 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 on…
notify_current_userbooleanWhether the current user should be notified about the new messageReply.

No output schema declared.

No examples provided.

twprojects-update_milestone ~132

Update milestone.

NameTypeReqDescription
assigneesobjectAssignees for the milestone.
descriptionstringA description of the milestone.
due_datestringThe due date of the milestone (format: YYYYMMDD). Used for related tasks without their own due date.
idintegeryesThe ID of the milestone to update.
namestringThe name of the milestone.
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-update_notebook ~94

Update notebook.

NameTypeReqDescription
contentsstringThe contents of the notebook.
descriptionstringA description of the notebook.
idintegeryesThe ID of the notebook to update.
namestringThe name of the notebook.
tag_idsarrayA list of tag IDs to associate with the notebook.
typestringThe type of the notebook.

No output schema declared.

No examples provided.

twprojects-update_project ~171

Update 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).
idintegeryesThe ID of the project to update.
namestringThe name of the project.
owned_idintegerThe ID of the user who owns the project.
start_atstringStart date of the project (format: YYYYMMDD).
statusstringThe status of the project.
tag_idsarrayA list of tag IDs to associate with the project.

No output schema declared.

No examples provided.

twprojects-update_project_category ~91

Update project category.

NameTypeReqDescription
colorstringThe color of the project category in hex format (e.g., #FF5733).
idintegeryesThe ID of the project category to update.
namestringThe 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-update_skill ~54

Update skill.

NameTypeReqDescription
idintegeryesThe ID of the skill to update.
namestringThe name of the skill.
user_idsarrayThe user IDs associated with the skill.

No output schema declared.

No examples provided.

twprojects-update_tag ~95

Update tag.

NameTypeReqDescription
colorstringThe color of the tag. It must be a valid hex color code.
idintegeryesThe ID of the tag to update.
namestringThe 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-update_task ~637

Update task.

NameTypeReqDescription
assigneesobjectAssignees for the task. To remove all assignees, use clear_assignees instead.
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.
clear_assigneesbooleanIf true, removes all assignees from the task, leaving it unassigned. Cannot be combined with a non-empty assignees value.
clear_parent_taskbooleanIf true, detaches the task from its parent, promoting it to a top-level task. Cannot be combined with parent_task_id.
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.
idintegeryesThe ID of the task to update.
namestringThe name/title 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, making this task a subtask. A subtask must live in the same tasklist as its parent, so moving one with tasklist_id fails until the parent has moved or the link is cleared.…
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.
start_datestringThe start date of the task.
tag_idsarrayA list of tag IDs to associate with the task.
tasklist_idintegerThe ID of the tasklist. Moving the task carries its subtasks along and detaches it from any parent staying behind. Use twprojects-move_tasks to move several tasks at once.

No output schema declared.

No examples provided.

twprojects-update_tasklist ~75

Update tasklist.

NameTypeReqDescription
descriptionstringThe description of the tasklist.
idintegeryesThe ID of the tasklist to update.
milestone_idintegerThe ID of the milestone to associate with the tasklist.
namestringThe name of the tasklist.

No output schema declared.

No examples provided.

twprojects-update_team ~183

Update 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.
idintegeryesThe ID of the team to update.
namestringThe name of the team.
parent_team_idintegerThe ID of the parent team, which places this team in a hierarchy. Pass 0 to move the team back to the top level.
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.

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.