Teamwork
OfficialThis server integrates Teamwork.com with AI assistants (via MCP), enabling project management, help desk operations, and chat โ with optional read-only mode and secure OAuth2/bearer token authentication.
Project Management
Tasks: Get, list, create, update, complete, move to workflow stages; filter by project, tasklist, assignee, tags, dates, etc.
Tasklists: Get, list, create
Projects: Get, list, create, clone, add members; manage categories and templates
Milestones: Create with assignees, due dates, and linked tasklists
Comments: Get, list, create on tasks, milestones, notebooks, files, or links
Timelogs & Timers: Create, update, list timelogs; create, complete, and pause timers
Messages: Get, create, and reply to messages
Notebooks: Create with Markdown/HTML content
Links: Get and create links
Tags: Create tags for projects and tasks
Users & Teams: List/create users, teams, job roles, and skills
Companies: Get and create companies (clients)
Workflows: Create workflows and stages; move tasks between stages
Custom Fields: Create, get, and set values on tasks, projects, and companies
Custom Items: Create and manage user-defined entity types (e.g. Contracts, Leads) with custom fields and records
Activities: List recent activity events site-wide or per project
Search: Cross-entity keyword search across projects, tasks, files, messages, and more
Help Desk
Tickets: Get, create, update, search, and reply
Customers & Companies: Get, list, create, update
Inboxes: Get and list
Priorities, Statuses, Tags, Ticket Types: Get, list, create, update
Agents: Get and list support agents
Files: Upload attachments
Help Docs: Get, search, create, update articles
Chat
Conversations: Get and list (rooms or DMs)
Messages: List and send messages in conversations
Direct Messages: Get/create 1:1 DMs; send direct messages to users
People: List chat users
Current User: Get authenticated user identity and unread counts
Provides integration examples for connecting the Teamwork.com MCP server with LangChain applications in both Node.js and Python
Used for SSL certificate authentication when connecting to Teamwork.com via OAuth2
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Teamworkshow my open tasks for project 'Q4 Launch'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Teamwork MCP Server
Model Context Protocol server for Teamwork.com integration with Large Language Models
๐ Are you a Teamwork.com user wanting to connect AI tools to your Teamwork.com site right now? Jump straight to the Usage Guide for tokens, enabling MCP, and client configuration examples.
๐ Overview
This MCP (Model Context Protocol) server enables seamless integration between Large Language Models and Teamwork.com. It provides a standardized interface for LLMs to interact with Teamwork.com projects, allowing AI agents to perform various project management operations.
๐ค What is MCP?
Model Context Protocol (MCP) is an open protocol that standardizes how applications provide context to LLMs. This server describes all the actions available in Teamwork.com (tools) in a way that LLMs can understand and execute through AI agents.
Related MCP server: Teamwork MCP
โจ Features
Multiple Transport Modes: HTTP and STDIO interfaces for different deployment scenarios
Secure Authentication: Bearer token and OAuth2 integration with Teamwork.com
Tool Framework: Extensible toolset architecture for adding new capabilities
Production Ready: Comprehensive logging, monitoring, and observability
Read-Only Mode: Optional restriction to read-only operations for safety
See the auto-generated Tool Reference for every create/read/update operation exposed across Projects, Desk, Spaces, and Chat, or browse the same catalogue with per-tool descriptions and a search filter at teamwork.github.io/mcp.
๐ Available Servers
This project provides three different ways to interact with the Teamwork.com MCP server:
๐ก HTTP Server
Production-ready HTTP server for cloud deployments and multi-client support.
๐ Full HTTP Server Documentation
Quick start:
TW_MCP_SERVER_ADDRESS=:8080 go run cmd/mcp-http/main.go๐ฌ STDIO Server
Direct STDIO interface for desktop applications and development environments.
๐ Full STDIO Server Documentation
Quick start:
TW_MCP_BEARER_TOKEN=your-token go run cmd/mcp-stdio/main.go๐ ๏ธ HTTP CLI
Command-line tool for testing and debugging MCP server functionality.
๐ Full HTTP CLI Documentation
Quick start:
go run cmd/mcp-http-cli/main.go -mcp-url=https://mcp.example.com list-tools๐ Prerequisites
Go 1.27 or later
Valid Teamwork.com API credentials (bearer token or OAuth2 setup)
๐งช Development & Testing
Running Tests
# Run all tests
go test ./...
# Run specific package tests
go test ./internal/twprojects/MCP Inspector
For debugging purposes, use the MCP Inspector tool:
NODE_EXTRA_CA_CERTS=letsencrypt-stg-root-x1.pem npx @modelcontextprotocol/inspector node build/index.jsNote: The NODE_EXTRA_CA_CERTS environment variable is required when
using OAuth2 authentication with the Let's Encrypt certification authority.
Download the certificate here.
๐๏ธ Architecture
โโโ cmd/
โ โโโ mcp-http/ # HTTP server implementation
โ โโโ mcp-stdio/ # STDIO server implementation
โ โโโ mcp-http-cli/ # CLI tool for testing via HTTP
โ โโโ mcp-test/ # Walks tool handlers against a real site
โ โโโ mcp-tokens/ # Token-cost report for the tool surface
โ โโโ docs-gen/ # Generates the tool reference (Markdown + GitHub Pages)
โโโ pkg/ # Importable by other MCP servers built on this one
โ โโโ auth/ # Authentication helpers (bearer & OAuth2 token handling)
โ โโโ cli/ # -toolsets flag parsing
โ โโโ config/ # Configuration management (env, flags), MCP server setup
โ โโโ helpers/ # Shared utility functions (errors, link helpers, tool parsing)
โ โโโ request/ # HTTP request primitives / Teamwork API wiring
โ โโโ testutil/ # Product-neutral test mocks
โ โโโ toolsets/ # Tool framework and registration logic
โ โโโ twctx/ # Per-request values derived from the bearer token
โโโ internal/ # This server's own tools, not importable elsewhere
โ โโโ twprojects/ # Teamwork project/domain tools (tasks, tags, timers, etc.)
โ โโโ twdesk/ # Teamwork Desk tools (tickets, customers, etc.)
โ โโโ twspaces/ # Teamwork Spaces tools (spaces, pages, etc.)
โ โโโ twchat/ # Teamwork Chat tools (conversations, messages)
โโโ examples/ # Usage & integration examples (LangChain Node/Python)
โโโ docs/usage/ # End-user setup & connection guide
โโโ Makefile # Common developer tasks
โโโ Dockerfile # Container build configuration
โโโ CODE_OF_CONDUCT.md # Community guidelines
โโโ CONTRIBUTING.md # Contribution guide
โโโ SECURITY.md # Security policyAvailable Tools
213 toolstwchat-get_conversationARead-onlyInspect
Get a single Teamwork Chat conversation by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| conversation_id | Yes | The ID of the conversation to retrieve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the 'Teamwork Chat conversation' scope, which is context but not new behavioral disclosure beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the action and resource. Every word earns its place, with no redundant or vague phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple get-by-ID tool with one parameter, full schema coverage, and clear annotations. The description is sufficient for an agent to understand what the tool does and how to invoke it correctly, given the low complexity and strong structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description already explains conversation_id as 'The ID of the conversation to retrieve.' The tool description's 'by ID' adds no additional meaning beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'Teamwork Chat conversation' with a specific scope ('single', 'by ID'). This distinguishes it from sibling tools like twchat-list_conversations, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'single ... by ID' clearly implies when to use this tool (when you have a known conversation ID) and differentiates from listing all conversations. However, it does not explicitly name alternative tools or provide exclusions, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twchat-get_current_userARead-onlyInspect
Get the current authenticated Teamwork Chat user, including identity, counts (unread conversations/messages, mentions), and settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the description need not restate safety. It adds value by specifying the output categories (identity, unread counts/mentions, settings), which gives the agent a better sense of what to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words. It puts the verb and resource first, then enumerates the key output categories in a compact list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values, and it does so by listing identity, counts, and settings. It could have mentioned pagination or exact formatting, but for a simple read-only profile endpoint, the information is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty (100% covered), so there are no parameter semantics to explain. The description correctly focuses on the return payload, which is the only thing the agent needs to understand for invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and names the exact resource ('current authenticated Teamwork Chat user'), and it lists returned content (identity, counts, settings). This distinguishes it from sibling chat tools like list_conversations, list_messages, and list_people, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'current authenticated' implies the tool is for accessing the caller's own chat profile, which provides clear context for when to use it. However, it does not explicitly name alternatives or state when not to use it, so it falls slightly short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twchat-get_or_create_dmAInspect
Get the 1:1 direct-message conversation with a person, creating it if it does not exist yet. Returns the conversation (use its id with send_message). Use list_people to find user_id. The authenticated user cannot be the target: naming your own user id is rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes | The ID of the person to get the direct-message conversation with. Must be somebody other than the authenticated user; see get_current_user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses the creation side effect, the returned conversation's downstream use, and the self-target rejection edge case. These are meaningful behavioral details that help an agent predict outcomes and avoid errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core behavior, followed by return usage, parameter lookup, and the key exclusion. Every sentence is informative with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers purpose, side effects, return value usage, parameter sourcing, and a critical rejection case. The agent has enough information to call the tool successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents user_id and its constraint at 100% coverage, so the baseline is 3. The description adds extra value by telling the agent how to resolve the parameter via list_people and explicitly warning that the authenticated user's own id is rejected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: get or create a 1:1 direct-message conversation with a person. It distinguishes itself from siblings like send_message and get_conversation by emphasizing both the retrieval and creation behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear contextual guidance by telling the agent to use list_people to find user_id and to use the returned conversation id with send_message. It does not explicitly name when to prefer this over twchat-get_conversation, but the create-if-missing semantics make the choice reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twchat-list_conversationsARead-onlyInspect
List Teamwork Chat conversations the current user is a member of.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Sort order for the returned conversations. | |
| type | No | Filter by conversation type: "rooms" for group/channel conversations, "pair" for 1:1 direct messages. | |
| status | No | Filter by conversation status. | |
| page_limit | No | Number of conversations to return (max 10). | |
| page_offset | No | The index position to start retrieving results from (not a page number). | |
| search_term | No | A search term to filter conversations by title. | |
| include_message_data | No | Include the latest message in each conversation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds the membership constraint (only conversations the current user belongs to), which is useful behavioral context. It does not disclose pagination limits (page_limit max 10), default sort, or return shape, but with annotations carrying the safety burden, this level is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 12-word sentence with zero waste. The verb and resource are front-loaded, and the scope qualifier packs meaningful discrimination into the shortest possible form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with 100% schema coverage and safety annotations, the description covers the essential purpose and scope. The only gaps are unpaginated return-shape details (no output schema exists) and the lack of sibling routing, neither of which is critical for a straightforward list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all 7 parameters (sort, type, status, page_limit, page_offset, search_term, include_message_data) have descriptive schema text including full enum values. The description adds no parameter-level meaning, which is fine because the schema fully documents them โ baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a specific resource ('Teamwork Chat conversations') with a clear scope qualifier ('the current user is a member of'). This scope distinguishes it from sibling tools like twchat-get_conversation (single conversation) and twchat-list_messages (messages within a conversation), so an agent can identify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The membership scope implies the usage context โ this tool returns the current user's own conversations rather than all conversations in the workspace. However, it provides no explicit guidance about when to prefer it over siblings like twchat-get_conversation or twchat-list_messages, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twchat-list_messagesARead-onlyInspect
List messages within a Teamwork Chat conversation. Requires conversation_id.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| page_size | No | Number of messages per page (1-200). | |
| search_term | No | A search term to filter messages by text content. | |
| created_after | No | Return messages created after this time. 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. | |
| created_before | No | Return messages created before this time. 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. | |
| conversation_id | Yes | The ID of the conversation to read messages from. | |
| after_message_id | No | Return messages newer than this message ID (cursor). | |
| before_message_id | No | Return messages older than this message ID (cursor). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is covered. The description adds no behavioral detail beyond the listing action, such as pagination behavior, default ordering, or how cursor parameters affect results. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core purpose and the essential requirement. There is no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema and annotations cover parameters and safety, but the description lacks guidance on when to choose this tool over similar list tools, how pagination works, or what the returned message objects contain. It is functional for invocation with the required ID but leaves several contextual gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all parameters are individually documented, including detailed examples for created_after and created_before. The description only reiterates that conversation_id is required, which the schema already states, so it adds minimal semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List messages within a Teamwork Chat conversation.' It clearly identifies the tool's scope and the required conversation_id, distinguishing it from conversation-level tools like twchat-get_conversation and twchat-list_conversations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for listing messages when you already have a conversation_id, but it does not explicitly state when to use this tool versus alternatives, nor does it mention how to obtain a conversation_id using a sibling tool. Usage context is present but not fully developed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twchat-list_peopleARead-onlyInspect
List people in the Teamwork Chat installation. Useful for resolving names to user IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| page_limit | No | Number of people to return. | |
| page_offset | No | The index position to start retrieving results from (not a page number). | |
| search_term | No | A search term to filter people by name or email. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe read operation (readOnlyHint=true, destructiveHint=false). The description adds the scope of the operation ('Teamwork Chat installation') but does not describe pagination behavior, whether inactive people are included, or result sizing, so additional behavioral context is limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The action is front-loaded and the second sentence justifies the tool's purpose without repeating the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with three optional parameters and no output schema, the description is nearly complete: it explains what is listed, where, and why. It could mention that the result is a list of person objects with IDs, but the given use case already implies the relevant output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already fully documented in the input schema. The description's use case hints at search_term for name/email lookup but adds no parameter-level information beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: listing people in the Teamwork Chat installation, and adds a concrete use case (resolving names to user IDs). It is distinguishable from sibling tools like twchat-get_current_user and user-list tools in other domains, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Useful for resolving names to user IDs' gives a clear reason to choose this tool when an agent needs to map names to IDs. It does not provide explicit when-not-to-use guidance or name alternatives, so it misses the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twchat-send_dmAInspect
Send a direct message to a person, resolving (or creating) the 1:1 conversation automatically. Requires user_id and body. Use list_people to find user_id. The authenticated user cannot be the recipient: naming your own user id is rejected and nothing is sent, so report a summary in the conversation instead of messaging yourself in chat.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The message text. Supports Markdown. | |
| user_id | Yes | The ID of the person to send the direct message to. Must be somebody other than the authenticated user; see get_current_user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral details beyond the annotations: it auto-creates/resolves the conversation and explicitly says a self-recipient request is rejected with nothing sent. Since annotations already signal non-readonly and non-idempotent behavior, the extra context covers the most important operational nuance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed sentences cover the action, required parameters, lookup hint, and a critical failure case without wasted words. The most important operational detail (auto-resolving the conversation) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, complete schema, and existing annotations, the description covers the key operational behavior and edge case. It does not describe the success return value, but the absence of an output schema is partly mitigated by the straightforward send action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are well documented in the schema. The description adds a cross-tool discovery hint ('Use list_people to find user_id') but otherwise mostly restates the required parameters, so it does not substantially elevate meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Send a direct message to a person') and a distinct behavioral feature ('resolving (or creating) the 1:1 conversation automatically'). This clearly differentiates it from sibling tools like twchat-send_message by focusing on person-to-person DM and automatic conversation resolution.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful guidance such as 'Use list_people to find user_id' and explains the self-recipient rejection case. However, it does not explicitly compare this tool to alternatives like twchat-send_message or state when one should be preferred over the other, so the usage context is implied rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twchat-send_messageBInspect
Send a message to a Teamwork Chat conversation. Requires conversation_id and body.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The message text. Supports Markdown. | |
| conversation_id | Yes | The ID of the conversation to post the message to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation (readOnlyHint=false), and the description adds that it requires mandatory parameters and performs a send action. However, it does not disclose any behavioral details such as potential failures, rate limits, or side effects. The description adds minimal context beyond the annotations, so a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently states the tool's purpose and required parameters. Every word earns its place, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (two well-documented parameters, no output schema, minimal annotations), the description covers the core action and inputs. However, it lacks explicit differentiation from the DM tool and fails to mention any post-send behavior or error conditions, which leaves it slightly incomplete for a fully contextual understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both parameters (conversation_id as integer, body as Markdown string). The description only restates that they are required, adding no semantic value beyond the schema. With 100% schema coverage, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Send a message') and the target resource ('Teamwork Chat conversation'), and it explicitly mentions the required parameters. However, it does not explicitly distinguish this tool from the sibling `twchat-send_dm`, so it gets a 4 instead of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as `twchat-send_dm` or when not to use it. There is no explicit context or exclusion, so the agent receives no usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-create_companyCInspect
Create Desk company.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | The kind of the company. | |
| name | Yes | The name of the company. | |
| note | No | The note for the company. | |
| details | No | The details of the company. | |
| domains | No | The domains for the company. | |
| website | No | The website of the company. | |
| industry | No | The industry of the company. | |
| permission | No | The permission level of the company. | |
| description | No | The description of the company. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral disclosure beyond the annotations; it simply repeats the creation action. It does not mention auth requirements, duplicate handling, side effects, or return behavior. The annotations already indicate a non-read-only, non-destructive, non-idempotent operation, so there is no contradiction, but the description itself provides little transparency value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and contains no redundant wording. However, it is so minimal that it approaches under-specification rather than being an appropriately sized definition; there is no contextual structure or detail beyond the single creation statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema is rich and fully documented, and the annotations clarify the basic safety profile, so the description plus schema is minimally sufficient for a basic creation call. However, there is no output schema, no mention of expected return values, and no usage differentiation from the large set of sibling tools, leaving meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema adequately documents all parameters including enums and required fields. The tool description contributes no parameter-level semantics, so the baseline of 3 applies because the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the action clearly: create a Desk company. The word 'Desk' distinguishes it from twprojects-create_company, and the verb 'create' separates it from twdesk-update_company. It is terse and does not explain what a company represents, but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. The description does not mention that it is for new companies, that twdesk-update_company is for existing companies, or that twprojects-create_company is a different product. An agent must infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-create_customerCInspect
Create customer.
| Name | Required | Description | Default |
|---|---|---|---|
| No | The email of the customer. | ||
| notes | No | The notes of the customer. | |
| phone | No | The phone number of the customer. | |
| mobile | No | The mobile number of the customer. | |
| address | No | The address of the customer. | |
| jobTitle | No | The job title of the customer. | |
| lastName | No | The last name of the customer. | |
| extraData | No | The extra data of the customer. | |
| firstName | No | The first name of the customer. | |
| facebookURL | No | The Facebook URL of the customer. | |
| linkedinURL | No | The LinkedIn URL of the customer. | |
| organization | No | The organization of the customer. | |
| twitterHandle | No | The Twitter handle of the customer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-idempotent operation, and the description merely says 'Create customer,' adding no behavioral context beyond that. It does not mention what happens on duplicate data, whether any fields are effectively required, or what response to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and contains no verbose filler, but it is under-specified rather than efficiently informative. A single sentence that essentially restates the tool name does not earn high marks for structure, though it is at least clear and direct.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with 13 optional-looking parameters and no output schema, the description provides almost no context an agent needs to call it correctly. It does not explain which fields should be supplied, whether a name or email is expected, or what a successful creation returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 13 parameters have schema descriptions such as 'The email of the customer' and 'The phone number of the customer,' so the schema already provides full parameter coverage. The tool description adds no parameter-specific meaning, which keeps this at the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Create customer.' This unambiguously identifies the operation as creating a customer record. It does not, however, add any distinguishing detail beyond the tool name itself, such as what a customer is or which sibling it differs from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like twdesk-update_customer, twdesk-get_customer, twdesk-list_customers, or twdesk-create_company. There is no mention of prerequisites, context, or cases where another tool should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-create_fileAInspect
Upload file. Attach the returned ID to tickets or messages.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | The content of the file as a base64-encoded string. | |
| name | Yes | The name of the file. | |
| mimeType | Yes | The MIME type of the file. | |
| disposition | No | The disposition of the file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read, non-idempotent, non-destructive operation; the description adds that the tool returns an ID and that the file is intended for attachment to tickets or messages. It does not surface additional constraints like upload size limits or authentication requirements, but the annotations lower the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and immediately followed by the key downstream purpose. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple upload tool with a full input schema and no output schema, the description covers the essential missing piece: the call returns an ID to use for attachment. It is slightly terse about the exact response shape, but enough for an agent to invoke and use the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented with meaningful descriptions. The tool description adds no parameter-specific detail beyond that coverage, so it stays at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific action 'Upload file' and the resource type, then adds the desk-specific purpose ('Attach the returned ID to tickets or messages'). This distinguishes it from sibling twprojects-create_file and other project-upload tools even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Attach the returned ID to tickets or messages' gives clear context for when this tool is appropriate. It does not explicitly list exclusions or alternative upload tools, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-create_helpdoc_articleCInspect
Create a new help doc article.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The title of the article. | |
| siteID | Yes | The ID of the help doc site to create the article in. Use twdesk-list_helpdoc_sites to discover. | |
| status | No | Publication status of the article (e.g. "published", "draft"). | |
| contents | No | The body content of the article. | |
| isPrivate | No | Set to true to make the article private. | |
| description | No | A short description / summary of the article. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description repeats the create action already implied by the name and annotations (readOnlyHint=false, idempotentHint=false). It does not disclose any additional behavioral traits such as required permissions, uniqueness constraints, side effects, or rate limits. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff and front-loads the action. However, it is so minimal that it essentially restates the tool name, only adding the word 'new'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with 6 parameters and no output schema, the description provides no information about return values, required workflow, or expected result. The only meaningful context comes from the schema and annotations, which is inadequate for an agent to fully understand invocation context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all 6 parameters with descriptions, giving 100% schema coverage, so the baseline is 3 despite the tool description adding no parameter-level meaning. The siteID parameter description provides extra discovery guidance, but that is schema content rather than tool description content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and object: 'Create a new help doc article.' It clearly differentiates from sibling tools like twdesk-update_helpdoc_article or twdesk-get_helpdoc_article via the verb 'create'. However, it adds no specifics about what article creation entails or any scope, stopping short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to choose this tool over alternatives such as twdesk-update_helpdoc_article or twdesk-search_helpdoc_articles. There is no mention of prerequisites, exclusions, or typical use cases. The only usage pointer ('Use twdesk-list_helpdoc_sites to discover.') lives in the siteID parameter schema, not in the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-create_priorityBInspect
Create ticket priority.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the priority. | |
| color | No | The color of the priority. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate a write operation (readOnlyHint=false) and that the tool is not destructive or idempotent. The description is consistent with those annotations but adds no extra behavioral context such as uniqueness constraints, side effects, or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler or redundancy. It is appropriately compact for a simple create tool with two parameters, though it is terse enough that it relies heavily on the schema and tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create operation with one required and one optional parameter, the description plus schema is nearly sufficient. However, there is no output schema, and the description does not clarify return behavior or the expected format for 'color', leaving minor gaps for the agent to resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description itself adds no parameter-level meaning; the schema already describes 'name' and 'color', though 'color' lacks an expected format or example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and a specific resource ('ticket priority'), which distinguishes it from read-only and update siblings like twdesk-get_priority, twdesk-list_priorities, and twdesk-update_priority. It is clear but lacks any additional context about what a ticket priority is, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The imperative phrasing implies this tool is for creating a new ticket priority, and the sibling tool names naturally suggest alternatives for reading or updating priorities. However, there is no explicit when-to-use guidance, no exclusions, and no mention of prerequisites or related tools to prefer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-create_statusCInspect
Create ticket status.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the status. | |
| color | No | The color of the status. | |
| displayOrder | No | The display order of the status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds little beyond the annotations: it repeats the creation action and adds the 'ticket' domain qualifier. It does not disclose whether duplicate names are rejected, whether color or displayOrder have defaults, or what the API returns after creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single economical sentence with no filler and the key action/resource are front-loaded. It is under-specified in behavioral terms, but this is a conciseness issue rather than verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create operation with fully documented parameters, this is minimally adequate. However, with no output schema, the description does not clarify return behavior, side effects, or uniqueness constraints, leaving moderate gaps for an agent selecting or invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents name, color, and displayOrder completely. The description adds no parameter-level meaning, but the schema fully carries that burden, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('create') and resource ('ticket status'), which is specific enough to distinguish from sibling tools like twdesk-create_priority or twdesk-create_ticket_type. It does not explicitly contrast with update_status or list_statuses, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as twdesk-update_status for modifying statuses or twdesk-list_statuses for viewing existing ones. An agent must infer usage entirely from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-create_tagCInspect
Create Desk tag.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the tag. | |
| color | No | The color of the tag. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description simply restates that a tag is created, which is already implied by readOnlyHint=false. It adds no context about uniqueness constraints, required permissions, idempotency, or effects on existing tickets. There is no contradiction with annotations, but no additional behavioral disclosure either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with zero wasted words, and the 'Desk' qualifier is useful for disambiguation. However, it is so skeletal that it provides little structural or orienting information beyond the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create operation with a fully documented 2-parameter schema and annotations, this is minimally workable. But with no output schema and no mention of behavior or return value, an agent gets little help beyond the bare operation and parameter schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (name and color) already have clear descriptions in the input schema. The tool description adds no parameter-level context, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('Create') and resource ('Desk tag'), and the 'Desk' qualifier helps distinguish it from twprojects-create_tag and twspaces-create_tags. However, it mostly mirrors the tool name without adding domain context about what a Desk tag is used for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to create a new tag versus reuse an existing one, nor any reference to sibling tools like twdesk-create_status or twdesk-create_priority. The usage context is only implied by the verb 'Create'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-create_ticketCDestructiveInspect
Create ticket.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Email addresses to CC. | |
| bcc | No | Email addresses to BCC. | |
| body | Yes | The body of the ticket. | |
| tags | No | Tags to associate with the ticket. Use twdesk-list_tags to discover. | |
| files | No | File IDs to attach. Use twdesk-create_file to upload. | |
| typeId | No | Ticket type. Use twdesk-list_ticket_types to discover. | |
| agentId | No | Agent the ticket is assigned to. Use twdesk-list_users to discover. | |
| inboxId | Yes | Inbox of the ticket. Use twdesk-list_inboxes to discover. | |
| subject | Yes | The subject of the ticket. | |
| statusId | No | Status of the ticket. Use twdesk-list_statuses to discover. | |
| customerId | No | Customer of the ticket. Use twdesk-list_customers to discover. | |
| priorityId | No | Priority of the ticket. Use twdesk-list_priorities to discover. | |
| customerEmail | No | Customer email; required when customerId is not given. Existing customers are matched, otherwise a new customer is created. | |
| notifyCustomer | No | Set to true if the customer should be sent a copy of the ticket. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral disclosure beyond the annotations, which already mark this as non-read-only and destructive. It does not mention side effects such as customer auto-creation or customer notification, though these are partially documented in the schema. No contradiction exists, but no extra context is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and readable, but it is under-specified rather than appropriately concise. Despite the tool having 14 parameters and a destructive annotation, the entire description is only two words and provides no context, usage, or side-effect information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 14 parameters, a destructive/open-world annotation, and no output schema, a two-word description leaves significant context unexplained, such as when creating a ticket is appropriate and what side effects may occur. The rich schema partially compensates, but the description alone is not enough for an agent to invoke the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 14 parameters have schema descriptions, including cross-tool references such as twdesk-list_tags and twdesk-list_inboxes, as well as the conditional rule for customerEmail versus customerId. The description itself contributes no parameter semantics, but because schema description coverage is 100%, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create ticket.' is a direct restatement of the tool name and the annotated title 'Create Ticket', adding no further scope. It identifies the verb and resource but does not distinguish this create action from related ticket operations such as twdesk-update_ticket or twdesk-reply_ticket beyond the verb already present in the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to choose this tool over related ticket operations; it does not mention update_ticket, reply_ticket, or any prerequisite like needing an inbox. The only context is implied by the word 'Create', which is insufficient for an agent deciding among the ticket-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-create_ticket_typeCInspect
Create ticket type.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the ticket type. | |
| displayOrder | No | The display order of the type. | |
| enabledForFutureInboxes | No | Whether the type is enabled for future inboxes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only says 'Create ticket type' and adds no behavioral context beyond what the annotations already imply. It does not mention side effects, required permissions, uniqueness constraints, or how the created ticket type interacts with other resources. It is consistent with the annotations, so there is no contradiction, but it provides no additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately terse for such a simple create operation, though it is so minimal that it provides little value beyond the tool name and title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create operation with 3 parameters and full schema coverage, the description is minimally viable. However, it lacks usage guidance, behavioral notes, and any indication of what a successful creation returns or affects, so an agent gets just enough to proceed but not enough to be fully confident.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented in the input schema. The description itself does not add any parameter-level meaning, which matches the baseline expectation when the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation (create) and the resource (ticket type), so an agent can tell this creates a new ticket type rather than merely reading one. However, it does not distinguish itself from sibling tools like twdesk-update_ticket_type or twdesk-get_ticket_type beyond the verb, and it closely mirrors the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as twdesk-update_ticket_type, twdesk-list_ticket_types, or twdesk-get_ticket_type. There is no mention of prerequisites, context, or exclusions, leaving the agent to infer appropriate usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-get_companyARead-onlyInspect
Get Desk company (customer organization).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the company to retrieve. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond 'Get', but it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and resource, with the parenthetical earning its place by disambiguating company from customer. There is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-id tool, the required id and optional fields are fully documented in the schema and annotations confirm read-only behavior. It does not explicitly state return shape or not-found behavior, but the get semantics and schema make the primary invocation case well-covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both id and fields are documented, including the sparse fieldset behavior. The description itself adds no parameter-specific meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get), resource (Desk company), and a clarifying parenthetical (customer organization). This helps distinguish it from sibling tools like twdesk-get_customer and twprojects-get_company despite the similar get_* naming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus twdesk-list_companies or twdesk-get_customer. The only usage signal is the implicit 'Get' plus the required id parameter, which is not sufficient guidance for an agent choosing among many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-get_customerCRead-onlyInspect
Get customer.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the customer to retrieve. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description contributes no behavioral detail beyond the annotations: readOnlyHint=true and destructiveHint=false already establish it as a safe read. It does not mention not-found behavior, response shape, authentication needs, or sparse-field semantics. There is no contradiction with the annotations, but the description adds nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two words are under-specification rather than useful conciseness; the sentence 'Get customer.' repeats the name/title and earns no space in the definition. There is no front-loaded context or structure that helps an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition lacks an output schema and the description does not describe the returned customer object, failure cases, or how this fetch relates to list_customers. Annotations and schema cover parameter and safety basics, but the overall definition is too spare for confident invocation in a toolset with hundreds of siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage: id and fields are fully documented, including the sparse-fieldset meaning of fields. The description adds nothing about parameters, but per the baseline for high schema coverage, this is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description 'Get customer.' is a verbatim restatement of the tool name and title, so it provides no additional clarifying information. It names the resource but does not distinguish single-record retrieval from twdesk-list_customers or other twdesk-get_* lookups. This is tautological rather than informative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, prerequisites, or alternatives. Among the many siblings, twdesk-list_customers exists for finding customers and twdesk-get_company/get_user fetch related entities, but an agent cannot infer from the description which one to select. No exclusions or context cues are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-get_helpdoc_articleARead-onlyInspect
Get a help doc article by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the help doc article to retrieve. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to repeat safety behavior. It adds no extra behavioral context (e.g., 404 behavior, auth, or sparse-field effects), but there is no contradiction and the read-only nature is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single clear sentence states the operation, resource, and required input with no filler. The key scoping information ('by ID') is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter getter with read-only annotations and no output schema, the description plus schema is sufficient to call the tool correctly. A small gap is the lack of any mention of what the response contains, but this is largely inferable for a 'get' tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so id and fields are already fully documented. The description adds no additional parameter meaning, which is acceptable given that the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), names the exact resource ('help doc article'), and states the retrieval criterion ('by ID'). This clearly distinguishes it from sibling tools like twdesk-search_helpdoc_articles and twdesk-get_helpdoc_site.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'by ID' implies this tool is appropriate when the caller already has a help doc article ID, but there is no explicit guidance about when to prefer it over search_helpdoc_articles or how to obtain an ID. No alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-get_helpdoc_siteARead-onlyInspect
Get a help doc site (knowledge base) by ID, including its subdomain, branding and article counts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the help doc site to retrieve. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a safe read-only operation (readOnlyHint=true, destructiveHint=false). The description adds some context by identifying the resource as a knowledge base and noting the returned fields, but it does not disclose additional behavioral traits like authorization requirements or response limitations. No contradiction with annotations found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the action and resource, then adds the most useful response details. Every part earns its place with no redundant or vague filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-get tool with complete schema coverage and read-only annotations, this description is largely sufficient. It names key return fields despite no output schema. It could be slightly more complete by pointing to list_helpdoc_sites for ID discovery, but that is not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The id parameter is adequately documented in the schema, and the fields parameter is already well explained as a sparse fieldset. The description adds no new parameter-level meaning beyond restating that retrieval is by ID.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation: 'Get a help doc site (knowledge base) by ID' and names what the response includes ('subdomain, branding and article counts'). This differentiates the tool from sibling getters like get_helpdoc_article and listing/search tools by both resource type and lookup method.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: use this when you have a help doc site ID and need its details. However, it does not explicitly mention alternatives such as twdesk-list_helpdoc_sites for discovery when the ID is unknown, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-get_inboxCRead-onlyInspect
Get inbox.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the inbox to retrieve. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the annotations, which already declare readOnlyHint=true and destructiveHint=false. There is no mention of return shape, sparse fieldset behavior, or any side effects, leaving the annotations to carry all the weight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at three words, with no fluff. However, it is under-specified and does little more than echo the title, so it is not a well-earned sentence despite its brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with a clear schema and annotations, the bare description is arguably workable. Still, it lacks any note about the required ID, the distinction from list_inboxes, or the response contents, leaving minor gaps for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with id and fields both clearly documented. The description itself says nothing about parameters, so it does not add value beyond the schema; the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get inbox.' clearly states the verb and resource, making the core operation obvious. However, it merely restates the tool name and title and does not differentiate from sibling tools like twdesk-list_inboxes or other get_* tools, so it misses the top tier.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description gives no indication of when to use this tool versus alternatives, nor does it mention that an inbox ID is required. An agent must infer usage entirely from the schema and naming conventions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-get_priorityBRead-onlyInspect
Get ticket priority.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the priority to retrieve. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no behavioral context beyond the annotations โ no mention of not-found behavior, return shape, or error handling โ but it also does not contradict them, so a mid-score is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single five-word sentence with zero filler, and the core purpose is front-loaded. The brevity is efficient but borders on under-specification rather than deliberate compression, since usage and behavioral guidance are entirely absent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity get-by-id tool with two fully documented parameters and safety annotations, the definition is minimally adequate. Gaps remain: no guidance distinguishing it from list_priorities, no description of what is returned (no output schema exists), and no indication of behavior for invalid IDs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the schema fully documents `id` ('The ID of the priority to retrieve') and `fields` ('Sparse fieldset... Omit to receive all fields'). The description adds no parameter-level meaning, but with full schema coverage, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('ticket priority'), making the purpose unambiguous as a single-entity retrieval operation. It is clear but does not differentiate itself from the many sibling get_* tools (e.g., twdesk-get_status, twdesk-get_ticket_type) beyond the resource name, which is already evident from the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as twdesk-list_priorities, twdesk-get_ticket, or the other get_* siblings. No context is provided about needing a known priority id or when a sparse fieldset would be appropriate, leaving selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-get_statusCRead-onlyInspect
Get ticket status.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the status to retrieve. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral detail beyond the word 'Get.' Annotations already indicate readOnlyHint=true and destructiveHint=false, but the description contributes no additional context such as authentication requirements, response shape, pagination, or idempotency implications. No contradiction exists, but the description does not enrich the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, which is concise. However, it is under-specified: it omits any context about when to use it, how it relates to sibling tools, or what output to expect. It is not tautological, but it is minimal rather than appropriately structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool, the schema covers the parameters and annotations cover the safety profile. Yet the description fails to disambiguate from list_statuses or get_ticket, and with no output schema it would benefit from at least noting that it returns a single status object. It is adequate for a trivial call but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with id described as 'The ID of the status to retrieve' and fields as a sparse fieldset. The description itself adds no parameter-level meaning, but the schema fully carries that burden, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb and resource: 'Get ticket status.' It clearly names the domain (ticket) and the object (status), and distinguishes from list_statuses by implying a single resource. However, it does not explicitly differentiate from get_ticket, which could also return status information, so it is clear but lacks sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as twdesk-list_statuses or twdesk-get_ticket. There are no conditions, exclusions, or references to sibling tools, leaving the agent to infer usage from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-get_tagBRead-onlyInspect
Get Desk tag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the tag to retrieve. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read nature is covered by structured metadata. The description adds no further behavioral context, such as sparse fields behavior or error semantics, but it does not contradict the annotations either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three words, no filler, and the core operation is front-loaded. For a simple get-by-ID tool, this is appropriately sized and does not waste an agent's attention.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema and annotations make the tool callable, but the description provides no return-shape information despite the absence of an output schema, and it does not mention how this relates to list or update tag operations. It is adequate but sparse for a complete picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both id and fields clearly documented in the input schema. The description itself adds no parameter-level detail, but the baseline of 3 is appropriate because the schema carries the informational load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get Desk tag' uses a clear verb and resource, and the 'Desk' qualifier helps distinguish it from sibling tag-getters in other domains. However, it does not explain what a Desk tag is or explicitly state that this retrieves a single tag by ID, so it falls short of a fully differentiated 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives like twdesk-list_tags or even twprojects-get_tag. The required id parameter implies a single-object lookup, but the description itself provides no context for selection, exclusions, or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-get_ticketCRead-onlyInspect
Get ticket.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the ticket to retrieve. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds no behavioral context such as error behavior, authentication needs, idempotency, or return format. There is no contradiction with annotations, but the description contributes no additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but this is under-specification rather than effective conciseness. It contains no useful structure or front-loaded information beyond repeating the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a retrieval tool with no output schema, the description leaves out important context such as what is returned, how to handle the optional fields parameter, and when to prefer this over twdesk-search_tickets. The schema helps with parameters, but the description alone is not complete enough for confident selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters: id and fields. The description itself adds no parameter semantics, but the schema already explains what each parameter does, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description, 'Get ticket.', is essentially identical to the tool name/title and adds no clarifying detail. It names the resource but does not differentiate this retrieval action from sibling tools like twdesk-search_tickets or twdesk-get_ticket_type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives. The description does not mention that this retrieves a single ticket by ID, nor does it contrast with twdesk-search_tickets or other get_* tools, so the agent is left without selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-get_ticket_typeCRead-onlyInspect
Get ticket type.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the ticket type to retrieve. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true and destructiveHint=false annotations already convey that this is a safe read operation, so the description is not required to restate that. However, the description adds no additional behavioral context such as error handling, permissions, or caveats; it is adequate but not informative beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and has no filler, but it is under-specified rather than appropriately sized. A single tautological sentence does not earn full marks for structure because it leaves out scoping or sibling differentiation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description should at least indicate that it returns a single ticket type and clarify when to use it rather than twdesk-list_ticket_types. The current description, combined with the schema, is minimally invocable but not complete enough for reliable tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (id and fields) are already documented with meaningful descriptions. The tool description contributes no additional parameter nuance, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get ticket type.' simply restates the tool name twdesk-get_ticket_type and the annotation title 'Get Ticket Type', providing no new information about what the tool does. It names the resource but does not differentiate this from sibling tools like twdesk-list_ticket_types or twdesk-get_ticket.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as twdesk-list_ticket_types or twdesk-search_tickets. An agent must infer from the name and schema that this fetches a single ticket type by ID; the description gives no selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-get_userCRead-onlyInspect
Get support agent.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the user to retrieve. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond thatโno return format, no behavior for nonexistent IDs, no auth expectationsโso it contributes nothing extra beyond what the annotations and name already convey. There is no contradiction with the annotations, but also no added transparency value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three words with zero wasted text, and the purpose is fully front-loaded. For a simple by-ID getter this is nearly the right size, though it borders on under-specification rather than demonstrating deliberate economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-ID tool with a complete schema and safety annotations, this definition is mostly adequate. The notable gap is differentiation: with over 200 siblings including twprojects-get_user and twchat-get_current_user, the description should clarify which user pool this reads from, and there is no output schema to hint at the return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies: the schema fully documents both the required id parameter and the optional sparse-fieldset behavior of fields. The description's 'support agent' wording adds only minor role context, hinting that the id refers to a helpdesk agent, but it does not meaningfully compensate beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get support agent.' The 'support agent' phrasing clarifies that this retrieves helpdesk user records, which distinguishes it from the sibling twprojects-get_user. However, it is terse and does not elaborate on what the resulting record contains, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as twprojects-get_user, twchat-get_current_user, or twdesk-list_users, and no exclusions are given. An agent must infer from the twdesk naming prefix that this tool belongs to the support-desk domain, which is an inference rather than explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-link_task_to_ticketAInspect
Link a Teamwork Projects task to a Desk ticket, so the ticket shows the work tracked by that task.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the Teamwork Projects task. Use twprojects-list_tasks or twprojects-search to discover. | |
| ticketId | Yes | The ID of the Desk ticket. Use twdesk-search_tickets to discover. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so the description carries the burden. It discloses the effect on the ticket ('shows the work tracked') without delving into edge cases like idempotency or error handling, which is acceptable for a simple link operation. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that leads with the action and object, and includes the purpose in a subordinate clause. Every word adds value, making it highly efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter link operation with no output schema, the description is complete. It explains the action, effect, and provides enough context for correct invocation, especially given the excellent parameter descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter description includes discovery hints ('Use twprojects-list_tasks or twprojects-search to discover' and 'Use twdesk-search_tickets to discover'). This goes beyond basic types, actively guiding the agent to obtain valid IDs, which is exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Link a Teamwork Projects task to a Desk ticket') with specific resources and a concrete outcome ('so the ticket shows the work tracked by that task'). It distinguishes itself from sibling inverse operation (twdesk-unlink_task_from_ticket) by focusing on the linking behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'so the ticket shows the work tracked by that task' clause provides clear context on when this tool is appropriate: when the user wants to associate an existing task with a ticket. It doesn't explicitly mention exclusions or alternatives, but the intent is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-list_companiesARead-onlyInspect
List Desk companies. Filter by name, domains, or kind.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | The kind of the company to filter by. | |
| name | No | The name of the company to filter by. | |
| page | No | Page number for pagination of results (1-based). | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. | |
| domains | No | The domains of the company to filter by. | |
| orderBy | No | The field to order the results by. | |
| pageSize | No | Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more. | |
| orderDirection | No | The direction to order the results by (asc, desc). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no further behavioral context such as pagination quirks, field selection, or return format, but it also does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The action and resource are front-loaded, and the filter summary is immediately actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema and read-only annotations, the description is largely sufficient for a straightforward list tool. The main gap is the lack of any routing guidance toward twdesk-get_company or clarification of the output shape, but this is not critical for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema carries the parameter documentation burden. The description highlights name, domains, and kind as filters, but adds no extra meaning beyond what the input schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('List') and the resource ('Desk companies'), and names the main filter dimensions. This distinguishes it from related siblings like twdesk-get_company and twprojects-list_companies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: use this tool to list or filter Desk companies. However, there is no explicit guidance about when to prefer twdesk-get_company for a single company, or how this tool relates to other list operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-list_customersBRead-onlyInspect
List customers. Filter by company or email.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| emails | No | The emails of the customers to filter by. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. | |
| orderBy | No | The field to order the results by. | |
| pageSize | No | Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more. | |
| companyIDs | No | The IDs of the companies to filter by. | |
| companyNames | No | The names of the companies to filter by. | |
| orderDirection | No | The direction to order the results by (asc, desc). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds no behavioral context beyond the schema, such as default result set size, pagination behavior, or that pageSize is silently capped at 100. With no extra disclosure, the description does not meaningfully enhance behavioral transparency beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core action 'List customers' is front-loaded, and the filter capability is stated immediately. Every word earns its place, and the description is appropriately sized for a straightforward read-only list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 fully documented parameters and read-only annotations, the description is minimally adequate but leaves some gaps. It does not mention that omitting all filters likely returns all customers, nor does it clarify return value structure (no output schema exists). An agent could call it correctly using the schema alone, but the description does not fully orient the agent to behavior like pagination or filtering combinations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 8 parameters. The description's 'Filter by company or email' restates the high-level function of the filter parameters but adds no new semantic meaning beyond what the schema already provides. Baseline of 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List customers', a specific verb and resource that distinguishes it from singular get_customer and from other list tools targeting different resources (companies, tags). However, it does not explicitly differentiate itself from sibling tools like twdesk-search_tickets or twdesk-list_companies, leaving some ambiguity for an agent choosing among related list/search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It mentions filtering by company or email, which implies a use case, but it does not state when to prefer this over twdesk-get_customer, twdesk-search_tickets, or other list tools, nor does it mention any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-list_helpdoc_sitesARead-onlyInspect
List help doc sites (knowledge bases). Filter by name or subdomain. Use this to discover the site ID required by the help doc article tools.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The name of the help doc site to filter by. | |
| page | No | Page number for pagination of results (1-based). | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. | |
| orderBy | No | The field to order the results by. | |
| pageSize | No | Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more. | |
| subdomain | No | The subdomain of the help doc site to filter by. | |
| orderDirection | No | The direction to order the results by (asc, desc). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=false, so the safety profile is covered. The description adds useful behavioral context by explaining the tool's role as a discovery mechanism for site IDs, and the schema enriches this with pagination details. Minor gap: the description does not explicitly state that results are paginated or that filters are optional, but the schema handles that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff: the first identifies the resource and filters, the second states the primary use case. The most important guidance (site ID discovery) is front-loaded at the end of a short description. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 100% schema coverage and no output schema, the description is sufficient. The only gap is that it does not state that the response is a list of site objects, but the tool name and schema make that evident. The description handles the main contextual need: routing the agent to use this tool for site ID discovery.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add parameter-level detail beyond what the schema already provides, but it does frame 'name' and 'subdomain' as filters and 'site ID' as the key output, which adds minimal semantic value. The pagination and sparse-fieldset parameters are already well documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('help doc sites (knowledge bases)'), and distinguishes this tool from related article tools by noting its purpose is to discover the site ID required by the help doc article tools. It is immediately clear what the tool does and how it differs from siblings like twdesk-get_helpdoc_site or twdesk-search_helpdoc_articles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to discover the site ID required by the help doc article tools,' which tells the agent when to invoke this tool and for what downstream purpose. It does not name alternative tools to exclude, but the downstream guidance is strong and the distinction from article-level tools is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-list_inboxesARead-onlyInspect
List inboxes. Filter by name or email.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The name of the inbox to filter by. | |
| page | No | Page number for pagination of results (1-based). | |
| No | The email of the inbox to filter by. | ||
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. | |
| orderBy | No | The field to order the results by. | |
| pageSize | No | Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more. | |
| orderDirection | No | The direction to order the results by (asc, desc). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the filtering behavior by name or email and does not disclose return format, pagination quirks, or any additional side-effect context; this is acceptable but minimal, and there is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the core action front-loaded and no filler. 'List inboxes' states the operation immediately, and 'Filter by name or email' adds essential scoping without wasting words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a fully described seven-parameter schema and safety-bearing annotations, the tool is invokable from the structured data alone. Still, the description itself does not state what is returned or clarify when to prefer twdesk-get_inbox or twdesk-search_tickets, leaving a moderate contextual gap for a tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all seven parameters, including pagination, ordering, and sparse fields. The description's mention of 'name or email' simply re-emphasizes two schema-documented filter parameters without adding new meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb-resource pair 'List inboxes' and adds the filtering scope 'by name or email.' This clearly identifies a collection-listing operation and is easily distinguished from single-resource siblings such as twdesk-get_inbox, though it does not explicitly name or contrast any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use whenever an agent needs to enumerate inboxes and optionally filter them, and it names two concrete filter dimensions. However, it gives no explicit when-to-use vs. when-not-to-use guidance and does not reference alternatives like twdesk-get_inbox for single-inbox lookups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-list_prioritiesARead-onlyInspect
List ticket priorities. Filter by name or color.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The name of the priority to filter by. | |
| page | No | Page number for pagination of results (1-based). | |
| color | No | The color of the priority to filter by. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. | |
| orderBy | No | The field to order the results by. | |
| pageSize | No | Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more. | |
| orderDirection | No | The direction to order the results by (asc, desc). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only that this lists and filters priorities, which is consistent with the annotations. It does not disclose additional behavioral traits such as pagination behavior, default ordering, or the shape of the returned list, but it does not contradict the annotations either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loaded: the core action is stated first, followed by the main filtering capability. Both sentences earn their place with no redundant filler. It is not wordy, though it is minimal enough that it leans on the schema for richer detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with well-documented parameters, the description is adequate for selection and basic invocation. However, there is no output schema, and the description does not mention pagination, field selection, ordering, or what a returned priority object contains. These gaps are partially covered by the schema, but the description itself leaves some operational context unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all seven parameters, so the schema carries the semantic burden. The description's 'Filter by name or color' does summarize two parameters but adds no new meaning beyond what the schema already states. Baseline 3 is appropriate because the schema is comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'List ticket priorities.' This clearly identifies the operation and distinguishes it from related tools like twdesk-get_priority, which retrieves a single priority, and twdesk-create_priority. The filter mention adds scope without confusing the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage as an enumeration/filtering tool, and 'Filter by name or color' suggests when filtering is relevant. However, it does not explicitly state when to use this tool versus alternatives such as twdesk-get_priority for a single record or twdesk-search_tickets for broader ticket search. Usage context is present but only by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-list_statusesARead-onlyInspect
List ticket statuses. Filter by name, color, or code.
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | The code of the status to filter by. | |
| name | No | The name of the status to filter by. | |
| page | No | Page number for pagination of results (1-based). | |
| color | No | The color of the status to filter by. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. | |
| orderBy | No | The field to order the results by. | |
| pageSize | No | Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more. | |
| orderDirection | No | The direction to order the results by (asc, desc). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation; the description adds no behavioral detail beyond the filter capability. It does not contradict the annotations, and the pagination quirk (silent reduction above 100) is disclosed in the schema rather than the description. Acceptable given annotation coverage, but no extra behavioral context is contributed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse sentences with zero filler: 'List ticket statuses. Filter by name, color, or code.' The core action is front-loaded and every word earns its place. This is exemplary concision for a simple list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with annotations covering safety and a schema covering all parameters, the description is mostly sufficient. However, with no output schema, the description does not clarify the response shape, and it omits behavioral nuances like whether multiple filter values are AND'd or OR'd, or how this relates to twdesk-get_status. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 8 parameters is already documented with meaning. The description's mention of filtering by name, color, or code echoes three schema properties but adds no new semantics such as filter combination behavior or format expectations. Baseline 3 is appropriate since the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List ticket statuses', followed by the three filter dimensions (name, color, code). This distinguishes it from sibling list tools like twdesk-list_tags, twdesk-list_priorities, and twdesk-list_ticket_types by naming a distinct resource. It stops short of a 5 because it adds no scoping detail (e.g., all vs. filtered, or workspace scope) that would sharpen the boundary against get_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: the name and 'List ticket statuses' make it evident this tool enumerates statuses, and the filter clause hints at when filtering is relevant. However, there is no explicit when-to-use versus alternatives โ notably twdesk-get_status for retrieving a single status โ and no exclusions or routing guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-list_tagsBRead-onlyInspect
List Desk tags. Filter by name, color, or inbox.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The name of the tag to filter by. | |
| page | No | Page number for pagination of results (1-based). | |
| color | No | The color of the tag to filter by. | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. | |
| orderBy | No | The field to order the results by. | |
| inboxIDs | No | The IDs of the inboxes to filter by. | |
| pageSize | No | Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more. | |
| orderDirection | No | The direction to order the results by (asc, desc). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds a pagination-related caveat via the pageSize parameter description (silent reduction of values over 100), which is useful behavioral context. No contradictions with annotations. However, no extra detail about response shape or filtering semantics beyond schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the primary action and resourceโ'List Desk tags'โfollowed by the key filter options. It earns a 4 rather than 5 because it omits the pagination caveat that appears in the schema and could have mentioned the orderBy/orderDirection options; yet what is there is efficient and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with all-optional parameters and full schema coverage, the description plus annotations cover the essential usage. It is not a 5 because the description itself is minimal: it doesn't mention that results are paginated, that all parameters are optional, or how to use fields/orderBy. With no output schema, the return format is left entirely to the agent's inference, which is acceptable for a simple list tool but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema already documents all eight optional parameters well, including the important pageSize caveat. The description's one-line filter list (name, color, inbox) is redundant with the schema but does reinforce the main filter dimensions. Baseline 3 is appropriate because the schema carries the heavy lifting and the description adds no meaningful supplementary parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List Desk tags' followed by filtering dimensions (name, color, inbox). It clearly distinguishes from sibling tools like twdesk-get_tag (single entity retrieval) and twdesk-create_tag (creation). Slight deduction because it lists filter options rather than describing the full scope of what is returned, but purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing/filtering tags, which is reasonably clear from the resource and filter parameters. However, it does not explicitly state when to prefer this tool over alternatives such as twdesk-get_tag or twdesk-search_tickets, nor does it mention any exclusions or prerequisites. The filter hints give context but no explicit selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-list_ticket_typesARead-onlyInspect
List ticket types. Filter by name or inbox.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The name of the type to filter by. | |
| page | No | Page number for pagination of results (1-based). | |
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. | |
| orderBy | No | The field to order the results by. | |
| inboxIDs | No | Filter by inbox. Use twdesk-list_inboxes to discover. | |
| pageSize | No | Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more. | |
| orderDirection | No | The direction to order the results by (asc, desc). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that results can be narrowed by name or inbox, which is consistent with read-only behavior, but does not disclose additional runtime traits such as response shape or pagination behavior; the schema compensates for pagination details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler or redundancy. The description is appropriately sized for a straightforward list/filter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation with a rich parameter schema and clear annotations, this description is mostly complete. Minor gaps are the lack of explicit return-shape information and alternative-tool routing, but the tool name and schema cover the essential invocation details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all seven parameters. The description only restates the name and inbox filters at a high level and does not add meaning beyond the schema, which is expected given the high coverage baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('ticket types'), and mentions the key filtering dimensions. It is clear and distinct from singular get/update/create ticket-type tools, though it does not explicitly name any sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The list verb implies an enumeration use case, and 'Filter by name or inbox' gives a concrete selection context. However, there is no explicit guidance about when to prefer this over twdesk-get_ticket_type or twdesk-search_tickets, leaving the distinction mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-list_usersARead-onlyInspect
List support agents. For customers, use twdesk-list_customers.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| No | The email addresses of the users to filter by. | ||
| fields | No | Sparse fieldset: field names to include (e.g. ["id","name"]). Omit to receive all fields. | |
| orderBy | No | The field to order the results by. | |
| inboxIDs | No | The IDs of the inboxes to filter by. | |
| lastName | No | The last names of the users to filter by. | |
| pageSize | No | Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more. | |
| firstName | No | The first names of the users to filter by. | |
| isPartTime | No | Whether to include part-time users in the results. | |
| orderDirection | No | The direction to order the results by (asc, desc). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds scoping context but no further behavioral detail such as result shape, default ordering, or pagination behavior beyond what the schema already documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The primary action is front-loaded, and the alternative tool is mentioned immediately, making it easy to scan and act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a fully documented schema and clear annotations, the description covers the essential purpose and the key sibling distinction. It could be slightly more explicit about what a returned user record looks like, but the absence of an output schema makes that a minor gap rather than a critical one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all 10 parameters documented in the schema itself. The description adds no parameter-level detail, but it does not need to because the schema already carries the full parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation ('List') and the resource ('support agents'), and disambiguates what 'users' means in this domain. It also names the sibling tool twdesk-list_customers as the correct tool for a different audience, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when not to use this tool: 'For customers, use twdesk-list_customers.' This is a clear, actionable routing instruction that prevents the most likely confusion with a similarly named sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-reply_ticketADestructiveInspect
Reply to a ticket. Use threadType=note for internal agent notes.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Email addresses to CC. | |
| bcc | No | Email addresses to BCC. | |
| body | Yes | The body of the message. | |
| ticketID | Yes | The ID of the ticket that the message will be sent to. | |
| threadType | No | 'message' is a customer-facing reply; 'note' is an internal agent note. | message |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey the destructive hint and non-read-only nature, so the description doesn't need to repeat that. It adds the useful distinction between customer-facing replies and internal agent notes, but does not disclose potential side effects such as email delivery or notification behavior beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the core purpose is front-loaded and the threadType guidance earns its place as a high-value usage hint. This is an appropriately sized description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple action with full schema coverage and annotations, the description covers the essential purpose and the key note-vs-message distinction. It could be slightly more explicit about how it differs from twdesk-update_ticket, but nothing critical is missing for invoking it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters fully. The description only repeats the threadType note guidance already present in the schema, adding no new semantic information beyond what structured fields provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Reply to a ticket') with a specific verb and resource, and the threadType note clarifies an important variant. It doesn't explicitly distinguish itself from twdesk-update_ticket, but 'reply' strongly implies sending a message/note rather than editing ticket fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives helpful guidance for choosing threadType=note for internal agent notes, which is a clear within-tool usage rule. However, it does not mention when to use this tool versus alternatives like twdesk-update_ticket or other messaging tools, leaving tool selection partially implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-search_helpdoc_articlesBRead-onlyInspect
Search help doc articles. Filter by search term, status, site, or category.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). | |
| search | No | Free-text search term matched against article title and content. | |
| siteID | No | Filter by help doc site ID. Use twdesk-list_helpdoc_sites to discover. | |
| status | No | Filter by article status (e.g. "published", "draft"). | |
| pageSize | No | Number of results per page. | |
| categoryID | No | Filter by help doc category ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a read-only, non-destructive safety profile, lowering the bar. The description consistently frames the tool as a filtered search but adds no behavioral context beyond the schema โ no pagination defaults, empty-search behavior, or result-set semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action, followed by the key filter dimensions. There is zero filler โ every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a read-only search tool: annotations cover the safety profile, the schema covers all optional parameters, and the description states the core behavior. Gaps include no return-value description (no output schema) and no guidance distinguishing search from twdesk-get_helpdoc_article.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters. The description's filter list (search term, status, site, category) largely restates schema content and adds no new meaning; page and pageSize are not even mentioned.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') and resource ('help doc articles'), and enumerates concrete filter dimensions (search term, status, site, category). This distinguishes it from siblings like twdesk-get_helpdoc_article (single-article fetch) and twdesk-search_tickets (different resource), though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. The description never contrasts searching against fetching a single article (twdesk-get_helpdoc_article) or searching tickets (twdesk-search_tickets), and the only cross-reference ('Use twdesk-list_helpdoc_sites to discover') appears in the schema rather than the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-search_ticketsARead-onlyInspect
Search tickets. Filter by inbox, customer, company, tag, status, priority, user, or creation date range. Name the attributes you need in fields: a ticket returned whole carries every activity, message, file and timelog identifier it has, and a full page of those is large enough to be truncated in transit. The record and page totals saturate at 10000: a search reporting exactly that many has 10000 or more, and asking for a page past the 10000th result is rejected rather than answered empty, so narrow the filters instead of paging deeper.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each ticket, from the listed names. Omit to receive the whole record, which carries every activity, message, file and timelog identifier the ticket has and is large enough that a full page of them may be truncated before it reaches you. Name the attributes you need. "id" is always returned. | |
| search | No | Search term matched against subject, body, and other ticket fields. | |
| tagIDs | No | Filter by tag. Use twdesk-list_tags to discover. | |
| orderBy | No | The field to order the results by. | |
| userIDs | No | Filter by user. Use twdesk-list_users to discover. | |
| inboxIDs | No | Filter by inbox. Use twdesk-list_inboxes to discover. | |
| pageSize | No | Number of results per page for pagination (1-200). The API silently reduces anything above 200, so a larger value returns fewer results rather than more. | |
| statusIDs | No | Filter by status. Use twdesk-list_statuses to discover. | |
| companyIDs | No | Filter by company. Use twdesk-list_companies to discover. | |
| omitMerged | No | If true, exclude tickets that have been merged into another ticket. Merged tickets are not a status, so they cannot be filtered out with statusIDs. Defaults to false, which returns them alongside the rest. | |
| customerIDs | No | Filter by customer. Use twdesk-list_customers to discover. | |
| priorityIDs | No | Filter by priority. Use twdesk-list_priorities to discover. | |
| createdAfter | No | Filter by ticket creation date: only tickets created on or after this day. This search filters by whole days, so a time of day is ignored. 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. | |
| createdBefore | No | Filter by ticket creation date: only tickets created on or before this day. This search filters by whole days, so a time of day is ignored. 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. | |
| orderDirection | No | The direction to order the results by (asc, desc). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing two non-obvious behaviors: full tickets are truncated in transit, and result/page totals saturate at 10000 while pages beyond that are rejected. It also discloses the 'id is always returned' invariant and pageSize silent reduction. These are exactly the kind of behaviors an agent needs to know to avoid being misled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose and filters, then the important capacity/truncation warnings. The only minor inefficiency is some redundancy between the opening sentence and the 'fields' parameter description, both warning about truncation when returning whole records. But the message is important enough that repetition is defensible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter read-only search tool with no output schema, the description covers all agent-critical context: when to use it, what filters are available, the performance/truncation trap, the 10000 saturation behavior, and the practical guidance to narrow filters rather than page deep. The schema documents every parameter and the description adds the behavioral context needed to use them safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but the description adds crucial semantics beyond the schema: it explains that a full ticket is huge and may be truncated, that fields avoids that, that 'id' is always returned, that pageSize values over 200 silently reduce, and that date filters operate on whole days. It doesn't enumerate every filter dimension twice, but it adds meaningful usage constraints that the schema alone would not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource ('Search tickets') and then enumerates the distinct filter dimensions (inbox, customer, company, tag, status, priority, user, creation date range). It differentiates itself from sibling search tools like twdesk-search_helpdoc_articles and twprojects-search by being ticket-specific, and from twdesk-list_* filters by being a search with many filter dimensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tool is self-contained with explicit guidance on when to use it (searching/filtering tickets) and what to avoid: it warns against paging past 10000 results and tells the agent to narrow filters instead. Each filter parameter also names the sibling list tool to discover valid IDs. The 'omitMerged' parameter description explicitly explains when it is needed (merged tickets cannot be filtered by status).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-unlink_task_from_ticketADestructiveInspect
Unlink a Teamwork Projects task from a Desk ticket. The task and the ticket themselves are kept.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the Teamwork Projects task. Use twprojects-list_tasks or twprojects-search to discover. | |
| ticketId | Yes | The ID of the Desk ticket. Use twdesk-search_tickets to discover. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds valuable context by clarifying that only the link is removed while the task and ticket remain intact. This prevents the agent from assuming the entities are deleted, going beyond the annotation's raw destructive flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, precise sentence with no redundancy. Every word adds value, efficiently conveying both the action and the critical side effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity destructive operation with two fully described parameters and no output schema, the description covers the essential effect. It could optionally mention idempotency or failure conditions (e.g., if the link doesn't exist), but given the annotations and schema, it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for both parameters, each with clear descriptions and discovery hints (e.g., 'Use twprojects-list_tasks to discover'). The description adds no additional parameter semantics, which is acceptable given the schema's completeness, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Unlink') and the specific resources involved ('a Teamwork Projects task from a Desk ticket'), and adds the critical clarification that both entities are preserved. This uniquely identifies it as the inverse of twdesk-link_task_to_ticket, making it easy to distinguish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the operation but does not explicitly state when to use it versus alternatives, nor any preconditions (e.g., that the task must be currently linked). The name and inverse sibling suggest usage, but no explicit guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-update_companyCInspect
Update Desk company.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the company to update. | |
| kind | No | The new kind of the company. | |
| name | No | The new name of the company. | |
| note | No | The new note for the company. | |
| details | No | The new details of the company. | |
| domains | No | The new domains for the company. | |
| website | No | The new website of the company. | |
| industry | No | The new industry of the company. | |
| permission | No | The new permission level of the company. | |
| description | No | The new description of the company. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=false, and the description only repeats the mutation by saying 'Update'. It adds no information about partial vs. full replacement, required permissions, validation behavior, side effects, or what is returned. Since it adds zero context beyond the annotations, this is under-disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, but it borders on tautological: 'Update Desk company' essentially restates the tool name and title. It is concise in the sense of brevity, but under-specified for a 10-parameter mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 optional fields, no output schema, and no explanation of update semantics, a single sentence is not enough for an agent to correctly invoke the tool beyond guessing from the schema. The description does not compensate for the missing usage and behavior context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 10 parameters are already documented in the input schema. The description adds no parameter-level meaning, so the baseline of 3 applies; no penalty is warranted, but no credit beyond baseline either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a clear verb+resource: updating a Desk company. It is more specific than the title 'Update Company' by adding the product context, though it does not describe which aspects of the company can be changed or how it differs from twdesk-create_company/twdesk-get_company.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to choose this tool over twdesk-create_company, twdesk-get_company, twdesk-list_companies, or the many other update_* siblings. An agent must infer from the tool name that it is for existing companies, which is not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-update_customerCInspect
Update customer.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the customer to update. | |
| No | The new email of the customer. | ||
| notes | No | The new notes of the customer. | |
| phone | No | The new phone number of the customer. | |
| mobile | No | The new mobile number of the customer. | |
| address | No | The new address of the customer. | |
| jobTitle | No | The new job title of the customer. | |
| lastName | No | The new last name of the customer. | |
| extraData | No | The new extra data of the customer. | |
| firstName | No | The new first name of the customer. | |
| facebookURL | No | The new Facebook URL of the customer. | |
| linkedinURL | No | The new LinkedIn URL of the customer. | |
| organization | No | The new organization of the customer. | |
| twitterHandle | No | The new Twitter handle of the customer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only says 'Update customer' and adds no behavioral context beyond what the annotations already imply. Key information is missing, such as whether this is a partial update affecting only provided fields, what happens if the id does not exist, and whether the operation is reversible or auditable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and has no fluff, but it is under-specified rather than appropriately concise. A tool with 14 parameters and one required id would benefit from a sentence clarifying that this updates an existing customer with only the supplied fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and only sparse annotations, the description leaves significant gaps. It does not state that the customer must already exist, that updating is partial or full, what fields are commonly used, or what the caller should expect in response. The schema covers parameters, but operational context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter descriptions already explain each field and the 'id' requirement. The tool description adds no extra meaning, but this is acceptable because the input schema fully documents all 14 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a clear verb and resource: 'Update customer.' This is enough to distinguish it from sibling tools like twdesk-update_company or twdesk-update_ticket by resource type. However, it does not mention what aspects of a customer can be updated, leaving the full purpose to be inferred from the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as twdesk-create_customer or twdesk-update_company. No prerequisites, partial-update semantics, or conditions are provided, so the agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-update_helpdoc_articleBInspect
Update an existing help doc article.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the help doc article to update. | |
| title | No | The new title of the article. | |
| status | No | Publication status (e.g. "published", "draft"). | |
| contents | No | The new body content of the article. | |
| isPrivate | No | Set to true to make the article private. | |
| description | No | A short description / summary of the article. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations separately indicate the operation is not read-only, not idempotent, and not destructive, but the description adds no behavioral context such as partial-update semantics, which fields are required at call time beyond id, or what happens on success. The phrase 'existing' only repeats the notion of modifying a current resource.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no filler, front-loading the action and object. It earns its place, though it is sparse and close to the tool title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward update tool with rich parameter descriptions and safety annotations, the description is minimally adequate. However, with no output schema, it does not state what the tool returns, and it omits partial-update behavior, a meaningful gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema already documents all six parameters. The description itself adds no extra parameter meaning; it does not clarify that only id is required or that omitted optional fields are left unchanged.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Update an existing help doc article.' This clearly distinguishes it from twdesk-create_helpdoc_article, twdesk-get_helpdoc_article, and twdesk-search_helpdoc_articles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'existing' implies this tool is for modifying an already-created article rather than creating a new one. However, it does not explicitly name alternatives or state when-not-to-use, leaving usage conditions largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-update_priorityCInspect
Update ticket priority.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the priority to update. | |
| name | No | The new name of the priority. | |
| color | No | The color of the priority. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is a mutating, non-idempotent, non-destructive operation, and the description does not contradict them. The description adds little behavioral context beyond 'update', such as whether existing tickets using the priority are affected, but the annotation coverage prevents this from being a serious gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler or redundancy. It is appropriately short for the tool's simplicity, though 'ticket priority' is slightly misleading and could have been phrased more precisely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is too thin to resolve a key ambiguity: does it update a priority definition or change the priority on a ticket? Given the large sibling set and the existence of twdesk-update_ticket, this missing semantic context is significant. Schema coverage handles parameters, but the tool's core purpose is not fully clarified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear descriptions for id, name, and color. The description does not need to repeat parameter details, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description provides a verb and resource, but says 'ticket priority' rather than clarifying that this updates a priority definition (name/color). Because the parameters are name and color, the intended resource is the priority entity itself, not the priority field on a ticket. This ambiguity makes it hard to distinguish from twdesk-update_ticket.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus twdesk-update_ticket, twdesk-update_status, or other update tools. There are no conditions, exclusions, or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-update_statusCInspect
Update ticket status.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the status to update. | |
| name | No | The new name of the status. | |
| color | No | The color of the status. | |
| displayOrder | No | The display order of the status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating action (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds no behavioral detail beyond the generic word 'update' โ it does not mention partial-update semantics, whether only provided fields are changed, validation behavior, or what happens to tickets already using the status.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but it is under-specified rather than appropriately concise. 'Update ticket status' largely restates the tool's purpose and omits the field-level and contextual detail needed to avoid ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an update tool, the description lacks clarity about what entity is updated and what effects the operation has. The schema covers parameters, but the description does not tie together the status definition concept, optional fields, or distinguish this from updating a ticket's status field. Given no output schema and no usage guidance, the description is only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all four parameters (id, name, color, displayOrder), giving 100% schema description coverage. The description adds no parameter-level meaning, but the coverage baseline applies, so this is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('update') and a resource ('ticket status'), so it is not a tautology. However, 'ticket status' is ambiguous: it could mean updating a field on a ticket or updating a status definition entity. Given the schema exposes name, color, and displayOrder, it likely means the latter, but the description does not disambiguate this, nor does it distinguish itself from twdesk-update_ticket.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as twdesk-create_status, twdesk-get_status, or twdesk-update_ticket. The description provides no context about prerequisites, exclusions, or scenarios where another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-update_tagBInspect
Update Desk tag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the tag to update. | |
| name | No | The new name of the tag. | |
| color | No | The color of the tag. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only restates that the tool mutates a Desk tag, which annotations already convey via readOnlyHint=false. It adds no context about side effects, permission requirements, partial-update semantics, or behavior when optional fields are omitted. It does not contradict the annotations, but it adds no behavioral value beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler, and the verb 'Update' is front-loaded. It is appropriately concise for a simple tool, though it provides no structural elaboration such as usage hints or caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple update tool with complete schema coverage and annotations, the description provides just enough to identify the target resource. However, it does not address when to choose this over sibling tag-update tools, nor does it describe update behavior beyond the schema. It is minimally viable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (id, name, color) already has a meaningful description. The tool description adds no parameter-level detail, but none is strictly needed because the schema fully documents the parameters. A baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Update Desk tag.' The 'Desk' qualifier distinguishes this from sibling tools like twprojects-update_tag and twspaces-update_tag. An agent can immediately understand what the tool operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives such as twprojects-update_tag or twspaces-update_tag. It does not state prerequisites, exclusions, or context in which this update operation should be preferred. The only signal is the 'Desk' qualifier, which is implied rather than explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-update_ticketCInspect
Update ticket.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | Email addresses to CC. | |
| id | Yes | The ID of the ticket to update. | |
| bcc | No | Email addresses to BCC. | |
| body | No | The body of the ticket. | |
| tags | No | Tags to associate with the ticket. Use twdesk-list_tags to discover. | |
| typeId | No | Ticket type. Use twdesk-list_ticket_types to discover. | |
| agentId | No | Agent the ticket is assigned to. Use twdesk-list_users to discover. | |
| inboxId | No | Inbox of the ticket. Use twdesk-list_inboxes to discover. | |
| subject | No | The subject of the ticket. | |
| statusId | No | Status of the ticket. Use twdesk-list_statuses to discover. | |
| deleteTags | No | Tags to remove from the ticket. Use twdesk-list_tags to discover. | |
| priorityId | No | Priority of the ticket. Use twdesk-list_priorities to discover. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, so the mutating nature is covered by structured metadata. However, the description adds no behavioral context beyond that โ it does not disclose whether updates are partial or full replacement, whether changing status/agent triggers notifications, or what side effects occur. It neither contradicts the annotations nor enriches them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two words is under-specification, not conciseness. The description front-loads nothing useful since there is no information to front-load. It fails to earn its place as a meaningful tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 12 parameters, no output schema, and nuanced semantics (partial vs. full update, required fields, tag add/remove behavior via tags vs. deleteTags), a two-word description is grossly inadequate. With no output schema, the description should at least clarify return value or side effects; it explains neither.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema descriptions are genuinely helpful โ they explain each field and even reference discovery tools (e.g., 'Use twdesk-list_tags to discover', 'Use twdesk-list_statuses to discover'). The description itself adds no parameter meaning, but the baseline of 3 applies because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update ticket.' is a tautology โ it restates the tool name (twdesk-update_ticket) and title ('Update Ticket') verbatim. It names a verb and resource but adds no specificity about scope, semantics, or how it differs from siblings like twdesk-create_ticket, twdesk-reply_ticket, or the many other twdesk-update_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides zero guidance on when to use this tool versus alternatives. It does not mention that twdesk-create_ticket is for new tickets, twdesk-reply_ticket for customer replies, or twdesk-get_ticket for retrieval. There is no when-to-use, when-not-to-use, or alternative routing โ just the bare action statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twdesk-update_ticket_typeCInspect
Update ticket type.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the ticket type to update. | |
| name | No | The new name of the type. | |
| displayOrder | No | The display order of the type. | |
| enabledForFutureInboxes | No | Whether the type is enabled for future inboxes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond what the annotations already imply: it is an update operation and not read-only. It does not disclose whether the update is partial or full, whether an existing ticket type is required, what side effects occur, or what the response looks like. The negative annotation hints (idempotentHint=false, destructiveHint=false) do not compensate for this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short with no wasted words, but it is under-specified rather than effectively concise. It basically restates the tool name and provides no structural or contextual value for an agent navigating among many sibling tools.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is incomplete for a mutating tool with no output schema. It lacks information about return values, side effects, and when to choose this tool over related update_* tools. The parameter schema helps, but the description leaves important context unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters already have individual descriptions. The tool description adds no parameter-level meaning, but since the schema carries the full burden, the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('update') and a specific resource ('ticket type'), so an agent can tell this modifies an existing ticket type rather than creating or listing one. It does not differentiate from sibling update tools like update_status or update_priority, but the resource name provides basic purpose clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as create_ticket_type, get_ticket_type, or update_ticket. No context, prerequisites, or exclusions are mentioned, so the agent must infer usage from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-add_project_fileAInspect
Store an uploaded file in a project's files area, where people find it outside any one task or comment. Upload it first with twprojects-create_upload_url, then pass the reference here. Returns a numeric file ID which, unlike a reference, survives being used: pass it in attachment_file_ids on twprojects-create_task or twprojects-update_task to attach the same file to as many tasks as needed. Attaching a reference to a task, comment or message already files it here, so use this tool to store a file on its own, to describe or categorise it, or when it has to reach more than one place.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Override the name the file was uploaded with, including its extension. | |
| private | No | Hide the file from client users. | |
| tag_ids | No | A list of tag IDs to associate with the file. | |
| reference | Yes | The reference of an uploaded file, as returned by twprojects-create_upload_url or twprojects-create_file. It is "tf_" followed by a UUID and the file extension, and can only be used once. | |
| project_id | Yes | The ID of the project whose files area will hold the file. | |
| category_id | No | File it under an existing file category. Wins over category_name. | |
| description | No | A description of the file. | |
| category_name | No | File it under a category with this name, creating one when the project has none. Ignored when category_id is given. | |
| auto_new_version | No | Store it as a new version of an existing file with the same name in the project, rather than as a separate file. | |
| notify_current_user | No | Notify the user adding the file. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description explains that references are single-use, that the returned numeric file ID is reusable, and that attaching a reference already files the file in the project. This is valuable behavioral context. It does not explicitly discuss duplicate handling or non-idempotency at a behavioral level, though auto_new_version and idempotentHint are present in structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Each sentence earns its place: purpose, workflow, return-value behavior, and usage guidance. The most important information is front-loaded, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 parameters and no output schema, the description supplies the essential return type, the prerequisite workflow, and decision rules for when this tool is appropriate. Field-level details are fully covered in the schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning by explaining the reference lifecycle, the reusable numeric file ID, and how the return value connects to attachment_file_ids on task creation/update, going beyond individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'Store an uploaded file in a project's files area.' It clearly distinguishes this tool from alternatives by describing the upload prerequisite and contrasting it with attaching a reference directly to a task, comment, or message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool: to store a file on its own, to describe or categorise it, or when it must reach more than one place. It also gives the workflow sequence: create_upload_url first, then pass the reference here, then use the returned file ID in attachment_file_ids.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-add_project_memberAInspect
Add a user to a project.
| Name | Required | Description | Default |
|---|---|---|---|
| user_ids | No | Users to add. | |
| project_id | Yes | The ID of the project to add the member to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate this is a mutating, non-destructive, non-idempotent operation. The description adds the specific action of adding a user to a project but does not disclose extra behavioral context such as whether permissions are required, what side effects occur, or how repeated calls behave. With annotations covering the basic safety profile, this is minimally adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or redundant information. Every word earns its place, and the core action is stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with full schema coverage, the description is mostly sufficient. However, it does not explain the optional nature of user_ids or what happens when it is omitted, and there is no return-value guidance since no output schema exists. The description could be more helpful but is not severely incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents project_id and user_ids adequately. The description does not add further meaning, and its singular phrasing ('a user') could slightly conflict with the array type of user_ids, but the schema clarifies this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Add') and resource ('a user to a project'), clearly identifying the operation. It differentiates from sibling tools like add_project_file and create_user by specifying the project membership context. Even without mentioning 'member' explicitly, the intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives, such as create_user for new users or list_users for finding user IDs. There is no mention of prerequisites, exclusions, or conditions under which another tool should be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-clone_projectAInspect
Clone/copy an existing project or instantiate one from a template.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the project to clone. | |
| name | No | The name of the new cloned project. If not provided, the name of the original project will be used with an incremental suffix (e.g., 'Project Name (1)'). | |
| company_id | No | The ID of the company associated with the new cloned project. If not provided, the company of the original project will be used. | |
| days_offset | No | DaysOffset is the number of days to shift all scheduled dates in the cloned project relative to the base date. When cloning from a template, it defines the project duration span. When copying an existing project, it shifts the original start and end dates by this many days. If omitted, calculated automatically from the source project's date range. | |
| description | No | The description of the new cloned project. If not provided, the description of the original project will be used. | |
| target_date | No | Desired start or end date for the cloned project (chosen by template_date_target). Only applies when new_from_template=true. Format: YYYYMMDD. Defaults to today. | |
| to_template | No | Indicates whether the new project should be set as a template. | |
| new_from_template | No | Indicates whether the new project should be a regular one created from a template. | |
| template_date_target | No | Specifies whether target_date represents the project's start or end date. When 'end', the start date is calculated by subtracting the template project's duration from target_date. Only applicable when new_from_template=true. | start |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false) and not destructive. The description adds the dual-mode behavior (cloning vs template instantiation) but does not disclose side effects such as what gets duplicated, whether timers/members are copied, or how template mode is triggered. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler words. It immediately presents the action and the two use cases, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 parameters, two boolean mode switches, and no output schema, the high-level description is thin. It does not explain how an agent should indicate template vs project copying, what is returned, or what the clone includes. The schema compensates, but the description alone is not a complete entry point.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with rich per-parameter detail, so the tool description does not need to restate parameters. The description adds no parameter-level meaning beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (clone/copy/instantiate) and resource (project), and the two modes (copy existing, instantiate from template) are distinct enough to separate it from create_project. It clearly tells an agent what the tool does at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used when a project is being copied or created from a template, but it never explicitly states when to choose this over alternatives like create_project or create_project_template. No exclusion or alternative routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-complete_taskAInspect
Mark task complete.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the task to mark as complete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the agent knows this is a state-changing but non-destructive operation. However, the description adds no additional behavioral context, such as whether the task must exist, if completion is reversible, or what fields are affected. It is a bare statement of the action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence: 'Mark task complete.' It is perfectly concise, front-loaded, and contains no filler or redundant information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation with one parameter and no output schema, the description is minimally adequate. It clearly states the action and the parameter is fully documented, but it lacks any mention of return value, side effects, or preconditions beyond the annotations. The annotations provide some safety context but do not compensate for the absence of behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single 'id' parameter with 100% coverage, including its type and description. The tool description adds no parameter-specific meaning beyond what the schema already provides, which is the expected baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Mark task complete' clearly identifies the specific action (mark) and resource (task), and it distinguishes from sibling tools like twprojects-complete_timer and twprojects-update_task. The verb-resource combination is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through its direct wording, but it provides no explicit guidance about when to use this tool versus twprojects-update_task or other task-related operations. There are no stated alternatives, exclusions, or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-complete_timerAInspect
Stop a timer permanently and convert it to a timelog. Use pause_timer to pause without converting.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the timer to complete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond annotations: the action is 'permanent' and results in a conversion to a timelog. This adds meaningful context to the annotation flags. However, it does not mention permissions or further side effects, but for a simple single-id tool, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, directly front-loaded with the action, and contains no redundant or irrelevant content. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description is complete enough: it states the permanent action, the conversion result, and the alternative for pausing. It could be slightly richer by explaining what happens to the resulting timelog, but not necessary for a well-scoped timer tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully documents the only parameter ('id' with description 'The ID of the timer to complete'), so the description adds no additional parameter semantics. Schema coverage is 100%, warranting the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Stop a timer permanently and convert it to a timelog.' It uses specific verbs ('stop', 'convert') and resources ('timer', 'timelog'), and distinguishes itself from the sibling tool pause_timer with an explicit contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly provides usage guidance by saying 'Use pause_timer to pause without converting,' which tells the agent exactly when to choose this tool over a direct alternative. This is clear when-to-use/when-not-to-use information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-count_milestonesARead-onlyInspect
Exact milestone count for any filter set: one call, one number, no rows. Use for "how many milestones" questions (per project, per tag, matching a term) instead of paging twprojects-list_milestones to count rows. Use twprojects-list_milestones when the rows are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_ids | No | A list of tag IDs to filter milestones by tags. | |
| due_after | No | Only include milestones with a deadline on or after this date. | |
| due_before | No | Only include milestones with a deadline on or before this date. | |
| project_id | No | The ID of the project from which to retrieve milestones. Omit to list milestones across all projects. | |
| search_term | No | A search term to filter milestones by name. Each word from the search term is used to match against the milestone name and description. The milestone will be selected if each word of the term matches the milestone name or description, not requiring that the word matches are in the same field. | |
| match_all_tags | No | If true, match all tags; if false, match any. | |
| show_completed | No | If false, only return milestones that are not completed yet. Included by default, unlike the task and tasklist lists. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only and non-destructive. The description adds useful behavioral context beyond the annotations: one call returns one exact number, no rows, and works for any filter set. This clarifies the core behavior without being redundant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly written and front-loaded with the key purpose and behavior. Each sentence earns its place: the first states what it does, the second gives usage guidance, and the third names the alternative. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple count tool, the description covers purpose, when to use it, when not to use it, and the key behavioral trait of returning one number with no rows. An output schema exists, the annotations cover safety, and the parameters are fully documented, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all 7 parameters. The description adds a little context by mentioning filtering per project, per tag, and by search term, but it does not need to go deeper because the schema carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns an exact milestone count, with a specific verb and resource. It also distinguishes this tool from twprojects-list_milestones by emphasizing it returns a single number rather than rows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent when to use this tool: for 'how many milestones' questions, instead of paging through twprojects-list_milestones. It also names the alternative and the condition for choosing it: use twprojects-list_milestones when the actual rows are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-count_projectsARead-onlyInspect
Exact project count for any filter set: one call, one number, no rows. Use for "how many projects" questions (mine, late, per category, per tag, per company, per owner, matching a term) instead of paging twprojects-list_projects to count rows. Use twprojects-list_projects when the rows are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_ids | No | A list of tag IDs to filter projects by tags. | |
| team_ids | No | Filter projects by team, matching the projects any member of those teams belongs to. | |
| user_ids | No | Filter projects by the users holding an explicit membership of them. For "my projects", pass the ID returned by twprojects-get_user_me. | |
| company_ids | No | Filter projects by the company that owns them. | |
| search_term | No | A search term to filter projects by name or description. | |
| only_starred | No | If true, only return the projects the calling user has starred. | |
| hide_observed | No | If true, leave out the projects the calling user only observes, keeping the ones they actually work on. | |
| only_archived | No | If true, only return archived projects. | |
| updated_after | No | Only include projects whose last activity is strictly after this moment; the boundary itself does not match. Any activity in the project counts, not just edits to the project record. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| match_all_tags | No | If true, match all tags; if false, match any. | |
| project_healths | No | Filter projects by the health rating set on them, matching any of the values given. "not_set" matches the projects nobody has rated. | |
| include_archived | No | If true, return archived projects alongside the active ones; excluded by default. | |
| project_statuses | No | Filter projects by progress state, matching any of the values given. "late" is past its end date and not yet completed, "upcoming" has not started yet, "current" is running now, and "active" is every project that is neither completed nor archived. Omit to keep the endpoint's own default set. | |
| include_tentative | No | If true, return tentative projects alongside the normal ones; excluded by default. | |
| only_admin_access | No | If true, only return the projects the calling user administers. | |
| project_owner_ids | No | Filter projects by the user who owns them. | |
| project_category_ids | No | Filter projects by category. | |
| include_subcategories | No | If true, project_category_ids also matches the categories nested under the ones given. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds that the call returns an exact count, a single number, and no rows, and stresses 'one call' / no paging. It does not add caveats about auth or rate limits, but the read-only nature is reinforced and nothing in the description contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, all informative: output shape, usage trigger, and alternative tool. The most important fact ('one call, one number, no rows') is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even with 18 parameters, the description is complete for selection and invocation: it states return behavior, names the sibling to avoid, and the schema fully documents parameter semantics. Output schema covers return value details, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 18 parameters. The description adds a brief mapping of common question types (mine, late, per category, per tag) to the filter space, which is helpful but not new semantic detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('count'), a specific resource ('projects'), and the exact output semantics ('one call, one number, no rows'). It clearly distinguishes from list_projects, which returns rows, and from sibling count tools by saying 'projects'. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it: for 'how many projects' questions, and explicitly names the alternative (twprojects-list_projects) and when that should be used instead ('when the rows are needed'). This is model guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-count_tasksARead-onlyInspect
Exact task count for any filter set: one call, one number, no rows. Use for "how many" questions (totals, late, per person, per project, per tag, completed in a window) instead of paging twprojects-list_tasks to count rows. Note due_before excludes tasks with no due date, unless a related milestone due date matches. Use twprojects-list_tasks when the rows are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_ids | No | A list of tag IDs to filter tasks by tags. | |
| due_after | No | Only include tasks due after this date, excluding the day itself โ unless due_before is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's. | |
| due_before | No | Only include tasks due before this date, excluding the day itself โ unless due_after is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's. | |
| project_id | No | The ID of the project from which to retrieve tasks. Omit to list tasks across all projects. | |
| date_filter | No | Where the task's dates fall relative to today, in your own timezone. This is the filter for "late", "overdue", "due today", "started" and "upcoming"; omit it for no date restriction. overdue: due before today and not completed โ this is "late", and it never returns completed tasks whatever show_completed says. today: due today, without adding the overdue ones. thisweek: the calendar week containing today, the days of it already past included. upcoming: due today or later. started: the start date has arrived and the due date has not passed โ start date on or before today, and either no due date at all or one falling today or later. within7, within14, within30, within365: due between today and that many days from today, both days included. nodate: no start date, no due date and no milestone. anytime: no date restriction, what the endpoint applies when this is omitted. Completed tasks stay hidden unless show_completed is true, and overdue never returns one even then; for completed work alone use only_completed, which combines with any value here except overdue. A task with no due date of its own is matched on its milestone's. | |
| search_term | No | A search term to filter tasks by name. | |
| start_after | No | Only include tasks whose own start date falls on or after this date; the day itself matches. A task with no start date never matches โ there is no milestone fallback. There is no upper bound on the start date, so for work that has already begun use date_filter=started instead. | |
| tasklist_id | No | The ID of the tasklist from which to retrieve tasks. Takes precedence over project_id. | |
| created_after | No | Only include tasks created at or after this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| updated_after | No | Only include tasks updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| created_before | No | Only include tasks created at or before this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| match_all_tags | No | If true, match all tags; if false, match any. | |
| only_completed | No | If true, return only completed tasks. It combines with every other filter, date_filter included โ except date_filter=overdue, which never matches a completed task and so returns nothing. Tasks in completed tasklists still need show_completed. | |
| only_unplanned | No | If true, only return tasks that are unplanned, meaning they are missing an assignee, a due date, or estimated time. | |
| show_completed | No | If true, include completed tasks and tasks belonging to completed tasklists; both excluded by default. | |
| updated_before | No | Only include tasks updated strictly before this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| completed_after | No | Only include tasks completed at or after this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| only_unassigned | No | If true, only return tasks that have no assignee. | |
| completed_before | No | Only include tasks completed at or before this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| assignee_user_ids | No | Filter tasks by assignee. | |
| created_by_user_ids | No | Filter tasks by creator. | |
| exclude_assignee_user_ids | No | Leave out tasks assigned to any of these users. A task is dropped when any one of the listed users is assigned to it, even when it also carries assignees you did not exclude. A user reached only through a team, company or job-role assignment on the task is not matched. Combines with assignee_user_ids and every other filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond those: the result is a single number with no rows, eliminating pagination expectations, and it flags the due_before edge case about tasks without due dates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler. The core behavior is front-loaded in the first sentence, the use case in the second, and the critical due_before caveat plus sibling routing in the third. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only count endpoint with 22 fully described optional parameters and an output schema, the description covers the main gaps an agent needs: efficiency rationale, example filter categories, and the due-date edge case. It does not discuss auth or rate limits, but the annotations and schema already cover the operation's safety and parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema carries the detailed parameter semantics. The description still adds value by mapping common questions to filter groupsโ'per person, per project, per tag, completed in a window'โand by restating the milestone-related due-date caveat in plain language.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a precise operation: 'Exact task count for any filter set: one call, one number, no rows.' It clearly identifies the resource (tasks) and the kind of answer (a count), and it distinguishes itself from twprojects-list_tasks by emphasizing no row data is returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool for 'how many' questions instead of paging through list_tasks, and it names the alternative: 'Use twprojects-list_tasks when the rows are needed.' This gives the agent a clear decision rule with both when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-count_timelogsARead-onlyInspect
Exact count of time entries for any filter set: one call, one number, no rows. This counts entries, not hours โ for logged, billable or billed time totals use twprojects-summarize_timelogs. Use for "how many time entries" questions (per project, per task, per person, in a date window) instead of paging twprojects-list_timelogs to count rows.
| Name | Required | Description | Default |
|---|---|---|---|
| tag_ids | No | A list of tag IDs to filter timelogs by tags. | |
| task_id | No | The ID of the task from which to retrieve timelogs. Omit to list timelogs across all tasks. | |
| end_date | No | End of the timelog window; the boundary itself is included, and a plain date covers that whole day. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| ticketIds | No | Filter timelogs by associated desk ticket. | |
| project_id | No | The ID of the project from which to retrieve timelogs. Omit to list timelogs across all projects. | |
| start_date | No | Start of the timelog window; the boundary itself is included. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| billable_type | No | Restrict the results to billable or non-billable timelogs. Omit, or pass all, to include both. For billable hours rather than the entries themselves, twprojects-summarize_timelogs reports them without paging. | |
| invoiced_type | No | Restrict the results to timelogs that have or have not been added to an invoice. Omit, or pass all, to include both. Invoiced is not the same as billed: noninvoiced answers "what is still to be invoiced" only for billable time, so pass billable_type alongside it. | |
| match_all_tags | No | If true, match all tags; if false, match any. | |
| assigned_team_ids | No | Filter timelogs by assigned team. | |
| assigned_user_ids | No | Filter timelogs by assigned user. | |
| assigned_company_ids | No | Filter timelogs by assigned company. |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is covered. The description adds meaningful behavioral context beyond that: it is a count of entries rather than hours, returns a single number, and does not page rows. This helps prevent the common mistake of treating the count as a duration total.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the core behavior, the critical 'not hours' distinction with a named alternative, and the use case with a named alternative. The key fact is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the annotations cover safety, and the description routes between count, summarize, and list tools, nothing essential is missing. An agent can decide to call this tool and understand what it will receive without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 12 parameters in detail, including date boundary behavior and enum meanings. The description adds the high-level notion of filtering by project, task, person, or date window, but it does not need to repeat parameter-level detail. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns the exact count of time entries for any filter set, 'one call, one number, no rows.' It explicitly differentiates itself from twprojects-summarize_timelogs and twprojects-list_timelogs, so an agent can immediately tell what this tool does and does not do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('how many time entries' questions) and when-not-to-use guidance: use twprojects-summarize_timelogs for hour totals and avoid paging twprojects-list_timelogs just to count rows. This is strong, actionable routing among sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_allocationAInspect
Commit a user's time to a project over a date range (a scheduler allocation). This is planned time, a separate plane from task estimates and logged time.
| Name | Required | Description | Default |
|---|---|---|---|
| color | Yes | The allocation's colour as six hexadecimal digits, with or without a leading '#'. | |
| title | Yes | The name of the allocation, at most 100 characters. | |
| end_date | Yes | The last day of the allocation (format: YYYY-MM-DD). Must not precede start_date. Extending it ADDS committed time rather than spreading the existing total: the per-day rate is what is held constant, so the total is the working days in the range times that rate. | |
| project_id | Yes | The ID of the project to commit the time to. | |
| start_date | Yes | The first day of the allocation (format: YYYY-MM-DD). | |
| description | No | An optional description of the allocation, at most 255 characters. | |
| is_billable | No | Whether the allocated time can be charged to a client. | |
| linked_task_ids | No | The tasks to associate with the allocation. This REPLACES the whole set of linked tasks, so send every task that should stay linked. To add or remove one task without touching the rest, use twprojects-link_task_to_allocation or twprojects-unlink_task_from_allocation instead. | |
| seconds_per_day | Yes | The time committed on each working day of the range, in SECONDS โ 4 hours a day is 14400. Must be between 60 (one minute) and 86400 (24 hours). Seconds rather than hours because the hours form is a float and rounds. This rate is what is held constant: the total is the working days in the range times this, so widening the range adds committed time. | |
| assigned_user_id | Yes | The ID of the user whose time is committed. Accepts a real person or a placeholder user โ a stand-in used to plan work before the person who will do it is known. Nothing in the response distinguishes the two, so confirm which one an ID refers to before reporting who is booked. | |
| ignore_collisions | No | Skip the capacity check altogether. Prefer inform_of_over_allocation: this one also lets the change through, but suppresses the over-allocation report with it, so nobody is told the person is over-booked. It takes precedence when both are set. | |
| inform_of_over_allocation | No | Accept a change that puts the user over their capacity and report it, rather than rejecting it. Defaults to true, and the result says so when it happens. Turning it off means an over-allocating change is refused outright. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide basic false booleans, so the description carries some burden. It adds meaningful context by clarifying this is planned time, separate from actual logged time, but it does not disclose side effects like capacity checks, linked-task replacement, or that extending the date range adds committed time. Those behaviors are documented in the schema, not the description itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The core action is front-loaded, and the clarifying distinction about planned time is concise and valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is rich enough to compensate for the brief description, explaining the important nuances of end_date, seconds_per_day, linked_task_ids, and collision flags. The main gap is the lack of an output schema and no explicit statement of what the response contains, but the parameter descriptions provide strong situational completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions are unusually detailed, covering units, date semantics, collision behavior, and linked-task replacement. The tool description itself adds no parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Commit a user's time to a project over a date range') and clearly identifies the resource as a scheduler allocation. It also distinguishes this from task estimates and logged time, which helps differentiate it from siblings like twprojects-create_timelog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context that this tool is for planned/scheduler time rather than logged time or task estimates, implying when to choose it over time-logging tools. It does not explicitly name alternatives for modifications or linking tasks, but the schema parameter descriptions fill much of that gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_commentBInspect
Create comment on a task, milestone, notebook, file, or link.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The content of the comment. The content can be added as text or HTML. | |
| notify | No | Who to notify of the new comment. Omit it unless the user named who to notify: the default notifies every follower of the related entity, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}). | |
| object | Yes | The object to create the comment for. It can be a tasks, milestones, files or notebooks. | |
| content_type | No | The content type of the comment. It can be either 'TEXT' or 'HTML'. | |
| attachment_refs | No | References of files to attach to the comment, as returned by twprojects-create_upload_url or twprojects-create_file. Each is "tf_" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed. | |
| notify_current_user | No | Whether the current user should be notified about the new comment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description adds no behavioral context beyond those flags. It does not disclose side effects like notifications, permission requirements, or the non-idempotent nature of creating a new comment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with no filler, and the useful list of supported object types is front-loaded. Every word contributes meaning, making it an appropriately concise definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description alone is thin for a tool with six parameters, a nested object, and an enum, but the schema carries full parameter semantics. There is no mention of return behavior, and no guidance distinguishing this from the closely related twspaces-create_comment tool, leaving moderate gaps in overall context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema has detailed parameter descriptions, especially for notify and object. The tool description itself does not add any parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create') and resource ('comment') and enumerates the five target object types (task, milestone, notebook, file, link), so the agent can tell what this tool does. It is less explicit about distinguishing itself from twspaces-create_comment, but the listed object types make the core purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when creating a comment on one of the listed object types. It does not explicitly state when not to use it, nor does it name alternatives such as twspaces-create_comment for space comments or twprojects-update_comment for editing existing comments.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_companyCInspect
Create company (aka client).
| Name | Required | Description | Default |
|---|---|---|---|
| fax | No | The fax number of the company. | |
| zip | No | The ZIP or postal code of the company. | |
| city | No | The city of the company. | |
| name | Yes | The name of the company. | |
| phone | No | The phone number of the company. | |
| state | No | The state of the company. | |
| profile | No | A profile description for the company. | |
| tag_ids | No | A list of tag IDs to associate with the company. | |
| website | No | The website of the company. | |
| email_one | No | The primary email address of the company. | |
| email_two | No | The secondary email address of the company. | |
| manager_id | No | The ID of the user who manages the company. | |
| address_one | No | The first line of the address of the company. | |
| address_two | No | The second line of the address of the company. | |
| email_three | No | The tertiary email address of the company. | |
| industry_id | No | The ID of the industry the company belongs to. | |
| country_code | No | The country code of the company, e.g., 'US' for the United States. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
All annotations are false, so the description carries the full burden of behavioral disclosure, yet it reveals nothing beyond the fact of creation. It does not mention whether duplicate names create duplicate companies, what the response contains, whether side effects occur, or any permission requirements. The description does not contradict the annotations, but it adds no behavioral context beyond them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with zero filler, and the parenthetical 'aka client' earns its place by clarifying domain terminology. It is appropriately front-loaded with the verb first, though the brevity borders on under-specification rather than deliberate conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 17 parameters and no output schema, the description omits critical context: what the tool returns on success, how it relates to twdesk-create_company, and any uniqueness or side-effect behavior. The rich schema covers parameters, but the description fails to orient the agent on expected outcomes and tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all 17 parameters individually documented (e.g., 'The ID of the user who manages the company', 'A list of tag IDs to associate with the company'). Per the baseline rule, the description need not compensate when the schema is complete, and it does not add parameter-level meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create company') and adds useful domain context with '(aka client)'. However, it does not distinguish this tool from the sibling twdesk-create_company, which performs the same apparent action, so it earns a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus twdesk-create_company, twprojects-update_company, or other related siblings. No exclusions, prerequisites, or alternative-routing conditions are provided, leaving the agent to guess based on naming conventions alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_custom_fieldCInspect
Create custom field.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The display name of the custom field. | |
| type | Yes | The data type of the custom field. | |
| unit | No | The unit associated with the custom field, when applicable. | |
| entity | Yes | The type of entity this custom field can be applied to. Use 'all' for installation-level custom fields that are available across the workspace. | |
| formula | No | The formula expression for 'formula' type custom fields. | |
| options | No | Type-specific options for the custom field. For 'dropdown' and 'multiselect' types, provide {"choices": [{"value": "...", "color": "#rrggbb"}, ...]}. For 'rating' type, provide {"icon": "star|heart|...", "color": "#rrggbb"}. For 'number-decimal' type, provide {"decimals": <int>}. | |
| required | No | Whether the custom field must have a value when set on an entity. | |
| project_id | No | The ID of the project to scope the custom field to. When omitted, the custom field is created at the installation level. | |
| description | No | An optional description for the custom field. | |
| currency_code | No | The ISO currency code for 'currency' or 'financial' type custom fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal that the operation is not read-only and not idempotent, and the description adds no behavioral context beyond that. It does not disclose creation-level implications, such as whether the field can be modified later, whether unique names are enforced, or what side effects occur when the field is applied to entities.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely brief and front-loaded, but it repeats the tool name with no added information. This is under-specification rather than effective conciseness, especially given the tool's 10-parameter schema and complex type-specific options.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 10 parameters, type-specific options, and installation versus project scoping, the description is far too thin. The schema explains parameter formats but does not replace the need for guidance on when certain types require options, how entity scoping works, or what the tool returns on success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage and rich explanations for parameters like options, entity, and project_id, so the schema carries the semantic burden. The description itself contributes no parameter-level meaning, which keeps this at the baseline rather than above it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and resource ('custom field'), so the core intent is clear. However, it does not distinguish this tool from closely related siblings such as create_custom_field_value, create_custom_item_field, or update_custom_field, so the agent must infer the boundary from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. There is no mention of scoping choices, whether this is for project-level vs installation-level fields, or when update_custom_field or custom field value creation would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_custom_field_valueAInspect
Set a custom field value on a task, project or company. The custom field must already exist and be applicable to the target entity.
| Name | Required | Description | Default |
|---|---|---|---|
| value | No | The value to assign, typed per the field: string (text), number (number), boolean (checkbox), choice value string (dropdown/status; array for multiselect), ISO-8601 string (date). | |
| entity | Yes | The type of entity the custom field value is attached to. | |
| entity_id | Yes | The ID of the task, project or company the custom field value is attached to. | |
| country_code | No | The country code for currency-type custom field values. | |
| currency_code | No | The ISO currency code for currency-type custom field values. | |
| custom_field_id | Yes | The ID of the custom field the value belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as a non-read-only, non-idempotent operation; the description adds the useful constraint that the field must exist and be applicable, implying failure on invalid targets. It does not disclose whether an existing value is overwritten or whether a duplicate call errors, which would be more transparent for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler: the action and target are front-loaded, and the key precondition is stated immediately after. Every sentence adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only minimal annotations, the description is enough to start calling the tool but omits expected behavior when a value already exists and gives no guidance on return values. The rich value parameter schema and sibling names fill some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all parameters, including a detailed value description with types and formats, so the schema carries most parameter meaning. The description contributes only the cross-parameter constraint that the custom_field_id must be applicable to the selected entity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a direct verb ('Set') and names the resource ('a custom field value') plus the valid scopes ('task, project or company'), so an agent can tell this is a write operation on an existing custom field. It is clear but does not explicitly distinguish itself from the sibling update_custom_field_value beyond the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The prerequisite that the custom field 'must already exist and be applicable to the target entity' gives a meaningful condition for when this tool is valid. It does not name alternatives or state when to use update_custom_field_value instead, so guidance remains mostly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_custom_itemAInspect
Create a new custom item type (e.g. Contracts, Leads, Deals) on a project. Custom items are user-defined entity types โ Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID that will own the new custom item type. | |
| description | No | An optional human-readable description for the custom item type. | |
| display_name | Yes | The display name of the custom item type (e.g. "Contracts"). | |
| label_plural | No | Plural label for many records (e.g. "Contracts"). Defaults to the display name when omitted. | |
| label_singular | No | Singular label for one record (e.g. "Contract"). Defaults to the display name when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is not read-only, not idempotent, and not destructive. The description adds useful conceptual context that a custom item type is a user-defined entity type scoped to a project, but it does not disclose operational details such as permissions required, duplicate-name behavior, or downstream effects of creating a new type.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by useful domain and selection context. It is slightly redundant in repeating Contracts/Leads/Deals and in re-explaining custom items across two sentences, but every sentence contributes to the agent's routing decision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with a fully documented schema and non-conflicting annotations, gives an agent enough to select and invoke the tool correctly. It includes domain framing, built-in exclusions, and a verification workflow via list_custom_items. It does not cover edge cases like duplicate types or permissions, but those are not essential for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents every parameter clearly. The description's examples align with display_name but do not add meaningful semantics beyond the schema. This is a baseline 3 case where the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a new custom item type... on a project.' It clearly distinguishes custom item types from built-in Teamwork concepts and from record-level operations by repeatedly emphasizing 'type.' Examples like Contracts, Leads, and Deals make the target concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use these tools when the entity is NOT a built-in Teamwork concept, and lists those built-in concepts. It also provides an explicit fallback: if unsure, call twprojects-list_custom_items on the relevant project to confirm. This gives clear when/when-not guidance and names a concrete alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_custom_item_fieldAInspect
Add a field (column) to a custom item type. Field types include text, number, dropdown, multiselect, checkbox, url, user, date, time and datetime. Custom items are user-defined entity types โ Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Field data type. | |
| options | No | Choices for dropdown/multiselect fields. Each option is {label: "Active", color: "#22c55e"}. | |
| tw_type | No | Optional sub-classification for dropdown fields. Use "status" for a Status field. | |
| definition | No | Optional type-specific configuration as a JSON object. Examples: for number-decimal fields {"precision": "2", "unit": {"type": "currency"}}; for user fields {"limit": 1, "source": "workspace"}. See the API docs for the exact shape per type. | |
| display_name | Yes | Human-readable name of the field (e.g. "Status"). | |
| custom_item_id | Yes | Custom item type ID that will own the new field. | |
| position_after_id | No | Place this field after the given field ID. Null appends to the end. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal this is not read-only and not idempotent, and the description clearly states it 'Adds' a field, matching that. It adds useful context about custom item types but does not go deeper into behavioral details such as whether dropdown/multiselect fields require options, what the response looks like, or whether fields can be removed later. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with the core action front-loaded. The second sentence enumerates supported field types, useful for quick scanning. The third sentence provides necessary conceptual context and usage routing without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with a rich, fully-described schema, the description gives enough conceptual grounding to distinguish custom items from built-in concepts and directs the agent to confirm ambiguity. The only noticeable gap is that, with no output schema, it does not describe the expected return value, but this is a minor omission for a create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema description coverage is 100%, so each parameter is already documented. The description adds a high-level list of field types and explains the custom item concept, but it does not add meaning beyond the schema for individual parameters like options, definition, or position_after_id. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Add a field (column) to a custom item type.' It then explains what custom items are, distinguishing them from built-in Teamwork concepts and clarifying that this tool operates on user-defined entity types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs the agent to use these tools when an entity is NOT a built-in Teamwork concept and lists which concepts count as built-in. It also tells the agent to call twprojects-list_custom_items to confirm an unrecognized entity, which is practical routing guidance. However, it does not explicitly contrast this tool with nearby siblings like create_custom_item or create_custom_field.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_custom_item_recordAInspect
Create a record (row) on a custom item type. For example, add a Contract on the Contracts type. Pass field values by name; the tool resolves names to the API's internal IDs. Custom items are user-defined entity types โ Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name of the record (e.g. "Acme Inc Contract"). | |
| section_id | No | Optional section ID to place the record in. | |
| field_values | No | Field values to set on the record. Each entry is {field_name, value}. Field names are matched case-insensitively against the custom item type's fields. Values are coerced by field type: dropdown/multiselect accept option labels or option twIds; date/time/datetime accept ISO-8601 strings; checkbox accepts bool or yes/no/true/false; number accepts numeric or numeric string; user accepts a user ID (or array of IDs for multi-user fields). To clear a field, send null. | |
| custom_item_id | Yes | Custom item type ID that will own the new record. | |
| position_after_id | No | Place the record after the given record ID. Null appends to the end. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds genuinely useful behavior beyond the annotations: field values are passed by display name and the tool 'resolves names to the API's internal IDs', plus the heuristic of treating unrecognized entities as custom items. It does not disclose error behavior for unknown field names or the response format, but the annotated safety profile lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and a concrete example, then moves to the routing rule and fallback. At roughly five sentences it is somewhat longer than minimal, but every sentence earns its place โ the example, the built-in exclusion list, and the list_custom_items fallback are all functional rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters (including a nested field_values array) and no output schema, the description provides strong conceptual coverage: what custom items are, when to use the family, an example, and a confirmation path. The main gap is that the description does not state what the call returns (e.g., created record ID) since no output schema exists, and it does not mention failure modes for invalid field names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters, including the detailed coercion rules for field_values (dropdown option labels, ISO-8601 dates, bool for checkboxes, null to clear). The description's 'resolves names to the API's internal IDs' adds mild context for field_values, but most of the semantic weight is already carried by the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Create a record (row) on a custom item type') and a concrete example ('add a Contract on the Contracts type'). It clarifies that custom items are user-defined entity types, but it does not explicitly distinguish this tool from close siblings like twprojects-create_custom_item (which creates the type itself) โ the differentiation is only implicit in the phrase 'record (row) on a custom item type'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: use these tools when the entity is NOT a built-in Teamwork concept, and it names an explicit fallback ('call twprojects-list_custom_items on the relevant project to confirm') for unrecognized entity names. However, the guidance applies to the whole custom-item family rather than to this specific tool versus its create/update/list siblings, so no when-not-to-use rule is given for the record tools themselves.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_fileAInspect
Upload short text you are generating yourself, such as a plan, a spec or a CSV, so it can be attached to a task, comment or message. Returns a single-use reference; pass it in attachment_refs on twprojects-create_task, twprojects-update_task, twprojects-create_comment or twprojects-create_message. Content is sent inline as base64, which means you have to emit the whole file as text, so use twprojects-create_upload_url instead for anything that already exists as a file โ it hands back a URL to send the bytes to directly, and is the only safe option for a document that must stay byte-for-byte identical.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | The file content, base64-encoded with the standard alphabet. It must decode to between 1 byte and 5242880 bytes. | |
| name | Yes | The file name, including its extension, for example "plan.md". Teamwork.com works out how to display the file from the extension, so a name without one is harder to open. Any directory part is removed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already show readOnlyHint=false, so a write is expected. The description goes beyond annotations by disclosing that content is sent inline as base64, requiring the agent to emit the whole file as text, and that the returned reference is single-use. This is useful operational context that annotations do not provide. It stops short of describing error conditions or rate limits, but for this tool the key behaviors are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each purposeful. The first sentence states the core use case, the second explains the return value and how to use it, and the third clarifies the alternative and conditions. Information is front-loaded and no filler exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with only two params. The description covers the full workflow: what to upload, how the content is transmitted, where to pass the reference, and when to use an alternative. Since there is no output schema, mentioning the single-use reference is sufficient. An agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'name' and 'data' have detailed descriptions, including base64 encoding and size limits. The description does not add additional parameter semantics beyond what the schema already states. It reinforces the need to emit file as text, but that is about the tool behavior rather than parameter meaning. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (upload short text you generate), the resource type (plan, spec, CSV), and the downstream use (attaching to tasks/comments/messages). It also explicitly contrasts with twprojects-create_upload_url, making it easy to distinguish from that sibling. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use and when-not-to-use guidance: use this for short text you generate yourself, and use twprojects-create_upload_url for existing files that must stay byte-for-byte identical. Names the alternative directly and the condition that selects it, leaving no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_jobroleBInspect
Create job role.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the job role. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, confirming a write operation, but the description adds no behavioral details such as side effects, required permissions, or error conditions. It merely restates the tool's name without disclosing anything beyond what annotations already show.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence that directly states the purpose without unnecessary words. For a simple create operation with one parameter, this level of conciseness is appropriate and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with no output schema and minimal annotations, the description is too sparse. It does not explain return values, potential side effects, or even typical expectations like name uniqueness. While simple, the tool still lacks necessary context for an agent to fully understand the operation's implications.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with a clear description for the 'name' parameter. The tool description adds no extra meaning about parameters, so it provides nothing beyond the schema, which is the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create job role' clearly specifies the action (create) and the resource (job role), making its purpose unambiguous. It distinguishes itself from sibling tools like get_jobrole, update_jobrole, and list_jobroles through the explicit verb+resource combination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention any context, prerequisites, or exclusions, making it purely a statement of action without any usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_linkCInspect
Create link.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The URL of the link. This is the actual web address that the link points to. | |
| title | No | The title of the link, which provides a brief summary of the purpose of the link. | |
| notify | No | Who to notify of the new link. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true as an alias for "all", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}). | all |
| tag_ids | No | A list of tag IDs to associate with the link. | |
| project_id | Yes | The ID of the project to create the link in. | |
| description | No | The description of the link. Longer text that provides detailed information about the link. | |
| notify_current_user | No | Whether the current user should be notified about the new link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses no behavioral traits. It does not mention notification side effects, default notify behavior, or any other consequences of creating a link. The annotations offer no safety profile (readOnlyHint=false, destructiveHint=false), so the description carries the burden but fails to add context. No contradiction exists between description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but this is under-specification rather than conciseness. It is a single trivial sentence that restates the tool name and provides no substantive information, so it fails to earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with 7 parameters and no output schema, yet the description is nearly empty. A useful description would clarify what a link is, that `code` is the URL, and that creating a link may notify project members by default. The schema partially compensates, but the tool-level description is inadequate for an agent to understand the full context of the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters, including the elaborate `notify` semantics. The description 'Create link' adds no parameter-level information, so the baseline of 3 applies per the rubric.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create link.' is a direct restatement of the tool name and title, providing no additional meaning. It does not explain what a link is in this domain, what fields are involved, or how it differs from sibling tools like twprojects-get_link, twprojects-list_links, or twprojects-update_link. This is a tautology rather than a clear purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to use this tool, what prerequisites exist, or how it compares to alternatives. It does not mention that the link is created within a project, nor does it provide any scenario-based guidance. There is no misleading information, but there is also no guidance at all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_messageCInspect
Create message in a project.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The body of the message. | |
| title | Yes | The title of the message. | |
| notify | No | Who to notify of the new message. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true as an alias for "all", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}). | all |
| project_id | Yes | The ID of the project to create the message in. | |
| attachment_refs | No | References of files to attach to the message, as returned by twprojects-create_upload_url or twprojects-create_file. Each is "tf_" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed. | |
| notify_current_user | No | Whether the current user should be notified about the new message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-idempotent mutation, but the description adds no behavioral context beyond that. It does not mention side effects like default notifications to all project members or that attachment_refs are single-use; those details live only in the schema, not in the tool description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately concise, though it does not add much beyond the tool name and project context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with moderately complex parameters and no output schema, the description is minimal but the schema covers the important operational details. It is adequate for selecting the tool, though it leaves return behavior and side-effect disclosure to the parameter descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline of 3 applies. The tool description itself adds no parameter meaning, but the schema's parameter descriptions, especially for notify and attachment_refs, are detailed and self-sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create') and resource ('message'), and the phrase 'in a project' gives a scoping context that distinguishes it from chat messaging or message replies. However, it does not explicitly name or differentiate from sibling tools like create_message_reply or update_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no exclusions, and no prerequisites. The project context is implied but the description does not tell an agent when not to use it or which sibling tool to prefer in other cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_message_replyCInspect
Create message reply.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The body of the message reply. | |
| notify | No | Who to notify of the new reply. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true as an alias for "all", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}). | all |
| message_id | Yes | The ID of the message to create the reply in. | |
| notify_current_user | No | Whether the current user should be notified about the new message reply. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnly=false, destructive=false, and idempotent=false, but the description adds no behavioral context beyond the word 'Create'. It does not mention side effects, notification behavior, permissions, or return behavior. The description does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, but it is under-specified rather than effectively concise. The single sentence merely restates the tool name and provides no useful content, so it does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with no output schema and minimal description, an agent would need at least some contextual guidance about what creating a message reply entails. The schema covers parameter semantics, but the description leaves the tool's purpose, relationship to parent messages, and notification behavior to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema carries full responsibility for parameter meaning. The description adds no parameter-level detail, but compensation is unnecessary because the schema, especially for the 'notify' parameter, is already highly detailed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create message reply.' is a verbatim restatement of the tool's name and title. It does not elaborate on what a message reply is, where it is created, or what distinguishes it from twprojects-create_message or twprojects-update_message_reply.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as create_message, update_message_reply, or list_message_replies. There is no mention of prerequisites, context, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_milestoneBInspect
Create milestone in a project.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the milestone. | |
| tag_ids | No | A list of tag IDs to associate with the milestone. | |
| due_date | Yes | The due date of the milestone (format: YYYYMMDD). Used for related tasks without their own due date. | |
| assignees | Yes | Assignees for the milestone. | |
| project_id | Yes | The ID of the project to create the milestone in. | |
| description | No | A description of the milestone. | |
| tasklist_ids | No | Tasklists to associate with the milestone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral details beyond what the annotations already indicate. Annotations signal that this is a mutating, non-idempotent operation, but the description does not disclose side effects, permission requirements, uniqueness constraints, or what happens to associated tasks, tasklists, or tags. There is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or redundancy. However, it is so terse that it mostly restates the tool's name and adds little distinctive information, so it does not earn a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, a nested assignees object, and no output schema, the description is too thin to fully orient an agent. It does not mention expected response behavior, side effects, or how required fields relate to the milestone creation workflow. The schema covers inputs, but the tool-level description leaves important context unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents all 7 parameters, including the due_date format (YYYYMMDD), the assignees anyOf structure, and optional tag_ids/tasklist_ids. The description itself adds no parameter-level meaning beyond the tool's general purpose, so the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Create milestone in a project.' The verb clearly distinguishes it from siblings like update_milestone, get_milestone, and list_milestones, and the phrase 'in a project' correctly scopes the operation to a project context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. Among the sibling tools are update_milestone, list_milestones, get_milestone, and count_milestones, but the description does not mention them or explain which operation to choose under different circumstances.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_notebookCInspect
Create notebook in a project.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the notebook. | |
| type | Yes | The type of the notebook. | |
| tag_ids | No | A list of tag IDs to associate with the notebook. | |
| contents | Yes | The contents of the notebook. | |
| project_id | Yes | The ID of the project to create the notebook in. | |
| description | No | A description of the notebook. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false, and the description adds no behavioral context beyond the word 'Create'. It does not mention side effects, required permissions, or what happens to existing notebooks/tags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or repetition. It is concise, though it is also very sparse and could include a bit more actionable context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with six parameters and no output schema, a five-word description is not complete. It omits what the tool returns, any important side effects, and when to prefer update_notebook, leaving the agent to rely entirely on the schema and sibling names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all six parameters, including the required name, project_id, contents, and type. The description's 'in a project' adds no parameter semantics beyond the existing project_id description, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Create') and resource ('notebook') and states the scope ('in a project'), so an agent can tell it creates a notebook resource. It does not explicitly differentiate from sibling tools like update_notebook or get_notebook, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over alternatives such as update_notebook or list_notebooks, and no mention of prerequisites (e.g., an existing project ID or required contents/type). The only signal is the verb 'Create', which is implied rather than stated as a usage policy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_projectCInspect
Create project.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the project. | |
| end_at | No | End date of the project (format: YYYYMMDD). | |
| tag_ids | No | A list of tag IDs to associate with the project. | |
| owned_id | No | The ID of the user who owns the project. | |
| start_at | No | Start date of the project (format: YYYYMMDD). | |
| company_id | No | The ID of the company associated with the project. | |
| category_id | No | The ID of the category to which the project belongs. | |
| description | No | The description of the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate that this is a non-read-only, non-destructive, non-idempotent operation. The description adds no behavioral context beyond that, such as whether duplicate names are rejected, what the response looks like, or how defaults are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, but it is under-specified rather than efficiently concise. Two words do not provide enough substance for an 8-parameter creation tool, even though the message is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 optional parameters, no output schema, and a large sibling tool family, the bare description leaves too much to inference. It does not mention what the created project response contains, how optional parameters interact, or how this differs from creating a project template or category.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter is already documented with type and meaning. The description itself adds no parameter-level insight, keeping it at the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action and resource: 'Create project.' This is clear enough to distinguish it from sibling tools like create_project_category or create_project_template by resource type. However, it does not elaborate on what creating a project entails, so it is slightly above average but not fully informative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool instead of alternatives, nor any mention of prerequisites or selection criteria. The description gives no context about when project creation is appropriate versus other project-related operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_project_categoryCInspect
Create project category.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the project category. | |
| color | No | The color of the project category in hex format (e.g., #FF5733). | |
| parent_id | No | The ID of the parent project category, if any. This allows for nested categories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly=false, idempotent=false, and destructive=false, and the description adds no behavioral context beyond the fact of creation. It does not mention permissions, duplicate behavior, or effects on parent categories, so it provides no value beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, but it is under-specified rather than appropriately sized. One sentence is enough for the core action, but the absence of any usage or behavioral context makes it feel minimal rather than complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no description of the return value, side effects, or prerequisites. With 3 parameters including optional parent_id, an agent needs more context than 'Create project category' to confidently invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so name, color, and parent_id are already documented, including hex format and nesting semantics. The description adds no parameter details, which is acceptable given the baseline of 3 for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action and resource: 'Create project category.' This is specific enough to distinguish creating a project category from creating a project or project template. It does not explicitly contrast with siblings, but the resource noun is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as update_project_category, list_project_categories, or create_project. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_project_templateCInspect
Create project template.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the project template. | |
| end_at | No | End date of the project template (format: YYYYMMDD). | |
| tag_ids | No | A list of tag IDs to associate with the project template. | |
| owned_id | No | The ID of the user who owns the project template. | |
| start_at | No | Start date of the project template (format: YYYYMMDD). | |
| company_id | No | The ID of the company associated with the project template. | |
| category_id | No | The ID of the category to which the project template belongs. | |
| description | No | The description of the project template. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond what the annotations already convey; readOnlyHint, idempotentHint, and destructiveHint are already present. It does not disclose defaults, duplicate behavior, validation rules, permission requirements, or any side effects of creating a template.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single three-word sentence and is front-loaded, but it essentially restates the tool name and annotation title. It is under-specified rather than usefully concise, since it provides no additional information an agent could not already infer from the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description should explain at least what the created template is or what the agent should expect, but it does not. The schema covers parameters and annotations cover safety, yet the lack of usage guidance, return expectations, and relationship to other template/project tools leaves the definition thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all eight parameters have individual descriptions and types. The tool description itself adds no parameter-level meaning, but the schema already does the heavy lifting, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Create' and the resource 'project template', so an agent can tell this tool creates a project template. It does not, however, differentiate this from closely related sibling tools such as twprojects-create_project or say what a template is or how it differs from a project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives, no mention of prerequisites, and no exclusionary context. The description simply says 'Create project template' with no reference to related create tools or list_project_templates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_skillCInspect
Create skill.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the skill. | |
| user_ids | No | The user IDs associated with the skill. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is not read-only, not idempotent, and not destructive, but the description discloses nothing beyond those already-structured hints. It does not mention duplicate behavior, required permissions, return values, or any other observable effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two-word description is technically concise, but the brevity reflects under-specification rather than efficient clarity. There is no front-loaded structure or supplementary information that helps an agent use the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, no usage guidance, and no behavioral context, the description is not complete enough for an agent to confidently invoke the tool. It does not explain what a 'skill' is, what the created resource represents, or what the response will contain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with descriptions for both 'name' and 'user_ids', so the schema carries the parameter documentation burden. The description adds no additional meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is exactly 'Create skill.', which merely restates the tool name and title with the project prefix removed. It identifies a verb and resource but adds no distinguishing detail or context beyond what the name already conveys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus related tools such as twprojects-update_skill, twprojects-get_skill, or twprojects-list_skills. No context, prerequisites, or alternative conditions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_tagCInspect
Create tag.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the tag. It must have less than 50 characters. | |
| color | No | The color of the tag. It must be a valid hex color code. | |
| project_id | No | The ID of the project to associate the tag with. This is for project-scoped tags. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false, and idempotentHint=false, but the description adds no behavioral context beyond that. It does not disclose whether tags are unique per project, whether creation can overwrite existing tags, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but it is underspecified rather than appropriately concise. A single generic sentence does not provide enough substance to guide correct tool selection or invocation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with three parameters, no output schema, and multiple sibling create-tag tools, 'Create tag.' is completely inadequate. It fails to explain the project association, required fields, color formatting, or any behavioral expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters: name, color, and project_id. The description adds no parameter meaning, but the baseline of 3 is appropriate given the schema covers all parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create tag.' is essentially a tautology of the tool name twprojects-create_tag and the annotation title 'Create Tag'. It states only that a tag is created, with no mention of the project scope that distinguishes it from sibling tools like twdesk-create_tag or twspaces-create_tags.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. Multiple sibling tools also create tags, and the description does not clarify that this one is for project-scoped tags or how it differs from twdesk-create_tag or twspaces-create_tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_taskCInspect
Create task in a tasklist.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the task. | |
| notify | No | Whether to notify the task's assignees and followers, which sends them an email. Defaults to true. Set it to false for bulk or housekeeping changes nobody needs to hear about. | |
| tag_ids | No | A list of tag IDs to associate with the task. | |
| due_date | No | The due date of the task. If omitted, falls back to the milestone due date when one is set. | |
| priority | No | The priority of the task. | |
| progress | No | The progress of the task, as a percentage (0-100). Only whole numbers are allowed. | |
| stage_id | No | The ID of the workflow stage to place the new task in. Required together with workflow_id. Omit both to leave the task in the workflow's backlog. Use twprojects-list_workflow_stages to find one. | |
| assignees | No | Assignees for the task. | |
| start_date | No | The start date of the task. | |
| description | No | The description of the task. Support for plain text and Markdown formatting. | |
| tasklist_id | Yes | Tasklist ID. Use twprojects-list_tasklists to find one. | |
| workflow_id | No | The ID of the workflow to place the new task in a stage of. Required together with stage_id, and must be a workflow attached to the task's own project: another one is ignored and the task lands in the backlog, with nothing in the response saying so. Use twprojects-list_workflows to find one. | |
| predecessors | No | Task dependencies that must be completed before this task can start. | |
| parent_task_id | No | The ID of the parent task if creating a subtask. | |
| attachment_refs | No | References of files to attach to the task, as returned by twprojects-create_upload_url or twprojects-create_file. Each is "tf_" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed. | |
| change_followers | No | Followers of any task changes. | |
| comment_followers | No | Followers of any task comments. | |
| estimated_minutes | No | The estimated time to complete the task in minutes. | |
| complete_followers | No | Followers of any task completions. | |
| attachment_file_ids | No | IDs of files already in a project's files area to attach to the task, as returned by twprojects-add_project_file. Unlike a reference these can be used repeatedly, so this is how one file reaches several tasks. Files are added to whatever is already attached; nothing is removed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, but the description adds no additional behavioral context. It does not disclose potential side effects (e.g., notifications, automatic assignment to stages), failure modes, or what happens to existing data. Since the description adds nothing beyond the annotations, it fails to inform the agent about operational nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is appropriately concise and does not waste words. It is front-loaded with the core purpose. However, it is so minimal that it borders on under-specification for a tool with this complexity, but conciseness itself is well-handled.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (20 parameters, nested objects, no output schema), the description is far too brief. It does not explain what a task is, how tasklists relate, or any prerequisites beyond what is in the schema. The schema provides detailed parameter descriptions, but the tool-level description lacks the contextual guidance necessary for an agent to understand the operation's full implications, such as workflow interactions, notification behavior, or dependency handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 20 parameters are already documented in detail within the schema. The description itself does not add any parameter semantics, but per the baseline rule for high coverage, a score of 3 is appropriate. The schema descriptions are rich, covering defaults, constraints, and cross-references to other tools, so the lack of description-level detail is not a significant gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a verb ('Create') and a resource ('task in a tasklist'), which is sufficient to convey the primary action. However, it does not differentiate from sibling tools like twprojects-update_task or twprojects-complete_task, though the name itself already provides basic differentiation. It is concise and non-tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives such as update_task, move_tasks, or complete_task. It does not mention prerequisites like obtaining a tasklist_id or workflows, nor does it suggest when another tool might be more appropriate. This lack of usage guidance leaves the agent without selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_tasklistCInspect
Create tasklist in a project.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the tasklist. | |
| project_id | Yes | The ID of the project to create the tasklist in. | |
| description | No | The description of the tasklist. | |
| milestone_id | No | The ID of the milestone to associate with the tasklist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds little beyond the annotations: it essentially restates the create action. It doesn't disclose side effects, required project existence, duplicate-name behavior, or return behavior. The annotations do not contradict the description, but the description also doesn't enrich them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler and the action is front-loaded. It is concise and easy to parse, though it sacrifices some useful contextual detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create operation with fully documented parameters and annotations, this is minimally viable. However, with no output schema and no usage or behavioral notes, an agent must infer preconditions and return format from the tool name alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% description coverage for all four parameters, so the description doesn't need to add much. The description adds no extra parameter meaning, but the baseline of 3 applies because the schema fully documents the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create tasklist') with a project context, which is clear and distinguishes it from siblings like create_task and list_tasklists. It doesn't explicitly differentiate from update_tasklist or explain what a tasklist is, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as create_task, update_tasklist, or get_tasklist. It also doesn't mention prerequisites like the project needing to exist or whether the tasklist name must be unique within the project.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_teamCInspect
Create team.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the team. | |
| handle | No | The handle of the team. It is a unique identifier for the team. It must not have spaces or special characters. | |
| user_ids | No | Users to add to the team. | |
| company_id | No | The ID of the company. This is used to create a team scoped for a specific company. | |
| project_id | No | The ID of the project. This is used to create a team scoped for a specific project. | |
| description | No | The description of the team. | |
| parent_team_id | No | The ID of the parent team. This is used to create a hierarchy of teams. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description does not need to repeat these. However, the description adds no behavioral context beyond the trivial fact that it creates a team โ nothing about permissions, side effects, uniqueness, or relationships.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, which could be considered concise, but it is under-specified rather than efficient. It does not earn its place by conveying useful information; it simply restates the tool name and misses the opportunity to provide context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, including optional scoping parameters (company_id, project_id, parent_team_id) and user assignment (user_ids), the description is too minimal to be complete. An agent must rely entirely on parameter descriptions and annotations, which are not enough to fully understand when and how to use this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter having its own descriptive text (e.g., handle uniqueness, company/project scoping, parent team hierarchy). The description itself adds no parameter information, but the schema carries the burden, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create team.' is a direct restatement of the tool name 'create_team', making it a tautology. It specifies the verb and resource but provides no additional information to distinguish this tool from the many other create_* siblings or clarify what creating a team entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives, such as twprojects-create_project or twprojects-create_tasklist. There are no conditions, prerequisites, or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_timelogBInspect
Create timelog entry against a project or task.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | The date of the timelog. | |
| time | Yes | The time of the timelog in the format HH:MM:SS. | |
| hours | Yes | The number of hours spent on the timelog. Must be a positive integer. | |
| is_utc | No | If true, the time is in UTC. | |
| minutes | Yes | Minutes spent on the timelog. Must be a positive integer less than 60; otherwise increment hours instead. | |
| tag_ids | No | A list of tag IDs to associate with the timelog. | |
| task_id | No | Task the timelog is logged against. Provide exactly one of project_id or task_id. | |
| user_id | No | User the timelog is logged for. Defaults to the authenticated user. | |
| billable | No | If true, the timelog is billable. | |
| project_id | No | Project the timelog is logged against. Provide exactly one of project_id or task_id. | |
| description | No | A description of the timelog. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that this is a mutating, non-idempotent, non-destructive operation, and the description adds no behavioral context beyond 'Create.' It does not mention duplicate risk, permission requirements, effect on project totals, or whether entries can be edited later, so it provides no real value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short, front-loaded sentence with no filler or redundancy. It states the action and the key scoping constraint ('project or task') efficiently, which is ideal for quick agent scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter creation tool, the one-sentence description is minimal, but the schema covers all parameter semantics thoroughly. Missing context includes when to use this over timer-based workflows and what the effect of a successful creation is, but the structured schema fills most invocation-critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter descriptions, including the 'exactly one of project_id or task_id' rule, so the description does not need to explain parameter semantics in depth. The phrase 'against a project or task' loosely references the target parameters but adds little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Create timelog entry') and scopes it with 'against a project or task,' which clearly indicates the action. It does not explicitly contrast with sibling tools like update_timelog or create_timer, but the create action and resource are unambiguous enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as update_timelog, create_timer, or list_timelogs. The only hint is the word 'Create,' which implies a new entry, but no exclusions, alternatives, or preconditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_timerCInspect
Create and start a timer.
| Name | Required | Description | Default |
|---|---|---|---|
| running | No | If true, the timer will start running immediately. | |
| seconds | No | The number of seconds to set the timer for. | |
| task_id | No | The ID of the task to associate the timer with. | |
| billable | No | If true, the timer is billable. | |
| project_id | Yes | The ID of the project to associate the timer with. | |
| description | No | A description of the timer. | |
| stop_running_timers | No | If true, any other running timers will be stopped when this timer is created. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses only that a timer is created and started, but omits meaningful behavioral details: whether other running timers may be stopped, that starting depends on the 'running' parameter, or what happens on creation. Annotations only mark the operation as non-read-only, non-idempotent, and non-destructive, so they don't carry the behavioral burden. For a state-changing tool with no output schema, this is a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler or redundancy. It is appropriately front-loaded and earns its place without unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven optional parameters, no output schema, and no behavioral details, the description is too thin to fully guide an agent. The schema covers parameter semantics, but the description does not explain side effects, return values, or when to use this over related timer tools. The definition is adequate only for the simplest interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented with their own descriptions. The tool description adds no additional parameter-level meaning beyond the schema, which lands at the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a clear verb and resource: 'Create and start a timer.' It identifies the action (create) and the object (timer), and the addition of 'start' hints at immediate use. It is distinguishable from siblings like update_timer or pause_timer by the create verb, though it doesn't explicitly call out any sibling differences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as update_timer, resume_timer, or complete_timer. The name and description imply creation, but an agent is given no explicit context about when this is the right choice or what conditions should trigger an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_upload_urlAInspect
Reserve an upload for a file and get back a short-lived URL to send its bytes to, plus a single-use reference. Use this for any file that already exists โ a PDF, an image, a signed document โ because the bytes go straight from you to storage and are never read into the conversation. Send the file with the returned method and URL, setting exactly the headers returned and no authorization of your own. Then pass the reference in attachment_refs on twprojects-create_task, twprojects-update_task, twprojects-create_comment or twprojects-create_message. Prefer twprojects-create_file only for short text you are generating yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The file name, including its extension, for example "contract.pdf". Teamwork.com works out how to display the file from the extension, so a name without one is harder to open. Any directory part is removed. | |
| size | Yes | The exact size of the file in bytes. The reservation is signed against this number, so an upload of any other length is rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false. The description adds substantial behavioral context: the URL is short-lived, the reference is single-use, the reservation is signed against the file size, the caller must set exactly the returned headers and no authorization of their own, and the upload bytes are never read into the conversation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then gives the use case, the exact upload/send behavior, the downstream attachment_refs usage, and the alternative tool. Each sentence earns its place; there is no repetition or filler despite covering a multi-step workflow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema, the description is remarkably complete: it covers what the response contains (method, URL, reference), how to transmit the file, authentication expectations, and where to pass the reference afterward. An agent has enough to execute the full upload flow correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters with high coverage: name includes extension guidance and directory-stripping behavior, and size is described as exact and signed. The description reinforces the upload flow but does not add significant new meaning about the parameters themselves beyond what the schema provides, so the high-coverage baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Reserve an upload for a file') and clearly describes the two-part result: a short-lived URL and a single-use reference. It explicitly differentiates from twprojects-create_file by indicating when each should be preferred, so an agent can distinguish this tool from its siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('Use this for any file that already exists โ a PDF, an image, a signed document'), explains the rationale (bytes go straight to storage and are never read into the conversation), and names the alternative with a clear condition ('Prefer twprojects-create_file only for short text you are generating yourself'). It also lays out the follow-up steps for using the returned reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_userDInspect
Create user.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | The type of user, such as 'account', 'collaborator', or 'contact'. | |
| admin | No | Indicates whether the user is an administrator. | |
| Yes | The email address of the user. | ||
| title | No | The job title of the user, such as 'Project Manager' or 'Senior Software Developer'. | |
| last_name | Yes | The last name of the user. | |
| company_id | No | The ID of the client/company to which the user belongs. | |
| first_name | Yes | The first name of the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the annotations: it does not mention permissions, side effects, whether duplicate emails are rejected, or what response is returned. It neither contradicts nor supplements the readOnlyHint, idempotentHint, or destructiveHint fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two words long, which is under-specification rather than effective conciseness. There is no front-loaded useful context, and the sentence contains no information that helps an agent select or invoke the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutating create operation with 7 parameters and no output schema, yet the description provides zero context about required fields, constraints, side effects, or return values. The schema lists parameters but cannot compensate for the complete absence of behavioral guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents all 7 parameters with 100% coverage, including first_name, last_name, email, type, admin, title, and company_id. The description adds no parameter-level meaning, but the schema already handles this dimension adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create user.' merely restates the tool name (twprojects-create_user) and its title ('Create User'). It identifies a verb and resource but adds no specifics about what kind of user or what creation entails, so it is essentially a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as twprojects-update_user, twprojects-list_users, or other create_* tools. The only implication is from the name itself, with no exclusions, prerequisites, or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_workflowCInspect
Create workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the workflow. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-read-only, non-idempotent operation, but the description adds no behavioral detail (e.g., whether a workflow requires a project, effects of naming conflicts, or permission requirements). The description is silent beyond the create action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two words are concise but represent under-specification rather than effective brevity; it does not add information beyond the tool name. The description fails to earn its place as it provides no value over the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with no output schema and minimal annotations, the description leaves out essential context such as what constitutes a valid workflow, any prerequisites, or expected outcome. The tool is nearly featureless in terms of guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the only parameter 'name' with a clear description, so baseline is 3. The description itself adds no extra parameter semantics or usage hints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create workflow' restates the tool name and title verbatim, adding no additional specificity about what a workflow is or how it differs from related tools like create_workflow_stage or update_workflow. It conveys the basic action but is essentially tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance provided on when to use this tool versus alternatives such as create_workflow_stage or update_workflow. The description is a bare instruction with no context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-create_workflow_stageCInspect
Create workflow stage.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the workflow stage. | |
| workflow_id | Yes | The ID of the workflow to add the stage to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond what annotations already declare. It does not specify side effects, required permissions, ordering constraints, or any consequences of creation. Annotations indicate it's a write operation but the description provides no additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short but the single sentence is redundant with the tool name and does not earn its place. It lacks structure or added informational value, making it more under-specified than concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of many related creation tools and no output schema, the description is too minimal to fully equip an agent. It lacks information on return values, constraints (e.g., name uniqueness, ordering), or relationships to workflows, making it incomplete for effective tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters (name, workflow_id) are fully documented in the schema with clear descriptions, so the description adds no parameter-level value. Schema coverage is 100%, so the baseline of 3 applies; the description does not compensate or add further meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create workflow stage' is a near-verbatim restatement of the tool name, providing no additional scope or differentiation from sibling tools like create_workflow or update_workflow_stage. It is a tautology rather than a specific purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage context is provided. The description does not mention when to use this tool versus alternatives, nor any prerequisites such as the need for an existing workflow_id. There is no guidance on typical scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-download_fileARead-onlyInspect
Read the content of a file stored in Teamwork.com: text files come back as text, images as an image, and anything else as a base64 resource with its media type. Files over 10 MB are refused; point the user at the file's downloadURL from twprojects-get_file instead. The file ID is in a task's or message reply's attachments and a comment's files (each {id, type: "files"}), or comes from twprojects-list_files.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the file to download. | |
| version | No | The version number to download. Omit for the latest version. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| size | Yes | |
| mimeType | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond annotations: payload shape varies by type (text/image/base64 with media type) and a hard 10 MB refusal limit with a recovery path. It does not discuss auth requirements, but the added disclosure is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences with no filler: purpose/return format first, then the size limit and alternative, then ID sourcing. Every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value explanation is not required, and the description still covers format variation, the size ceiling and its workaround, and ID provenance. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `id` and `version` are documented in the schema itself. The description adds meaning about where the `id` can be sourced (attachments, comment files, list_files) but says nothing extra about `version` semantics beyond what the schema states. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (read/download file content stored in Teamwork.com) and immediately clarifies what comes back. It explicitly distinguishes itself from the sibling `twprojects-get_file`, which returns metadata rather than content, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not and alternative: files over 10 MB are refused and the user should be pointed at the file's `downloadURL` from `twprojects-get_file`. It also names concrete sources for a valid ID (task/message-reply attachments, comment files, `twprojects-list_files`), covering prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_allocationARead-onlyInspect
Get an allocation. linkedTaskEstimatedTime counts each linked task whole, and a task can sit behind more than one allocation, so it must not be summed across allocations.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the allocation to get. | |
| fields | No | The attributes to return for each allocation, from the listed names. | |
| include_financial_details | No | Include forecasted revenue and cost for the allocated time. Requires the scheduler rates entitlement and financial permission on the project; without either, the request still succeeds but the figures are withheld. Read canViewFinancialDetails on each row to tell a withheld figure from a zero one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| included | No | |
| allocation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description reveals a subtle and critical data behavior: linkedTaskEstimatedTime counts each linked task whole and must not be summed across allocations. This is genuinely non-obvious, not discoverable from the schema or annotations, and directly protects an agent from misusing a returned field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two focused sentences: the first states the operation and the second delivers a high-value caveat. There is no filler, and the most important semantic warning is prominently placed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, detailed parameter descriptions, and readOnlyHint and destructiveHint annotations, the only material missing context is the linkedTaskEstimatedTime aggregation caveat, which the description provides. Nothing else an agent needs to invoke this get-by-id tool correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the id, fields, and include_financial_details parameters are already described well, including the entitlement caveat for financial details. The tool description adds no parameter-level detail, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Get an allocation', which is a specific verb and resource that clearly states the operation. It does not explicitly contrast itself with twprojects-list_allocations, but the singular phrasing and required id parameter make the intended purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The core usage is implied by 'Get an allocation', but the description gives no explicit guidance about when to choose this tool over twprojects-list_allocations or any other sibling. There are no when-not-to-use conditions or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_commentCRead-onlyInspect
Get comment.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the comment to get. | |
| fields | No | The attributes to return for each comment, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| comments | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: no note on visibility/permissions, error behavior for missing ids, or deleted-comment handling (the fields enum hints at a 'deleted' field).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, but sized below the minimum needed to convey purpose or usage. This is under-specification rather than genuine conciseness, though it wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because an output schema exists, return values need not be explained, and 100% schema coverage documents both parameters. For a simple read-by-id tool the description could be minimal, but it still says nothing about the tool's place among the many sibling getters, leaving differentiation to the name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both the required 'id' and the 'fields' array (including its enum) fully documented in the schema. The description provides no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get comment." restates the tool name almost verbatim and adds no distinguishing information. It does not differentiate this from siblings such as twprojects-list_comments or twspaces-get_comment, so an agent gains nothing beyond the identifier itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites (e.g., needing a comment id from list_comments), and no reference to any alternative. The agent must infer all usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_companyBRead-onlyInspect
Get company (aka client).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the company to get. | |
| fields | No | The attributes to return for each company, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| company | No | |
| included | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the client alias but does not disclose additional behavioral traits such as response shape, not-found behavior, or field filtering effects. It is consistent with the annotations, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, front-loaded, and free of filler. Every word contributes: 'Get' states the action, 'company' identifies the resource, and 'aka client' resolves a common synonym.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool with a fully documented schema, an output schema, and read-only annotations, the description is largely sufficient. The alias clarification adds useful context, though it could be slightly more complete by indicating that this tool retrieves a single company while listing is handled elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'id' and 'fields' already well documented. The description itself adds no parameter-level meaning, which is acceptable given the schema already carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get company', and clarifies the domain synonym with '(aka client)'. It is clear about what the tool does, though it does not explicitly distinguish itself from similar getters like twdesk-get_company or twprojects-list_companies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not say when to use this tool versus twprojects-list_companies or twdesk-get_company, and it gives no context about prerequisites such as needing an existing company ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_custom_fieldCRead-onlyInspect
Get custom field.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the custom field to get. |
Output Schema
| Name | Required | Description |
|---|---|---|
| customfield | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral information beyond the annotations. While readOnlyHint=true and destructiveHint=false are present, the description doesn't disclose details such as error behavior when the ID doesn't exist or whether related data is included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but this is under-specification rather than conciseness. It doesn't provide enough context for tool selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, a one-parameter schema, and output schema, the basic operation is partially covered. However, the description fails to explain how this tool fits with related custom-field tools, making it minimally viable but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the single 'id' parameter with 100% coverage. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get custom field.' is a tautological restatement of the tool name, providing no additional detail about what a 'custom field' is or how this differs from sibling tools like get_custom_field_value or get_custom_item_field.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as list_custom_fields or get_custom_field_value. The description offers no context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_custom_field_valueARead-onlyInspect
Get a single custom field value from a task, project or company.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | Yes | The type of entity the custom field value is attached to. | |
| value_id | Yes | The ID of the custom field value entry to retrieve. | |
| entity_id | Yes | The ID of the task, project or company the custom field value belongs to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| customfieldValue | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description simply states a read operation, which is consistent with annotations (readOnlyHint=true, destructiveHint=false). However, it does not add any behavioral context beyond the annotation, such as what happens if the value does not exist or any permissions required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one well-structured sentence that is front-loaded with the verb and resource. Every word earns its place, and there is no redundancy or padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-get tool with a complete input schema and an output schema, the minimal description is largely sufficient. It could slightly improve by explicitly pointing to list_custom_field_values for retrieving multiple values, but the current description covers the core use case adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for all three parameters, including an enum for entity and clear descriptions for value_id and entity_id. The description does not add any additional parameter semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get'), the resource ('a single custom field value'), and the scope ('from a task, project or company'). It distinguishes itself from sibling tools like list_custom_field_values and create/update custom field value tools by emphasizing 'single'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'single' implies this is for retrieving one value, which indirectly contrasts with the list sibling tool, but it does not explicitly mention when to use this over alternatives or when not to use it. No exclusions or alternative tool names are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_custom_itemARead-onlyInspect
Get a custom item type with its fields and sections inline, so you can see its schema before creating or updating records. Custom items are user-defined entity types โ Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Custom item type ID to retrieve. |
Output Schema
| Name | Required | Description |
|---|---|---|
| included | Yes | |
| customItem | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value by explaining the returned data structure (fields and sections inline) and the purpose ('see its schema before creating or updating records'), which goes beyond the annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three efficiently written sentences: purpose first, then context, then usage guidance. Every sentence earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple read-only nature, strong annotations, and presence of an output schema, the description is complete. It covers what the tool does, when to use it, how to handle ambiguous entity names, and its role in the create/update workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the parameter clearly described as 'Custom item type ID to retrieve.' The description reinforces that the ID is for a custom item type (not a record), which helps distinguish from get_custom_item_record. This adds semantic clarity beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Get a custom item type with its fields and sections inline' with a specific verb and resource. It distinguishes from siblings like get_custom_item_record (record vs type) and list_custom_items (list vs single get) by emphasizing schema viewing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance: 'Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept...' and even gives a fallback action ('call twprojects-list_custom_items... to confirm'). This clearly differentiates from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_custom_item_fieldARead-onlyInspect
Get a single field on a custom item type. Custom items are user-defined entity types โ Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Field ID. | |
| custom_item_id | Yes | Custom item type ID the field belongs to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| customItemField | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds useful behavioral context by defining what custom items are and how they differ from built-in entities, which helps the agent understand the notional domain. It does not describe response format, but given the output schema exists and the operation is a simple read, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: one sentence for purpose, one for defining custom items, and one for usage guidance. It is front-loaded with the core action and contains no redundant information. Every sentence contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with full schema coverage, an output schema, and robust annotations, the description provides complete context. It explains the custom item domain, gives a decision rule for when to use these tools, and clarifies the entity scope. No critical information is missing for selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'id' and 'custom_item_id' clearly described in the input schema. The description adds minimal extra parameter meaning, only restating that a 'field' belongs to a 'custom item type'. Since the schema does the heavy lifting, baseline 3 is appropriate; no additional semantic value is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get a single field on a custom item type.' This specifies the verb (get), resource (field on a custom item type), and provides scope. It distinguishes from siblings by explaining custom items are user-defined entities beyond built-in Teamwork concepts, making it unique among the many get_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept...' and directs agents to call twprojects-list_custom_items to confirm unknown entities. This gives clear when-to-use and when-not-to-use context, plus an actionable alternative approach.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_custom_item_recordARead-onlyInspect
Get a single record. Field values come back keyed by display name with dropdown values translated to their human-readable labels. Custom items are user-defined entity types โ Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record ID. | |
| custom_item_id | Yes | Custom item type ID the record belongs to. |
Output Schema
| Name | Required | Description |
|---|---|---|
| customItemRecord | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, but the description adds meaningful behavioral detail: field values are keyed by display name and dropdown values are translated to human-readable labels. This informs the agent about response formatting beyond what the schema or annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a few sentences but each sentence serves a purpose: core action, output format, definition of custom items, and usage guidance. It front-loads the action and then provides necessary context. Slightly long but efficient for a non-obvious concept.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of custom items, the description covers what custom items are, when to use the tool, how to disambiguate unrecognized entities, and what the output looks like. Combined with rich schema and annotations, this is a complete picture for an agent. No critical gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'id' and 'custom_item_id' have clear descriptions. The tool description does not add parameter-specific detail, but it does clarify that custom_item_id refers to the custom item type, which is already conveyed by the schema. The baseline of 3 is appropriate given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Get a single record' refers to a custom item record. It also distinguishes this tool from related sibling tools like twprojects-get_custom_item (which gets the custom item type) and twprojects-list_custom_item_records (which lists multiple records) by focusing on a single record and explaining the custom item context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly specifies when to use these tools: when the user refers to an entity that is NOT a built-in Teamwork concept, listing those built-in concepts. It also provides a concrete alternative: if the entity is unrecognized, call twprojects-list_custom_items to confirm. This gives clear direction on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_fileARead-onlyInspect
Get a file's details: name, size, uploader, version history, the tasks, messages and comments it is attached to, and its downloadURL. The downloadURL needs the caller's own Teamwork session, so hand it to a signed-in user rather than fetching it; use twprojects-download_file to read the content here.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the file to get. | |
| fields | No | The attributes to return for each file, from the listed names. | |
| version | No | The version number whose details, size and downloadURL are returned. Omit for the latest version. | |
| include_versions | No | Whether to include the file's whole version history under versions. Defaults to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| included | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the description's value-add is the downloadURL caveat โ that the URL cannot be fetched server-side because it requires the caller's session. That is genuine operational context beyond the annotations, though it says nothing about response size, pagination, or what happens to include_versions defaults beyond the schema note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste. The return-content list is front-loaded, and the critical routing caveat about downloadURL and the alternative tool is packed into the second sentence without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value shape needn't be explained. Combined with the field enumeration and the explicit session requirement for downloadURL, an agent has everything needed to call this correctly and to avoid the common mistake of fetching the URL itself.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters (id, fields, version, include_versions) are already fully documented in the schema. The description names version history and downloadURL among returns, which loosely maps to include_versions/version, but adds no syntax or format detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ("Get a file's details") and enumerates the actual payload: name, size, uploader, version history, attached tasks/messages/comments, downloadURL. It also explicitly distinguishes itself from the sibling twprojects-download_file, so an agent can choose without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Routes the agent explicitly: use this for metadata, use twprojects-download_file "to read the content here." It also states the condition under which the returned downloadURL is usable (caller's own session, hand to a signed-in user), which is exactly the when/when-not guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_jobroleARead-onlyInspect
Get job role. The people assigned to the role come back under users, and those holding it as their primary role under primaryUsers; both are references, resolved to names under included.users.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the job role to get. | |
| fields | No | The attributes to return for each job role, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobRole | No | |
| included | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read. The description adds valuable behavior: it explains that users and primaryUsers are references that get resolved to names under included.users, which is important for processing the response correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The action 'Get job role' is front-loaded, and the second sentence efficiently packs the reference-resolution nuance. It is concise and well-ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema presumably documents the return structure, so the description needn't explain all return values. It adds the key non-obvious behavior about reference resolution. For a simple read tool with strong schema coverage.flags, this is complete. No mention of error handling, but that's a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers both parameters (id and fields) with 100% description coverage, so the schema already documents them. The description adds some context about the response fields users and primaryUsers, but this is about output rather than parameter semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get job role' with a clear verb and resource, making it obvious this is a single-entity fetch. The second sentence adds useful context about the response shape (users vs primaryUsers, reference resolution). It doesn't explicitly distinguish from sibling list_jobroles, but the name and title carry that distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool vs alternatives like list_jobroles. The description implies a single-role lookup by ID but does not state conditions for choosing it over other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_linkDRead-onlyInspect
Get link.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the link to get. |
Output Schema
| Name | Required | Description |
|---|---|---|
| link | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. However, the description itself adds no behavioral contextโno mention of return format, error behavior, or object shape. It fails to disclose anything beyond what annotations already provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
While the description is technically short, it is under-specified rather than effectively concise. It does not include enough information to be useful, mirroring the calibration example where 'Process' scored 2 for under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool exists among many sibling getters, but the description gives the agent no orientationโno explanation of what a 'link' is, when to fetch one vs list links, or any prerequisites. The output schema and annotations cover some aspects, but the description is far too thin for a complete tool definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single required 'id' parameter with 'The ID of the link to get.' The description adds no additional meaning about the parameter or the link resource. With 100% schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get link.' is a near-verbatim restatement of the tool name 'get_link', providing no additional detail about what a link is, how retrieval works, or how this differs from other getters. It is essentially a tautology, similar to the 'Process' example which scored 1.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives zero guidance on when to use this tool vs alternatives. There is no mention of using it when you have a specific link ID, nor any contrast with twprojects-list_links or twprojects-create_link. No exclusions or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_messageCRead-onlyInspect
Get message.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the message to get. | |
| fields | No | The attributes to return for each message, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that - no note on what is returned, whether missing IDs error, or the sparse-fieldset behavior of the fields parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short, but that brevity is under-specification rather than conciseness - a two-word fragment that omits everything an agent needs for selection. There is no front-loaded scope or constraint because there is effectively no content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter get tool with an output schema, the description needn't explain return values, but it should at least distinguish this tool from the other message retrieval siblings. That routing information is entirely absent, leaving the definition inadequate for correct selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and an output schema exists, so baseline 3 applies. The description adds no meaning about the required id or the fields sparse-fieldset parameter beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Get message' restates the tool name and title almost verbatim, adding no scope, no verb nuance, and no differentiation from siblings such as twprojects-get_message_reply or twprojects-list_messages. An agent cannot tell which message-related retrieval this covers from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of the alternative sibling tools (list_messages, get_message_reply), and no stated prerequisites. The description leaves the agent to infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_message_replyCRead-onlyInspect
Get message reply.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the message reply to get. | |
| fields | No | The attributes to return for each message reply, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| messageReply | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=false, and destructiveHint=false, covering the safety profile. The description adds nothing beyond this, not even noting that it returns a single reply object versus a collection, so it provides no incremental behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single short sentence with no wasted words, so it is concise. But the brevity reflects under-specification rather than efficiency, as the sentence carries almost no information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and 100% parameter description coverage, the structured fields carry most of the burden, so the sparse description is not fatal. Still, for a tool with several near-identical get/list siblings, the definition is thinner than ideal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both the 'id' and 'fields' parameters are fully documented in the schema, including the attribute enum. The description adds no meaning beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get message reply'), which is minimally clear. However, it offers no differentiation from siblings such as twprojects-get_message, twprojects-update_message_reply, or twprojects-list_message_replies, leaving the agent to infer the distinction from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like list_message_replies or get_message. No context, prerequisites, or exclusions are provided; usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_milestoneCRead-onlyInspect
Get milestone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the milestone to get. | |
| fields | No | The attributes to return for each milestone, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| milestone | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral information beyond the readOnlyHint and destructiveHint annotations. It does not mention field filtering behavior, missing resources, access requirements, or response characteristics, and it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but under-specified rather than genuinely concise: 'Get milestone' carries no new information beyond the tool name and title. There is no useful front-loaded content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID operation with fully documented parameters, an output schema, and read-only annotations, the basic invocation requirements are present. However, the description is incomplete as a selection aid because it does not explain how this differs from list_milestones or other milestone operations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters completely, including the enum of available fields for the 'fields' parameter. The description itself contributes no parameter semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get milestone' restates the tool name and title without adding any distinguishing detail. It names a generic verb and resource, but does not differentiate this from twprojects-list_milestones, twprojects-get_project, or other get tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus siblings like twprojects-list_milestones or twprojects-update_milestone. The agent is left to infer that get_milestone is for a single resource by ID.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_notebookCRead-onlyInspect
Get notebook.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the notebook to get. | |
| fields | No | The attributes to return for each notebook, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notebook | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses nothing beyond the tool name. The readOnlyHint and destructiveHint annotations already cover the safety profile, but the description adds no behavioral context such as how the notebook is returned, what happens if the id does not exist, or how the fields parameter affects the response. It is consistent with the annotations, so there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The three-word description is brief but not usefully concise; it simply restates the title. Every sentence should earn its place, and this one does not add information beyond what the tool name already provides.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple read-only getter, and the schema plus annotations cover the required id, optional fields, and read-only safety. However, the description leaves gaps about how this tool fits with sibling notebook/list tools and what the fields parameter does beyond the schema's literal text, so the context is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes both parameters clearly: id is the notebook ID and fields enumerates the selectable attributes. Since schema coverage is 100%, the lack of parameter detail in the description is acceptable, but the description also adds no extra semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get notebook.' is a verbatim restatement of the tool name and title, adding no clarifying detail about what a notebook is, how it is identified, or what the returned object contains. It is a tautology rather than a substantive purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like twprojects-list_notebooks or twprojects-get_project. The agent must infer selection purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_projectCRead-onlyInspect
Get project.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the project to get. | |
| fields | No | The attributes to return for each project, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| project | No | |
| included | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description contributes no additional behavior: it does not mention scope, response shape, relationship to the output schema, or any side effects. It is neutral but uninformative; no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short but under-specified rather than usefully concise. A single tautological sentence does not earn its place and provides no structured information for an agent to act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only get operation with a complete schema and an output schema, the tool is technically invocable from structured data alone. However, with no usage context, no sibling differentiation, and no description of the returned project or fields behavior, it falls short of genuinely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both id and fields documented in the input schema. The description itself adds nothing about parameters, but the baseline of 3 applies because the schema carries the full semantic burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get project.' exactly restates the tool name and title, so it is a tautology rather than an informative statement. It identifies the verb and resource but adds no distinguishing detail such as what a project record contains or how this differs from list_projects or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call get_project versus alternatives like twprojects-list_projects, twprojects-search, or twprojects-get_task. The only implied use is fetching by id, but nothing in the description states that condition or excludes other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_project_categoryCRead-onlyInspect
Get project category.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the project category to get. | |
| fields | No | The attributes to return for each project category, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| projectCategory | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description only repeats the read nature without disclosing any additional behavior, such as whether it returns a single category, whether fields is optional, or how it handles not-found cases. It adds no context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At seven words, the description is extremely short, but the single sentence is an under-specified restatement of the name rather than a concise information packet. It saves space but fails to earn its place because it adds no operational detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the output schema and annotations cover return values and safety, the overall description is just a label; it does not clarify the single-object nature of the call or differentiate it from list_project_categories. The tool is simple, but the description alone leaves an agent without enough context to choose it confidently among many similar get_* and list_* siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has descriptive entries for both parameters: id identifies the category, and fields lists selectable attributes. Schema description coverage is 100%, so the description need not add parameter details. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get project category.' is a direct restatement of the tool name twprojects-get_project_category. It uses the same verb and object without adding scope, qualification, or distinguishing details, so it qualifies as a tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus siblings such as twprojects-list_project_categories, twprojects-create_project_category, or other get_* tools. There are no context clues about prerequisites, selection criteria, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_skillCRead-onlyInspect
Get skill.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the skill to get. |
Output Schema
| Name | Required | Description |
|---|---|---|
| skill | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral information beyond what the annotations already convey (readOnlyHint: true, destructiveHint: false). It does not describe return behavior, error handling, permissions, or any constraints. With annotations present, the bar is lower, but the description still contributes zero extra context. There is no contradiction, but also no added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise (two words), but it is under-specified rather than efficiently informative. Every word echoes the tool name without earning its place by adding context. While it is not verbose, the extreme brevity crosses the line into vagueness, similar to the 'Process' calibration example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one parameter, output schema present), the description could be minimal, but it still fails to explain what a 'skill' is in this context or what the tool returns. It does not state that it fetches a single skill record, which leaves the agent to guess. The presence of an output schema mitigates the need to describe return values, but the description remains too skeletal to be considered complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage, with the 'id' parameter described as 'The ID of the skill to get.' The description 'Get skill' adds no further parameter semantics. According to the guidelines, baseline is 3 when schema coverage is high, and the description does not need to add much. This score reflects the adequate schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get skill.' is essentially a restatement of the tool name (twprojects-get_skill) and title ('Get Skill'). It is a tautology that provides no additional specification, such as what a skill is or that it retrieves a single skill by ID. It does not differentiate from sibling get_* tools beyond the resource name, which is already evident from the tool name itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like twprojects-list_skills or other get_* tools. It does not state prerequisites, typical use cases, or exclusions. The lack of any usage context leaves the agent to infer entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_tagCRead-onlyInspect
Get tag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the tag to get. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tag | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds no additional behavioral context such as authentication needs, return format, or edge cases. It contributes nothing beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely brief, but this is under-specification rather than appropriate conciseness. A single vague phrase like 'Get tag.' doesn't earn its place as meaningful guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description is minimal but underdeveloped. It doesn't explain what a tag is in the twprojects context, nor any behavior when the tag is not found. The output schema helps, but the description itself is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully covers the single 'id' parameter with a clear description. The tool description adds no extra parameter semantics, but the baseline is 3 because schema coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get tag.' simply restates the tool name and title, offering no specific details about what kind of tag or context. It fails to distinguish from sibling tools like twdesk-get_tag or twspaces-get_tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool vs alternatives. No exclusions, prerequisites, or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_taskDRead-onlyInspect
Get task.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the task to get. | |
| fields | No | The attributes to return for each task, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| task | No | |
| included | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations present, the bar is lower, but the description still fails. It does not disclose any behavioral traits beyond what annotations provide (readOnlyHint, openWorldHint, idempotentHint, destructiveHint). It doesn't mention what gets returned, pagination, permission requirements, or any other operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two words and a period. It is under-specified rather than concise. It wastes the opportunity to front-load useful context and provides no structure to aid comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (two parameters, one required) and the presence of an output schema, the description is completely inadequate. Even with annotations and schema, the description should provide enough context for an agent to select and invoke the tool correctly. It fails to do so.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters (id and fields). The description adds no meaning beyond the schema. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get task.' is essentially a tautology that restates the tool name without adding informational value. While it technically identifies a retrieval operation on a task, it offers no differentiation from sibling tools like twprojects-get_tasklist or twprojects-get_milestone, nor does it specify scope or behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description offers no context about when to use this tool, no prerequisites, no alternatives, and no exclusions. An agent cannot infer when this tool is appropriate versus other retrieval tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_tasklistCRead-onlyInspect
Get tasklist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the tasklist to get. | |
| fields | No | The attributes to return for each tasklist, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| tasklist | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety traits. However, it adds no behavioral context such as whether a full tasklist object is returned, how the fields parameter affects the response, or any scoping constraints. The description contributes no transparency beyond what the name and schema already imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three words and has no fluff, so it is certainly concise. However, it is also too sparse to add meaningful value beyond the tool name/title, and it borders on under-specification. It is functional but not a well-structured, informative description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with a rich output schema and safety annotations, the description is minimally adequate. But it does not mention when to prefer this tool over list_tasklists or how the fields parameter influences the result, so the agent must rely entirely on sibling names and schema details. The description leaves out contextual guidance that would make invocation decisions easier.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes both parameters with 100% coverage: id is the tasklist ID and fields selects which attributes to return. The description adds no additional parameter semantics, but none are required because the schema carries the full burden. A baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb and resource ('Get tasklist'), so the core purpose is clear. However, it is essentially a restatement of the tool name/title and provides no differentiation from sibling tools such as get_task or list_tasklists. It is not vague, but it adds nothing beyond the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like list_tasklists for enumerating tasklists or get_task for tasks. No usage context, exclusions, or prerequisites are mentioned, leaving the agent to infer the tool's role from its name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_teamCRead-onlyInspect
Get team.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the team to get. |
Output Schema
| Name | Required | Description |
|---|---|---|
| team | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, so the safety profile is already known. The description adds no behavioral context beyond what annotations provide, such as what data is returned or any side effects. With annotations covering the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise (one sentence, two words) and front-loaded. It is not verbose, but it is under-specified rather than efficiently concise. It earns a 4 for brevity but loses a point for lack of substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple get-by-id operation with a single parameter and an output schema, so the description need not be extensive. However, it provides no context about what a team is, what fields are returned, or any related entities. Given the tool's simplicity, a 2 is slightly harsh but the description is too minimal to be considered complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single 'id' parameter, which is well-documented as 'The ID of the team to get.' The description adds no additional meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get team.' is a clear verb+resource statement, but it lacks specificity about what a 'team' is in this context (e.g., a project team, a company team) and does not distinguish it from other get_* tools. It is minimally adequate but not informative beyond the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention any context, prerequisites, or exclusions. The agent must infer usage from the tool name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_timelogCRead-onlyInspect
Get timelog.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the timelog to get. | |
| fields | No | The attributes to return for each timelog, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| timelog | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral information beyond what the annotations already provide. readOnlyHint=true and destructiveHint=false cover the safety profile, but the description does not mention behavior such as 404 handling, whether deleted timelogs are returned, or how the optional fields parameter affects the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although the description is extremely short, it is under-specified rather than usefully concise. It merely repeats the tool title and does not earn its place by adding any clarifying detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations, a full parameter schema, and an output schema cover many operational details, so this is not severely incomplete. However, the description still lacks basic context about what makes this tool distinct from list_timelogs and what 'get' implies for a single resource.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both the id and fields parameters have clear descriptions in the schema. The tool description itself adds no parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get timelog.' is essentially a restatement of the tool name twprojects-get_timelog and the annotation title 'Get Timelog'. It provides no additional meaning, such as retrieving a single timelog by ID, and does nothing to distinguish this tool from siblings like twprojects-list_timelogs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives. An agent must infer from sibling names that twprojects-list_timelogs likely handles listing multiple timelogs, but the description itself provides no explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_timerCRead-onlyInspect
Get timer.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the timer to get. | |
| fields | No | The attributes to return for each timer, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| timer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond what the annotations already declare. It does not mention not-found behavior, response shape, or any scoping details. The read-only annotation covers safety, but the description itself contributes nothing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but this is under-specification rather than effective conciseness. The single sentence merely repeats the title and does not structure any useful information for the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a complete input schema, an output schema, and read-only annotations, the minimum invocation details are present. However, the absence of any differentiation from the many sibling timer tools makes the description only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage for both parameters, including clear descriptions for 'id' and 'fields'. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get timer.' is essentially a verbatim restatement of the tool name and title, providing no additional detail such as retrieval by ID, singular vs. list semantics, or relationship to other timer tools. It is a tautology rather than an explanatory description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like twprojects-list_timers, twprojects-update_timer, or twprojects-complete_timer. There are no usage conditions, exclusions, or selection cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_userBRead-onlyInspect
Get user.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the user to get. | |
| fields | No | The attributes to return for each user, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| person | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral detail beyond what the annotations already provide. The readOnlyHint=true and destructiveHint=false cover the safety profile, but the description does not mention any additional behavior such as lookup semantics, error cases, or restrictions. There is no contradiction, but there is also no added transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero filler. It is appropriately compact for a simple retrieval tool, though it is so minimal that it borders on under-specification rather than genuine explanatory conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id operation with one required parameter, an optional field-selection array, a full output schema, and read-only annotations, the description is nearly sufficient. The main missing element is explicit guidance distinguishing this from other user-related tools, but the schema and tool name cover most operational needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents both 'id' and 'fields' clearly. The description itself contributes no parameter-level meaning, which keeps this at the baseline of 3 rather than lower.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get user.' While it is extremely terse and essentially mirrors the tool name, it is unambiguous about the core operation. It does not differentiate from sibling tools like twdesk-get_user or twprojects-get_user_me, so it does not earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives such as twprojects-list_users, twprojects-get_user_me, or twdesk-get_user. The required 'id' parameter implies retrieval of a specific user, but the description itself provides no usage context, exclusions, or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_user_meARead-onlyInspect
Get the currently authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| person | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is adequately covered. The description adds no further behavioral context like auth requirements, rate limits, or response structure, but it does not contradict the annotations either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that immediately conveys the tool's purpose. There is no redundant wording, and the structure is optimally front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with an output schema, the description is completely sufficient. It states exactly what the tool does, and the output schema (though not shown) would handle return value details. The simple nature of the endpoint means no additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is empty with 100% coverage. The description correctly implies no parameters are needed, and with 0 params the baseline score is 4; there is no missing parameter information to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get the currently authenticated user' uses a specific verb and resource, clearly distinguishing it from siblings like 'twprojects-get_user' (which implies retrieving a user by ID) and 'twchat-get_current_user' (which targets chat context). The phrase 'currently authenticated' definitively scopes the operation to the logged-in user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to choose this tool over similar alternatives such as 'twchat-get_current_user' or 'twprojects-get_user'. The description is a one-liner with no mention of use cases, exclusions, or preferred scenarios, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_workflowCRead-onlyInspect
Get workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the workflow to get. | |
| fields | No | The attributes to return for each workflow, from the listed names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| workflow | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds no behavioral detail beyond the word 'get'. It doesn't mention field selection behavior, default returned attributes, or anything about the operation's effects or requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but under-specified rather than effectively concise. A two-word sentence that simply repeats the tool name does not earn its place and leaves all useful context to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The operation is a simple get-by-id with a complete input schema and an output schema, so an agent can technically call it. However, the description provides no resource context or relationship to sibling workflow tools, leaving clear semantic gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both id and fields have descriptions, and fields has an enum. The description itself adds no parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is literally 'Get workflow.', which restates the tool name and title without adding any detail. It identifies a verb and resource, but says nothing about what a workflow is, that it is fetched by ID, or how it differs from list_workflows or get_workflow_stage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is provided: it does not say to use this when a workflow ID is known, nor does it point to list_workflows for fetching all workflows. The agent must infer usage entirely from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-get_workflow_stageCRead-onlyInspect
Get workflow stage.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the workflow stage to get. | |
| fields | No | The attributes to return for each workflow stage, from the listed names. | |
| workflow_id | Yes | The ID of the workflow that owns the stage. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stage | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral detail beyond what the annotations already declare, such as readOnlyHint=true and destructiveHint=false. It does not explain that this is a read-only lookup, how workflow_id and id relate, or what operational behavior to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although the description is short, it is not meaningfully concise because it simply repeats the tool title. A concise description should still earn its space by adding scoping or usage detail; this one does not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema and output schema carry the structural details, but the description fails to orient the agent about single-stage retrieval within a workflow or how this relates to list_workflow_stages. The description is technically usable but incomplete for a tool surrounded by many similar getter/list tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with each parameter (id, fields, workflow_id) individually documented. The tool description contributes no additional parameter insight, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description "Get workflow stage." is essentially a verbatim restatement of the tool title "Get Workflow Stage", so it adds no new semantic information. It names a verb and resource but does not distinguish getting a single stage from listing workflow stages via twprojects-list_workflow_stages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool instead of alternatives like twprojects-list_workflow_stages or twprojects-get_workflow. The description gives no context, conditions, or exclusions, so the agent must infer usage from the schema and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-link_project_to_workflowAInspect
Link a project to a workflow so its tasks track through workflow stages.
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | The ID of the project to link to the workflow. | |
| workflow_id | Yes | The ID of the workflow to link the project to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-idempotent, non-destructive operation. The description adds the effect that tasks track through workflow stages, which is useful, but it doesn't disclose potential side effects like unlinking previous workflows or handling already-linked projects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that states the action and its purpose. It is concise, front-loaded, and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple linking operation with two fully described parameters and useful annotations, the description is mostly complete. It conveys the core purpose and effect. It could be more complete by noting any constraints (e.g., one workflow per project), but it's sufficient for basic selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully describes both parameters (project_id and workflow_id) with clear descriptions. The tool description adds no additional parameter-level detail, so the schema carries the semantic burden, resulting in a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Link a project to a workflow' and adds the purpose 'so its tasks track through workflow stages.' This clearly distinguishes it from related tools like move_task_to_workflow_stage or create_workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys the context for use: when you want a project's tasks to follow a workflow's stages. It does not explicitly mention when not to use it or provide alternative tool names, but the intended use case is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-link_task_to_allocationAInspect
Link one task to an allocation, showing what task work sits behind the committed time. The task and the allocation must be in the same project. This adds a single link and leaves the allocation's other links alone, unlike linked_task_ids on twprojects-update_allocation, which replaces the whole set.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The ID of the task to link. Must belong to the allocation's project. | |
| allocation_id | Yes | The ID of the allocation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond annotations: it is a non-replacing, additive mutation that 'leaves the allocation's other links alone,' and it enforces a same-project requirement. It doesn't discuss permission requirements or duplicate-link behavior, but the annotations already signal a non-read-only, non-destructive write, so the added context is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the action and purpose, the second gives the precondition, and the third distinguishes from the sibling update tool. No filler or redundant repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter link operation with no output schema, the description is complete: it explains the operation, the constraint, and how it differs from the closest alternative. Nothing necessary for an agent to correctly select and invoke the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The schema already documents that task_id must belong to the allocation's project; the description reinforces this constraint but adds little new param-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Link one task to an allocation,' and explains the purpose ('showing what task work sits behind the committed time'). It distinguishes itself from twprojects-update_allocation by clarifying it adds a single link rather than replacing the whole set, so an agent can tell it apart from related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the alternative (twprojects-update_allocation with linked_task_ids) and states the difference: this tool adds a single link, while update_allocation replaces the entire set. It also states the same-project precondition, giving the agent clear conditions for when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_activitiesARead-onlyInspect
List recent activity events. Scope by project_id or omit for site-wide.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each activity, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| end_date | No | End of the activity 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 covers that whole day in UTC. | |
| item_ids | No | Filter activities by the IDs of the items they refer to, such as task, milestone or message IDs. Item IDs are only unique within an item type, so combine this with log_item_types to avoid matching activities of other types that happen to share an ID. | |
| order_by | No | The field to sort the activities by. Omit to keep the ordering the API applies by default. | |
| user_ids | No | Filter activities by the users who created them. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching activities, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| project_id | No | The ID of the project to retrieve activities from. Omit to list activities across all projects. | |
| start_date | No | Start of the activity 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. | |
| log_item_types | No | Filter activities by item types. | |
| exclude_user_ids | No | Exclude activities created by these users. Pass the current user's ID to drop their own activity from the feed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| activities | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the read-only/non-destructive profile, so the description only needs to add behavioral context. It adds 'recent' and the site-wide default, which is helpful, but it does not disclose default ordering, pagination behavior, or the fact that activities span many item types. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action and resource, with no filler or repetition of the schema. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list with 14 parameters and rich schema descriptions, this is acceptable but minimal. It doesn't explain what counts as an 'activity' or that this is the cross-cutting event feed, which matters when an agent chooses among many list_* siblings. The output schema and parameter descriptions cover the details, so it is not severely incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 14 parameters with detailed descriptions. The description's mention of project_id is a useful highlight but adds little beyond the schema's own 'Omit to list activities across all projects.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('recent activity events'), and adds a concrete scoping instruction for project_id. It is not a tautology, but it does not differentiate 'activity events' from sibling tools like list_comments or list_timelogs, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one clear usage hint โ include project_id to narrow to a project or omit for site-wide โ but it never tells the agent when to prefer this activity feed over related list_* tools (e.g., list_timelogs, list_comments), nor when not to use it. The context is useful but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_allocationsARead-onlyInspect
List scheduler allocations โ who is committed to which project, and when. ALWAYS pass start_date and end_date: with neither set the endpoint returns only today through 30 days from today, and says nothing about having narrowed the range, so an unbounded call silently answers a question about a wider period with one month of data. Allocations are planned time and a separate plane from task estimates and logged time; the two are not summed. linkedTaskEstimatedTime counts each linked task whole and must not be summed across allocations.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each allocation, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| end_date | No | Return allocations overlapping up to and including this day (format: YYYY-MM-DD). Defaults to 30 days from today when omitted. | |
| order_by | No | The field to sort the allocations by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching allocations, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| start_date | No | Return allocations overlapping this day onwards (format: YYYY-MM-DD). Defaults to today when omitted. | |
| project_ids | No | Only return allocations on these projects. | |
| search_term | No | A search term to filter allocations by title. | |
| show_deleted | No | Return ONLY deleted allocations instead of the active ones โ this replaces the result set rather than adding to it, so a call with this set says nothing about what is currently scheduled. Deleting an allocation is a soft delete, and this is how a deleted one is found again. | |
| deleted_after | No | Only return allocations deleted at or after this moment; the boundary itself matches, unlike updated_after. Pair it with show_deleted, which is what switches the results to deleted allocations. 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. | |
| updated_after | No | Only return allocations 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 that whole day in UTC. | |
| project_status | No | Only return allocations on projects with this status. | |
| project_tag_ids | No | Only return allocations on projects carrying these tags. | |
| assigned_user_ids | No | Only return allocations assigned to these users. Accepts real people and placeholder users alike. | |
| project_owner_ids | No | Only return allocations on projects owned by these users. | |
| project_company_ids | No | Only return allocations on projects belonging to these companies. | |
| project_category_ids | No | Only return allocations on projects in these categories. | |
| assigned_user_team_ids | No | Only return allocations whose assigned user belongs to one of these teams. | |
| match_all_project_tags | No | Require a project to carry every tag in project_tag_ids rather than any of them. | |
| include_financial_details | No | Include forecasted revenue and cost for the allocated time. Requires the scheduler rates entitlement and financial permission on the project; without either, the request still succeeds but the figures are withheld. Read canViewFinancialDetails on each row to tell a withheld figure from a zero one. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| included | No | |
| allocations | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses a genuinely dangerous behavior well beyond the readOnlyHint annotation: omitting both dates silently returns only today-through-30-days and "says nothing about having narrowed the range," so an unbounded call quietly misanswers a wider-period question. Also discloses the linkedTaskEstimatedTime whole-count trap and the planned-vs-logged semantic trap โ exactly the non-obvious traits that cause incorrect use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, no filler. Purpose is front-loaded in sentence one, the single most dangerous operational warning (ALWAYS pass dates) comes immediately after, and the two semantic trap warnings close it out. Every sentence earns its place; the long second sentence is justified because the nuance โ the API gives no signal that it narrowed the range โ is essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 23-parameter, 0-required list tool with an output schema and readOnly/destructive annotations already set, the description covers everything an agent could not infer elsewhere: the date-default trap, the conceptual separation from timelogs/tasks, and the non-summing rule for linkedTaskEstimatedTime. All individual parameters are fully documented in the schema, so nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds real value on top by explaining why start_date/end_date must be passed together โ the silent truncation risk is not inferable from the schema's per-parameter defaults, which each look benign in isolation. It also clarifies the meaning of linkedTaskEstimatedTime beyond its bare field enum entry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource โ "List scheduler allocations" โ and immediately defines the domain: "who is committed to which project, and when." The follow-up distinction that allocations are "planned time and a separate plane from task estimates and logged time" cleanly separates it from siblings like twprojects-list_timelogs and twprojects-list_tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear decision boundary: this tool is for planned commitments, not logged time or task estimates, and "the two are not summed," which warns an agent not to combine this data with timelog data. However, it never names the alternative tools (e.g., twprojects-list_timelogs) that should be used when logged time is the actual need โ the routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_calendar_eventsARead-onlyInspect
List events from a calendar, including time-blocking events that link a calendar slot to a Teamwork project, task or timelog. Omit calendar_id to read the calling user's own calendar. Use twprojects-list_calendars to name a different one; the calendar of type 'blocked_time' holds the account's time-blocking events.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of events to return. | |
| cursor | No | Cursor for fetching the next page of results. | |
| fields | No | The attributes to return for each calendar event, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the calendar events by. Omit to keep the ordering the API applies by default. | |
| order_mode | No | The direction to sort the results in. | |
| calendar_id | No | The ID of the calendar to list events from. Omit it for the calling user's own calendar: the connected Google or Outlook calendar when there is one, otherwise the calendar of type 'blocked_time'. Every event reports the calendar it came from. | |
| ended_before_date | No | Only include events ending before this day starts, so the day named here is itself excluded โ pass the day after the last one you want (format: YYYY-MM-DD). Note the asymmetry with started_after_date. | |
| started_after_date | No | Only include events starting on or after this day, which is itself included (format: YYYY-MM-DD). |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| events | No | |
| included | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly and non-destructive. The description adds useful behavioral context beyond annotations, such as the default calendar behavior when calendar_id is omitted and the fact that blocked_time calendars hold time-blocking events. No contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the primary action, then provides the most decision-relevant details about default calendar selection and the sibling tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the non-obvious selection logic (default calendar, blocked_time, alternate calendar lookup) while pagination and filtering parameters are fully described in the schema. Since an output schema is present, nothing needed to invoke the tool correctly appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented. The description adds context around calendar_id's default behavior but does not materially expand parameter semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'List events from a calendar.' It also names the distinguishing time-blocking behavior that links calendar slots to Teamwork projects, tasks, or timelogs, which separates it from sibling list tools like twprojects-list_calendars.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains when to omit calendar_id to read the calling user's own calendar, and it names twprojects-list_calendars as the alternative for selecting a different calendar. This gives an agent concrete decision guidance for choosing between related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_calendarsARead-onlyInspect
List calendars. Calendars hold events such as meetings, out-of-office periods and time-blocking entries; the calendar of type 'blocked_time' holds the account's time-blocking events.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each calendar, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the calendars by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching calendars, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| calendars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds domain context about calendars and the 'blocked_time' type, but it does not disclose additional behavioral traits such as result scope, default ordering, pagination behavior, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The primary action is front-loaded, and the second sentence adds meaningful context about calendar types, earning its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Combined with the fully documented input schema, output schema, and read-only annotations, the description is largely complete for a simple list operation. It could be slightly stronger by explicitly indicating that events are retrieved via twprojects-list_calendar_events, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage across all 7 parameters, so the schema already documents parameter semantics. The description adds a helpful note about the 'blocked_time' type value, but it does not explain any parameter behavior beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb+resource: 'List calendars.' It defines what calendars are and highlights the special 'blocked_time' calendar type for time-blocking events, making it easy to distinguish from the sibling twprojects-list_calendar_events, which lists events rather than calendars.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The imperative 'List calendars' implies the intended use case, and the explanatory sentence provides useful domain context. However, it does not explicitly state when to prefer this over twprojects-list_calendar_events, nor does it mention any exclusions, prerequisites, or alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_commentsARead-onlyInspect
List comments. Scope by one of task_id, milestone_id, notebook_id, link_id, or file_version_id; omit all for site-wide. Comment bodies are truncated at 500 characters and marked where they are cut; use twprojects-get_comment for the full text.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each comment, from the listed names. | |
| link_id | No | The ID of the link to retrieve comments for. Provide this to scope comments to a link. | |
| task_id | No | The ID of the task to retrieve comments for. Provide this to scope comments to a task. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the comments by. Omit to keep the ordering the API applies by default. | |
| user_ids | No | A list of user IDs to filter comments by | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching comments, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| notebook_id | No | The ID of the notebook to retrieve comments for. Provide this to scope comments to a notebook. | |
| search_term | No | A search term to filter comments by name. | |
| milestone_id | No | The ID of the milestone to retrieve comments for. Provide this to scope comments to a milestone. | |
| updated_after | No | Only include comments edited strictly after this moment; the boundary itself does not match. Defaults to the last 3 months. 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. | |
| file_version_id | No | The ID of the file version to retrieve comments for. Each file can have multiple versions, and comments can be associated with specific versions. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| comments | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context: bodies are truncated at 500 characters with markers, and that omitting all scope parameters returns site-wide data. It does not mention the default last-3-months window, though the schema documents that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the action, followed by scoping rules and the truncation caveat. No filler and every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value details need not be explained, and the description covers scoping, truncation, and the full-text alternative. It omits guidance on pagination and the default time window, both of which live in the schema, leaving only minor gaps for a 15-parameter list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantics not present in the schema: the scope parameters are mutually exclusive ('one of') and their absence produces a site-wide query. That exclusivity rule meaningfully changes how an agent would populate the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List comments') and immediately delineates the scoping mechanism from the sibling 'twprojects-get_comment' used for full text. An agent can distinguish this from the other comment tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to scope by exactly one of the five ID parameters and to omit all for site-wide results, and names the alternative (twprojects-get_comment) for retrieving untruncated bodies. It stops short of guiding pagination (page/page_size) or when to prefer count_only/search filtering versus a plain list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_companiesBRead-onlyInspect
List companies (aka clients).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each company, from the listed names. | |
| tag_ids | No | A list of tag IDs to filter companies by tags. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the companies by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching companies, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| search_term | No | A search term to filter companies by name. Each word from the search term is used to match against the company name. | |
| match_all_tags | No | If true, match all tags; if false, match any. | |
| order_by_custom_field_id | No | The custom field to sort the companies by. Required when order_by is "customfield", and ignored otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| included | No | |
| companies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The read-only and non-destructive nature is already covered by annotations, but the description adds no behavioral context beyond the word 'list.' It does not mention pagination defaults, response behavior, or any side effects, so it contributes little beyond what annotations already provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single tight sentence with no filler. The alias is placed immediately after the core statement, making it easy to parse and quickly actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, complete parameter descriptions, and read-only annotations, the tool is adequately specified for a simple list operation. However, it omits any explanation of pagination/filtering behavior and gives no context for choosing this over twdesk-list_companies, leaving a moderate completeness gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter has its own description, so the baseline applies. The description adds no parameter-level meaning; 'aka clients' clarifies the resource but not any of the 11 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('List') and resource ('companies'), and adds the alias 'clients' for clarity. It does not explicitly differentiate this from the near-identical sibling twdesk-list_companies, but the resource is clear and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. Given that twdesk-list_companies also exists and lists companies, an agent is left to infer the appropriate domain from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_custom_fieldsCRead-onlyInspect
List custom fields.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Custom field IDs to retrieve. | |
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each custom field, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| entities | No | Filter custom fields by entity type. | |
| order_by | No | The field to sort the custom fields by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching custom fields, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| project_ids | No | Filter custom fields by project. | |
| search_term | No | A search term to filter custom fields by name. | |
| show_deleted | No | Whether to include deleted custom fields in the results. | |
| only_site_level | No | Whether to return only installation-level custom fields. | |
| include_site_level | No | Whether to also include installation-level custom fields when filtering by project. | |
| only_project_level | No | Whether to return only project-level custom fields. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| customfields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true and destructiveHint=false already cover the safety profile, so the description need not restate it. But the description adds no behavioral context beyond the titleโno mention of pagination, count-only mode, verbose behavior, or deleted-field inclusionโso it contributes nothing beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is maximally concise with zero wasted words, but it adds little over the title 'List Custom Fields' and front-loads no discriminating or scoping information that would help an agent select the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The rich schema (100% parameter coverage), output schema, and safety annotations carry most of the burden, so the short description is not fatally incomplete. Still, for a 15-parameter tool, even one sentence clarifying scope or alternatives would meaningfully improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all 15 parameters documented (e.g., count_only returns {'count': N} and ignores other params; verbose=false returns id+name only). Per the baseline rule, the description need not add parameter details, and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('custom fields'), so the core purpose is clear. However, it essentially restates the tool name/title and does not differentiate from sibling tools like twprojects-get_custom_field or twprojects-list_custom_field_values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description offers no indication of when to use this tool over twprojects-get_custom_field for a single field, nor any mention of the rich filtering capabilities (entities, project_ids, show_deleted) that distinguish this listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_custom_field_valuesBRead-onlyInspect
List the custom field values of a task, project or company.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| entity | Yes | The type of entity to list custom field values for. | |
| fields | No | The attributes to return for each custom field value, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| entity_id | Yes | The ID of the task, project or company to list custom field values for. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching custom field values, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| custom_field_ids | No | Filter by custom field. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| customfieldValues | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is fully covered and the description's "List" action is consistent with it โ no contradiction. However, the description adds no behavioral context beyond the annotation coverage: nothing about pagination defaults, count_only mode, or empty-result behavior, though the schema does document the parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single 12-word sentence that leads with the verb and resource, with the entity scope front-loaded and zero filler. Every word earns its place; nothing is redundant or ornamental.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 8 parameters with rich options (pagination, count_only, verbose, custom_field_ids filtering), the schema documents them at 100% and an output schema exists, so the description needn't rehearse mechanics or return shapes. The one-sentence description is essentially sufficient for selection, though a hint that filtering and count modes exist would make it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters carry structural documentation and the baseline of 3 applies. The description's mention of "task, project or company" echoes the entity enum without adding meaning beyond the schema, so it neither compensates for gaps nor adds value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ("List"), a precise resource ("custom field values"), and scopes it to three entity types ("task, project or company"). This distinguishes it implicitly from close siblings like twprojects-list_custom_fields (field definitions vs. values) and twprojects-get_custom_field_value (single vs. plural), though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to choose this tool over its alternatives. The entity scope is a mild implied usage hint, but there is no when/when-not guidance โ e.g., nothing tells an agent to prefer twprojects-list_custom_fields for field definitions or twprojects-get_custom_field_value for a single value, and no behavior is described for entities without custom field values.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_custom_item_fieldsARead-onlyInspect
List fields on a custom item type. Each entry includes the twId you need when writing record values. Custom items are user-defined entity types โ Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Restrict to these field IDs. | |
| page | No | Page number for pagination of results (1-based). | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching custom item fields, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| search_term | No | A search term to filter custom item fields by display name. | |
| show_deleted | No | Include deleted fields. | |
| custom_item_id | Yes | Custom item type ID to list fields for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| customItemFields | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by explaining that entries expose the twId needed for writing record values and by clarifying what custom items are, though it does not detail pagination or count_only behavior โ those are left to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary action and stays reasonably compact. The custom-item definition and routing guidance earn their place, though the generic 'Use these tools' phrasing is slightly broader than this single tool and adds minor noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, annotations cover the read-only safety profile, and the schema fully documents parameters, the description supplies the missing decision-making context: what custom items are, when to use these tools, and why the returned twId matters for subsequent record writes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all 8 parameters already documented in the input schema. The description does not add parameter-level details, but it doesn't need to compensate for gaps; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List fields on a custom item type.' It goes further by explaining what custom items are and noting that each entry includes the twId needed for writing record values, which makes the tool's purpose and domain unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the custom-item tool family: when the user refers to an entity that is NOT a built-in Teamwork concept. It also gives a clear fallback: if an entity name is unrecognized, call twprojects-list_custom_items to confirm before assuming it is a custom item.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_custom_item_recordsARead-onlyInspect
List records on a custom item type. Returns each record with field values keyed by display name. Use the section_ids filter to scope to a specific section. Custom items are user-defined entity types โ Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Restrict to these record IDs. | |
| page | No | Page number for pagination of results (1-based). | |
| order_by | No | The field to sort the custom item records by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching custom item records, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| search_term | No | A search term to filter custom item records by name. | |
| section_ids | No | Restrict to records in these sections. | |
| show_deleted | No | Include deleted records. | |
| custom_item_id | Yes | Custom item type ID to list records for. | |
| order_by_field_id | No | The custom field to sort the records by. Required when order_by is "customitemfield", and ignored otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| customItemRecords | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: records are returned with field values keyed by display name, and section_ids can scope results. It does not discuss pagination behavior or ordering defaults, but the schema covers those parameters, so the description carries a reasonable share of behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and return semantics, then adds scoping guidance, domain context, and a disambiguation workflow. Each sentence earns its place, and the custom-item definition with examples (Contracts, Leads, Deals) prevents the agent from misclassifying these entities as built-in types. It is long enough to be useful but not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 11 parameters and rich input schema, the description provides the essential selection context an agent needs: what custom items are, when to use this tool, and how to disambiguate unknown entity names. The output schema being present means the description need not explain return structure in detail. It is complete for both tool selection and safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all 11 parameters. The description highlights section_ids as a scoping mechanism, but it does not add meaning beyond the schema's own description of that parameter. With full schema coverage, the baseline of 3 is appropriate; the description adds no significant parameter-level semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'List records on a custom item type.' It also clarifies the scope of custom items relative to built-in Teamwork concepts, which helps distinguish this tool from the many built-in list tools in the sibling set. The return behavior โ 'field values keyed by display name' โ further sharpens what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: use custom-item tools when the entity is NOT a built-in Teamwork concept (Task, Tasklist, Project, etc.). It also provides a concrete fallback workflow: if the entity name is unrecognized, assume it is a custom item and call twprojects-list_custom_items to confirm. This is actionable and removes ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_custom_itemsARead-onlyInspect
List the custom item types defined on a project. Returns each type's id, display name and labels โ call get_custom_item to see a type's fields and sections. Custom items are user-defined entity types โ Contracts, Leads, Deals, or anything else a customer has set up on a project. Use these tools when the user refers to an entity that is NOT a built-in Teamwork concept (Task, Tasklist, Project, Milestone, Comment, Notebook, Company, Team, User, Tag). If you don't recognise an entity name in the user's request, assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Restrict to these custom item type IDs. | |
| page | No | Page number for pagination of results (1-based). | |
| order_by | No | The field to sort the custom items by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching custom items, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| project_id | Yes | Project ID to list custom item types for. | |
| search_term | No | A search term to filter custom items by display name or labels. | |
| show_deleted | No | Include deleted custom item types. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| included | No | |
| customItems | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds behavioral context beyond that: it scopes what the call returns ('id, display name and labels') and explicitly states what it does NOT return (fields and sections), pointing to get_custom_item for that. This helps the agent set correct expectations. It doesn't mention pagination defaults, but the schema documents pagination thoroughly and the output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded: the primary function and return contents occupy the first sentence, followed by routing to get_custom_item, then the conceptual definition and usage rule. The enumerated list of built-in concepts is somewhat long but earns its place as it powers the when-to-use heuristic. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and the input schema documents all parameters with 100% coverage, the description adds precisely the missing context: the conceptual model of what a custom item is (Contracts, Leads, Deals), how it differs from built-in entities, and a concrete decision procedure for when to invoke this tool. An agent has everything needed to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all 9 parameters richly documented (count_only explains its JSON shape and ignored params; page_size gives its 1-500 range; search_term states it filters by display name or labels). The description's mention of 'display name and labels' corroborates search_term but adds no new parameter-level semantics beyond the schema. Baseline 3 is appropriate since the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb + resource + scope: 'List the custom item types defined on a project.' It further specifies the return payload (id, display name, labels) and explicitly differentiates from the sibling get_custom_item, telling the agent to use that tool for fields and sections instead. This fully disambiguates it from related custom-item tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance by enumerating the built-in Teamwork concepts (Task, Tasklist, Project, Milestone, etc.) and instructing that these custom-item tools apply when the entity is NOT one of them. It even gives a fallback decision rule: 'If you don't recognise an entity name... assume it is a custom item and call twprojects-list_custom_items on the relevant project to confirm.' This is exemplary routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_filesARead-onlyInspect
List the files in a project's files area, or across every project when no project_id is given. Files attached to tasks, comments and messages live there too, so task_id answers "what is attached to this task". Deleted files are left out unless show_deleted is true. Each row carries a downloadURL that needs the caller's own Teamwork session; use twprojects-download_file to read the content here.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Only files with these IDs. | |
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each file, from the listed names. | |
| tag_ids | No | Only files carrying any of these tags. | |
| task_id | No | Only files attached to this task. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the files by. Omit to keep the ordering the API applies by default. | |
| user_ids | No | Only files uploaded by these users. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching files, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| project_id | No | The ID of the project whose files area to list. Omit to list files across every project the caller can access. | |
| category_id | No | Only files in this file category. | |
| search_term | No | Only files whose name contains this term. Set search_all_fields to also match the extension, the category, the original name and the uploader's name. | |
| show_deleted | No | Whether to also list deleted files. Defaults to false. | |
| updated_after | No | Only files changed strictly after this instant, on the file or on its selected version. 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. | |
| uploaded_after | No | Only files whose selected version was uploaded on or after this day (YYYY-MM-DD). The day itself is included. | |
| uploaded_before | No | Only files whose selected version was uploaded before this day (YYYY-MM-DD). The bound is the first instant of the day, so files uploaded during it are excluded; name the following day to include it. | |
| search_all_fields | No | Whether search_term also matches the file extension, the file category, the original file name and the name of the latest uploader. Defaults to false. | |
| skip_external_files | No | Whether to leave out files that live in a linked cloud storage provider (Google Drive, Dropbox, Box, OneDrive, SharePoint) and list uploads only. Defaults to false. A row's fileSource tells the two apart. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| files | No | |
| included | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful behavior beyond that: deleted files are hidden by default, and each row's downloadURL requires the caller's own Teamwork session, which is auth context an agent cannot infer from structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the core purpose, then scoping edge cases and the download pointer. Every sentence carries information, though the downloadURL/session detail is somewhat dense in the closing line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description still flags the downloadURL caveat. For a 20-parameter tool it covers scope, cross-project behavior, task attachment, deletion filtering and the download hand-off; pagination and filtering defaults are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 20 parameters thoroughly. The description adds conceptual meaning for task_id and the show_deleted default but nothing the schema doesn't already carry, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List the files") plus the exact scope: a project's files area, or every project when project_id is omitted. This distinguishes it from siblings like twprojects-get_file and twprojects-download_file without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear selection context: omit project_id to go cross-project, use task_id to answer "what is attached to this task," and use twprojects-download_file to read content. It routes to the download sibling explicitly but doesn't contrast against get_file or search, so no full when-not set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_industriesARead-onlyInspect
List supported company (aka client) industries.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| industries | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read-only nature is established. The description adds the scope qualifier 'supported' and the alias 'client', which helps clarify the exact set returned. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the purpose instantly with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple enumeration tool with no parameters and an output schema, the description is complete. It tells the user exactly what to expect: a list of supported industries. No additional context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter documentation is unnecessary. Schema coverage is trivially 100%, and the description adds no parameter semantics because there are none to describe. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists supported company (aka client) industries. The verb 'List' and resource 'industries' are specific, and it is distinguished from siblings like list_companies by focusing on industries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is clear: retrieve the set of supported industries for companies/clients. Since there is no competing list_industries tool among siblings and the operation is a simple enumeration, the context is sufficiently clear without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_jobrolesARead-onlyInspect
List job roles. A verbose row carries the people assigned to the role under users, and those holding it as their primary role under primaryUsers; both are references, resolved to names under included.users.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each job role, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching job roles, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| search_term | No | A search term to filter job roles by name, or assigned users. The job role will be selected if each word of the term matches the name, or assigned user first or last name, not requiring that the word matches are in the same field. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| included | No | |
| jobRoles | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=truehare. The description adds significant behavioral context beyond that: it explains the structure of a verbose response (users vs primaryUsers) and that references resolve to names under included.users. This tells the agent what to expect in the payload, which annotations do not cover. It doesn't address rate limits or pagination defaults, but those are less critical for a read-only list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy. The primary action is stated first, followed by a single clarifying detail about verbose mode. Every word earns its place; it is neither over- nor under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and all parameters documented, the description covers the core operation adequately. It explains the nuanced difference between users and primaryUsers, which is essential for interpreting results. It doesn't mention pagination strategy or default ordering, but those are available in the schema. Given the tool's listing nature and read-only status, this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters (page, fields, verbose, page_size, count_only, order_mode, search_term) already have descriptive text. The description adds no new parameter semantics; its second sentence clarifies the verbose parameter's effect on the response, but that's a behavioral detail rather than parameter syntax. This matches the baseline of 3 when the schema carries the full parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List job roles', a clear verb+resource combination. It distinguishes itself from get_jobrole by implying a collection return, though it doesn't explicitly contrast with sibling list_* tools. The mention of 'verbose row' adds important scope detail about what is listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like get_jobrole, search, or count-based tools. It implies use for listing job roles but doesn't state exclusions or selection criteria. The schema descriptions for parameters like count_only and verbose do some of this work, but the description itself is silent on usage strategy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_linksCRead-onlyInspect
List links.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each link, from the listed names. | |
| tag_ids | No | A list of tag IDs to filter links by tags. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| project_id | No | The ID of the project to filter links by. | |
| search_term | No | A search term to filter links by title or description. Each word from the search term is used to match against the link title or description. The link will be selected if each word of the term matches the link title or description, not requiring that the word matches are in the same field. | |
| match_all_tags | No | If true, match all tags; if false, match any. |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the core safety profile is covered and there is no contradiction. The description itself adds no behavioral context such as pagination behavior, default field selection, or tag-matching semantics, but for a simple read-only list operation the annotations make it adequately transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is extremely short with no wasted words, but it is under-specified rather than appropriately sized. A tool with eight parameters and many sibling tools needs more than a two-word restatement of its name to be genuinely useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the sparse description, the rich input schema, annotations, and presence of an output schema make the tool callable and reasonably well-specified. What is missing is semantic context for what 'links' represent and explicit routing guidance, so the definition is minimally viable but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: all eight parameters already have meaningful descriptions, including defaults for verbose and match_all_tags and constraints such as page_size 1-500. The description adds no parameter-level meaning, but the schema is self-sufficient, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List links.' merely restates the tool name (twprojects-list_links) and the annotation title ('List Links'), adding no new meaning. It names the verb and resource but does not clarify what kind of links are being listed, their scope, or how this differs from twprojects-get_link or twprojects-create_link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description does not say when to use this tool versus twprojects-get_link for a single link, nor does it mention whether to use it for filtered lookups versus other listing/search tools. The agent must infer all usage context from the schema and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_message_repliesARead-onlyInspect
List replies under a message thread. Filter by message_ids or project_ids.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each message reply, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the message replies by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching message replies, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| message_ids | No | Filter by message. | |
| project_ids | No | Filter by project. | |
| search_term | No | A search term to filter message replies by body or title. Each word from the search term is used to match against the message reply body or title. The message reply will be selected if each word of the term matches the message reply body or title, not requiring that the word matches are in the same field. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| messageReplies | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only that replies are 'under a message thread' and the available filters; it does not add behavioral context such as auth needs, rate limits, or pagination behavior beyond what annotations and schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with zero waste. The core action is stated first, followed immediately by the key filter options.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a fully described schema, an output schema, and annotations covering safety, the description provides enough to identify the tool and its primary filters. It does not mention pagination, count_only, search_term, or sorting, but those are documented in the schema and not required for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 10 parameters are already documented with meaning in the schema. The description mentions message_ids and project_ids but adds no syntax, format, or interaction detail beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('replies under a message thread'), and names two filtering dimensions. It implicitly distinguishes from singular get_message_reply and from list_messages, but does not explicitly name or differentiate against sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says it can be filtered by message_ids or project_ids, which is implied usage for a list tool. However, it gives no guidance on when to choose this over alternatives like list_messages or get_message_reply, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_messagesARead-onlyInspect
List project messages (top-level posts). Use twprojects-list_message_replies for thread replies.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each message, from the listed names. | |
| tag_ids | No | A list of tag IDs to filter messages by tags. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the messages by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching messages, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| project_ids | No | Filter messages by project. | |
| search_term | No | A search term to filter messages by body or title. Each word from the search term is used to match against the message body or title. The message will be selected if each word of the term matches the message body or title, not requiring that the word matches are in the same field. | |
| match_all_tags | No | If true, match all tags; if false, match any. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| messages | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds only the top-level-vs-replies scope distinction and nothing about pagination, default ordering, or volume handling beyond what schema fields already convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the scope constraint and the sibling routing front-loaded ahead of any optional detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, complete parameter documentation, and read-only annotations, the description is essentially complete for a list tool. Only minor gaps remain (no mention of pagination or default sort behavior), which the schema largely covers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (11 of 11 params documented), so the baseline is 3. The description adds no syntax or usage detail for any parameter beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (project messages), and disambiguates the scope as 'top-level posts'. It also names the sibling tool it is not, so an agent can distinguish it from twprojects-list_message_replies without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to twprojects-list_message_replies for thread replies, giving a clear when-to-use-this-vs-alternative rule. It stops short of broader context (e.g. filtering by project before calling), so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_milestonesARead-onlyInspect
List milestones. Scope by project_id or omit for site-wide. Completed milestones are included by default; pass show_completed false to see only the outstanding ones. Use due_after and due_before to bound the deadline instead of listing everything and filtering afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each milestone, from the listed names. | |
| tag_ids | No | A list of tag IDs to filter milestones by tags. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the milestones by. Omit to keep the ordering the API applies by default. | |
| due_after | No | Only include milestones with a deadline on or after this date. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching milestones, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| due_before | No | Only include milestones with a deadline on or before this date. | |
| order_mode | No | The direction to sort the results in. | |
| project_id | No | The ID of the project from which to retrieve milestones. Omit to list milestones across all projects. | |
| search_term | No | A search term to filter milestones by name. Each word from the search term is used to match against the milestone name and description. The milestone will be selected if each word of the term matches the milestone name or description, not requiring that the word matches are in the same field. | |
| match_all_tags | No | If true, match all tags; if false, match any. | |
| show_completed | No | If false, only return milestones that are not completed yet. Included by default, unlike the task and tasklist lists. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| milestones | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and destructiveHint=false, the description adds useful behavior beyond annotations: completed milestones are included by default, omitting project_id returns site-wide results, and date bounds are recommended over client-side filtering. This gives the agent actionable expectations about the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. Each sentence earns its place: the first establishes scope and resource, the second covers default completed behavior and efficient date filtering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich 100%-covered input schema and the presence of an output schema, the description covers the most decision-relevant behavioral choices: project scope, completed filtering, and date bounding. It does not mention pagination, field selection, or sibling count tools, but those are adequately specified in the schema, making this description sufficient for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 14 parameters and their meanings. The description adds light usage emphasis on project_id, show_completed, due_after, and due_before, but does not provide semantically new parameter information beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List milestones') and clarifies scope behavior ('Scope by project_id or omit for site-wide'). It does not explicitly distinguish from siblings like count_milestones or get_milestone, but the listing intent is clear enough to avoid major confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: project scoping, the default inclusion of completed milestones, and the recommendation to use due_after/due_before instead of fetching everything and filtering locally. It does not mention alternative tools or exclusions such as preferring count_milestones for count-only queries, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_notebooksCRead-onlyInspect
List notebooks.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each notebook, from the listed names. | |
| tag_ids | No | A list of tag IDs to filter notebooks by tags. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the notebooks by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching notebooks, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| project_ids | No | Filter notebooks by project. | |
| search_term | No | A search term to filter notebooks by name or description. The notebook will be selected if each word of the term matches the notebook name or description, not requiring that the word matches are in the same field. | |
| match_all_tags | No | If true, match all tags; if false, match any. | |
| include_contents | No | If true, include notebook contents in the response. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| notebooks | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond thatโno mention of default contents inclusion, pagination defaults, count_only behavior, or ordering semantics. It is consistent with annotations but contributes no extra transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
'List notebooks.' is maximally concise and has no fluff, but it is under-specified and provides no structural benefit over the tool name. It is acceptable, but not a genuinely helpful, well-earned description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 12 parameters, rich filtering options, pagination, and a verbose/count-only mode, yet the description gives no context about these behaviors. The output schema exists, so return values need not be explained, but an agent would benefit from knowing when to use this copy-heavy list operation and how to request leaner results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 12 parameters in detail. The description itself adds nothing beyond the schema, which matches the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'List notebooks.' It accurately conveys the basic operation. However, it does not differentiate this from the many other list_* sibling tools, so it misses the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like twprojects-get_notebook, twprojects-list_tasks, or other list tools. The description leaves the agent to infer usage entirely from the tool name and parameter schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_project_budgetsARead-onlyInspect
Lists top-level project budgets. Filters: project_ids, status.Returns only budgeted projects (diff with twprojects-list_projects for budgetless).Filter server-side via project_ids when known. 1-based page pagination (pageOffset = page - 1)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| limit | No | Maximum number of budgets to return. Only applies alongside cursor; ignored when paging with page/page_size. | |
| cursor | No | Opaque cursor from a previous response, for cursor pagination. This is not an offset or a page number โ never construct one. Setting it makes the endpoint ignore page and page_size. To walk pages, use page instead. | |
| fields | No | The attributes to return for each project budget, from the listed names. | |
| status | No | Filter budgets by status. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching project budgets, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| project_ids | No | Filter budgets by project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| budgets | No | |
| included | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, destructiveHint=false), so the description's burden is lighter. It adds genuine behavioral context beyond the annotations: the selection behavior ('Returns only budgeted projects'), the efficiency recommendation for server-side filtering, and a non-obvious pagination detail ('1-based page pagination (pageOffset = page - 1)'). This pagination clarification is exactly the kind of trait an agent needs to call the tool correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences pack the essential information: purpose, filters, sibling differentiation, and pagination semantics, with the core function front-loaded first. No filler. It loses a point only for minor formatting defects (missing spaces: 'status.Returns' and 'budgetless).Filter') that slightly reduce readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 optional parameters, output schema present, annotations present), the description covers the key decision points: what is returned, the filter options, the sibling distinction, and pagination behavior. The one notable gap is not explaining how 'top-level' budgets relate to the closely named twprojects-list_tasklist_budgets sibling, which could leave an agent uncertain about which list tool to invoke in a given context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly, including cursor caveats and count_only semantics. The description reinforces that project_ids and status act as filters and hints at pagination mechanics, but adds little beyond what the schema states. Baseline 3 is appropriate since the structured data carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource statement: 'Lists top-level project budgets.' The qualifier 'top-level' usefully distinguishes this from tasklist-level budget tools among the siblings, and it explicitly names twprojects-list_projects as the sibling that covers budgetless projects. An agent can tell what this tool is for and what it is not for without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit routing guidance: 'Returns only budgeted projects (diff with twprojects-list_projects for budgetless)' names the alternative and the selection condition, and 'Filter server-side via project_ids when known' advises on when to pass filters rather than post-filtering. It stops short of a 5 because it does not address the near-twin sibling twprojects-list_tasklist_budgets or state when to prefer count_only, but the core when-to-use guidance is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_project_categoriesCRead-onlyInspect
List project categories.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each project category, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching project categories, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| search_term | No | A search term to filter project categories by name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| projectCategories | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds no additional behavioral context beyond the word 'List' โ it does not mention output shape, pagination behavior, or the effect of the count_only/search_term parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no filler or redundant phrasing. It is front-loaded and easy to parse, though it is quite minimal and could have included a bit more context without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and annotations, the description itself is adequate for the simplest reading: list project categories. However, it lacks any selection guidance among many list_* siblings and offers no behavior-related context, so an agent gets only the minimum needed to call the tool, not to choose it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter is individually documented with meaningful descriptions, defaults, and constraints. The tool description itself contributes no parameter information, but the schema carries the full burden, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'project categories', making the tool's basic purpose obvious. However, it does not explicitly differentiate this from sibling tools such as twprojects-get_project_category or twspaces-list_categories, leaving the agent to infer the distinction from the tool name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description does not mention filtering, pagination, count-only mode, or when a user might prefer a related tool such as twprojects-get_project_category or twspaces-list_categories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_projectsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each project, from the listed names. | |
| tag_ids | No | A list of tag IDs to filter projects by tags. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the projects by. Omit to keep the ordering the API applies by default. | |
| team_ids | No | Filter projects by team, matching the projects any member of those teams belongs to. | |
| user_ids | No | Filter projects by the users holding an explicit membership of them. For "my projects", pass the ID returned by twprojects-get_user_me. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching projects, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| company_ids | No | Filter projects by the company that owns them. | |
| search_term | No | A search term to filter projects by name or description. | |
| only_starred | No | If true, only return the projects the calling user has starred. | |
| hide_observed | No | If true, leave out the projects the calling user only observes, keeping the ones they actually work on. | |
| only_archived | No | If true, only return archived projects. | |
| updated_after | No | Only include projects whose last activity is strictly after this moment; the boundary itself does not match. Any activity in the project counts, not just edits to the project record. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| match_all_tags | No | If true, match all tags; if false, match any. | |
| project_healths | No | Filter projects by the health rating set on them, matching any of the values given. "not_set" matches the projects nobody has rated. | |
| include_archived | No | If true, return archived projects alongside the active ones; excluded by default. | |
| project_statuses | No | Filter projects by progress state, matching any of the values given. "late" is past its end date and not yet completed, "upcoming" has not started yet, "current" is running now, and "active" is every project that is neither completed nor archived. Omit to keep the endpoint's own default set. | |
| include_tentative | No | If true, return tentative projects alongside the normal ones; excluded by default. | |
| only_admin_access | No | If true, only return the projects the calling user administers. | |
| project_owner_ids | No | Filter projects by the user who owns them. | |
| project_category_ids | No | Filter projects by category. | |
| include_subcategories | No | If true, project_category_ids also matches the categories nested under the ones given. | |
| order_by_custom_field_id | No | The custom field to sort the projects by. Required when order_by is "customfield", and ignored otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| included | No | |
| projects | No | |
| suggestions | No | Present 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. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds behavioral nuance beyond the schema: 'a project row carries no late flag, so this filter is the only way to ask,' and clarifies the relationship between user_ids and only_starred for 'my projects.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences and every sentence carries useful information. Purpose is front-loaded, and the examples are compact and directly actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a full output schema and 100% parameter coverage in the input schema, the description supplies the critical decision context: what the tool does and the two most common non-obvious filter recipes. No essential guidance is missing; annotations cover the read-only behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by linking user_ids to the specific ID from twprojects-get_user_me and explaining the significance of project_statuses=['late'] as the sole way to retrieve late projects. This cross-references another tool and clarifies semantics beyond the parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List projects with structured filters,' clearly naming the endpoint's verb and resource, and enumerates the filter dimensions. This distinguishes it from sibling tools like twprojects-search and twprojects-list_tasks by emphasizing structured filtering rather than free-text search or task listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage recipes: for 'my projects' pass user_ids with the ID from twprojects-get_user_me, or use only_starred; for slipped projects pass project_statuses=['late']. It gives clear contextual guidance, though it does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_project_templatesCRead-onlyInspect
List project templates.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| tag_ids | No | A list of tag IDs to filter project templates by tags. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| search_term | No | A search term to filter project templates by name or description. | |
| match_all_tags | No | If true, match all tags; if false, match any. | |
| project_category_ids | No | Filter project templates by category. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| included | No | |
| projects | No | |
| suggestions | No | Present 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. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context beyond the literal 'List' action, such as scoping, pagination behavior, or how filters affect results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at three words and contains no filler. It is front-loaded and efficient, though it is so terse that it offers little beyond the tool title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is adequate for a simple list operation because the schema fully documents parameters and an output schema exists. It lacks usage context and details about when to use this tool instead of related search/list tools, leaving an agent with a minimally viable but not rich definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all six optional parameters, so the schema carries the parameter documentation burden. The description itself adds no parameter-level meaning, which matches the baseline for full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List project templates.' It clearly conveys what the tool does. However, it does not differentiate this tool from sibling listing tools such as twprojects-list_projects or twprojects-search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, and no mention of when filtering or pagination should be applied. Usage is only implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_project_updatesARead-onlyInspect
List project updates: the Markdown text on a project's dashboard and the health it reports. Nothing else returns either โ a project row carries no health, and the activity log holds a preview of the text, not the text. Newest first. Only each project's current update is returned unless active_only is false, so an unfiltered call is not the whole history. Rows carry text (Markdown, in full, emoji codes already converted to characters), health (0 not set, 1 bad, 2 ok, 3 good), healthLabel (the name this installation gives that rating โ read it, never build one from health) and color (hex, empty when the health is not set). The author and the project are bare IDs, sideloaded under included when verbose is true. Keep a response small with fields and page_size; verbose=false drops the text and returns the ratings.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each project update, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the project updates by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching project updates, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| active_only | No | If true (the default), return only each project's current update. Set it to false to read the update history, which returns every past update in full. | |
| project_ids | No | Only return the updates of these projects. Naming any project makes the endpoint ignore every other project filter, including project_healths and include_archived. | |
| show_deleted | No | If true, return deleted updates alongside the live ones; excluded by default. | |
| created_after | No | Only include updates posted 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 day in UTC. | |
| updated_after | No | Only include updates last edited 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 that whole day in UTC. | |
| project_healths | No | Only return the updates reporting these health ratings, matching any of the values given. "not_set" matches an update that rates nothing. Ignored when project_ids is set. | |
| include_archived | No | If true, return the updates of archived projects alongside those of the active ones; excluded by default. Ignored when project_ids is set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| included | No | |
| projectUpdates | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, yet the description adds substantial behavior: the active_only default silently truncating history, project_ids overriding all other project filters, health's numeric mapping (0 not set / 1 bad / 2 ok / 3 good), healthLabel being installation-specific and not to be reconstructed, color being empty when health is unset, and verbose=false dropping the text. This is well beyond what annotations supply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and default behavior, and every clause carries operational information rather than filler. It is dense and fairly long for a list tool, but the length is justified by the 14 parameters and the non-obvious active_only/project_ids interactions, so compression would cost real detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter list tool with an output schema present, the description supplies everything an agent needs: default scoping, filter-override rules, field-level return semantics, and how to shrink responses. Return-shape detail beyond rows is unnecessary given the output schema, so nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema coverage at 100%, the baseline is 3, but the description goes further by explaining the health field's numeric-to-label mapping and the instruction to read healthLabel rather than synthesize it, plus the practical interaction between verbose and the returned text. These are semantic details that the schema's per-parameter descriptions do not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("List project updates") and immediately identifies what uniquely lives here: the Markdown dashboard text and the health rating. It explicitly distinguishes itself from siblings by noting that a project row carries no health and the activity log holds only a preview of the text, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: "Only each project's current update is returned unless active_only is false, so an unfiltered call is not the whole history," plus guidance to keep responses small via fields/page_size. It compares against the project row and activity log as alternative sources but does not phrase it as explicit when-to-use-versus-a-named-tool guidance, so it stops just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_skillsBRead-onlyInspect
List skills.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each skill, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching skills, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| search_term | No | A search term to filter skills by name, or assigned users. The skill will be selected if each word of the term matches the name, or assigned user first or last name, not requiring that the word matches are in the same field. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| skills | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only restates the basic operation and adds no behavioral context beyond the annotations. The annotations already communicate readOnlyHint=true and destructiveHint=false, but the prose does not mention pagination, filtering defaults, or result-set semantics. As a safe read operation this is acceptable, but no additional behavioral disclosure is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and contains no filler, making it easy to parse and front-loaded. It is concise, though perhaps too terse to add much guidance beyond the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, complete parameter descriptions, and read-only annotations, the structured data provides most of what an agent needs to invoke the tool correctly. The description itself is minimal, so a bit more context about typical usage or result behavior would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents all seven parameters, including defaults, enums, and the count_only behavior. The description adds no parameter-level meaning; the schema carries the load, which matches the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the operation ('List') and the resource ('skills'), so an agent can understand the basic purpose. However, it does not elaborate on scope or distinguish itself from sibling list_* tools beyond the resource name, making it clear but without explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like twprojects-get_skill, twprojects-create_skill, or other list_* tools. There is no mention of exclusions, prerequisites, or conditions that would route an agent to this tool, so usage must be inferred entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_tagsCRead-onlyInspect
List tags.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each tag, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the tags by. Omit to keep the ordering the API applies by default. | |
| item_type | No | Filter tags by item type. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching tags, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| project_ids | No | Filter by project. | |
| search_term | No | A search term to filter tags by name. Each word from the search term is used to match against the tag name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| tags | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond that, such as pagination behavior, default sorting, or the effect of count_only. It is consistent with the annotations but provides no additional transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
'List tags' is maximally short but under-specified: it repeats the tool name and title without adding context. For a tool with 10 parameters and multiple sibling list_tags tools, this brevity is not effective conciseness; it is omission.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, rich schema, and the presence of twdesk-list_tags and twspaces-list_tags, the description is not complete enough. It fails to clarify the project context, filtering capabilities, or relationship to other tag operations. The output schema helps, but the description itself leaves too much to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all 10 parameters thoroughly. The description adds no parameter-level meaning, but the baseline of 3 applies because the schema carries the semantic weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'List tags.' This is unambiguous at a basic level. However, it does not differentiate this tool from twdesk-list_tags or twspaces-list_tags, both of which are siblings with the same basic purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. It does not mention that this lists project tags, nor does it contrast with get_tag, create_tag, or the other list_tags siblings. The agent is left to infer usage entirely from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_tasklist_budgetsARead-onlyInspect
List tasklist budgets nested under a project budget. Requires project_budget_id.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each tasklist budget, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the task list budgets by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching tasklist budgets, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| project_budget_id | Yes | The ID of the project budget to list tasklist budgets for. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| included | No | |
| tasklistBudgets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds the nesting constraint and required ID, but does not add behavioral context such as pagination defaults or count_only behavior; however, these are covered in the rich input schema, so the minimal extra description is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or repeated schema content. It states the core purpose and the essential prerequisite in the most compact useful form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list operation, the description plus the complete input schema and output schema provide everything an agent needs: the required project_budget_id, filtering/pagination parameters, and the safety profile. No critical context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter has an explanatory description in the schema itself. The tool description only reiterates that project_budget_id is required and does not add meaning beyond what the schema already provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and a clear resource ('tasklist budgets nested under a project budget'), making the tool's scope unambiguous. It also distinguishes this tool from the many other list_* siblings by naming the parent entity and the required link to a project budget.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly identifies the context: tasklist budgets are nested under a project budget, and a project_budget_id is required. It does not explicitly mention alternatives or when not to use this tool, but the nesting context is enough to guide an agent toward the correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_tasklistsARead-onlyInspect
List tasklists. Scope by project_id or omit for site-wide.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each tasklist, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the task lists by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching tasklists, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| project_id | No | The ID of the project from which to retrieve tasklists. Omit to list tasklists across all projects. | |
| search_term | No | A search term to filter tasklists by name. | |
| show_completed | No | If true, include completed tasklists; excluded by default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| tasklists | No | |
| suggestions | No | Present 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. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds the site-wide vs project-scoped behavior, but does not disclose additional traits such as pagination defaults, completion filtering, or result size; those live in parameter descriptions. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and a single scoping instruction. No filler or redundancy; every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with rich schema (10 parameters, output schema present), the description is sufficient: it states the core action and scoping, while all parameter details and return shape are covered by structured data. It does not mention pagination defaults or filtering flags, but those are fully documented in the input schema, so the omission is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already has a meaningful description. The tool description only reinforces project_id scoping and adds no new format, default, or interaction semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('tasklists'), and states the scope parameter ('project_id') with site-wide default. However, it does not explicitly differentiate from sibling list tools such as list_tasks or get_tasklist, relying on the resource name to do so.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: 'Scope by project_id or omit for site-wide' tells the agent how to narrow or broaden the query. It lacks explicit when-not-to-use or alternative tool references, but for a simple read-only list that is a minor omission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_tasksARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each task, from the listed names. | |
| tag_ids | No | A list of tag IDs to filter tasks by tags. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the tasks by. Omit to keep the ordering the API applies by default. | |
| due_after | No | Only include tasks due after this date, excluding the day itself โ unless due_before is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching tasks, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| due_before | No | Only include tasks due before this date, excluding the day itself โ unless due_after is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's. | |
| order_mode | No | The direction to sort the results in. | |
| project_id | No | The ID of the project from which to retrieve tasks. Omit to list tasks across all projects. | |
| date_filter | No | Where the task's dates fall relative to today, in your own timezone. This is the filter for "late", "overdue", "due today", "started" and "upcoming"; omit it for no date restriction. overdue: due before today and not completed โ this is "late", and it never returns completed tasks whatever show_completed says. today: due today, without adding the overdue ones. thisweek: the calendar week containing today, the days of it already past included. upcoming: due today or later. started: the start date has arrived and the due date has not passed โ start date on or before today, and either no due date at all or one falling today or later. within7, within14, within30, within365: due between today and that many days from today, both days included. nodate: no start date, no due date and no milestone. anytime: no date restriction, what the endpoint applies when this is omitted. Completed tasks stay hidden unless show_completed is true, and overdue never returns one even then; for completed work alone use only_completed, which combines with any value here except overdue. A task with no due date of its own is matched on its milestone's. | |
| search_term | No | A search term to filter tasks by name. | |
| start_after | No | Only include tasks whose own start date falls on or after this date; the day itself matches. A task with no start date never matches โ there is no milestone fallback. There is no upper bound on the start date, so for work that has already begun use date_filter=started instead. | |
| tasklist_id | No | The ID of the tasklist from which to retrieve tasks. Takes precedence over project_id. | |
| created_after | No | Only include tasks created at or after this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| updated_after | No | Only include tasks updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| created_before | No | Only include tasks created at or before this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| match_all_tags | No | If true, match all tags; if false, match any. | |
| only_completed | No | If true, return only completed tasks. It combines with every other filter, date_filter included โ except date_filter=overdue, which never matches a completed task and so returns nothing. Tasks in completed tasklists still need show_completed. | |
| only_unplanned | No | If true, only return tasks that are unplanned, meaning they are missing an assignee, a due date, or estimated time. | |
| show_completed | No | If true, include completed tasks and tasks belonging to completed tasklists; both excluded by default. | |
| updated_before | No | Only include tasks updated strictly before this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| completed_after | No | Only include tasks completed at or after this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| only_unassigned | No | If true, only return tasks that have no assignee. | |
| completed_before | No | Only include tasks completed at or before this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| assignee_user_ids | No | Filter tasks by assignee. | |
| created_by_user_ids | No | Filter tasks by creator. | |
| order_by_custom_field_id | No | The custom field to sort the tasks by. Required when order_by is "customfield", and ignored otherwise. | |
| exclude_assignee_user_ids | No | Leave out tasks assigned to any of these users. A task is dropped when any one of the listed users is assigned to it, even when it also carries assignees you did not exclude. A user reached only through a team, company or job-role assignment on the task is not matched. Combines with assignee_user_ids and every other filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| tasks | No | |
| included | No | |
| suggestions | No | Present 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. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower; the description adds real value by disclosing that completed tasks and completed-tasklist tasks are hidden by default and warning that an empty result may mean the work is already done. It does not repeat the obvious read semantics, which is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with purpose then alternative-tool routing then behavioral caveat then filter tips; each carries information. The middle sentence is dense but stays on topic, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values need no explanation, and the description still covers the critical gotchas an agent needs: default exclusion of completed work, the empty-result interpretation, and where to route late/overdue and exclusion filtering. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the per-parameter text is unusually detailed, so the baseline is 3. The description adds routing intent for date_filter and exclude_assignee_user_ids but no syntax or format information beyond what the schema already supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with its three scopes (tasklist_id, project_id, or site-wide) and explicitly names the search sibling for keyword lookups. An agent can distinguish this from twprojects-search and twprojects-list_tasklists without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Routes the agent explicitly: use search for keyword search, date_filter for late/overdue/due today/started/upcoming, and exclude_assignee_user_ids to drop people rather than post-filtering rows client-side. These are clear when-to-use and when-to-use-another-tool instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_teamsARead-onlyInspect
List teams. Scope by company_id or project_id, or omit for site-wide.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each team, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the teams by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| company_id | No | The ID of the company from which to retrieve teams. Omit to list teams across all companies. | |
| order_mode | No | The direction to sort the results in. | |
| project_id | No | The ID of the project from which to retrieve teams. Omit to list teams across all projects. | |
| search_term | No | A search term to filter teams by name or handle. |
Output Schema
| Name | Required | Description |
|---|---|---|
| teams | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and destructiveHint annotations already cover the safety profile. The description adds useful behavior around scoping (company/project vs site-wide), but it does not disclose additional behavioral details such as pagination defaults or ordering behavior, which are left to the schema and output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence that communicates the operation and the key scoping decision. There is no filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the fully documented input schema, the presence of an output schema, and read-only annotations, the description is complete enough for an agent to select and invoke the tool correctly. The scoping instruction is the main decision an agent needs, and it is clearly stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already has a meaningful description. The tool description only summarizes the company_id/project_id scoping behavior and adds no new parameter-level semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('List teams') and immediately clarifies the scoping options: company_id, project_id, or site-wide. This cleanly identifies the tool's purpose and distinguishes it from other list_* sibling tools by the resource it operates on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage direction: scope by company_id or project_id, or omit both for site-wide results. It does not name alternative tools for retrieving a single team, but the scoping guidance is explicit and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_timelogsARead-onlyInspect
List timelogs. Scope by project_id or task_id, or omit for site-wide.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each timelog, from the listed names. | |
| tag_ids | No | A list of tag IDs to filter timelogs by tags. | |
| task_id | No | The ID of the task from which to retrieve timelogs. Omit to list timelogs across all tasks. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| end_date | No | End of the timelog window; the boundary itself is included, and a plain date covers that whole day. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| order_by | No | The field to sort the timelogs by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| ticketIds | No | Filter timelogs by associated desk ticket. | |
| count_only | No | If true, return only {"count": N}: the exact number of matching timelogs, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| project_id | No | The ID of the project from which to retrieve timelogs. Omit to list timelogs across all projects. | |
| start_date | No | Start of the timelog window; the boundary itself is included. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC. | |
| billable_type | No | Restrict the results to billable or non-billable timelogs. Omit, or pass all, to include both. For billable hours rather than the entries themselves, twprojects-summarize_timelogs reports them without paging. | |
| invoiced_type | No | Restrict the results to timelogs that have or have not been added to an invoice. Omit, or pass all, to include both. Invoiced is not the same as billed: noninvoiced answers "what is still to be invoiced" only for billable time, so pass billable_type alongside it. | |
| match_all_tags | No | If true, match all tags; if false, match any. | |
| assigned_team_ids | No | Filter timelogs by assigned team. | |
| assigned_user_ids | No | Filter timelogs by assigned user. | |
| assigned_company_ids | No | Filter timelogs by assigned company. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| timelogs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds one meaningful behavioral detail: omitting the scope yields site-wide results. However, it does not disclose other behavioral aspects such as pagination behavior, count_only mode, or the difference from summarized/aggregate results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. It front-loads the core action ('List timelogs') and immediately provides the most important usage distinction (scoping vs site-wide). Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 19 parameters, a full input schema with 100% coverage, and an output schema, so the description does not need to explain every parameter or return value. The description provides sufficient orientation and scoping context; the main gap is the lack of an explicit pointer to summarize/count siblings in the primary description, though this is partially mitigated by parameter-level notes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already thoroughly documents all 19 parameters. The description adds marginal semantic value by highlighting project_id and task_id as the key scoping parameters, but it does not contribute meaningfully beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and a specific resource ('timelogs'), and clarifies the primary scoping options (project_id, task_id, or site-wide). It is clear, but it does not explicitly distinguish this tool from closely related siblings like twprojects-summarize_timelogs or twprojects-count_timelogs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful scoping guidance ('Scope by project_id or task_id, or omit for site-wide') but does not explicitly say when to use this tool versus alternatives. Some sibling routing appears inside parameter descriptions (e.g., billable_type mentions twprojects-summarize_timelogs, count_only mentions 'how many'), but the main description itself lacks direct alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_timersCRead-onlyInspect
List timers.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each timer, from the listed names. | |
| task_id | No | The ID of the task to filter timers by. Only timers associated with this task will be returned. | |
| user_id | No | The ID of the user to filter timers by. Only timers associated with this user will be returned. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching timers, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| project_id | No | The ID of the project to filter timers by. Only timers associated with this project will be returned. | |
| running_timers_only | No | If true, only running timers are returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| timers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral detail beyond that, such as pagination behavior, count_only mode, or filter semantics. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is short and contains no filler, which is technically concise. But it is closer to under-specification than effective front-loading, since the single sentence restates the tool name and carries no additional orienting information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The rich input schema and output schema mitigate the terse description, making the tool minimally usable. Still, with 9 parameters covering filters, pagination, and count-only mode, a two-word description leaves key high-level context unstated and does not help distinguish this from sibling list tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and every parameter has a meaningful explanation in the input schema, so the baseline of 3 applies. The description itself says nothing about parameters, but the schema fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is essentially a restatement of the tool name and title ('List timers.' vs. 'twprojects-list_timers' / 'List Timers'), so it adds no new semantic content. It is not misleading, but it does not distinguish this tool from siblings like twprojects-get_timer or twprojects-list_timelogs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus alternatives, and no exclusions are mentioned. The schema contains helpful hints such as count_only for 'how many', but the description itself provides no selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_usersARead-onlyInspect
List users. Scope by project_id or filter by type (account/collaborator/contact).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| type | No | Type of user to filter by. The available options are account, collaborator or contact. | |
| fields | No | The attributes to return for each user, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the users by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching users, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| project_id | No | The ID of the project from which to retrieve users. Omit to list users across all projects. | |
| search_term | No | A search term to filter users by first or last names, or e-mail. The user will be selected if each word of the term matches the first or last name, or e-mail, not requiring that the word matches are in the same field. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| people | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is established; the description adds project/type scoping context. Like comparable read-only list tools, it does not mention pagination or response shape, but the output schema and parameter documentation cover those.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The most relevant scoping and filtering facts are front-loaded immediately after the verb, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a full output schema and complete parameter documentation, the description provides enough high-level function and key filter modes for correct selection. It is slightly less rich than the best examples because it omits the all-projects default, but the schema states that explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter has an explicit description, enum, or default. The description adds no meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('users'), plus the two key dimensions: project scope and account/collaborator/contact type. It is clear about what it does, though it does not explicitly contrast with sibling list tools such as twdesk-list_users or twprojects-get_user.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concise within-tool usage: scope by project_id or filter by type. It does not name alternatives or state when to prefer this over other user-listing tools, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_workflowsCRead-onlyInspect
List workflows.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each workflow, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching workflows, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| search_term | No | A search term to filter workflows by name. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| workflows | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true and destructiveHint=false, which establish the safety profile; the description's verb 'List' is consistent with those annotations and adds no behavioral detail about pagination, count_only mode, or default fields. There is no contradiction, but the description itself contributes no behavioral transparency beyond what the annotations already provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At three words, it is short but not effectively concise: it merely restates the tool name/title rather than earning its place with additional context. A useful description would front-load the operation's scope or a key differentiator.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list with a fully described schema and an output schema, the description can be minimal. However, it misses the opportunity to orient the agent to available filtering modes (search_term, count_only) or to distinguish from list_workflow_stages, and relies entirely on structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each of the six optional parameters has a meaningful description (e.g., count_only 'return only {"count": N}' and verbose behavior). The description adds no parameter context, but the schema already carries the full burden, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is 'List workflows.', which restates the tool name twprojects-list_workflows and the annotation title 'List Workflows' without adding scope, filtering behavior, or differentiation from siblings such as twprojects-list_workflow_stages or twprojects-get_workflow. This is a tautology rather than an informative purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to choose this tool over alternatives or how to use search_term/count_only for different needs. The description offers no exclusions, prerequisites, or links to sibling tools, leaving the agent to infer usage from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-list_workflow_stagesBRead-onlyInspect
List workflow stages.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| fields | No | The attributes to return for each workflow stage, from the listed names. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| order_by | No | The field to sort the workflow stages by. Omit to keep the ordering the API applies by default. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| count_only | No | If true, return only {"count": N}: the exact number of matching workflow stages, no rows โ use for "how many". Ignores page, page_size, verbose, fields. | |
| order_mode | No | The direction to sort the results in. | |
| workflow_id | Yes | The ID of the workflow whose stages to list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| count | No | Exact number of matches across every page. Returned instead of the rows when count_only. |
| stages | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds no behavioral context beyond the word 'list' and does not contradict the annotations, but it also does not disclose pagination, count_only behavior, or other traits that are left entirely to the parameter descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At five words, the description is extremely concise with no filler. It is a grammatically complete statement, though the brevity borders on under-specification rather than serving as a useful overview of the tool's options.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With eight parameters, a required workflow_id, and a large sibling toolset, a single sentence is insufficient context. The description does not explain when to use this tool, that workflow_id is mandatory, or how the tool fits into workflows like moving tasks between stages, leaving the agent to infer this from the schema and siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema coverage is 100% and the parameter descriptions are detailed, covering pagination, sorting, fields, and count_only. The one-sentence description adds no parameter semantics of its own, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and the resource 'workflow stages,' clearly identifying the operation. However, it does not mention that stages are scoped to a specific workflow_id, nor does it explicitly distinguish itself from siblings like twprojects-list_workflows or twprojects-get_workflow_stage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided beyond the bare sentence. The description does not state when to choose this tool over alternatives such as twprojects-list_workflows or twprojects-get_workflow_stage, nor does it mention the need to supply a workflow_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-move_tasksAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| task_ids | Yes | The IDs of the tasks to move. Subtasks are moved automatically. | |
| tasklist_id | Yes | The ID of the destination tasklist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds valuable behavioral context beyond annotations: it clarifies that subtasks follow parents, and that a task whose parent isn't moved is detached into a top-level task. This directly informs the agent of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, two sentences, front-loaded with the main purpose, and clearly explains subtask and detachment nuances. Every sentence carries meaning with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for the core behavior: it states what happens to subtasks and parentless tasks. It does not mention return values or error cases, but given no output schema and sufficient behavioral coverage, it is adequately complete for a move operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides descriptions for both parameters and 100% coverage. The description reinforces the subtask behavior already in the schema and adds semantic nuance about the detach edge case, which goes beyond the raw schema. This enhances understanding without redundancy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'move' and resource 'tasks to another tasklist', with explicit mention of subtasks and preservation of parent/child structure. This distinguishes it from the sibling tool 'move_task_to_workflow_stage', which moves to a workflow stage instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: only topmost tasks need to be listed, subtasks move automatically, and task with parent not included becomes top-level. It implies when to use this tool (moving tasks between tasklists) but does not explicitly mention alternatives or exclusion scenarios. The behavior is well-covered for a mutation tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-move_task_to_workflow_stageBInspect
Move one or more tasks to a workflow stage.
| Name | Required | Description | Default |
|---|---|---|---|
| stage_id | Yes | The ID of the workflow stage to move the tasks to. | |
| task_ids | No | The 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_id | Yes | The ID of the workflow that contains the target stage. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal that this operation is not read-only, not idempotent, and not destructive, so the description adds little beyond that. It does not disclose task ordering semantics, workflow-to-project attachment requirements, or consequences for task state; those details live only in the parameter descriptions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundant wording. It is appropriately sized for the operation it names and is easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All parameters are documented and the core operation is unambiguous, but there is no output schema and no mention of expected return values, error conditions, or relationship to similar move tools. The description is adequate for a straightforward invocation but not fully complete for an agent navigating a large sibling toolset.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with useful descriptions, including the key constraint that the workflow must be attached to the project of the task. The main description adds no additional parameter meaning beyond 'one or more tasks', so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb ('Move') and resource ('tasks to a workflow stage'), and it correctly indicates the operation handles more than one task. However, it does not explicitly distinguish this tool from the similarly named sibling twprojects-move_tasks, so purpose is clear but sibling differentiation is left to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool instead of alternatives such as twprojects-move_tasks or twprojects-update_task. No preconditions, exclusions, or context about appropriate use cases are provided beyond the bare action itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-pause_timerAInspect
Pause a running timer; can be resumed later. Use complete_timer to stop permanently.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the timer to pause. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating, non-destructive, non-idempotent operation. The description adds useful context: it requires a 'running timer' and that the action is reversible ('can be resumed later'). It does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no superfluous words. It front-loads the core action and then contrasts with the alternative, maximizing information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter action with good annotations and no output schema, the description conveys the essential behavior and the alternative. It could mention what happens if the timer is not running or whether the pause is immediate, but these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter `id` is already described as 'The ID of the timer to pause.' The description adds no additional parameter semantics beyond the schema, so a baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Pause') and resource ('a running timer'), clearly distinguishing it from sibling tools like complete_timer and resume_timer. The phrase 'can be resumed later' further clarifies the temporal state change.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool (to pause a running timer) and provides an alternative: 'Use complete_timer to stop permanently.' This gives clear decision criteria against a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-restore_allocationAInspect
Restore a deleted allocation. Find the ID first with twprojects-list_allocations and show_deleted set, since a deleted allocation is otherwise not returned.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the allocation to restore. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate this is a mutating operation (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the description doesn't need to restate that. The description adds valuable behavioral context: it explains that the target allocation is deleted and that it won't appear in normal list results, which is a non-obvious behavioral trait. It doesn't mention error cases (e.g., what happens if the ID doesn't exist or is already restored), but the core behavior is well disclosed. The description does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tight sentence that front-loads the primary action ('Restore a deleted allocation') and then provides the essential prerequisite. Every word earns its place; there is no fluff or repetition. It is concise without sacrificing critical guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with a clear schema and no output schema, the description covers the essential context: what the tool does, when to use it, and how to get the required input. It doesn't describe the return value or error handling, but given the simplicity of the operation and the absence of an output schema, this is a minor gap. The description is complete enough for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single parameter 'id' with a clear description ('The ID of the allocation to restore'). The description adds context by explaining how to obtain that ID (via twprojects-list_allocations with show_deleted), which is valuable beyond the schema. Since the schema is complete and the description reinforces the parameter's purpose, a score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Restore a deleted allocation') and the resource ('allocation'). It also provides a critical scoping detail: the allocation must be deleted, and it distinguishes this from the normal listing behavior by referencing the sibling tool twprojects-list_allocations with the show_deleted parameter. This makes the purpose unambiguous and differentiates it from related tools like twprojects-update_allocation or twprojects-create_allocation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool: when restoring a deleted allocation. It also provides a clear prerequisite: find the ID first using twprojects-list_allocations with show_deleted set, because a deleted allocation is otherwise not returned. This is direct, actionable guidance that prevents the agent from attempting to restore an allocation without the correct ID or from using the wrong tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-resume_timerAInspect
Resume a paused timer back to running.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the timer to resume. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a non-readonly, non-destructive operation. The description adds the precondition that the timer must be paused and the resulting state, providing context beyond the name and structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant words. Every part contributes to understanding the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation with clear annotations, the description provides enough context. It does not explain error behavior (e.g., if the timer is already running), but this is a minor omission given no output schema is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'id' parameter is fully described in the schema ('The ID of the timer to resume'), and the description does not add additional meaning. Baseline of 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Resume' with a specific object 'a paused timer' and the outcome 'back to running', clearly distinguishing it from sibling tools like pause_timer and complete_timer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for paused timers but does not explicitly state when to use it vs alternatives or any exclusions. The context is clear enough for simple state transitions, but no explicit guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-searchARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of results per page for pagination. | |
| types | No | Entity types to search. Only records of these types are found. Omit it to search every type. | |
| cursor | No | Cursor for pagination of results. | |
| verbose | No | If false, returns id + name only โ useful when scanning many results. | |
| sideload | No | Which 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 whose type is left out comes back as a bare {id, type} pair with no name. | |
| project_id | No | The ID of the project to limit the search to. | |
| search_term | No | A search term to to look for items. | |
| updated_after | No | Only 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 that whole day in UTC. | |
| extended_search | No | Whether to perform an extended search, which includes items updated more than 5 years ago. | |
| include_highlights | No | Whether to return why each result matched, as fragments under its meta.highlights. Unavailable on an extended search. | |
| include_completed_items | No | Whether to include completed items in the search results. Excluded by default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | No | |
| search | No | |
| included | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and destructiveHint=false, and the description adds substantial behavioral nuance beyond that: long content fields in sideloaded records are truncated at 500 characters with a marker naming the tool that can return the full record. It also explains that completed items are excluded by default and that an empty result may indicate completed work rather than no matches, which is a genuinely useful interpretation aid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler: the first establishes purpose, the second discloses truncation behavior, and the third explains the completed-items exclusion and its real-world implication. It is front-loaded with the most important usage information and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter cross-entity search tool with a rich input schema and an output schema, the description covers the key non-obvious behaviors an agent needs to invoke it correctly: entity-type restriction, truncation of sideloaded content, and the default exclusion of completed items. The remaining details, such as extended_search and highlight interplay, are already documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the structured schema already documents every parameter, including types, sideload, updated_after, and include_completed_items. The description adds valuable behavioral context around truncation and empty-result interpretation, but it does not add new parameter-level semantics beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Cross-entity keyword search across projects, tasks, messages, comments, users and more.' This clearly names the operation and scope, and the entity list plus 'sideloaded records' places it firmly in the twprojects domain, distinguishing it from twspaces-search and twdesk-search_tickets even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: any cross-entity keyword search across project-related entity types, with the ability to restrict via 'types.' It does not explicitly name alternatives or give when-not-to-use guidance, but the scope is clear enough that an agent can infer this is the broad project search tool rather than a domain-specific search like twdesk-search_tickets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-summarize_timelogsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | Inclusive end of the report window (YYYY-MM-DD). | |
| group_by | No | Dimension 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. | user |
| order_by | No | The 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. | |
| task_ids | No | Filter to timelogs on these tasks. | |
| team_ids | No | Filter to timelogs logged by members of these teams. | |
| user_ids | No | Filter to timelogs logged for these users. | |
| order_mode | No | The direction to sort the results in. Rejected for day, week and month: period rows are chronological. | |
| start_date | Yes | Inclusive start of the report window (YYYY-MM-DD). | |
| company_ids | No | Filter to timelogs on projects of these companies/clients. | |
| project_ids | No | Filter to timelogs on these projects. | |
| tasklist_ids | No | Filter to timelogs on these task lists. | |
| timelog_tag_ids | No | Filter to timelogs carrying these tags. | |
| include_archived_projects | No | Include time from archived projects. Defaults to false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| scope | Yes | |
| groups | Yes | Entity rows; empty for a day, week or month grouping. |
| totals | Yes | |
| periods | Yes | Period rows, chronological; empty for an entity grouping. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations' readOnlyHint and destructiveHint, the description discloses rich behavioral details: exact minutes and hours to 2 decimals, minutes as authoritative, unbilledBillable calculation, row summation, task-row omissions, period ordering with zero-filled buckets, clipping to the window, and start-of-week differences. This dramatically improves an agent's understanding of results and edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but tightly organized: purpose first, then usage, then numerical semantics, then grouping rules and period behavior. Every sentence contributes necessary information, and none of it is redundant with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters, enums, an output schema, and subtle aggregation rules, the description is exceptionally complete. It covers output coverage, grouping semantics, filtering guidance, cross-user week differences, and correctness warnings, leaving no material gap for an agent to call or interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema descriptions already cover parameters well, the description adds critical meaning beyond them: one dimension per call, how to combine user_ids with weekly grouping, the semantic distinction between groups and periods, and the warning against summing across group_by values. These are exactly the kind of non-obvious parameter interactions an agent needs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement of the tool's function: producing complete time totals for a date window, grouped by user/project/task or day/week/month. It names the exact resource and operation and explicitly differentiates itself from twprojects-list_timelogs, so an agent can distinguish it from the closest sibling without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: prefer this tool over twprojects-list_timelogs for totals, sums, and breakdowns, while list_timelogs is for individual entries. It also provides practical usage advice, such as calling once per user when hours per user per week are needed, making selection and invocation straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-unlink_task_from_allocationAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The ID of the task to unlink. | |
| allocation_id | Yes | The ID of the allocation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable context beyond the annotations by specifying that both entities remain intact and that only the single link is removed, leaving other links unaffected. This directly elaborates on destructiveHint=false and provides reassurance about side effects, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each contributing distinct information: the core action, the scope (no entities destroyed), and the precise effect (single link removed, others unaffected). The text is front-loaded with the action and contains no redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple unlink operation with fully described parameters and annotations covering the mutation nature, the description covers the essential behavior. It does not detail error scenarios (e.g., missing link) or return values, but these are not critical for correct invocation given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides complete descriptions for both parameters (100% coverage), including 'The ID of the task to unlink' and 'The ID of the allocation.' The description adds no additional meaning beyond what the schema states, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action: 'Remove the link between one task and an allocation' and clarifies that only the association is removed, not the entities themselves. This precisely matches the tool name and clearly distinguishes it from deletion or update operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the toolโwhenever a link between a task and allocation must be removedโand implicitly positions it as the inverse of linking. It does not explicitly name alternatives like 'link_task_to_allocation' or state when not to use it, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_allocationAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the allocation to update. | |
| color | No | The allocation's colour as six hexadecimal digits, with or without a leading '#'. | |
| title | No | The name of the allocation, at most 100 characters. | |
| end_date | No | The last day of the allocation (format: YYYY-MM-DD). Must not precede start_date. Extending it ADDS committed time rather than spreading the existing total: the per-day rate is what is held constant, so the total is the working days in the range times that rate. | |
| project_id | No | The ID of the project to commit the time to. | |
| start_date | No | The first day of the allocation (format: YYYY-MM-DD). | |
| description | No | An optional description of the allocation, at most 255 characters. | |
| is_billable | No | Whether the allocated time can be charged to a client. | |
| linked_task_ids | No | The tasks to associate with the allocation. This REPLACES the whole set of linked tasks, so send every task that should stay linked. To add or remove one task without touching the rest, use twprojects-link_task_to_allocation or twprojects-unlink_task_from_allocation instead. | |
| seconds_per_day | No | The time committed on each working day of the range, in SECONDS โ 4 hours a day is 14400. Must be between 60 (one minute) and 86400 (24 hours). Seconds rather than hours because the hours form is a float and rounds. This rate is what is held constant: the total is the working days in the range times this, so widening the range adds committed time. | |
| assigned_user_id | No | The ID of the user whose time is committed. Accepts a real person or a placeholder user โ a stand-in used to plan work before the person who will do it is known. Nothing in the response distinguishes the two, so confirm which one an ID refers to before reporting who is booked. | |
| ignore_collisions | No | Skip the capacity check altogether. Prefer inform_of_over_allocation: this one also lets the change through, but suppresses the over-allocation report with it, so nobody is told the person is over-booked. It takes precedence when both are set. | |
| inform_of_over_allocation | No | Accept a change that puts the user over their capacity and report it, rather than rejecting it. Defaults to true, and the result says so when it happens. Turning it off means an over-allocating change is refused outright. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, destructiveHint=false), it discloses a non-obvious behavioral trait: extending end_date ADDS committed time rather than redistributing it. This is material behavior not visible in the annotations. It does not discuss over-allocation handling or task replacement, but the schema's detailed parameter descriptions cover those.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, with the core operation first and the critical caveat second. No filler or redundant restatement, and the most consequential behavioral note is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter mutation tool with no output schema, the description alone is thin, but the input schema is unusually rich, covering collision flags, task-list replacement semantics, placeholder-user warnings, and value formats. Together with the description's key end_date caveat, an agent has enough contextual information to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented in the input schema. The description repeats the end_date/per-day-rate semantics that the schema's end_date and seconds_per_day entries already explain, adding little new parameter-level meaning. A baseline of 3 is appropriate given the high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Update an allocation,' a specific verb and resource, and immediately identifies the operation as a mutation of an existing allocation. This distinguishes it from siblings like create_allocation, get_allocation, and restore_allocation without needing to inspect their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear, actionable context: changing end_date changes committed time because the per-day rate is held constant, so an agent knows the capacity consequence before calling. It does not explicitly state when-not-to-use or name alternatives such as create_allocation for new allocations, though the linked_task_ids parameter description does route single-task changes to link/unlink tools. This is clear context but not complete alternative routing, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_commentCInspect
Update comment.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the comment to update. | |
| body | Yes | The content of the comment. The content can be added as text or HTML. | |
| notify | No | Who 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 it, so a narrower one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}). | |
| content_type | No | The content type of the comment. It can be either 'TEXT' or 'HTML'. | |
| notify_current_user | No | Whether the current user should be notified about the comment change. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-destructive mutation, and the description adds no behavioral traits beyond that. It does not disclose side effects such as follower notifications (though the notify parameter description covers some semantics) or whether updates are reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The phrase is extremely short and front-loaded, but it is under-specification rather than meaningful conciseness: it contributes no information beyond the title and tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only a two-word description, the definition lacks context about return values, notification side effects, and when an update is appropriate. The rich schema partially compensates, but the description itself is not complete enough for confident tool selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema's notify parameter is very detailed. The description itself offers no parameter information, so it sits at the baseline 3 rather than compensating further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is 'Update comment.', which exactly restates the title 'Update Comment' and the action encoded in the tool name. It identifies a verb and resource but does not specify scope, fields, or how it differs from twspaces-update_comment or comment creation/retrieval tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus create/get/list or the twspaces comment update. There are no prerequisites, exclusions, or alternatives mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_companyCInspect
Update company (aka client).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the company to update. | |
| fax | No | The fax number of the company. | |
| zip | No | The ZIP or postal code of the company. | |
| city | No | The city of the company. | |
| name | No | The name of the company. | |
| phone | No | The phone number of the company. | |
| state | No | The state of the company. | |
| profile | No | A profile description for the company. | |
| tag_ids | No | A list of tag IDs to associate with the company. | |
| website | No | The website of the company. | |
| email_one | No | The primary email address of the company. | |
| email_two | No | The secondary email address of the company. | |
| manager_id | No | The ID of the user who manages the company. | |
| address_one | No | The first line of the address of the company. | |
| address_two | No | The second line of the address of the company. | |
| email_three | No | The tertiary email address of the company. | |
| industry_id | No | The ID of the industry the company belongs to. | |
| country_code | No | The country code of the company, e.g., 'US' for the United States. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a non-read-only, non-idempotent mutation (readOnlyHint=false, idempotentHint=false), and the description adds zero behavioral context beyond that. It doesn't disclose whether updates are partial (only supplied fields change) or full replacement, nor whether linked data like tag_ids or manager_id is affected. No contradiction with annotations, but no added value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five words, front-loaded, zero filler โ efficient in the narrow sense. But at this length the brevity looks more like under-specification than disciplined economy, since it conveys barely more than the tool name itself plus one alias.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter mutating tool with no output schema and a same-named sibling in the toolset, the description omits essential orientation: update semantics, domain scope (projects vs helpdesk), and return behavior. The 'twprojects' prefix in the tool name is the only thing separating this from twdesk-update_company, and the description itself provides no such disambiguation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% โ all 18 parameters carry individual descriptions, so the schema does the explanatory heavy lifting and the baseline of 3 applies. The 'aka client' note adds modest overall-domain context for interpreting what the company record represents, but no parameter-level detail or relationships.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Update') and resource ('company'), and the parenthetical 'aka client' adds genuinely useful domain semantics clarifying that companies are client records. However, it fails to differentiate from twdesk-update_company, a same-named sibling operating on a different domain, so it doesn't fully distinguish the tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The sibling list includes twdesk-update_company (same name, different domain), twprojects-create_company, and twprojects-get_company, yet nothing explains selection criteria. The 'aka client' hint is the only domain signal and it does not resolve the twprojects/twdesk ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_custom_fieldCInspect
Update custom field.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the custom field to update. | |
| name | No | The display name of the custom field. | |
| unit | No | The unit associated with the custom field, when applicable. | |
| formula | No | The formula expression for 'formula' type custom fields. | |
| options | No | Type-specific options for the custom field. For 'dropdown' and 'multiselect' types, provide {"choices": [{"value": "...", "color": "#rrggbb"}, ...]}. For 'rating' type, provide {"icon": "star|heart|...", "color": "#rrggbb"}. For 'number-decimal' type, provide {"decimals": <int>}. | |
| required | No | Whether the custom field must have a value when set on an entity. | |
| description | No | An optional description for the custom field. | |
| currency_code | No | The ISO currency code for 'currency' or 'financial' type custom fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not a read-only or idempotent operation and not particularly destructive. The description adds no behavioral context beyond the word 'Update'โit doesn't mention side effects, type-specific constraints, permission needs, or what happens to existing field settings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At three words, the description is extremely terse, but this is under-specification rather than effective conciseness. It conveys no more than the tool name and title, and fails to use the available space to add context for a tool with 8 parameters and a nested options structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and this is a mutation tool with a rich input schema, the description is far too minimal. It doesn't explain update semantics, which fields cannot be changed, whether omitted fields are preserved, or what the response looks like, so an agent lacks operational context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already has a meaningful description. The tool description itself adds no parameter-level meaning, but the baseline of 3 is appropriate because the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' targeting the resource 'custom field', so an agent can tell this is an update operation on a custom field. However, it does not differentiate among sibling tools like update_custom_field_value or update_custom_item_field, so the purpose is clear but not contextually distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage context is provided. The description doesn't explain when to use this tool versus create_custom_field, update_custom_field_value, or other custom-field-related siblings, and it gives no exclusions or alternative routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_custom_field_valueAInspect
Update a custom field value on a task, project or company.
| Name | Required | Description | Default |
|---|---|---|---|
| value | No | The value to assign, typed per the field: string (text), number (number), boolean (checkbox), choice value string (dropdown/status; array for multiselect), ISO-8601 string (date). | |
| entity | Yes | The type of entity the custom field value is attached to. | |
| value_id | Yes | The ID of the custom field value entry to update. | |
| entity_id | Yes | The ID of the task, project or company the custom field value belongs to. | |
| country_code | No | The country code for currency-type custom field values. | |
| currency_code | No | The ISO currency code for currency-type custom field values. | |
| custom_field_id | Yes | The ID of the custom field the value belongs to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=false, so the mutation aspect is covered. The description adds no behavioral context beyond the generic update semantics, such as overwrite behavior, whether the value must already exist, conditional currency fields, or error handling. With no unique behavioral disclosure, this is below adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the action and resource, and contains no filler. It is appropriately concise for a tool whose parameter details are already fully documented in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, 4-required mutation with no output schema, the one-line description is adequate but leaves gaps: no guidance on when to update vs create, no mention of return value or side effects, and no elaboration on entity-specific behavior. The rich schema covers parameters, so completeness is medium rather than low.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema and property descriptions already document entity, entity_id, value_id, custom_field_id, value, and the currency fields thoroughly. The tool description adds nothing about parameters, but the schema carries the full burden; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Update') and resource ('custom field value') and scopes it to 'task, project or company.' This clearly differentiates it from create/get/list custom field value tools and from update_custom_field, which manages field definitions rather than values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or alternative routing; the description merely states the action. The verb 'Update' implies it is for modifying an existing custom field value, but it does not mention create_custom_field_value as the alternative for new values or clarify prerequisites. This is implied usage, not explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_custom_itemAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Custom item type ID to update. | |
| description | No | New description for the custom item type. | |
| display_name | No | New display name for the custom item type. | |
| label_plural | No | New plural label. | |
| label_singular | No | New singular label. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate that this is a non-read-only, non-destructive, non-idempotent mutation. The description adds conceptual context but no behavioral detail: it does not say whether omitted fields are preserved, whether this affects existing custom item records, whether permissions are required, or what happens when only the required id is provided. For a mutating tool without an output schema, this is a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Each of the four sentences earns its place: the first states the action, the second defines custom items, the third gives entity-category guidance, and the fourth provides a confirmation workflow. The content is front-loaded and contains no redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is strong for tool selection and domain understanding, but it leaves key invocation details unstated. In particular, it does not clarify that although only id is required by the schema, at least one optional field should generally be supplied for a meaningful update. It also does not mention partial-update behavior or return values, which matters more because there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all five parameters with 100% coverage, so the description is not obligated to deeply elaborate on each parameter. It does reinforce that display_name, description, and labels are the updatable attributes, but it adds no constraints, formatting rules, or behavioral semantics beyond what the schema provides, making baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and target: 'Update a custom item type's display name, description, or labels.' It also explains what custom items are with concrete examples and clarifies that these are not built-in Teamwork entities, which helps distinguish this tool from ordinary project tools and from custom item record/field tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use custom-item tools: when the user refers to an entity that is NOT a built-in Teamwork concept, and it lists those built-in concepts. It also provides a concrete fallback: call twprojects-list_custom_items to confirm an unrecognized entity. It does not explicitly contrast this tool with twprojects-update_custom_item_record, but the 'custom item type' wording makes that distinction inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_custom_item_fieldAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Field ID to update. | |
| definition | No | Replacement type-specific configuration as a JSON object. | |
| display_name | No | New display name. | |
| custom_item_id | Yes | Custom item type ID the field belongs to. | |
| position_after_id | No | Move this field after the given field ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description doesn't need to restate mutation safety. The description adds useful context about custom items being user-defined, but it doesn't disclose details like whether the update replaces the entire field definition, whether the 'definition' object is merged or fully replaced, or whether there are constraints on which fields can be updated. For a mutation tool with no output schema and a nested 'definition' object, a bit more behavioral detail would help.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact paragraph that front-loads the core purpose and then explains custom items and usage routing. Every sentence earns its place, though it could be slightly tighter by moving the long list of built-in concepts to a shorter phrase. The information density is high and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 params, one nested object), the description plus full schema coverage provides a solid basis for calling it. The main missing piece is what happens on a successful update (no output schema) and whether the 'definition' object is required conditionally. But the description clearly identifies the domain and the confirmation workflow (list_custom_items), so an agent has enough context to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter has a concise description (Field ID to update, Replacement type-specific configuration, New display name, Custom item type ID, Move this field after the given field ID). The description above the schema adds meaning by explaining what a custom item is, which helps the agent understand that custom_item_id refers to a project's custom entity type. The only minor gap is that 'definition' remains a bit opaque (what does 'type-specific configuration' mean?), but the schema already does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Update a field on a custom item type') and provides helpful context by defining what custom items are. It doesn't explicitly distinguish itself from the closely related twprojects-update_custom_field or twprojects-update_custom_field_value, but the 'field on a custom item type' phrasing and the use of custom_item_id and id help orient the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: use these tools when the user refers to an entity that is NOT a built-in Teamwork concept, and if the entity name isn't recognized, assume it is a custom item and call twprojects-list_custom_items to confirm. This clearly routes the agent between custom-item tools and built-in entity tools, which is valuable given the large sibling tool list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_custom_item_recordAInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Record ID to update. | |
| name | No | New display name for the record. | |
| section_id | No | New section ID, or null to remove the record from any section. | |
| field_values | No | Field values to set on the record. Each entry is {field_name, value}. Field names are matched case-insensitively against the custom item type's fields. Values are coerced by field type: dropdown/multiselect accept option labels or option twIds; date/time/datetime accept ISO-8601 strings; checkbox accepts bool or yes/no/true/false; number accepts numeric or numeric string; user accepts a user ID (or array of IDs for multi-user fields). To clear a field, send null. | |
| clear_section | No | Set to true to explicitly clear the record's section. Use this instead of section_id when you want null semantics. | |
| custom_item_id | Yes | Custom item type ID the record belongs to. | |
| position_after_id | No | Move the record after the given record ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide generic hints (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds meaningful behavioral context: partial update semantics ('Only the fields you supply are changed'), section removal via null, and field value coercion rules. It doesn't describe output or error behavior, but the mutation semantics are well disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: it leads with the operation and update semantics, then explains the custom item concept and usage guidance. It is slightly redundant with schema details about section_id and clear_section, but the organization is logical and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers when to use it, how to identify custom items, what partial update means, and how to handle sections. It omits return format and error cases, but given the rich parameter schema and clear selection guidance, this is a minor gap rather than a serious deficiency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven parameters in detail. The description adds value by emphasizing the partial-update behavior and clarifying the custom-item context, which helps the agent reason about which parameters to supply. This goes slightly beyond the baseline expected for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Update a record on a custom item type.' It clarifies that custom items are user-defined entity types and contrasts them with built-in Teamwork concepts, making it easy to distinguish this tool from sibling update tools that target tasks, projects, companies, and other built-ins.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool: when the user refers to an entity that is not a built-in Teamwork concept. It also instructs the agent to call twprojects-list_custom_items when an entity name is unrecognized, providing a concrete fallback path and clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_jobroleCInspect
Update job role.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the job role to update. | |
| name | No | The name of the job role. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description simply restates the mutation and adds no behavioral context beyond what annotations already convey (readOnlyHint=false, destructiveHint=false). It does not disclose partial-update semantics, permission needs, or effects beyond the fact of updating.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence with no wasted words. It is front-loaded and appropriately sized for a simple two-parameter update tool, though it is too bare to add much value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity, full schema coverage, and annotations, this is a minimally viable description. It is missing any note about optional fields or expected usage context, but an agent can likely operate it correctly with the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id and name. The description adds no further meaning about how these parameters behave, but the baseline is acceptable because the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('Update job role'), so an agent can tell this is the mutation counterpart to get_jobrole and list_jobroles. It lacks any scope or effect details, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus other update_* tools or when updating a job role is appropriate. The description only states the action and leaves all usage decisions to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_linkCInspect
Update link.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the link to update. | |
| code | No | The URL of the link. This is the actual web address that the link points to. | |
| title | No | The title of the link, which provides a brief summary of the purpose of the link. | |
| notify | No | Who 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 silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true as an alias for "all", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}). | all |
| tag_ids | No | A list of tag IDs to associate with the link. | |
| description | No | The description of the link. Longer text that provides detailed information about the link. | |
| notify_current_user | No | Whether the current user should be notified about the new link. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral details beyond the annotations; it only repeats that the tool updates a link. Annotations already indicate readOnly=false and destructive=false, but the description does not disclose side effects such as member notifications, whether fields are fully replaced or partially updated, or any permission requirements. It neither contradicts nor enriches the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, but it is under-specified rather than efficiently structured. For a mutation tool with seven parameters, 'Update link.' provides no useful explanatory content and does not earn its place as a meaningful description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema and only minimal annotations, the description should explain what updating a link entails, likely outcomes, and when to use it. 'Update link.' is far too incomplete for an agent to understand the tool's behavior, side effects, or return value.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the input schema already documents all seven parameters, including the complex notify behavior. The description itself adds no parameter-level meaning, which is acceptable because the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update link.' restates the tool name and title almost verbatim, adding no information about the link resource or what updating it entails. It identifies a verb and resource but is effectively tautological and does not help differentiate it from the many other update_* tools or even from twprojects-create_link.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as twprojects-create_link, twprojects-get_link, or twprojects-list_links. The description implies updating an existing link only through the verb 'Update,' but it provides no context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_messageCInspect
Update message.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the message to update. | |
| body | No | The body of the message. | |
| title | No | The title of the message. | |
| notify | No | Who 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 one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true as an alias for "all", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}). | all |
| notify_current_user | No | Whether the current user should be notified about the new message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a mutating, non-destructive, non-idempotent operation, but the description adds no behavioral context beyond that. It does not mention side effects such as notifications, partial-update semantics, permissions, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but under-specified; 'Update message.' is essentially a restatement of the title and name. It does not earn its place by adding any new information or structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no description of return values, partial-update behavior, or the relationship to related message tools, the definition is not contextually complete. The rich notify parameter schema covers parameter meaning but not the tool-level context an agent needs for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter semantics are fully documented in the schema and the description does not need to compensate. The description itself adds no additional parameter meaning, which warrants the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb ('Update') and a resource ('message'), so it is minimally clear what operation is performed. But it repeats the tool name/title and does not specify what kind of message, which fields can be changed, or how it differs from the sibling update_message_reply.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this tool versus create_message, update_message_reply, get_message, or list_messages. No exclusions, prerequisites, or alternative selection criteria are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_message_replyCInspect
Update message reply.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the message reply to update. | |
| body | No | The body of the message reply. | |
| notify | No | Who 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 one silently drops everyone else who would have been told. Accepts the string "all" to notify all project members, the boolean true as an alias for "all", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {"user_ids": [123, 456]}). | all |
| notify_current_user | No | Whether the current user should be notified about the new messageReply. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is not read-only, but the description adds no behavioral context beyond the word 'update.' It does not disclose side effects, such as modifying the reply's body or triggering notifications, nor does it explain what happens to existing reply data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but it is under-specified rather than efficiently concise. It restates the tool name and omits information an agent needs to select and invoke the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a rich schema, the tool-level description is missing essential context such as what a message reply is, how this differs from updating a message, and what outcome or return value to expect. For an update operation with no output schema and four parameters, this is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, including a very detailed explanation of the notify parameter. The tool description itself adds no parameter meaning, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update message reply' is a near-verbatim restatement of the tool name, providing no additional explanation of what a message reply is or how updating it differs from updating a message. It qualifies as a tautology rather than a clarifying purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives such as twprojects-update_message, twprojects-create_message_reply, or twprojects-get_message_reply. An agent must infer the appropriate context entirely from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_milestoneCInspect
Update milestone.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the milestone to update. | |
| name | No | The name of the milestone. | |
| tag_ids | No | A list of tag IDs to associate with the milestone. | |
| due_date | No | The due date of the milestone (format: YYYYMMDD). Used for related tasks without their own due date. | |
| assignees | No | Assignees for the milestone. | |
| description | No | A description of the milestone. | |
| tasklist_ids | No | Tasklists to associate with the milestone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond what annotations already state. It does not explain whether the update merges or replaces fields, whether relationships like tag_ids or assignees are overwritten, what side effects occur, or what succeeds the operation. The 'Update' verb is consistent with readOnlyHint=false, but no additional behavioral information is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two words is under-specification rather than effective conciseness. The sentence merely echoes the title and fails to earn its place by providing any additional usable information. A good concise description would still include at least a scope or behavior clue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with seven parameters, a nested assignees object, and no output schema, the description is far too thin. It omits critical update semantics such as partial vs. full replacement, behavior for absent parameters, or constraints on relationships. The schema covers field meaning but not the overall operation contract, leaving an agent guessing about invocation behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of the seven parameters is already documented with meaningful descriptions. The tool description adds no parameter-level insight, but it doesn't need to because the schema carries the burden adequately. A baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update milestone.' is a direct restatement of the tool name and title, adding no new information. It names the verb and resource but doesn't describe what updating entails or differentiate itself from the many sibling update_* tools beyond the resource name already present in the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as create_milestone, list_milestones, get_milestone, or update_task. The description contains no context about prerequisites, typical use cases, or exclusions, leaving the agent to infer applicability entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_notebookCInspect
Update notebook.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the notebook to update. | |
| name | No | The name of the notebook. | |
| type | No | The type of the notebook. | |
| tag_ids | No | A list of tag IDs to associate with the notebook. | |
| contents | No | The contents of the notebook. | |
| description | No | A description of the notebook. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only and not marked destructive, so the description's 'Update' is consistent. But it discloses no additional behavior such as partial-update semantics, whether omitted fields are preserved or reset, tag replacement behavior, or required permissions. With annotations present, the description adds essentially no behavioral context beyond the word 'Update.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and front-loaded, but it is under-specified rather than usefully concise. It contains no information beyond what the tool name and title already communicate, so it does not earn its place as a value-adding description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, an enum, and no output schema, the description is incomplete for confident use. It does not clarify whether updates are partial, how tag_ids are applied, what constraints exist on type, or what happens after a successful update. An agent would have to guess critical behavioral details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all six parameters, so the schema already explains id, name, type, tag_ids, contents, and description. The description itself adds no parameter-level meaning, but the baseline of 3 applies because the schema carries the documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: updating a notebook. However, it simply restates the tool title and does not add detail about what 'update notebook' involves or how it differs from other update_* sibling tools beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives like twprojects-create_notebook, twprojects-get_notebook, or other update tools. The description gives no context, prerequisites, or exclusions, leaving the agent to infer usage solely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_projectCInspect
Update project.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the project to update. | |
| name | No | The name of the project. | |
| end_at | No | End date of the project (format: YYYYMMDD). | |
| status | No | The status of the project. | |
| tag_ids | No | A list of tag IDs to associate with the project. | |
| owned_id | No | The ID of the user who owns the project. | |
| start_at | No | Start date of the project (format: YYYYMMDD). | |
| company_id | No | The ID of the company associated with the project. | |
| category_id | No | The ID of the category to which the project belongs. | |
| description | No | The description of the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations show this is not read-only and not destructive, but the description adds no behavioral context beyond that. It does not disclose what happens to omitted fields, whether changes are reversible, or what the response contains, so it fails to add value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, but for a 10-parameter mutation tool this is under-specification rather than effective conciseness. Important usage and behavioral information is omitted entirely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool with 10 parameters and no output schema, yet the description provides no information about update semantics, return values, required identifiers, or usage context. The schema covers field details, but the description leaves too much for the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 10 parameters already have meaningful descriptions in the schema. The tool description contributes nothing extra, but the baseline of 3 is appropriate because the schema carries the parameter-semantics burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update project.' is essentially a tautology of the tool name and title. It names a verb and resource but provides no specifics about what updating entails and does not distinguish this tool from the many sibling update_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool, how it differs from alternatives, or whether it performs partial updates or full replacements. It also does not mention that an existing project ID is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_project_categoryCInspect
Update project category.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the project category to update. | |
| name | No | The name of the project category. | |
| color | No | The color of the project category in hex format (e.g., #FF5733). | |
| parent_id | No | The ID of the parent project category, if any. This allows for nested categories. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already communicate that this is not read-only and not destructive, but the description adds no additional behavioral context such as whether updates are partial, how parent_id changes affect the category tree, or what response to expect. It does not contradict the annotations, but it also does not reveal anything about side effects or semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and free of fluff, which is concise. However, it essentially restates the tool name and title, providing no additional structured information. It is more under-specified than usefully compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description is too sparse. It fails to explain update semantics, whether fields are optional in practice, how to unset parent_id, or what the expected outcome is. The schema covers parameters, but the overall context needed to invoke and interpret the tool correctly is not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all four parameters clearly. The description itself adds no clarification about parameter meaning, usage, or constraints beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Update project category.' This clearly communicates the action, and the resource name distinguishes it from update_* tools in other domains. However, it largely repeats the tool name and title, offering no additional scope or specificity, so it does not earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as create_project_category, get_project_category, or list_project_categories. It also does not state prerequisites, such as the need for the category to already exist or how updates relate to other operations. The usage context must be entirely inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_skillCInspect
Update skill.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the skill to update. | |
| name | No | The name of the skill. | |
| user_ids | No | The user IDs associated with the skill. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate this is a non-read-only, non-idempotent mutation, but the description adds no behavioral details such as whether omitted fields are cleared, whether user_ids replaces existing associations, or whether an existing skill is required. The description does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two words, but this is under-specification rather than effective conciseness. It contains no informative content that earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with three parameters and no output schema, the description is far too sparse. It fails to explain update semantics, required preconditions, or what happens when optional fields are omitted, leaving all contextual burden on the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, name, and user_ids. The description does not add any semantic meaning beyond the schema, warranting the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update skill.' is a near-verbatim restatement of the tool name and title, providing no additional information. It identifies the resource but does not distinguish this tool from the many other update_* siblings or clarify what aspects of a skill can be updated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus create_skill, get_skill, list_skills, or other update tools. No context, prerequisites, or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_tagCInspect
Update tag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the tag to update. | |
| name | No | The name of the tag. It must have less than 50 characters. | |
| color | No | The color of the tag. It must be a valid hex color code. | |
| project_id | No | The ID of the project to associate the tag with. This is for project-scoped tags. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral detail beyond what annotations already indicate. It is consistent with readOnlyHint=false, but it does not explain partial-update semantics, side effects, permissions, or what happens when optional fields are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
'Update tag.' is short but under-specified rather than effectively concise. It does not earn its place because it merely repeats the title and omits useful context that an agent would need to select and invoke the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with four parameters and no output schema, the description is incomplete. It does not state the return value, whether the update is partial or full replacement, or how this project tag update relates to the similar teamdesk and spaces tag updates. The schema helps, but the description still leaves important operational gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a clear description in the input schema. The tool description contributes no additional parameter semantics, but this is acceptable because the schema carries the necessary detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is simply 'Update tag.', which restates the tool name and title without adding meaningful scope or behavior. It also fails to distinguish this tool from twdesk-update_tag and twspaces-update_tag, which are clearly related but operate on different tag domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as twprojects-create_tag, twprojects-get_tag, or twdesk-update_tag. There are no prerequisites, exclusions, or contextual hints beyond the tool name itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_taskCInspect
Update task.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the task to update. | |
| name | No | The name/title of the task. | |
| notify | No | Whether to notify the task's assignees and followers, which sends them an email. Defaults to true. Set it to false for bulk or housekeeping changes nobody needs to hear about. | |
| tag_ids | No | A list of tag IDs to associate with the task. | |
| due_date | No | The due date of the task. If omitted, falls back to the milestone due date when one is set. | |
| priority | No | The priority of the task. | |
| progress | No | The progress of the task, as a percentage (0-100). Only whole numbers are allowed. | |
| assignees | No | Assignees for the task. To remove all assignees, use clear_assignees instead. | |
| start_date | No | The start date of the task. | |
| description | No | The description of the task. Support for plain text and Markdown formatting. | |
| tasklist_id | No | The 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. | |
| predecessors | No | Task dependencies that must be completed before this task can start. | |
| parent_task_id | No | The 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. To detach the task from its parent, use clear_parent_task instead. | |
| attachment_refs | No | References of files to attach to the task, as returned by twprojects-create_upload_url or twprojects-create_file. Each is "tf_" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed. | |
| clear_assignees | No | If true, removes all assignees from the task, leaving it unassigned. Cannot be combined with a non-empty assignees value. | |
| change_followers | No | Followers of any task changes. | |
| clear_parent_task | No | If true, detaches the task from its parent, promoting it to a top-level task. Cannot be combined with parent_task_id. | |
| comment_followers | No | Followers of any task comments. | |
| estimated_minutes | No | The estimated time to complete the task in minutes. | |
| complete_followers | No | Followers of any task completions. | |
| attachment_file_ids | No | IDs of files already in a project's files area to attach to the task, as returned by twprojects-add_project_file. Unlike a reference these can be used repeatedly, so this is how one file reaches several tasks. Files are added to whatever is already attached; nothing is removed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses no behavioral traits beyond the word 'Update.' It does not mention partial-update semantics, whether omitted fields are reset, notification side effects, or return behavior. It does not contradict the annotations, so there is no annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short but not usefully concise; 'Update task.' duplicates the tool title and fails to summarize key behavior. For a 21-parameter tool with nested objects, this is under-specification rather than effective front-loading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, lack of an output schema, and minimal top-level description, an agent cannot infer return values, merge-versus-replace behavior, or when to route to related task tools. The parameter descriptions compensate partially, but the overall definition remains incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the input schema contains detailed parameter notes covering defaults, one-time-use refs, move cascades, and constraints. The description itself adds no parameter information, but the baseline of 3 applies due to complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update task.' simply restates the tool name/title. It gives no additional scope, field detail, or distinction from sibling tools like complete_task or move_tasks, making it a tautology rather than an informative purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no top-level guidance on when to use this tool versus alternatives. Some alternatives appear only within parameter descriptions (e.g., clear_assignees, twprojects-move_tasks), but the description itself provides no decision context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_tasklistCInspect
Update tasklist.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the tasklist to update. | |
| name | No | The name of the tasklist. | |
| description | No | The description of the tasklist. | |
| milestone_id | No | The ID of the milestone to associate with the tasklist. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses no behavioral traits beyond what annotations already provide. Annotations indicate non-read-only and non-destructive, and the description adds no context about side effects, whether omitted fields are preserved, auth requirements, or success/error behavior. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence is maximally short, but this is under-specification rather than conciseness; it merely repeats the tool name. There is room for at least a sentence clarifying scope or behavior without adding clutter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description should clarify what changes are made and what the caller receives. The current text provides none of that, and it doesn't leverage sibling distinctions or partial-update semantics. The schema covers parameter names but not behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: id, name, description, and milestone_id each have meaningful descriptions in the input schema. The tool description itself adds no parameter details, but the baseline of 3 is appropriate because the schema carries the parameter documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update tasklist.' is a verb+resource but exactly restates the tool name and title, adding no explanatory value. It identifies the resource but doesn't describe what updating entails or how it differs from nearby tools like create_tasklist or update_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool instead of alternatives. There are no usage conditions, prerequisites, or exclusions; the only signal is the verb 'update,' from which the agent must infer intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_teamCInspect
Update team.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the team to update. | |
| name | No | The name of the team. | |
| handle | No | The handle of the team. It is a unique identifier for the team. It must not have spaces or special characters. | |
| user_ids | No | Users to add to the team. | |
| company_id | No | The ID of the company. This is used to create a team scoped for a specific company. | |
| project_id | No | The ID of the project. This is used to create a team scoped for a specific project. | |
| description | No | The description of the team. | |
| parent_team_id | No | The ID of the parent team, which places this team in a hierarchy. Pass 0 to move the team back to the top level. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate that this is not read-only and not destructive, but the description adds no behavioral context. It does not clarify whether omitted fields are preserved, whether user_ids replaces or appends team members, or what response or error behavior to expect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but this is under-specification rather than useful conciseness. A single sentence that merely restates the title does not earn its place and leaves the tool's purpose and behavior almost entirely to the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, 1 required, and no output schema, the description should explain the update operation's scope, partial-update behavior, and side effects. None are present, making the description inadequate for an agent to reliably invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The tool description adds no parameter meaning; it merely names the action. Some parameter descriptions (company_id, project_id) oddly refer to 'create a team', which the brief description fails to correct or clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update team.' exactly restates the title 'Update Team' and adds no information beyond the tool name. It is a tautology, providing no specificity about what team aspects can be updated or how this relates to sibling tools like create_team, get_team, or list_teams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as twprojects-create_team or twprojects-get_team. No preconditions (e.g., the team must exist) or exclusions are mentioned, leaving the agent without any selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_timelogBInspect
Update timelog. It can also be moved to another project or task.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the timelog to update. | |
| date | No | The date of the timelog. | |
| time | No | The time of the timelog in the format HH:MM:SS. | |
| hours | No | The number of hours spent on the timelog. Must be a positive integer. | |
| is_utc | No | If true, the time is in UTC. | |
| minutes | No | Minutes spent on the timelog. Must be a positive integer less than 60; otherwise increment hours instead. | |
| tag_ids | No | A list of tag IDs to associate with the timelog. | |
| task_id | No | Move the timelog to this task, and with it to the task's own project. | |
| user_id | No | User the timelog is logged for. Defaults to the authenticated user. | |
| billable | No | If true, the timelog is billable. | |
| clear_task | No | Set to true to detach the timelog from its task, leaving it logged against the project. Cannot be combined with task_id. | |
| project_id | No | Move the timelog to this project. The API takes the project from the task whenever the timelog is logged against one, so pass clear_task alongside it to move a timelog off its task. | |
| description | No | A description of the timelog. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating operation (readOnlyHint=false), so the description need not restate that. It adds the useful fact that the tool can reassign timelogs to another project or task. However, it does not disclose partial-update semantics, permission requirements, or downstream effects of moving a timelog.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and front-loads the main action; the second sentence adds the non-obvious move capability. The first sentence merely restates the tool name/title, so it does not fully earn its place, but there is no wordiness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters, no output schema, and only basic annotations, this description is too sparse. It does not state whether omitted fields are left unchanged, how moving to a task/project interacts with existing assignments, or what the response looks like, leaving important invocation context to the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the input schema already documents all 13 parameters. The description's mention of moving to a project or task aligns with task_id/project_id but adds no syntax or interaction details beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource ('Update timelog') and adds a second behavior ('moved to another project or task') that is not obvious from the name. It does not explicitly distinguish itself from sibling update tools or list/create timelog tools, but the resource and action are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus create_timelog, list_timelogs, get_timelog, or update_timer. The moving capability is mentioned but not framed as a condition for choosing this tool, and no exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_timerCInspect
Update timer.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the timer to update. | |
| running | No | If true, the timer will start running immediately. | |
| task_id | No | The ID of the task to associate the timer with. | |
| billable | No | If true, the timer is billable. | |
| project_id | No | The ID of the project to associate the timer with. | |
| description | No | A description of the timer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false; the description adds no behavioral context beyond that. It does not explain what happens when a timer is updated, whether it can be started/stopped, or what side effects may occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but this is under-specification rather than effective conciseness. 'Update timer.' adds no information beyond the tool name and does not earn its place as a descriptive sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with six parameters and no output schema, this description is far from complete. It does not clarify what 'update' means in practical terms, which fields are commonly used together, or what happens after invocation. The rich schema helps but cannot compensate for the absence of behavioral and usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter already has a meaningful description in the schema. The tool description itself adds no parameter-level meaning, but the schema carries the burden, supporting a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update timer.' simply restates the tool name and title with no additional detail. It identifies the verb and resource but does nothing to distinguish this timer update operation from related siblings like pause_timer, resume_timer, or complete_timer.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention pause, resume, complete, or create timer operations, leaving the agent to infer the appropriate context entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_userCInspect
Update user.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the user to update. | |
| type | No | The type of user, such as 'account', 'collaborator', or 'contact'. | |
| admin | No | Indicates whether the user is an administrator. | |
| No | The email address of the user. | ||
| title | No | The job title of the user, such as 'Project Manager' or 'Senior Software Developer'. | |
| last_name | No | The last name of the user. | |
| company_id | No | The ID of the client/company to which the user belongs. | |
| first_name | No | The first name of the user. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already communicate that this is not read-only, not idempotent, and not destructive. The description adds no behavioral context beyond the word 'Update', such as whether fields are partially updated, whether updates are reversible, or what happens after a successful update.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short and free of fluff, but it is under-specified rather than appropriately concise. Two words do not provide enough useful context for a tool with eight parameters and a write operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a mutation tool with eight parameters, no output schema, and minimal annotations, the description is far too sparse. It fails to explain update semantics, which fields are available for update, or any operational context an agent would need beyond the raw schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters are already documented with types and descriptions. The description itself contributes no additional parameter meaning, but the schema does the necessary work, making a baseline score of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Update') and a clear resource ('user'), so an agent can identify this as a user-mutation tool. However, it does not differentiate it from the many other update_* sibling tools beyond the resource name, and it adds no detail about the scope of the update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives. The description does not mention prerequisites, whether this is the canonical way to modify a user, or any conditions under which another tool should be used instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_workflowCInspect
Update workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the workflow to update. | |
| name | No | The new name of the workflow. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations indicate this is not read-only and not idempotent, but the description adds no behavioral context beyond that. It does not mention side effects, required permissions, or what happens to unspecified workflow settings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short but under-specified rather than usefully concise. The single sentence restates the tool name and does not earn its place because it contributes no information beyond the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the schema covers parameter semantics, the description fails to provide the purpose clarity and usage context needed to select this tool correctly among many update_* siblings. It is minimally viable but leaves the agent to infer why, when, and how this update should be performed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema gives clear meaning to both id and name. The description itself adds no parameter-level detail, which is acceptable at the baseline of 3 given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Update workflow." is a near-verbatim restatement of the tool name and provides no detail about what updating a workflow entails. It also does not distinguish this tool from siblings like twprojects-update_workflow_stage or twprojects-create_workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus creating a workflow, updating a workflow stage, or moving tasks between stages. The description offers no context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-update_workflow_stageCInspect
Update workflow stage.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the workflow stage to update. | |
| name | No | The new name of the workflow stage. | |
| workflow_id | Yes | The ID of the workflow that owns the stage. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate this is not read-only, and the description only repeats the 'update' action without describing side effects, partial-update semantics, or whether renaming a stage affects tasks in that stage. No behavioral context is added beyond what the annotations and tool name convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At three words, the description has no filler, but the brevity is under-specification rather than efficient information packing. The sentence restates the tool name and contributes no new decision-relevant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The operation is simple and the schema plus annotations cover parameters and safety, so absence of an output schema is not critical. However, without any statement about the scope of the update or when it applies, the description is only minimally complete for an agent choosing among many update_* tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters (id, name, workflow_id) are already documented precisely. The tool description adds no parameter-level meaning, which is acceptable because the schema carries the burden; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update workflow stage.' is a near-verbatim restatement of the tool name and title, adding no specifics about what aspect of the stage is updated (e.g., its name) or what the effect is. It identifies a resource but does not elaborate enough to stand apart from other workflow-stage operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this tool versus siblings such as twprojects-move_task_to_workflow_stage or twprojects-update_workflow. An agent would have to infer usage from the schema alone, which is risky because moving a task to a stage is a different operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twprojects-users_workloadARead-onlyInspect
Get task allocation across users for a date range. (workload of users)
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination of results (1-based). | |
| end_date | Yes | End of the workload period; the boundary day itself is included. | |
| user_ids | No | Filter workload by user. | |
| page_size | No | Number of results per page for pagination (1-500). | |
| start_date | Yes | Start of the workload period; the boundary day itself is included. | |
| project_ids | No | Filter workload by project. | |
| user_team_ids | No | Filter workload by users' team. | |
| user_company_ids | No | Filter workload by users' client/company. |
Output Schema
| Name | Required | Description |
|---|---|---|
| meta | Yes | |
| included | Yes | |
| workload | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the operation as read-only and non-destructive, and the description's 'Get' is consistent with that. The description adds the semantic scope (workload per user over a period) but no further behavioral traits such as aggregation, pagination defaults, or result limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main sentence is front-loaded and compact, stating what the tool returns and the key constraint. The parenthetical is slightly redundant but harmless.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a fully described schema and an output schema present, the minimal description is adequate for a read-only workload query. It could be more complete by naming the filtering/pagination options, but those are already in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so all eight parameters are already documented with their meanings. The description mentions only the date-range dimension in plain language and adds no semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a clear action ('Get') and a specific resource ('task allocation across users') scoped to a date range, and the parenthetical 'workload of users' reinforces the intent. It is unambiguous on its own, though it does not explicitly contrast itself with related siblings such as twprojects-list_allocations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for a date range' gives a clear query context and the required start_date/end_date pair, so the intended use is implied. However, there is no explicit guidance about when to prefer this over allocations/timelog/workload-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-create_categoryBInspect
Create space category.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the category. | |
| color | No | A hex color code for the category (e.g. "#FF5733"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, signaling a write operation. The description only repeats the creation intent without adding behavioral context such as side effects, uniqueness constraints, whether associated spaces are required, or what happens on duplicate names. No additional transparency beyond the annotations is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no wasted words. It is front-loaded with the action and object. However, while appropriately short, it offers almost no additional context or structure, so it does not reach the highest mark for effectively using its limited length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool with two parameters and no output schema, the definition is minimally adequate: an agent can infer that it creates a category with a name and optional color. However, it lacks any explanation of what a space category is, when to create one, or what the API returns, leaving clear gaps for an agent unfamiliar with the domain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents both the 'name' and 'color' parameters. The description adds no extra meaning about these parameters or how they relate to creating a category, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create space category' states a specific verb and a specific resource. It clearly distinguishes this tool from siblings like twspaces-get_category, twspaces-list_categories, and twspaces-update_category, and from the analogous twprojects-create_project_category by using 'space' instead of 'project'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention that this should be used to create a new category for organizing spaces, nor does it exclude cases like updating or listing existing categories. Usage must be inferred entirely from the verb 'create'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-create_commentBInspect
Create comment on a page. Use parentId for replies.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The ID of the page to comment on. | |
| content | Yes | The content of the comment. | |
| spaceId | Yes | The ID of the space containing the page. | |
| parentId | No | The ID of the parent comment (for creating a reply). | |
| isPrivate | No | Set to true to create a private comment visible only to space members. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, consistent with a create operation, and the description does not contradict them. The description adds one behavioral detail: 'Use parentId for replies,' but this is already captured in the schema parameter description. It does not disclose outcomes such as visibility rules, notifications, or duplicate behavior, though the idempotentHint=false annotation partially covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences, front-loaded with the action and resource, and the reply guidance is a useful one-liner. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create-comment tool, the description plus schema provide enough to make a correct call. However, the lack of any mention of how this differs from twprojects-create_comment, and no indication of required relationships (e.g., space must contain the page), leaves some context gaps. Since there is no output schema, a bit more behavioral context would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so a baseline of 3 is appropriate. The description's 'Use parentId for replies' does not add meaning beyond the schema's own description for parentId ('for creating a reply'). No additional parameter semantics are provided, so value over the schema is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create comment') and resource ('a page'), identifying the core purpose. It does not explicitly differentiate from the sibling tool twprojects-create_comment, though the 'page' wording hints at the spaces domain. Overall, clear but lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like twprojects-create_comment or twspaces-list_comments. The only instruction, 'Use parentId for replies,' addresses parameter usage for replies rather than tool selection. This leaves the agent without context for choosing among comment-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-create_pageCInspect
Create page in a space.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | A URL-friendly slug for the page. | |
| title | Yes | The title of the page. | |
| content | No | The HTML content of the page. | |
| spaceId | Yes | The ID of the space to create the page in. | |
| parentId | No | The ID of the parent page (for creating a sub-page). | |
| isPublish | No | Set to true to publish the page immediately (default: draft). | |
| isFullWidth | No | Display the page in full-width layout. | |
| changeMessage | No | A message describing the changes made in this version. | |
| isRequiredReading | No | Mark this page as required reading for space members. | |
| readerInlineCommentsEnabled | No | Allow readers to add inline comments on this page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the annotations; it simply restates the create action already visible in the name. It does not disclose defaults such as draft vs. publish, parent-page hierarchy behavior, or what the response contains, so the agent gets minimal insight into side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words and the action front-loaded. It is appropriately concise, though it offers no additional structure or elaboration that could improve usability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents the parameters, making basic invocation feasible, but the description omits useful context like draft-vs-publish defaults, sub-page creation via parentId, and expected return behavior. It is minimally adequate but leaves several gaps an agent would have to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 10 parameters have descriptions in the schema, so schema coverage is 100% and the description does not need to explain parameter meaning. The tool description adds nothing beyond the schema, which fits the baseline of 3 for complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Create') and resource ('page in a space'), which is clear and generally distinguishes it from get/update/list/duplicate page tools at the verb level. However, it is largely a restatement of the tool name and does not explicitly differentiate itself from sibling tools like duplicate_page.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as duplicate_page, create_category, or update_page. The only usage signal is the generic 'Create page in a space,' leaving the agent to infer selection criteria without explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-create_spaceCInspect
Create space.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | A short unique code/identifier for the space (e.g. "ENG", "DOCS"). | |
| icon | No | An icon identifier for the space. | |
| title | Yes | The title of the space. | |
| purpose | No | A brief description of the space's purpose. | |
| projectId | No | The ID of a Teamwork project to link to this space. | |
| categoryId | No | Category to assign. Use twspaces-list_categories to discover. | |
| spaceColor | No | A hex color code for the space (e.g. "#FF5733"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not a read-only operation and is not idempotent, but the description adds no behavioral context beyond the word 'create.' It does not mention uniqueness of the code, permissions, side effects, or what happens when the space is created.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but this reads as under-specification rather than effective conciseness. It merely restates the tool's function in two words and provides no structured or front-loaded information for the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven parameters, two required fields, and no output schema, the description is too sparse to fully contextualize the operation. It does not explain the required title and code, the optional project/category links, or what a successful response contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter meanings are fully documented in the input schema. The description itself adds no parameter-level insight, but the high coverage supports the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Create') and resource ('space'), which matches the tool name and distinguishes it from sibling tools like twspaces-create_category and twspaces-create_page. It lacks any scoping or qualifying detail, so it does not quite reach a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as twspaces-update_space, twspaces-list_spaces, or twspaces-create_page. The text only says 'Create space,' which gives no explicit context, prerequisites, or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-create_tagsAInspect
Create one or more Spaces tags in a single request.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | Yes | Tags to create. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, indicating a non-destructive write. The description adds the batch creation aspect ('one or more') and single-request behavior, which is useful beyond annotations. However, it does not disclose potential error conditions (e.g., duplicate tag names) or return value, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence that gets straight to the point with no filler. It is front-loaded with the verb and resource, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter, no output schema), and the description plus schema provide enough to invoke it. However, the lack of details about response format or duplicate handling leaves some gaps, making it adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the 'tags' parameter and its item properties (name, color), so the description adds limited semantic value. It reinforces that one or more tags can be created and contextualizes them as Spaces tags, but this mostly duplicates the tool name. Baseline 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (create), resource (Spaces tags), and scope (one or more in a single request), distinguishing it from sibling tag-creation tools in other modules (e.g., twdesk-create_tag, twprojects-create_tag).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for creating Spaces tags, possibly multiple at once. It does not explicitly discuss exclusions or alternatives, but the resource and batching behavior are clear enough for a simple CRUD tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-duplicate_pageBInspect
Duplicate page with a new title.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | A URL-friendly slug for the duplicated page. | |
| title | Yes | The title for the duplicated page. | |
| pageId | Yes | The ID of the page to duplicate. | |
| spaceId | Yes | The ID of the space containing the page. | |
| parentId | No | The ID of the parent page for the duplicate (defaults to same parent). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already convey the mutation and non-destructive profile (readOnlyHint=false, destructiveHint=false), and the description adds no behavior beyond the literal word 'duplicate'. It doesn't disclose what is copied (children, attachments, comments), whether the original is left untouched, or what the operation returns. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. 'Duplicate page' leads with the action, and 'with a new title' adds the relevant distinguishing detail. It is compact without being vague.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a 5-parameter mutating tool with no output schema, the one-line description is minimally adequate but has clear gaps. The schema and annotations cover parameter meaning and safety, but the description does not explain the return value or the scope of what gets duplicated, which matters for an agent invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented. The description's 'with a new title' merely restates the title parameter's purpose and adds no new semantics for slug, parentId, or relationships between parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Duplicate page') and adds the key parameter context ('with a new title'), which clearly distinguishes it from create/update page operations. It doesn't explicitly name an alternative, so it doesn't quite reach the highest bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to use this tool versus twspaces-create_page, twspaces-update_page, or other page-related siblings. There are no conditions, prerequisites, or exclusions stated, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-get_categoryBRead-onlyInspect
Get space category.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the category to retrieve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description merely restates the operation without adding behavioral details beyond the annotations. Annotations already declare readOnlyHint and destructiveHint, but no additional context such as return behavior, error conditions, or pagination is provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded and appropriately sized for a simple get operation with one parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one parameter, no output schema) and annotations, the description is minimally adequate. However, it lacks any mention of the return value or behavior in case of error, which would be helpful for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameter with a clear description ('The ID of the category to retrieve'). The tool description adds no extra parameter detail, but since the schema is sufficient, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and resource 'space category', which clearly indicates the operation. It distinguishes from sibling tools like get_page or get_space by naming the resource type, but does not provide additional context about what a space category is.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives like list_categories or get_space. The description gives no exclusions or alternative recommendations, leaving the agent without usage decision support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-get_commentBRead-onlyInspect
Get page comment.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The ID of the page containing the comment. | |
| spaceId | Yes | The ID of the space containing the page. | |
| commentId | Yes | The ID of the comment to retrieve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond what annotations provide, but it doesn't contradict them either. No extra detail about return format or error cases is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, front-loaded and free of filler. It is concise, but perhaps too terseโit omits potentially useful context while still being grammatically efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get tool with three fully described parameters and readOnly annotations, the description is minimally adequate. However, since there is no output schema, the description could have mentioned that the return value is the comment object, which would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (pageId, spaceId, commentId) fully described. The description adds no additional parameter meaning, so it relies entirely on the schema. Baseline 3 is appropriate given the high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get page comment.' clearly identifies the action (get) and resource (page comment), which is specific enough for a retrieval tool. However, it doesn't explicitly distinguish from sibling tools like twprojects-get_comment or twspaces-list_comments, though the tool name provides the 'twspaces' context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention that this retrieves a single comment by ID, contrast with listing comments, or note any prerequisites. The user must infer usage from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-get_homepageBRead-onlyInspect
Get a space's homepage.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceId | Yes | The ID of the space to retrieve the homepage for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. However, the description adds no additional behavioral contextโnothing about return format, error behavior, or what a 'homepage' contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded, with zero wasted words. It communicates the essential purpose efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with one well-documented parameter, the description is minimally sufficient. However, with no output schema, it doesn't describe the return value or any special behavior, and usage guidance is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single parameter (spaceId) with a clear description. The tool description adds no extra semantic meaning beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get a space's homepage' clearly specifies the verb (get) and resource (space's homepage), distinguishing it from sibling tools like get_space or get_page. It's unambiguous, though it doesn't explicitly contrast with alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like twspaces-get_space or twspaces-get_page. There is no mention of context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-get_pageARead-onlyInspect
Get page. Returns content, metadata, tags, and revision info.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The ID of the page to retrieve. | |
| spaceId | Yes | The ID of the space containing the page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds that it returns content, metadata, tags, and revision info, which is return-value information rather than behavioral traits. No extra context is given about authorization, rate limits, or other side effects, but the annotation coverage lowers the burden on the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences that are front-loaded with the action and resource. Every word adds value, and there is no redundant or filler content. It is a model of conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with fully documented parameters and no output schema, the description conveys the essential purpose and return scope. It does not need to explain return values in detail because the enum of returned data is given. The lack of an output schema is not a gap since the description lists the content categories.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with clear descriptions for both pageId and spaceId. The description adds no additional parameter semantics, so it does not go beyond what the schema already offers. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get page' with a specific verb and resource, and adds value by enumerating what is returned (content, metadata, tags, revision info). It does not explicitly distinguish from sibling getters like get_space or get_comment, but the tool name already identifies the resource, so the purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended usage is implied by the description and annotations (read-only retrieval of a page by IDs), but there is no explicit guidance on when to use this tool versus alternatives such as twspaces-list_pages or twspaces-get_homepage. The lack of exclusions or alternative recommendations leaves the agent to infer from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-get_spaceCRead-onlyInspect
Get space.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the space to retrieve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context beyond that, such as return format, errors, or authentication requirements, which would be helpful for a simple get tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is only two words, which is concise but under-specified. It carries no information beyond the tool name and does not earn its place as a useful description. This is closer to under-specification than appropriate conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple GET tool with one parameter, no output schema, and minimal annotations, the description is inadequate. It does not explain what a space is, what fields the response contains, or any edge cases. Sibling tools like twspaces-get_page have similar brevity, but the description still fails to provide necessary context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: the only parameter 'id' is clearly described as 'The ID of the space to retrieve.' The description 'Get space.' adds no additional parameter meaning, but the schema fully covers the semantics, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get space.' is essentially a tautology of the tool name and title, restating the resource without any additional detail. It does not specify that it retrieves a single space by ID or distinguish itself from twspaces-list_spaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like twspaces-list_spaces or twspaces-get_page. No context or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-get_tagCRead-onlyInspect
Get Spaces tag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the tag to retrieve. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds no behavioral information beyond the tool nameโno mention of authentication, return payload, or any edge cases. It fails to add value beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with no fluff, but it is under-specified. It lacks any explanation that would help an agent understand the tool's purpose or context. Conciseness should not come at the expense of essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-id tool, the description is minimally adequate. The schema covers the parameter, annotations cover safety, and no output schema exists. However, the description fails to explain what a 'Spaces tag' is, whether the operation returns the tag directly, or any related context. Still, given the simplicity and good schema/annotation coverage, completeness is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: the single parameter 'id' has a clear description ('The ID of the tag to retrieve.'). The tool description adds no parameter semantics, but the schema fully documents the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get Spaces tag.' clearly identifies the action (get) and the resource (Spaces tag), distinguishing it from tag tools in other modules like twprojects-get_tag or twdesk-get_tag. However, it lacks any additional context about what a Spaces tag is or how it relates to Spaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as twspaces-list_tags or twspaces-update_tag. The description gives no context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-list_categoriesBRead-onlyInspect
List space categories.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Number of results per page for pagination (1-500). | |
| pageOffset | No | The index position to start retrieving results from (not a page number). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, matching the read-only nature of a list operation, so there is no contradiction. The description adds no extra behavioral context such as pagination behavior, sorting, or global-vs-scoped scope, but with the safety profile covered by annotations this is adequate rather than misleading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear, front-loaded phrase with no filler or redundancy. It is as concise as a list operation description can be, even though the brevity trades off some contextual depth captured in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple paginated list operation, the schema covers parameters and annotations cover safety, but the description does not clarify whether categories are global or space-scoped, what the response shape is, or default paging behavior since no output schema exists. These are meaningful gaps, but the core invocation is still understandable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both pageSize and pageOffset are already explained in the input schema with ranges and meaning. The description contributes no additional parameter-level detail, so it earns the baseline score for a schema-covered tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation with a specific verb ('List') and resource ('space categories'), making it easy to distinguish from twspaces-list_spaces, twspaces-list_pages, and twspaces-list_tags. It does not explicitly contrast itself with twspaces-get_category or twspaces-create_category, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to choose this tool over alternatives, such as twspaces-get_category for a single category or twspaces-search for filtered results. Usage must be inferred entirely from the tool name and the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-list_commentsARead-onlyInspect
List comments on a page. Returns top-level comments with replies.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The ID of the page to list comments for. | |
| spaceId | Yes | The ID of the space containing the page. | |
| pageSize | No | Number of results per page for pagination (1-500). | |
| pageOffset | No | The index position to start retrieving results from (not a page number). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety with readOnlyHint=true and destructiveHint=false. The description adds beyond that by explaining the response contains top-level comments with replies. It does not disclose pagination behavior or ordering, but those are not safety-critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action and return shape front-loaded. No filler or redundant restatement of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the required parameters and general return shape are covered. However, with no output schema, the description could better clarify pagination behavior, ordering, and exactly how replies are nested within top-level comments.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters clearly. The description adds no extra parameter-level meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), resource ('comments'), and scope ('on a page'). Also discloses the return shape ('top-level comments with replies'), which helps distinguish it from twprojects-list_comments and from twspaces-get_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for page comments via 'on a page', but it does not explicitly name alternatives or state when-not-to-use conditions. It does not mention twprojects-list_comments or twspaces-get_comment as distinct options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-list_pagesARead-onlyInspect
List pages in a space as a hierarchical tree. Returns the space's open pages under pages; set includePrivate to also receive, under a sibling private key, the restricted pages the calling user has access to. Returns at most 100 pages per call by default, up to 500 with pageSize, counted across both trees. A space with more pages than that is cut in depth-first order and the response carries a truncated marker naming the total page count, the pageOffset that returns the next set, and twspaces-get_page for a single page in full.
| Name | Required | Description | Default |
|---|---|---|---|
| spaceId | Yes | The ID of the space to list pages for. | |
| pageSize | No | Maximum number of pages to return (1-500). Defaults to 100. | |
| pageOffset | No | Number of pages to skip, counted in depth-first order (not a page number), across the open tree and then the private one. Use the value the `truncated` marker names to read the next set. | |
| includePrivate | No | Return the restricted pages the calling user has access to as well, under a `private` key beside `pages`. Defaults to false, so an unfiltered call answers with the open pages only and a private page is missing rather than reported as inaccessible. Both trees share one pageSize budget and one pageOffset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=true and destructiveHint=false, but the description adds substantial behavioral detail beyond that: pagination limits (default 100, max 500), depth-first ordering, shared pageSize/pageOffset budget across both trees, truncation marker fields, and the exact behavior when includePrivate is false. This greatly exceeds what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with no fluff. Each clause earns its place: the core purpose, optional private behavior, pagination limits, truncation mechanics, and the pointer to the single-page alternative. Front-loaded with the main resource, well-structured for scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining the return structure (`pages`, `private`, `truncated`), pagination behavior, count limits, depth-first order, and how to page through results. It also mentions the alternative for a single page. Nothing essential is missing for a safe, effective call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all parameters already documented in detail (including depth-first ordering and shared budget). The tool description adds no novel parameter semantics beyond what the schema providesโit essentially repeats the same info. As the schema carries the load, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'List pages in a space as a hierarchical tree,' a specific verb and resource that immediately distinguishes this from siblings like twspaces-get_page (single page) and twspaces-list_spaces (list spaces). It also clarifies the optional inclusion of private pages, making the scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes to 'twspaces-get_page for a single page in full,' offering a concrete alternative. However, it doesn't explicitly state when not to use this tool versus other list tools (e.g., list_spaces), relying on the obvious name and context. It gives clear context for pagination and private pages but lacks broader exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-list_space_collaboratorsARead-onlyInspect
List space collaborators (users and teams).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the space to retrieve collaborators for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the result includes both users and teams, which is useful context beyond the annotations. However, it does not disclose other behavioral details like pagination, authentication requirements, or whether hidden/inactive collaborators are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the essential information without any filler. It is appropriately concise for a simple list operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (one required parameter, read-only operation), the description sufficiently explains what the tool returns ('users and teams') and the schema fully documents the input. The lack of an output schema or extensive behavioral notes is acceptable for this simple list tool, though a note about the return structure could push it to a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 100% coverage for the single parameter 'id' with a clear description. The tool description does not add any additional parameter semantics beyond what the schema already states, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' with the specific resource 'space collaborators' and clarifies the scope with '(users and teams)'. This distinguishes it from similar tools like twspaces-get_space and twspaces-list_spaces, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when you need to retrieve the list of users and teams associated with a space, but it provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions or prerequisites. The usage context is inferred from the name and description rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-list_spacesCRead-onlyInspect
List spaces.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Number of results per page for pagination (1-500). | |
| pageOffset | No | The index position to start retrieving results from (not a page number). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnlyHint, destructiveHint, and idempotentHint, so the safety profile is covered. The description adds no behavioral context such as pagination semantics, result ordering, scope, or what the returned list contains. There is no annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and has no filler, but it is so minimal that it duplicates the existing title rather than adding useful structure or context. It is under-specified more than elegantly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should at least clarify what a space is, whether all accessible spaces are returned, and what fields are included. 'List spaces.' leaves too much unstated, though the pagination parameters are adequately covered in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents both pageSize and pageOffset with 100% description coverage, including ranges and semantics. The description itself adds nothing about parameters, but the schema carries the burden, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List spaces.' simply restates the title 'List Spaces' and the action implied by the tool name 'twspaces-list_spaces'. It is effectively a tautology and adds no distinguishing detail against sibling tools like twspaces-get_space or twspaces-search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives. Sibling tools such as twspaces-get_space, twspaces-list_space_collaborators, and twspaces-search exist, but the description gives no criteria for choosing list_spaces over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-list_tagsBRead-onlyInspect
List Spaces tags.
| Name | Required | Description | Default |
|---|---|---|---|
| pageSize | No | Number of results per page for pagination (1-500). | |
| pageOffset | No | The index position to start retrieving results from (not a page number). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds no behavioral context beyond the word 'List' โ it does not mention pagination behavior, ordering, response shape, or any side effects. Thus it contributes nothing beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero filler. For a simple list operation with no required parameters, this is appropriately sized, and every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is minimally adequate for a simple, read-only list operation with fully documented optional pagination parameters. However, there is no output schema and the description does not hint at response format, tag object fields, or any filtering or ordering behavior, leaving some context missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both pageSize and pageOffset described in the input schema itself. The description is silent on parameters, but at this coverage level the schema carries the semantic burden effectively, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'List Spaces tags.' It distinguishes the tool from twdesk-list_tags and twprojects-list_tags by scoping it to the Spaces domain. It is not a tautology, though it is terse and does not elaborate on what a tag is or the exact scope of the listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: an agent would use this tool when it needs to enumerate tags in Spaces. However, there is no explicit guidance compared to twspaces-get_tag for single-tag lookup, twspaces-create_tags for creating tags, or any when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-searchARead-onlyInspect
Full-text search across pages. Filter by space.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query string. | |
| pageSize | No | Number of results per page for pagination (1-500). | |
| spaceIds | No | Limit search to specific spaces. Use twspaces-list_spaces to discover. | |
| pageOffset | No | The index position to start retrieving results from (not a page number). | |
| includeDeleted | No | Include deleted pages in search results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=true and destructiveHint=false, so the safety profile is handled. The description adds 'across pages' and 'filter by space' as scope context, but does not disclose additional behaviors like return format, pagination semantics, or how includeDeleted behaves beyond what the schema already states.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler. The core purpose is front-loaded and the filter capability is communicated directly without redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, all five parameters are documented in the schema, and annotations cover the read-only nature. The main gap is that there is no output schema and the description does not explicitly state the result shape, though 'search across pages' strongly implies a list of matching pages.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description only restates the space-filter concept already present in the spaceIds parameter and does not add deeper meaning about query behavior, pagination, or deleted handling.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('search') and resource ('pages'), and 'full-text' clarifies the search type. It also distinguishes itself from sibling tools like twspaces-list_pages by focusing on search rather than listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for full-text search across pages and that it can be filtered by space, but it does not explicitly state when to use it versus alternatives such as twspaces-list_pages or twspaces-get_page. No exclusions or alternative routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-update_categoryCInspect
Update space category.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the category to update. | |
| name | No | The new name for the category. | |
| color | No | A new hex color code for the category. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide basic flags (readOnlyHint=false, destructiveHint=false), but the description adds no behavioral context beyond the word 'update'. It does not state whether omitted fields are preserved, whether partial updates are supported, or what happens if the id does not exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no fluff and is front-loaded with the action. However, at only three words it is so terse that it borders on under-specification, adding little beyond the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple update with fully documented parameters, the description is mostly adequate: an agent can infer it should pass an id and optionally name or color. But it lacks clarity on partial-update behavior, how to find the id, and what the response will contain, especially since no output schema is provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so id, name, and color are already documented in the input schema. The description adds no parameter-level detail, but none is needed because the schema carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Update') and resource ('space category'), which is clear and matches the tool's twspaces namespace. It is unambiguous, though it does not explicitly distinguish itself from sibling update tools like twspaces-update_space or twspaces-update_tag.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as twspaces-create_category, twspaces-list_categories, or other update tools. It also does not mention prerequisites like obtaining the category id first or that this tool is only for updating existing categories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-update_commentCInspect
Update page comment.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | The new state of the comment (e.g. "active", "resolved"). | |
| pageId | Yes | The ID of the page containing the comment. | |
| content | No | The new content of the comment. | |
| spaceId | Yes | The ID of the space containing the page. | |
| commentId | Yes | The ID of the comment to update. | |
| isPrivate | No | Change the privacy setting of the comment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds nothing beyond the mutating nature already conveyed by readOnlyHint=false. It does not disclose whether the update is partial or full, how optional fields like state, content, or isPrivate behave, what gets overwritten, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single terse sentence with no wasted words and no unnecessary preamble. It is concise and front-loaded, though the brevity borders on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema and annotations cover parameter definitions and basic safety traits, but the description lacks the behavioral context needed to invoke a 6-parameter update tool correctly. The agent is left to guess how optional fields interact, whether empty values are accepted, and what the outcome of an update is.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are already documented with clear descriptions. The tool description adds no additional parameter semantics or usage details, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update') and a resource ('page comment'), which distinguishes it from get/create/list comment tools. However, it does not differentiate it from twprojects-update_comment, and 'page comment' is slightly vague without the tool name context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives. With multiple comment-related tools available, such as twprojects-update_comment and twspaces-create_comment, an agent receives no explicit routing cues or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-update_pageBInspect
Update page. Note: content and publish changes update the published page only, not the live collaborative editor draft; if the page has an active editor draft, re-publishing from the Spaces web editor can overwrite these changes (known Spaces limitation).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | A new URL-friendly slug for the page. | |
| title | No | The new title of the page. | |
| pageId | Yes | The ID of the page to update. | |
| content | No | The new HTML content of the page. | |
| spaceId | Yes | The ID of the space containing the page. | |
| parentId | No | The ID of the new parent page (to move the page). | |
| isPublish | No | Set to true to publish the page, false to revert to draft. | |
| isFullWidth | No | Toggle full-width layout for this page. | |
| draftVersion | No | Optimistic concurrency token for the page's draft content. Required when updating `content`; optional otherwise. Obtain the current value from the `draftVersion` field with twspaces-get_page or twspaces-list_pages tools. | |
| changeMessage | No | A message describing the changes made in this version. | |
| isMinorChange | No | Mark this update as a minor change (won't notify watchers). | |
| isRequiredReading | No | Mark or unmark this page as required reading. | |
| readerInlineCommentsEnabled | No | Allow or disallow readers from adding inline comments. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish this is a mutating operation. The description adds non-obvious behavioral context: content and publish changes affect only the published page, not the live editor draft, and re-publishing from the Spaces web editor can overwrite updates. This is meaningful transparency beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The critical caveat is front-loaded after the verb phrase, making the most important behavioral warning immediately visible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The draft/publish caveat is valuable, but with 13 parameters and no output schema, the description leaves the full update behavior largely to the schema. It is adequate for a mutating page-update tool, but not a complete standalone explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented and the baseline is 3. The description adds a small amount of cross-parameter context by linking content/publish changes to the draft caveat, but it does not substantially enrich parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb and resource ('Update page'), and the tool name clearly distinguishes it from twspaces-update_category/comment/space/tag siblings. However, it doesn't enumerate the scope of updatable fields, leaving some specificity to the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives, nor any preconditions or conditions. The draft/publish caveat is useful operational context but does not help an agent choose this tool over twspaces-create_page or other update tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-update_spaceCInspect
Update space.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the space to update. | |
| code | No | A new short unique code/identifier for the space. | |
| icon | No | A new icon identifier for the space. | |
| state | No | The state of the space (e.g. "active", "archived"). | |
| title | No | The new title of the space. | |
| purpose | No | A new brief description of the space's purpose. | |
| projectId | No | The ID of a Teamwork project to link to this space. | |
| categoryId | No | Category to assign. Use twspaces-list_categories to discover. | |
| spaceColor | No | A new hex color code for the space. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate that the operation is not read-only, not destructive, and not idempotent, but the description adds no additional behavioral context. It does not mention partial-update semantics, permission requirements, side effects, or what happens to omitted fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely short, but this is under-specification rather than effective conciseness. 'Update space.' carries no information beyond the tool name and title, so the sentence does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutating operation with nine optional parameters and no output schema, yet the description explains none of the operational context. It does not clarify whether this is a partial update, how to discover valid IDs, or what the response contains. The schema covers parameter meaning but not tool behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all nine parameters in sufficient detail. The description adds no parameter-level meaning, but with complete schema coverage the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update space.' is a tautology that restates the tool name and title. It names the resource but provides no detail about what updating involves, what fields are affected, or how it differs from the many other update tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, when not to use it, or which alternative tools might be relevant. The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
twspaces-update_tagBInspect
Update Spaces tag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The ID of the tag to update. | |
| name | No | The new name for the tag. | |
| color | No | A new hex color code for the tag. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate that this is a non-read-only, non-idempotent update operation, and the description merely repeats the verb 'Update' without adding behavioral context. It does not disclose partial-update semantics, validation behavior, required permissions, or side effects, and it does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or unnecessary words. It is concise, though slightly too terse to convey more than the basic action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward update tool, the fully documented parameters and annotations make the definition minimally sufficient to invoke correctly: id is required, and name and color are optional. However, missing usage guidance and return/behavior notes prevent it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (id, name, color) clearly documented in the input schema. The description adds no additional parameter meaning, but because the schema already handles this, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Update') and a specific resource ('Spaces tag'), making the action and target clear. This distinguishes it from sibling tag operations such as twspaces-create_tags, twspaces-get_tag, and twspaces-list_tags, as well as from update_tag in other domains like twdesk and twprojects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not say that it is for existing tags, that twspaces-create_tags should be used for creating new tags, or how it differs from twdesk-update_tag or twprojects-update_tag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v1.43.2- Changed
twprojects-get_jobrole1 field changed- added
Output schema / properties / includedAdded value: +{ + "properties": { + "currencies": { + "type": "object" + }, + "users": { + "type": "object" + } + }, + "type": "object" +}
- Changed
twprojects-list_jobroles1 field changed- added
Output schema / properties / includedAdded value: +{ + "properties": { + "currencies": { + "type": "object" + }, + "users": { + "type": "object" + } + }, + "type": "object" +}
- Changed
twspaces-list_pages4 fields changed- added
Input schema / properties / includePrivateAdded value: +{ + "description": "Return the restricted pages the calling user has access to as well, under a `private` key beside `pages`. Defaults to false, so an unfiltered call answers with the open pages only and a private page is missing rather than reported as inaccessible. Both trees share one pageSize budget and one pageOffset.", + "type": "boolean" +} - changed
Input schema / properties / pageOffset / descriptionPrevious value: -"The index position to start retrieving results from (not a page number)."New value: +"Number of pages to skip, counted in depth-first order (not a page number), across the open tree and then the private one. Use the value the `truncated` marker names to read the next set." - added
Input schema / properties / pageOffset / minimumAdded value: +0 - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination (1-500)."New value: +"Maximum number of pages to return (1-500). Defaults to 100."
12 tool updates
v1.41.0- Added
twprojects-download_file - Changed
twprojects-get_comment2 fields changed- changed
Input schema / properties / fields / items / enumPrevious value: -[ - "id", - "body", - "htmlBody", - "contentType", - "object", - "project", - "postedBy", - "postedDateTime", - "lastEditedBy", - "dateLastEdited", - "deleted", - "deletedBy", - "dateDeleted" -]New value: +[ + "id", + "body", + "htmlBody", + "contentType", + "object", + "project", + "postedBy", + "postedDateTime", + "lastEditedBy", + "dateLastEdited", + "deleted", + "deletedBy", + "dateDeleted", + "files" +] - added
Output schema / properties / comments / properties / filesAdded value: +{ + "items": { + "properties": { + "id": { + "type": "integer" + }, + "meta": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": [ + "null", + "array" + ] +}
- Added
twprojects-get_file - Changed
twprojects-get_message2 fields changed- changed
Input schema / properties / fields / items / enumPrevious value: -[ - "id", - "title", - "project", - "tags", - "lastReply", - "replyStatus", - "status", - "body", - "author", - "message", - "meta", - "createdAt", - "updatedAt" -]New value: +[ + "id", + "title", + "project", + "tags", + "lastReply", + "replyStatus", + "status", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt", + "attachments" +] - added
Output schema / properties / message / properties / attachmentsAdded value: +{ + "items": { + "properties": { + "id": { + "type": "integer" + }, + "meta": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": [ + "null", + "array" + ] +}
- Changed
twprojects-get_message_reply2 fields changed- changed
Input schema / properties / fields / items / enumPrevious value: -[ - "id", - "body", - "author", - "message", - "meta", - "createdAt", - "updatedAt", - "status" -]New value: +[ + "id", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt", + "status", + "attachments" +] - added
Output schema / properties / messageReply / properties / attachmentsAdded value: +{ + "items": { + "properties": { + "id": { + "type": "integer" + }, + "meta": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": [ + "null", + "array" + ] +}
- Changed
twprojects-get_task2 fields changed- changed
Input schema / properties / fields / items / enumPrevious value: -[ - "id", - "name", - "description", - "descriptionContentType", - "priority", - "progress", - "startDate", - "dueDate", - "estimateMinutes", - "tasklist", - "parentTask", - "assignees", - "tags", - "predecessors", - "subTaskIds", - "workflowStages", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deletedBy", - "deletedAt", - "completedBy", - "completedAt", - "status" -]New value: +[ + "id", + "name", + "description", + "descriptionContentType", + "priority", + "progress", + "startDate", + "dueDate", + "estimateMinutes", + "tasklist", + "parentTask", + "assignees", + "tags", + "attachments", + "predecessors", + "subTaskIds", + "workflowStages", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt", + "deletedBy", + "deletedAt", + "completedBy", + "completedAt", + "status" +] - added
Output schema / properties / task / properties / attachmentsAdded value: +{ + "items": { + "properties": { + "id": { + "type": "integer" + }, + "meta": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": [ + "null", + "array" + ] +}
- Changed
twprojects-list_comments2 fields changed- changed
Input schema / properties / fields / items / enumPrevious value: -[ - "id", - "body", - "htmlBody", - "contentType", - "object", - "project", - "postedBy", - "postedDateTime", - "lastEditedBy", - "dateLastEdited", - "deleted", - "deletedBy", - "dateDeleted" -]New value: +[ + "id", + "body", + "htmlBody", + "contentType", + "object", + "project", + "postedBy", + "postedDateTime", + "lastEditedBy", + "dateLastEdited", + "deleted", + "deletedBy", + "dateDeleted", + "files" +] - added
Output schema / properties / comments / items / properties / filesAdded value: +{ + "items": { + "properties": { + "id": { + "type": "integer" + }, + "meta": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": [ + "null", + "array" + ] +}
- Added
twprojects-list_files - Changed
twprojects-list_message_replies2 fields changed- changed
Input schema / properties / fields / items / enumPrevious value: -[ - "id", - "body", - "author", - "message", - "meta", - "createdAt", - "updatedAt", - "status" -]New value: +[ + "id", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt", + "status", + "attachments" +] - added
Output schema / properties / messageReplies / items / properties / attachmentsAdded value: +{ + "items": { + "properties": { + "id": { + "type": "integer" + }, + "meta": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": [ + "null", + "array" + ] +}
- Changed
twprojects-list_messages2 fields changed- changed
Input schema / properties / fields / items / enumPrevious value: -[ - "id", - "title", - "project", - "tags", - "lastReply", - "replyStatus", - "status", - "body", - "author", - "message", - "meta", - "createdAt", - "updatedAt" -]New value: +[ + "id", + "title", + "project", + "tags", + "lastReply", + "replyStatus", + "status", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt", + "attachments" +] - added
Output schema / properties / messages / items / properties / attachmentsAdded value: +{ + "items": { + "properties": { + "id": { + "type": "integer" + }, + "meta": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": [ + "null", + "array" + ] +}
- Changed
twprojects-list_project_updates3 fields changed- changed
Input schema / properties / fields / items / enumPrevious value: -[ - "id", - "text", - "health", - "healthLabel", - "color", - "projectId", - "project", - "createdBy", - "createdAt", - "updatedAt", - "isActive", - "deleted", - "deletedAt", - "deletedBy", - "likeFromUserIDs", - "likeFromUsers", - "reactions" -]New value: +[ + "id", + "text", + "health", + "healthLabel", + "color", + "project", + "createdBy", + "createdAt", + "updatedAt", + "isActive", + "deleted", + "deletedAt", + "deletedBy", + "likeFromUsers", + "reactions" +] - removed
Output schema / properties / projectUpdates / items / properties / likeFromUserIDsRemoved value: -{ - "items": { - "type": "integer" - }, - "type": [ - "null", - "array" - ] -} - removed
Output schema / properties / projectUpdates / items / properties / projectIdRemoved value: -{ - "type": "integer" -}
- Changed
twprojects-list_tasks2 fields changed- changed
Input schema / properties / fields / items / enumPrevious value: -[ - "id", - "name", - "description", - "descriptionContentType", - "priority", - "progress", - "startDate", - "dueDate", - "estimateMinutes", - "tasklist", - "parentTask", - "assignees", - "tags", - "predecessors", - "subTaskIds", - "workflowStages", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deletedBy", - "deletedAt", - "completedBy", - "completedAt", - "status" -]New value: +[ + "id", + "name", + "description", + "descriptionContentType", + "priority", + "progress", + "startDate", + "dueDate", + "estimateMinutes", + "tasklist", + "parentTask", + "assignees", + "tags", + "attachments", + "predecessors", + "subTaskIds", + "workflowStages", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt", + "deletedBy", + "deletedAt", + "completedBy", + "completedAt", + "status" +] - added
Output schema / properties / tasks / items / properties / attachmentsAdded value: +{ + "items": { + "properties": { + "id": { + "type": "integer" + }, + "meta": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": "object" + }, + "type": [ + "null", + "array" + ] +}
2 tool updates
v1.40.0- Changed
twprojects-create_task1 field changed- added
Input schema / properties / notifyAdded value: +{ + "default": true, + "description": "Whether to notify the task's assignees and followers, which sends them an email. Defaults to true. Set it to false for bulk or housekeeping changes nobody needs to hear about.", + "type": "boolean" +}
- Changed
twprojects-update_task1 field changed- added
Input schema / properties / notifyAdded value: +{ + "default": true, + "description": "Whether to notify the task's assignees and followers, which sends them an email. Defaults to true. Set it to false for bulk or housekeeping changes nobody needs to hear about.", + "type": "boolean" +}
171 tool updates
v1.39.3- Changed
twchat-get_or_create_dm1 field changed- changed
Input schema / properties / user_id / descriptionPrevious value: -"The ID of the person to get the direct-message conversation with."New value: +"The ID of the person to get the direct-message conversation with. Must be somebody other than the authenticated user; see get_current_user."
- Changed
twchat-list_conversations17 fields changed- removed
Input schema / properties / include_message_data / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_message_data / typeAdded value: +"boolean" - removed
Input schema / properties / page_limit / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_limit / typeAdded value: +"integer" - removed
Input schema / properties / page_offset / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_offset / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / sort / anyOfRemoved value: -[ - { - "enum": [ - "name", - "lastActivityAt", - "createdAt", - "updatedAt", - "relevance" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / sort / enumAdded value: +[ + "name", + "lastActivityAt", + "createdAt", + "updatedAt", + "relevance" +] - added
Input schema / properties / sort / typeAdded value: +"string" - removed
Input schema / properties / status / anyOfRemoved value: -[ - { - "enum": [ - "all", - "active" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / status / enumAdded value: +[ + "all", + "active" +] - added
Input schema / properties / status / typeAdded value: +"string" - removed
Input schema / properties / type / anyOfRemoved value: -[ - { - "enum": [ - "rooms", - "pair" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / type / enumAdded value: +[ + "rooms", + "pair" +] - added
Input schema / properties / type / typeAdded value: +"string"
- Changed
twchat-list_messages13 fields changed- removed
Input schema / properties / after_message_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / after_message_id / typeAdded value: +"integer" - removed
Input schema / properties / before_message_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / before_message_id / typeAdded value: +"integer" - changed
Input schema / properties / created_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - changed
Input schema / properties / created_before / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string"
- Changed
twchat-list_people6 fields changed- removed
Input schema / properties / page_limit / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_limit / typeAdded value: +"integer" - removed
Input schema / properties / page_offset / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_offset / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string"
- Changed
twchat-send_dm1 field changed- changed
Input schema / properties / user_id / descriptionPrevious value: -"The ID of the person to send the direct message to."New value: +"The ID of the person to send the direct message to. Must be somebody other than the authenticated user; see get_current_user."
- Changed
twdesk-create_company20 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / details / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / details / typeAdded value: +"string" - removed
Input schema / properties / domains / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / domains / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / domains / typeAdded value: +"array" - removed
Input schema / properties / industry / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / industry / typeAdded value: +"string" - removed
Input schema / properties / kind / anyOfRemoved value: -[ - { - "enum": [ - "company", - "group" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / kind / enumAdded value: +[ + "company", + "group" +] - added
Input schema / properties / kind / typeAdded value: +"string" - removed
Input schema / properties / note / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / note / typeAdded value: +"string" - removed
Input schema / properties / permission / anyOfRemoved value: -[ - { - "enum": [ - "own", - "all" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / permission / enumAdded value: +[ + "own", + "all" +] - added
Input schema / properties / permission / typeAdded value: +"string" - removed
Input schema / properties / website / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / website / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "name", - "description", - "details", - "industry", - "website", - "permission", - "kind", - "note", - "domains" -]New value: +[ + "name" +]
- Changed
twdesk-create_customer27 fields changed- removed
Input schema / properties / address / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / address / typeAdded value: +"string" - removed
Input schema / properties / email / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / email / typeAdded value: +"string" - removed
Input schema / properties / extraData / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / extraData / typeAdded value: +"string" - removed
Input schema / properties / facebookURL / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / facebookURL / typeAdded value: +"string" - removed
Input schema / properties / firstName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / firstName / typeAdded value: +"string" - removed
Input schema / properties / jobTitle / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / jobTitle / typeAdded value: +"string" - removed
Input schema / properties / lastName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / lastName / typeAdded value: +"string" - removed
Input schema / properties / linkedinURL / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / linkedinURL / typeAdded value: +"string" - removed
Input schema / properties / mobile / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mobile / typeAdded value: +"string" - removed
Input schema / properties / notes / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / notes / typeAdded value: +"string" - removed
Input schema / properties / organization / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / organization / typeAdded value: +"string" - removed
Input schema / properties / phone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / phone / typeAdded value: +"string" - removed
Input schema / properties / twitterHandle / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / twitterHandle / typeAdded value: +"string" - removed
Input schema / requiredRemoved value: -[ - "firstName", - "lastName", - "email", - "organization", - "extraData", - "notes", - "linkedinURL", - "facebookURL", - "twitterHandle", - "jobTitle", - "phone", - "mobile", - "address" -]
- Changed
twdesk-create_file4 fields changed- removed
Input schema / properties / disposition / anyOfRemoved value: -[ - { - "enum": [ - "attachment", - "attachment-inline" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / disposition / enumAdded value: +[ + "attachment", + "attachment-inline" +] - added
Input schema / properties / disposition / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "name", - "mimeType", - "data", - "disposition" -]New value: +[ + "name", + "mimeType", + "data" +]
- Changed
twdesk-create_helpdoc_article9 fields changed- removed
Input schema / properties / contents / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / contents / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / isPrivate / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isPrivate / typeAdded value: +"boolean" - removed
Input schema / properties / status / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / status / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "siteID", - "title", - "contents", - "description", - "status", - "isPrivate" -]New value: +[ + "siteID", + "title" +]
- Changed
twdesk-create_priority3 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "name", - "color" -]New value: +[ + "name" +]
- Changed
twdesk-create_status5 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / displayOrder / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / displayOrder / typeAdded value: +"integer" - changed
Input schema / requiredPrevious value: -[ - "name", - "color", - "displayOrder" -]New value: +[ + "name" +]
- Changed
twdesk-create_tag3 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "name", - "color" -]New value: +[ + "name" +]
- Changed
twdesk-create_ticket27 fields changed- removed
Input schema / properties / agentId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / agentId / typeAdded value: +"integer" - removed
Input schema / properties / bcc / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / bcc / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / bcc / typeAdded value: +"array" - removed
Input schema / properties / cc / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / cc / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / cc / typeAdded value: +"array" - removed
Input schema / properties / customerEmail / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / customerEmail / typeAdded value: +"string" - removed
Input schema / properties / customerId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / customerId / typeAdded value: +"integer" - removed
Input schema / properties / files / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / files / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / files / typeAdded value: +"array" - removed
Input schema / properties / notifyCustomer / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / notifyCustomer / typeAdded value: +"boolean" - removed
Input schema / properties / priorityId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / priorityId / typeAdded value: +"integer" - removed
Input schema / properties / statusId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / statusId / typeAdded value: +"integer" - removed
Input schema / properties / tags / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tags / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tags / typeAdded value: +"array" - removed
Input schema / properties / typeId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / typeId / typeAdded value: +"integer" - changed
Input schema / requiredPrevious value: -[ - "subject", - "body", - "inboxId", - "notifyCustomer", - "bcc", - "cc", - "files", - "tags", - "priorityId", - "statusId", - "customerId", - "customerEmail", - "typeId", - "agentId" -]New value: +[ + "subject", + "body", + "inboxId" +]
- Changed
twdesk-create_ticket_type5 fields changed- removed
Input schema / properties / displayOrder / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / displayOrder / typeAdded value: +"integer" - removed
Input schema / properties / enabledForFutureInboxes / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / enabledForFutureInboxes / typeAdded value: +"boolean" - changed
Input schema / requiredPrevious value: -[ - "name", - "displayOrder", - "enabledForFutureInboxes" -]New value: +[ + "name" +]
- Changed
twdesk-get_company4 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "id", - "fields" -]New value: +[ + "id" +]
- Changed
twdesk-get_customer4 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "id", - "fields" -]New value: +[ + "id" +]
- Changed
twdesk-get_helpdoc_article4 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "id", - "fields" -]New value: +[ + "id" +]
- Changed
twdesk-get_helpdoc_site4 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "id", - "fields" -]New value: +[ + "id" +]
- Changed
twdesk-get_inbox4 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "id", - "fields" -]New value: +[ + "id" +]
- Changed
twdesk-get_priority4 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "id", - "fields" -]New value: +[ + "id" +]
- Changed
twdesk-get_status4 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "id", - "fields" -]New value: +[ + "id" +]
- Changed
twdesk-get_tag4 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "id", - "fields" -]New value: +[ + "id" +]
- Changed
twdesk-get_ticket4 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "id", - "fields" -]New value: +[ + "id" +]
- Changed
twdesk-get_ticket_type4 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "id", - "fields" -]New value: +[ + "id" +]
- Changed
twdesk-get_user4 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - changed
Input schema / requiredPrevious value: -[ - "id", - "fields" -]New value: +[ + "id" +]
- Changed
twdesk-list_companies24 fields changed- removed
Input schema / properties / domains / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / domains / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / domains / typeAdded value: +"array" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / kind / anyOfRemoved value: -[ - { - "enum": [ - "company", - "group" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / kind / enumAdded value: +[ + "company", + "group" +] - added
Input schema / properties / kind / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / orderBy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderBy / typeAdded value: +"string" - removed
Input schema / properties / orderDirection / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderDirection / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / orderDirection / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +100 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / requiredRemoved value: -[ - "page", - "pageSize", - "orderBy", - "orderDirection", - "fields", - "name", - "domains", - "kind" -]
- Changed
twdesk-list_customers25 fields changed- removed
Input schema / properties / companyIDs / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / companyIDs / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / companyIDs / typeAdded value: +"array" - removed
Input schema / properties / companyNames / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / companyNames / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / companyNames / typeAdded value: +"array" - removed
Input schema / properties / emails / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / emails / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / emails / typeAdded value: +"array" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / orderBy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderBy / typeAdded value: +"string" - removed
Input schema / properties / orderDirection / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderDirection / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / orderDirection / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +100 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / requiredRemoved value: -[ - "page", - "pageSize", - "orderBy", - "orderDirection", - "fields", - "companyIDs", - "companyNames", - "emails" -]
- Changed
twdesk-list_helpdoc_sites22 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / name / typeAdded value: +"array" - removed
Input schema / properties / orderBy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderBy / typeAdded value: +"string" - removed
Input schema / properties / orderDirection / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderDirection / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / orderDirection / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +100 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / properties / subdomain / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / subdomain / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / subdomain / typeAdded value: +"array" - removed
Input schema / requiredRemoved value: -[ - "page", - "pageSize", - "orderBy", - "orderDirection", - "fields", - "name", - "subdomain" -]
- Changed
twdesk-list_inboxes22 fields changed- removed
Input schema / properties / email / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / email / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / email / typeAdded value: +"array" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / name / typeAdded value: +"array" - removed
Input schema / properties / orderBy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderBy / typeAdded value: +"string" - removed
Input schema / properties / orderDirection / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderDirection / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / orderDirection / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +100 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / requiredRemoved value: -[ - "page", - "pageSize", - "orderBy", - "orderDirection", - "fields", - "name", - "email" -]
- Changed
twdesk-list_priorities22 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / color / typeAdded value: +"array" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / name / typeAdded value: +"array" - removed
Input schema / properties / orderBy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderBy / typeAdded value: +"string" - removed
Input schema / properties / orderDirection / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderDirection / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / orderDirection / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +100 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / requiredRemoved value: -[ - "page", - "pageSize", - "orderBy", - "orderDirection", - "fields", - "name", - "color" -]
- Changed
twdesk-list_statuses25 fields changed- removed
Input schema / properties / code / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / code / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / code / typeAdded value: +"array" - removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / color / typeAdded value: +"array" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / name / typeAdded value: +"array" - removed
Input schema / properties / orderBy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderBy / typeAdded value: +"string" - removed
Input schema / properties / orderDirection / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderDirection / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / orderDirection / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +100 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / requiredRemoved value: -[ - "page", - "pageSize", - "orderBy", - "orderDirection", - "fields", - "name", - "color", - "code" -]
- Changed
twdesk-list_tags23 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / inboxIDs / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / inboxIDs / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / inboxIDs / typeAdded value: +"array" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / orderBy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderBy / typeAdded value: +"string" - removed
Input schema / properties / orderDirection / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderDirection / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / orderDirection / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +100 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / requiredRemoved value: -[ - "page", - "pageSize", - "orderBy", - "orderDirection", - "fields", - "name", - "color", - "inboxIDs" -]
- Changed
twdesk-list_ticket_types22 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / inboxIDs / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / inboxIDs / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / inboxIDs / typeAdded value: +"array" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / name / typeAdded value: +"array" - removed
Input schema / properties / orderBy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderBy / typeAdded value: +"string" - removed
Input schema / properties / orderDirection / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderDirection / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / orderDirection / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +100 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / requiredRemoved value: -[ - "page", - "pageSize", - "orderBy", - "orderDirection", - "fields", - "name", - "inboxIDs" -]
- Changed
twdesk-list_users30 fields changed- removed
Input schema / properties / email / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / email / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / email / typeAdded value: +"array" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / firstName / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / firstName / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / firstName / typeAdded value: +"array" - removed
Input schema / properties / inboxIDs / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / inboxIDs / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / inboxIDs / typeAdded value: +"array" - removed
Input schema / properties / isPartTime / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isPartTime / typeAdded value: +"boolean" - removed
Input schema / properties / lastName / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / lastName / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / lastName / typeAdded value: +"array" - removed
Input schema / properties / orderBy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderBy / typeAdded value: +"string" - removed
Input schema / properties / orderDirection / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderDirection / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / orderDirection / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 100, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +100 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / requiredRemoved value: -[ - "page", - "pageSize", - "orderBy", - "orderDirection", - "fields", - "firstName", - "lastName", - "email", - "inboxIDs", - "isPartTime" -]
- Changed
twdesk-reply_ticket10 fields changed- removed
Input schema / properties / bcc / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / bcc / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / bcc / typeAdded value: +"array" - removed
Input schema / properties / cc / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / cc / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / cc / typeAdded value: +"array" - removed
Input schema / properties / threadType / anyOfRemoved value: -[ - { - "enum": [ - "message", - "note" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / threadType / enumAdded value: +[ + "message", + "note" +] - added
Input schema / properties / threadType / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "ticketID", - "body", - "threadType", - "bcc", - "cc" -]New value: +[ + "ticketID", + "body" +]
- Changed
twdesk-search_helpdoc_articles13 fields changed- removed
Input schema / properties / categoryID / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / categoryID / typeAdded value: +"integer" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / properties / search / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search / typeAdded value: +"string" - removed
Input schema / properties / siteID / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / siteID / typeAdded value: +"integer" - removed
Input schema / properties / status / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / status / typeAdded value: +"string" - removed
Input schema / requiredRemoved value: -[ - "search", - "status", - "siteID", - "categoryID", - "page", - "pageSize" -]
- Changed
twdesk-search_tickets43 fields changed- removed
Input schema / properties / companyIDs / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / companyIDs / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / companyIDs / typeAdded value: +"array" - changed
Input schema / properties / createdAfter / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - changed
Input schema / properties / createdBefore / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / customerIDs / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / customerIDs / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / customerIDs / typeAdded value: +"array" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - changed
Input schema / properties / fields / descriptionPrevious value: -"Sparse fieldset: field names to include (e.g. [\"id\",\"name\"]). Omit to receive all fields."New value: +"The attributes to return for each ticket, from the listed names. Omit to receive the whole record, which carries every activity, message, file and timelog identifier the ticket has and is large enough that a full page of them may be truncated before it reaches you. Name the attributes you need. \"id\" is always returned." - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "activities", + "agent", + "bcc", + "message", + "cc", + "contact", + "customer", + "files", + "happinessSurveySentAt", + "imagesHidden", + "inbox", + "isRead", + "messageCount", + "messages", + "notifyCustomer", + "originalRecipient", + "previewText", + "priority", + "readonly", + "resolutionTimeMins", + "responseTimeMins", + "source", + "spam_rules", + "spam_score", + "status", + "subject", + "suggestions", + "tags", + "tasks", + "timelogs", + "type", + "id", + "createdAt", + "updatedAt", + "createdBy", + "updatedBy", + "state" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / inboxIDs / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / inboxIDs / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / inboxIDs / typeAdded value: +"array" - added
Input schema / properties / omitMergedAdded value: +{ + "default": false, + "description": "If true, exclude tickets that have been merged into another ticket. Merged tickets are not a status, so they cannot be filtered out with statusIDs. Defaults to false, which returns them alongside the rest.", + "type": "boolean" +} - removed
Input schema / properties / orderBy / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderBy / typeAdded value: +"string" - removed
Input schema / properties / orderDirection / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / orderDirection / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / orderDirection / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 200, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +200 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / properties / priorityIDs / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / priorityIDs / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / priorityIDs / typeAdded value: +"array" - removed
Input schema / properties / search / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search / typeAdded value: +"string" - removed
Input schema / properties / statusIDs / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / statusIDs / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / statusIDs / typeAdded value: +"array" - removed
Input schema / properties / tagIDs / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tagIDs / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tagIDs / typeAdded value: +"array" - removed
Input schema / properties / userIDs / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / userIDs / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / userIDs / typeAdded value: +"array" - removed
Input schema / requiredRemoved value: -[ - "page", - "pageSize", - "orderBy", - "orderDirection", - "fields", - "search", - "inboxIDs", - "customerIDs", - "companyIDs", - "tagIDs", - "statusIDs", - "priorityIDs", - "userIDs", - "createdAfter", - "createdBefore" -]
- Changed
twdesk-update_company22 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / details / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / details / typeAdded value: +"string" - removed
Input schema / properties / domains / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / domains / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / domains / typeAdded value: +"array" - removed
Input schema / properties / industry / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / industry / typeAdded value: +"string" - removed
Input schema / properties / kind / anyOfRemoved value: -[ - { - "enum": [ - "company", - "group" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / kind / enumAdded value: +[ + "company", + "group" +] - added
Input schema / properties / kind / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / note / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / note / typeAdded value: +"string" - removed
Input schema / properties / permission / anyOfRemoved value: -[ - { - "enum": [ - "own", - "all" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / permission / enumAdded value: +[ + "own", + "all" +] - added
Input schema / properties / permission / typeAdded value: +"string" - removed
Input schema / properties / website / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / website / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "id", - "name", - "description", - "details", - "industry", - "website", - "permission", - "kind", - "note", - "domains" -]New value: +[ + "id" +]
- Changed
twdesk-update_customer27 fields changed- removed
Input schema / properties / address / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / address / typeAdded value: +"string" - removed
Input schema / properties / email / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / email / typeAdded value: +"string" - removed
Input schema / properties / extraData / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / extraData / typeAdded value: +"string" - removed
Input schema / properties / facebookURL / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / facebookURL / typeAdded value: +"string" - removed
Input schema / properties / firstName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / firstName / typeAdded value: +"string" - removed
Input schema / properties / jobTitle / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / jobTitle / typeAdded value: +"string" - removed
Input schema / properties / lastName / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / lastName / typeAdded value: +"string" - removed
Input schema / properties / linkedinURL / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / linkedinURL / typeAdded value: +"string" - removed
Input schema / properties / mobile / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / mobile / typeAdded value: +"string" - removed
Input schema / properties / notes / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / notes / typeAdded value: +"string" - removed
Input schema / properties / organization / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / organization / typeAdded value: +"string" - removed
Input schema / properties / phone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / phone / typeAdded value: +"string" - removed
Input schema / properties / twitterHandle / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / twitterHandle / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "id", - "firstName", - "lastName", - "email", - "organization", - "extraData", - "notes", - "linkedinURL", - "facebookURL", - "twitterHandle", - "jobTitle", - "phone", - "mobile", - "address" -]New value: +[ + "id" +]
- Changed
twdesk-update_helpdoc_article11 fields changed- removed
Input schema / properties / contents / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / contents / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / isPrivate / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isPrivate / typeAdded value: +"boolean" - removed
Input schema / properties / status / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / status / typeAdded value: +"string" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "id", - "title", - "contents", - "description", - "status", - "isPrivate" -]New value: +[ + "id" +]
- Changed
twdesk-update_priority5 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "id", - "name", - "color" -]New value: +[ + "id" +]
- Changed
twdesk-update_status7 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / displayOrder / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / displayOrder / typeAdded value: +"integer" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "id", - "name", - "color", - "displayOrder" -]New value: +[ + "id" +]
- Changed
twdesk-update_tag5 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "id", - "name", - "color" -]New value: +[ + "id" +]
- Changed
twdesk-update_ticket27 fields changed- removed
Input schema / properties / agentId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / agentId / typeAdded value: +"integer" - removed
Input schema / properties / bcc / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / bcc / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / bcc / typeAdded value: +"array" - removed
Input schema / properties / body / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / body / typeAdded value: +"string" - removed
Input schema / properties / cc / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / cc / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / cc / typeAdded value: +"array" - removed
Input schema / properties / deleteTags / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / deleteTags / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / deleteTags / typeAdded value: +"array" - removed
Input schema / properties / inboxId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / inboxId / typeAdded value: +"integer" - removed
Input schema / properties / priorityId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / priorityId / typeAdded value: +"integer" - removed
Input schema / properties / statusId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / statusId / typeAdded value: +"integer" - removed
Input schema / properties / subject / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / subject / typeAdded value: +"string" - removed
Input schema / properties / tags / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tags / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tags / typeAdded value: +"array" - removed
Input schema / properties / typeId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / typeId / typeAdded value: +"integer" - changed
Input schema / requiredPrevious value: -[ - "id", - "subject", - "body", - "tags", - "deleteTags", - "bcc", - "cc", - "inboxId", - "priorityId", - "statusId", - "typeId", - "agentId" -]New value: +[ + "id" +]
- Changed
twdesk-update_ticket_type7 fields changed- removed
Input schema / properties / displayOrder / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / displayOrder / typeAdded value: +"integer" - removed
Input schema / properties / enabledForFutureInboxes / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / enabledForFutureInboxes / typeAdded value: +"boolean" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - changed
Input schema / requiredPrevious value: -[ - "id", - "name", - "displayOrder", - "enabledForFutureInboxes" -]New value: +[ + "id" +]
- Changed
twprojects-add_project_file17 fields changed- removed
Input schema / properties / auto_new_version / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / auto_new_version / typeAdded value: +"boolean" - removed
Input schema / properties / category_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / category_id / typeAdded value: +"integer" - removed
Input schema / properties / category_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / category_name / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / notify_current_user / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / notify_current_user / typeAdded value: +"boolean" - removed
Input schema / properties / private / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / private / typeAdded value: +"boolean" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array"
- Changed
twprojects-add_project_member3 fields changed- removed
Input schema / properties / user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_ids / typeAdded value: +"array"
- Changed
twprojects-clone_project17 fields changed- removed
Input schema / properties / company_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_id / typeAdded value: +"integer" - removed
Input schema / properties / days_offset / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / days_offset / typeAdded value: +"integer" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / new_from_template / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / new_from_template / typeAdded value: +"boolean" - removed
Input schema / properties / target_date / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / target_date / typeAdded value: +"string" - removed
Input schema / properties / template_date_target / anyOfRemoved value: -[ - { - "enum": [ - "start", - "end" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / template_date_target / enumAdded value: +[ + "start", + "end" +] - added
Input schema / properties / template_date_target / typeAdded value: +"string" - removed
Input schema / properties / to_template / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / to_template / typeAdded value: +"boolean"
- Changed
twprojects-count_milestones17 fields changed- removed
Input schema / properties / due_after / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_after / formatAdded value: +"date" - added
Input schema / properties / due_after / typeAdded value: +"string" - removed
Input schema / properties / due_before / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_before / formatAdded value: +"date" - added
Input schema / properties / due_before / typeAdded value: +"string" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / show_completed / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / show_completed / typeAdded value: +"boolean" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array"
- Changed
twprojects-count_projects43 fields changed- removed
Input schema / properties / company_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / company_ids / typeAdded value: +"array" - removed
Input schema / properties / hide_observed / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / hide_observed / typeAdded value: +"boolean" - removed
Input schema / properties / include_archived / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_archived / typeAdded value: +"boolean" - removed
Input schema / properties / include_subcategories / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_subcategories / typeAdded value: +"boolean" - removed
Input schema / properties / include_tentative / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_tentative / typeAdded value: +"boolean" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / only_admin_access / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_admin_access / typeAdded value: +"boolean" - removed
Input schema / properties / only_archived / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_archived / typeAdded value: +"boolean" - removed
Input schema / properties / only_starred / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_starred / typeAdded value: +"boolean" - removed
Input schema / properties / project_category_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_category_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_category_ids / typeAdded value: +"array" - removed
Input schema / properties / project_healths / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "good", - "ok", - "bad", - "not_set" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_healths / itemsAdded value: +{ + "enum": [ + "good", + "ok", + "bad", + "not_set" + ], + "type": "string" +} - added
Input schema / properties / project_healths / typeAdded value: +"array" - removed
Input schema / properties / project_owner_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_owner_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_owner_ids / typeAdded value: +"array" - removed
Input schema / properties / project_statuses / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "active", - "current", - "late", - "upcoming", - "completed", - "deleted" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_statuses / itemsAdded value: +{ + "enum": [ + "active", + "current", + "late", + "upcoming", + "completed", + "deleted" + ], + "type": "string" +} - added
Input schema / properties / project_statuses / typeAdded value: +"array" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / team_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / team_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / team_ids / typeAdded value: +"array" - changed
Input schema / properties / updated_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_ids / typeAdded value: +"array"
- Changed
twprojects-count_tasks46 fields changed- removed
Input schema / properties / assignee_user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / assignee_user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / assignee_user_ids / typeAdded value: +"array" - changed
Input schema / properties / completed_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - changed
Input schema / properties / completed_before / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - changed
Input schema / properties / created_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - changed
Input schema / properties / created_before / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / created_by_user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / created_by_user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / created_by_user_ids / typeAdded value: +"array" - removed
Input schema / properties / date_filter / anyOfRemoved value: -[ - { - "enum": [ - "anytime", - "overdue", - "today", - "tomorrow", - "yesterday", - "thisweek", - "upcoming", - "started", - "within7", - "within14", - "within30", - "within365", - "nodate", - "noduedate", - "nostartdate", - "hasdate" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / date_filter / enumAdded value: +[ + "anytime", + "overdue", + "today", + "tomorrow", + "yesterday", + "thisweek", + "upcoming", + "started", + "within7", + "within14", + "within30", + "within365", + "nodate", + "noduedate", + "nostartdate", + "hasdate" +] - added
Input schema / properties / date_filter / typeAdded value: +"string" - removed
Input schema / properties / due_after / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_after / formatAdded value: +"date" - added
Input schema / properties / due_after / typeAdded value: +"string" - removed
Input schema / properties / due_before / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_before / formatAdded value: +"date" - added
Input schema / properties / due_before / typeAdded value: +"string" - removed
Input schema / properties / exclude_assignee_user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / exclude_assignee_user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / exclude_assignee_user_ids / typeAdded value: +"array" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / only_completed / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_completed / typeAdded value: +"boolean" - removed
Input schema / properties / only_unassigned / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_unassigned / typeAdded value: +"boolean" - removed
Input schema / properties / only_unplanned / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_unplanned / typeAdded value: +"boolean" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / show_completed / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / show_completed / typeAdded value: +"boolean" - removed
Input schema / properties / start_after / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_after / formatAdded value: +"date" - added
Input schema / properties / start_after / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / tasklist_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / tasklist_id / typeAdded value: +"integer" - changed
Input schema / properties / updated_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - changed
Input schema / properties / updated_before / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +]
- Changed
twprojects-count_timelogs29 fields changed- removed
Input schema / properties / assigned_company_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / assigned_company_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / assigned_company_ids / typeAdded value: +"array" - removed
Input schema / properties / assigned_team_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / assigned_team_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / assigned_team_ids / typeAdded value: +"array" - removed
Input schema / properties / assigned_user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / assigned_user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / assigned_user_ids / typeAdded value: +"array" - removed
Input schema / properties / billable_type / anyOfRemoved value: -[ - { - "enum": [ - "all", - "billable", - "nonbillable" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / billable_type / enumAdded value: +[ + "all", + "billable", + "nonbillable" +] - added
Input schema / properties / billable_type / typeAdded value: +"string" - changed
Input schema / properties / end_date / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / invoiced_type / anyOfRemoved value: -[ - { - "enum": [ - "all", - "invoiced", - "noninvoiced" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / invoiced_type / enumAdded value: +[ + "all", + "invoiced", + "noninvoiced" +] - added
Input schema / properties / invoiced_type / typeAdded value: +"string" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - changed
Input schema / properties / start_date / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / task_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / task_id / typeAdded value: +"integer" - removed
Input schema / properties / ticketIds / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / ticketIds / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / ticketIds / typeAdded value: +"array"
- Changed
twprojects-create_allocation12 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "maxLength": 255, - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / maxLengthAdded value: +255 - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / ignore_collisions / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / ignore_collisions / typeAdded value: +"boolean" - removed
Input schema / properties / inform_of_over_allocation / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / inform_of_over_allocation / typeAdded value: +"boolean" - removed
Input schema / properties / is_billable / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / is_billable / typeAdded value: +"boolean" - removed
Input schema / properties / linked_task_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / linked_task_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / linked_task_ids / typeAdded value: +"array"
- Changed
twprojects-create_comment9 fields changed- removed
Input schema / properties / attachment_refs / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / attachment_refs / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / attachment_refs / typeAdded value: +"array" - removed
Input schema / properties / content_type / anyOfRemoved value: -[ - { - "enum": [ - "TEXT", - "HTML" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content_type / enumAdded value: +[ + "TEXT", + "HTML" +] - added
Input schema / properties / content_type / typeAdded value: +"string" - changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.", - "type": "boolean" - }, - { - "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } +] - removed
Input schema / properties / notify_current_user / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / notify_current_user / typeAdded value: +"boolean"
- Changed
twprojects-create_company33 fields changed- removed
Input schema / properties / address_one / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / address_one / typeAdded value: +"string" - removed
Input schema / properties / address_two / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / address_two / typeAdded value: +"string" - removed
Input schema / properties / city / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / city / typeAdded value: +"string" - removed
Input schema / properties / country_code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / country_code / typeAdded value: +"string" - removed
Input schema / properties / email_one / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / email_one / typeAdded value: +"string" - removed
Input schema / properties / email_three / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / email_three / typeAdded value: +"string" - removed
Input schema / properties / email_two / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / email_two / typeAdded value: +"string" - removed
Input schema / properties / fax / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / fax / typeAdded value: +"string" - removed
Input schema / properties / industry_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / industry_id / typeAdded value: +"integer" - removed
Input schema / properties / manager_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / manager_id / typeAdded value: +"integer" - removed
Input schema / properties / phone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / phone / typeAdded value: +"string" - removed
Input schema / properties / profile / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / profile / typeAdded value: +"string" - removed
Input schema / properties / state / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / state / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / website / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / website / typeAdded value: +"string" - removed
Input schema / properties / zip / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / zip / typeAdded value: +"string"
- Changed
twprojects-create_custom_field14 fields changed- removed
Input schema / properties / currency_code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / currency_code / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / formula / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / formula / typeAdded value: +"string" - changed
Input schema / properties / options / anyOfPrevious value: -[ - { - "properties": { - "choices": { - "items": { - "properties": { - "color": { - "description": "The hex color code for the choice (e.g. #ff0000).", - "type": "string" - }, - "value": { - "description": "The display value of the choice. For 'dropdown' fields, this is the value that will be set on entities when this choice is selected.", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "properties": { - "color": { - "description": "The hex color code for the rating icons (e.g. #ff0000).", - "type": "string" - }, - "icon": { - "description": "The icon to use for the rating, e.g. 'star', 'heart', etc.", - "type": "string" - } - }, - "type": "object" - }, - { - "properties": { - "decimals": { - "description": "The number of decimal places to allow for number-decimal custom fields.", - "type": "integer" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "choices": { + "items": { + "properties": { + "color": { + "description": "The hex color code for the choice (e.g. #ff0000).", + "type": "string" + }, + "value": { + "description": "The display value of the choice. For 'dropdown' fields, this is the value that will be set on entities when this choice is selected.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "properties": { + "color": { + "description": "The hex color code for the rating icons (e.g. #ff0000).", + "type": "string" + }, + "icon": { + "description": "The icon to use for the rating, e.g. 'star', 'heart', etc.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "decimals": { + "description": "The number of decimal places to allow for number-decimal custom fields.", + "type": "integer" + } + }, + "type": "object" + } +] - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / required / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / required / typeAdded value: +"boolean" - removed
Input schema / properties / unit / anyOfRemoved value: -[ - { - "enum": [ - "currency", - "duration", - "date", - "percent", - "currency/duration", - "duration/currency" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / unit / enumAdded value: +[ + "currency", + "duration", + "date", + "percent", + "currency/duration", + "duration/currency" +] - added
Input schema / properties / unit / typeAdded value: +"string"
- Changed
twprojects-create_custom_field_value6 fields changed- removed
Input schema / properties / country_code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / country_code / typeAdded value: +"string" - removed
Input schema / properties / currency_code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / currency_code / typeAdded value: +"string" - changed
Input schema / properties / value / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ] - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "type": "array" + } +] - changed
Input schema / requiredPrevious value: -[ - "entity", - "entity_id", - "custom_field_id", - "value" -]New value: +[ + "entity", + "entity_id", + "custom_field_id" +]
- Changed
twprojects-create_custom_item6 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / label_plural / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / label_plural / typeAdded value: +"string" - removed
Input schema / properties / label_singular / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / label_singular / typeAdded value: +"string"
- Changed
twprojects-create_custom_item_field10 fields changed- removed
Input schema / properties / definition / anyOfRemoved value: -[ - { - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / definition / typeAdded value: +"object" - removed
Input schema / properties / options / anyOfRemoved value: -[ - { - "items": { - "properties": { - "color": { - "type": "string" - }, - "label": { - "type": "string" - } - }, - "required": [ - "label" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / options / itemsAdded value: +{ + "properties": { + "color": { + "type": "string" + }, + "label": { + "type": "string" + } + }, + "required": [ + "label" + ], + "type": "object" +} - added
Input schema / properties / options / typeAdded value: +"array" - removed
Input schema / properties / position_after_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / position_after_id / typeAdded value: +"integer" - removed
Input schema / properties / tw_type / anyOfRemoved value: -[ - { - "enum": [ - "status" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / tw_type / enumAdded value: +[ + "status" +] - added
Input schema / properties / tw_type / typeAdded value: +"string"
- Changed
twprojects-create_custom_item_record7 fields changed- removed
Input schema / properties / field_values / anyOfRemoved value: -[ - { - "items": { - "properties": { - "field_name": { - "description": "Display name of the field, case-insensitive.", - "type": "string" - }, - "value": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ] - }, - "type": "array" - }, - { - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Value to set. Type depends on the field โ see the tool description." - } - }, - "required": [ - "field_name", - "value" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / field_values / itemsAdded value: +{ + "properties": { + "field_name": { + "description": "Display name of the field, case-insensitive.", + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "type": "array" + }, + { + "type": "object" + } + ], + "description": "Value to set. Type depends on the field โ see the tool description." + } + }, + "required": [ + "field_name" + ], + "type": "object" +} - added
Input schema / properties / field_values / typeAdded value: +"array" - removed
Input schema / properties / position_after_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / position_after_id / typeAdded value: +"integer" - removed
Input schema / properties / section_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / section_id / typeAdded value: +"integer"
- Changed
twprojects-create_link10 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "true is the same as \"all\": notify all project members. false notifies nobody.", - "type": "boolean" - }, - { - "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } +] - removed
Input schema / properties / notify_current_user / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / notify_current_user / typeAdded value: +"boolean" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / typeAdded value: +"string"
- Changed
twprojects-create_message6 fields changed- removed
Input schema / properties / attachment_refs / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / attachment_refs / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / attachment_refs / typeAdded value: +"array" - changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "true is the same as \"all\": notify all project members. false notifies nobody.", - "type": "boolean" - }, - { - "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } +] - removed
Input schema / properties / notify_current_user / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / notify_current_user / typeAdded value: +"boolean"
- Changed
twprojects-create_message_reply3 fields changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "true is the same as \"all\": notify all project members. false notifies nobody.", - "type": "boolean" - }, - { - "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } +] - removed
Input schema / properties / notify_current_user / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / notify_current_user / typeAdded value: +"boolean"
- Changed
twprojects-create_milestone8 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / tasklist_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tasklist_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tasklist_ids / typeAdded value: +"array"
- Changed
twprojects-create_notebook5 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array"
- Changed
twprojects-create_project15 fields changed- removed
Input schema / properties / category_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / category_id / typeAdded value: +"integer" - removed
Input schema / properties / company_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_id / typeAdded value: +"integer" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / end_at / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / end_at / typeAdded value: +"string" - removed
Input schema / properties / owned_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / owned_id / typeAdded value: +"integer" - removed
Input schema / properties / start_at / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_at / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array"
- Changed
twprojects-create_project_category4 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / parent_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / parent_id / typeAdded value: +"integer"
- Changed
twprojects-create_project_template15 fields changed- removed
Input schema / properties / category_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / category_id / typeAdded value: +"integer" - removed
Input schema / properties / company_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_id / typeAdded value: +"integer" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / end_at / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / end_at / typeAdded value: +"string" - removed
Input schema / properties / owned_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / owned_id / typeAdded value: +"integer" - removed
Input schema / properties / start_at / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_at / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array"
- Changed
twprojects-create_skill3 fields changed- removed
Input schema / properties / user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_ids / typeAdded value: +"array"
- Changed
twprojects-create_tag4 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer"
- Changed
twprojects-create_task55 fields changed- removed
Input schema / properties / assignees / anyOfRemoved value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / assignees / maxPropertiesAdded value: +4 - added
Input schema / properties / assignees / minPropertiesAdded value: +1 - added
Input schema / properties / assignees / propertiesAdded value: +{ + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } +} - added
Input schema / properties / assignees / typeAdded value: +"object" - removed
Input schema / properties / attachment_file_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / attachment_file_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / attachment_file_ids / typeAdded value: +"array" - removed
Input schema / properties / attachment_refs / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / attachment_refs / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / attachment_refs / typeAdded value: +"array" - removed
Input schema / properties / change_followers / anyOfRemoved value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / change_followers / maxPropertiesAdded value: +4 - added
Input schema / properties / change_followers / minPropertiesAdded value: +1 - added
Input schema / properties / change_followers / propertiesAdded value: +{ + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } +} - added
Input schema / properties / change_followers / typeAdded value: +"object" - removed
Input schema / properties / comment_followers / anyOfRemoved value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / comment_followers / maxPropertiesAdded value: +4 - added
Input schema / properties / comment_followers / minPropertiesAdded value: +1 - added
Input schema / properties / comment_followers / propertiesAdded value: +{ + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } +} - added
Input schema / properties / comment_followers / typeAdded value: +"object" - removed
Input schema / properties / complete_followers / anyOfRemoved value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / complete_followers / maxPropertiesAdded value: +4 - added
Input schema / properties / complete_followers / minPropertiesAdded value: +1 - added
Input schema / properties / complete_followers / propertiesAdded value: +{ + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } +} - added
Input schema / properties / complete_followers / typeAdded value: +"object" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / due_date / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_date / formatAdded value: +"date" - added
Input schema / properties / due_date / typeAdded value: +"string" - removed
Input schema / properties / estimated_minutes / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / estimated_minutes / typeAdded value: +"integer" - removed
Input schema / properties / parent_task_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / parent_task_id / typeAdded value: +"integer" - removed
Input schema / properties / predecessors / anyOfRemoved value: -[ - { - "items": { - "properties": { - "task_id": { - "description": "The ID of the predecessor task.", - "type": "integer" - }, - "type": { - "description": "'start' means this task can complete when the predecessor starts; 'complete' means this task can complete when the predecessor completes.", - "enum": [ - "start", - "complete" - ], - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / predecessors / itemsAdded value: +{ + "properties": { + "task_id": { + "description": "The ID of the predecessor task.", + "type": "integer" + }, + "type": { + "description": "'start' means this task can complete when the predecessor starts; 'complete' means this task can complete when the predecessor completes.", + "enum": [ + "start", + "complete" + ], + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / predecessors / typeAdded value: +"array" - removed
Input schema / properties / priority / anyOfRemoved value: -[ - { - "enum": [ - "low", - "medium", - "high" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / priority / enumAdded value: +[ + "low", + "medium", + "high" +] - added
Input schema / properties / priority / typeAdded value: +"string" - removed
Input schema / properties / progress / anyOfRemoved value: -[ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / progress / maximumAdded value: +100 - added
Input schema / properties / progress / minimumAdded value: +0 - added
Input schema / properties / progress / typeAdded value: +"integer" - removed
Input schema / properties / stage_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / stage_id / typeAdded value: +"integer" - removed
Input schema / properties / start_date / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_date / formatAdded value: +"date" - added
Input schema / properties / start_date / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / workflow_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / workflow_id / typeAdded value: +"integer"
- Changed
twprojects-create_tasklist4 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / milestone_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / milestone_id / typeAdded value: +"integer"
- Changed
twprojects-create_team13 fields changed- removed
Input schema / properties / company_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_id / typeAdded value: +"integer" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / handle / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / handle / typeAdded value: +"string" - removed
Input schema / properties / parent_team_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / parent_team_id / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_ids / typeAdded value: +"array"
- Changed
twprojects-create_timelog15 fields changed- removed
Input schema / properties / billable / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / billable / typeAdded value: +"boolean" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / is_utc / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / is_utc / typeAdded value: +"boolean" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / task_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / task_id / typeAdded value: +"integer" - removed
Input schema / properties / user_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_id / typeAdded value: +"integer"
- Changed
twprojects-create_timer12 fields changed- removed
Input schema / properties / billable / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / billable / typeAdded value: +"boolean" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / running / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / running / typeAdded value: +"boolean" - removed
Input schema / properties / seconds / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / seconds / typeAdded value: +"integer" - removed
Input schema / properties / stop_running_timers / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / stop_running_timers / typeAdded value: +"boolean" - removed
Input schema / properties / task_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / task_id / typeAdded value: +"integer"
- Changed
twprojects-create_user8 fields changed- removed
Input schema / properties / admin / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / admin / typeAdded value: +"boolean" - removed
Input schema / properties / company_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_id / typeAdded value: +"integer" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / typeAdded value: +"string" - removed
Input schema / properties / type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / type / typeAdded value: +"string"
- Changed
twprojects-get_allocation5 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "project", - "assignedUser", - "title", - "description", - "startedAt", - "endedAt", - "duration", - "availableDuration", - "allocatedDuration", - "hoursPerDay", - "secondsPerDay", - "color", - "status", - "isBillable", - "overAllocated", - "recurringRule", - "linkedTaskIDs", - "linkedTaskEstimatedTime", - "financialDetails", - "canViewFinancialDetails", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "deletedAt", - "deletedBy" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "project", + "assignedUser", + "title", + "description", + "startedAt", + "endedAt", + "duration", + "availableDuration", + "allocatedDuration", + "hoursPerDay", + "secondsPerDay", + "color", + "status", + "isBillable", + "overAllocated", + "recurringRule", + "linkedTaskIDs", + "linkedTaskEstimatedTime", + "financialDetails", + "canViewFinancialDetails", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / include_financial_details / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_financial_details / typeAdded value: +"boolean"
- Changed
twprojects-get_comment3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "body", - "htmlBody", - "contentType", - "object", - "project", - "postedBy", - "postedDateTime", - "lastEditedBy", - "dateLastEdited", - "deleted", - "deletedBy", - "dateDeleted" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "body", + "htmlBody", + "contentType", + "object", + "project", + "postedBy", + "postedDateTime", + "lastEditedBy", + "dateLastEdited", + "deleted", + "deletedBy", + "dateDeleted" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_company3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "addressOne", - "addressTwo", - "city", - "countryCode", - "emailOne", - "emailTwo", - "emailThree", - "fax", - "name", - "phone", - "profileText", - "state", - "website", - "zip", - "clientManagedBy", - "industry", - "tags", - "createdAt", - "updatedAt", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "addressOne", + "addressTwo", + "city", + "countryCode", + "emailOne", + "emailTwo", + "emailThree", + "fax", + "name", + "phone", + "profileText", + "state", + "website", + "zip", + "clientManagedBy", + "industry", + "tags", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_jobrole3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "isActive", - "createdByUser", - "createdAt", - "updatedByUser", - "updatedAt", - "deletedByUser", - "deletedAt", - "users", - "primaryUsers" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "isActive", + "createdByUser", + "createdAt", + "updatedByUser", + "updatedAt", + "deletedByUser", + "deletedAt", + "users", + "primaryUsers" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_message3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "title", - "project", - "tags", - "lastReply", - "replyStatus", - "status", - "body", - "author", - "message", - "meta", - "createdAt", - "updatedAt" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "title", + "project", + "tags", + "lastReply", + "replyStatus", + "status", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_message_reply3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "body", - "author", - "message", - "meta", - "createdAt", - "updatedAt", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_milestone3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "deadline", - "project", - "tasklists", - "tags", - "responsibleParties", - "createdOn", - "lastChangedOn", - "deletedOn", - "completedOn", - "completedBy", - "completed", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "description", + "deadline", + "project", + "tasklists", + "tags", + "responsibleParties", + "createdOn", + "lastChangedOn", + "deletedOn", + "completedOn", + "completedBy", + "completed", + "status" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_notebook3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "contents", - "type", - "project", - "tags", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "deletedAt", - "deletedBy", - "deleted" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "description", + "contents", + "type", + "project", + "tags", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy", + "deleted" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_project3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "description", - "name", - "startAt", - "endAt", - "category", - "company", - "projectOwner", - "tags", - "update", - "lastWorkedOn", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "completedAt", - "completedBy", - "status", - "isBillable", - "type" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "description", + "name", + "startAt", + "endAt", + "category", + "company", + "projectOwner", + "tags", + "update", + "lastWorkedOn", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "completedAt", + "completedBy", + "status", + "isBillable", + "type" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_project_category3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "color", - "parent", - "count" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "color", + "parent", + "count" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_task3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "descriptionContentType", - "priority", - "progress", - "startDate", - "dueDate", - "estimateMinutes", - "tasklist", - "parentTask", - "assignees", - "tags", - "predecessors", - "subTaskIds", - "workflowStages", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deletedBy", - "deletedAt", - "completedBy", - "completedAt", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "description", + "descriptionContentType", + "priority", + "progress", + "startDate", + "dueDate", + "estimateMinutes", + "tasklist", + "parentTask", + "assignees", + "tags", + "predecessors", + "subTaskIds", + "workflowStages", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt", + "deletedBy", + "deletedAt", + "completedBy", + "completedAt", + "status" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_tasklist3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "project", - "milestone", - "createdAt", - "updatedAt", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "description", + "project", + "milestone", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_timelog3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "description", - "billable", - "minutes", - "timeLogged", - "user", - "task", - "project", - "tags", - "deskTicketId", - "createdAt", - "loggedBy", - "updatedAt", - "updatedBy", - "deletedAt", - "deletedBy", - "deleted" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "description", + "billable", + "minutes", + "timeLogged", + "user", + "task", + "project", + "tags", + "deskTicketId", + "createdAt", + "loggedBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy", + "deleted" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_timer3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "description", - "running", - "billable", - "user", - "task", - "project", - "timelog", - "createdAt", - "updatedAt", - "deletedAt", - "deleted", - "duration", - "lastStartedAt", - "timerLastIntervalEnd", - "intervals" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "description", + "running", + "billable", + "user", + "task", + "project", + "timelog", + "createdAt", + "updatedAt", + "deletedAt", + "deleted", + "duration", + "lastStartedAt", + "timerLastIntervalEnd", + "intervals" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_user3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "firstName", - "lastName", - "title", - "email", - "isAdmin", - "type", - "userCost", - "userRate", - "company", - "jobRoles", - "skills", - "workingHour", - "lengthOfDay", - "deleted", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "firstName", + "lastName", + "title", + "email", + "isAdmin", + "type", + "userCost", + "userRate", + "company", + "jobRoles", + "skills", + "workingHour", + "lengthOfDay", + "deleted", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_workflow3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "defaultWorkflow" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "defaultWorkflow" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-get_workflow_stage3 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "workflow" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "workflow" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array"
- Changed
twprojects-list_activities36 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - changed
Input schema / properties / end_date / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / exclude_user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / exclude_user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / exclude_user_ids / typeAdded value: +"array" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "activityType", - "latestActivityType", - "dateTime", - "description", - "extraDescription", - "publicInfo", - "dueDate", - "forUserName", - "itemLink", - "link", - "user", - "forUser", - "project", - "company", - "item" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "activityType", + "latestActivityType", + "dateTime", + "description", + "extraDescription", + "publicInfo", + "dueDate", + "forUserName", + "itemLink", + "link", + "user", + "forUser", + "project", + "company", + "item" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / item_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / item_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / item_ids / typeAdded value: +"array" - removed
Input schema / properties / log_item_types / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "message", - "comment", - "task", - "tasklist", - "taskgroup", - "milestone", - "file", - "form", - "notebook", - "timelog", - "task_comment", - "notebook_comment", - "file_comment", - "link_comment", - "milestone_comment", - "project", - "link", - "billingInvoice", - "risk", - "projectUpdate", - "reacted", - "budget" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / log_item_types / itemsAdded value: +{ + "enum": [ + "message", + "comment", + "task", + "tasklist", + "taskgroup", + "milestone", + "file", + "form", + "notebook", + "timelog", + "task_comment", + "notebook_comment", + "file_comment", + "link_comment", + "milestone_comment", + "project", + "link", + "billingInvoice", + "risk", + "projectUpdate", + "reacted", + "budget" + ], + "type": "string" +} - added
Input schema / properties / log_item_types / typeAdded value: +"array" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "date", - "projectId", - "userId", - "activityTypes", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "date", + "projectId", + "userId", + "activityTypes", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - changed
Input schema / properties / start_date / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_ids / typeAdded value: +"array" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_allocations60 fields changed- removed
Input schema / properties / assigned_user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / assigned_user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / assigned_user_ids / typeAdded value: +"array" - removed
Input schema / properties / assigned_user_team_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / assigned_user_team_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / assigned_user_team_ids / typeAdded value: +"array" - removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - changed
Input schema / properties / deleted_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / end_date / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / end_date / formatAdded value: +"date" - added
Input schema / properties / end_date / typeAdded value: +"string" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "project", - "assignedUser", - "title", - "description", - "startedAt", - "endedAt", - "duration", - "availableDuration", - "allocatedDuration", - "hoursPerDay", - "secondsPerDay", - "color", - "status", - "isBillable", - "overAllocated", - "recurringRule", - "linkedTaskIDs", - "linkedTaskEstimatedTime", - "financialDetails", - "canViewFinancialDetails", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "deletedAt", - "deletedBy" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "project", + "assignedUser", + "title", + "description", + "startedAt", + "endedAt", + "duration", + "availableDuration", + "allocatedDuration", + "hoursPerDay", + "secondsPerDay", + "color", + "status", + "isBillable", + "overAllocated", + "recurringRule", + "linkedTaskIDs", + "linkedTaskEstimatedTime", + "financialDetails", + "canViewFinancialDetails", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / include_financial_details / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_financial_details / typeAdded value: +"boolean" - removed
Input schema / properties / match_all_project_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_project_tags / typeAdded value: +"boolean" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "startdate", - "enddate", - "project", - "assigneduser", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "startdate", + "enddate", + "project", + "assigneduser", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_category_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_category_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_category_ids / typeAdded value: +"array" - removed
Input schema / properties / project_company_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_company_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_company_ids / typeAdded value: +"array" - removed
Input schema / properties / project_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_ids / typeAdded value: +"array" - removed
Input schema / properties / project_owner_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_owner_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_owner_ids / typeAdded value: +"array" - removed
Input schema / properties / project_status / anyOfRemoved value: -[ - { - "enum": [ - "active", - "current", - "late", - "upcoming", - "completed", - "deleted" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_status / enumAdded value: +[ + "active", + "current", + "late", + "upcoming", + "completed", + "deleted" +] - added
Input schema / properties / project_status / typeAdded value: +"string" - removed
Input schema / properties / project_tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_tag_ids / typeAdded value: +"array" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / show_deleted / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / show_deleted / typeAdded value: +"boolean" - removed
Input schema / properties / start_date / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_date / formatAdded value: +"date" - added
Input schema / properties / start_date / typeAdded value: +"string" - changed
Input schema / properties / updated_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_calendar_events23 fields changed- removed
Input schema / properties / calendar_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / calendar_id / typeAdded value: +"integer" - removed
Input schema / properties / cursor / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / cursor / typeAdded value: +"string" - removed
Input schema / properties / ended_before_date / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / ended_before_date / formatAdded value: +"date" - added
Input schema / properties / ended_before_date / typeAdded value: +"string" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "summary", - "description", - "organizer", - "eventCreator", - "start", - "end", - "allDay", - "location", - "type", - "recurrence", - "guestsCanInviteOthers", - "guestsCanModify", - "guestsCanSeeOtherGuests", - "transparency", - "visibility", - "videoCallLink", - "calOwnerCanEdit", - "timeblock", - "attendees", - "attendeesOmitted", - "calendar", - "status", - "createdBy", - "createdAt", - "updatedAt" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "summary", + "description", + "organizer", + "eventCreator", + "start", + "end", + "allDay", + "location", + "type", + "recurrence", + "guestsCanInviteOthers", + "guestsCanModify", + "guestsCanSeeOtherGuests", + "transparency", + "visibility", + "videoCallLink", + "calOwnerCanEdit", + "timeblock", + "attendees", + "attendeesOmitted", + "calendar", + "status", + "createdBy", + "createdAt", + "updatedAt" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +"integer" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "startTime", - "updated", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "startTime", + "updated", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / started_after_date / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / started_after_date / formatAdded value: +"date" - added
Input schema / properties / started_after_date / typeAdded value: +"string" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_calendars20 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "type", - "createdAt", - "updatedAt" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "type", + "createdAt", + "updatedAt" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "name", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "name", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_comments36 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "body", - "htmlBody", - "contentType", - "object", - "project", - "postedBy", - "postedDateTime", - "lastEditedBy", - "dateLastEdited", - "deleted", - "deletedBy", - "dateDeleted" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "body", + "htmlBody", + "contentType", + "object", + "project", + "postedBy", + "postedDateTime", + "lastEditedBy", + "dateLastEdited", + "deleted", + "deletedBy", + "dateDeleted" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / file_version_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / file_version_id / typeAdded value: +"integer" - removed
Input schema / properties / link_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / link_id / typeAdded value: +"integer" - removed
Input schema / properties / milestone_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / milestone_id / typeAdded value: +"integer" - removed
Input schema / properties / notebook_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / notebook_id / typeAdded value: +"integer" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "all", - "date", - "project", - "user", - "type", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "all", + "date", + "project", + "user", + "type", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / task_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / task_id / typeAdded value: +"integer" - changed
Input schema / properties / updated_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_ids / typeAdded value: +"array" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_companies30 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "addressOne", - "addressTwo", - "city", - "countryCode", - "emailOne", - "emailTwo", - "emailThree", - "fax", - "name", - "phone", - "profileText", - "state", - "website", - "zip", - "clientManagedBy", - "industry", - "tags", - "createdAt", - "updatedAt", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "addressOne", + "addressTwo", + "city", + "countryCode", + "emailOne", + "emailTwo", + "emailThree", + "fax", + "name", + "phone", + "profileText", + "state", + "website", + "zip", + "clientManagedBy", + "industry", + "tags", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "name", - "accounts", - "clients", - "collaborators", - "contacts", - "projects", - "tasks", - "country", - "health", - "website", - "email", - "phone", - "fax", - "industry", - "dateadded", - "ownercompany", - "ownername", - "taskscompletion", - "customfield", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "name", + "accounts", + "clients", + "collaborators", + "contacts", + "projects", + "tasks", + "country", + "health", + "website", + "email", + "phone", + "fax", + "industry", + "dateadded", + "ownercompany", + "ownername", + "taskscompletion", + "customfield", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_by_custom_field_id / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by_custom_field_id / minimumAdded value: +1 - added
Input schema / properties / order_by_custom_field_id / typeAdded value: +"integer" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_custom_field_values17 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / custom_field_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / custom_field_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / custom_field_ids / typeAdded value: +"array" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "value", - "currencySymbol", - "countryCode", - "customfield", - "task", - "project", - "company", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "value", + "currencySymbol", + "countryCode", + "customfield", + "task", + "project", + "company", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_custom_fields39 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / entities / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "project", - "task", - "company" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / entities / itemsAdded value: +{ + "enum": [ + "project", + "task", + "company" + ], + "type": "string" +} - added
Input schema / properties / entities / typeAdded value: +"array" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "options", - "id", - "name", - "description", - "type", - "entity", - "required", - "formula", - "currencyCode", - "unitId", - "project", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deleted", - "deletedBy", - "deletedAt" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "options", + "id", + "name", + "description", + "type", + "entity", + "required", + "formula", + "currencyCode", + "unitId", + "project", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt", + "deleted", + "deletedBy", + "deletedAt" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / ids / typeAdded value: +"array" - removed
Input schema / properties / include_site_level / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_site_level / typeAdded value: +"boolean" - removed
Input schema / properties / only_project_level / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_project_level / typeAdded value: +"boolean" - removed
Input schema / properties / only_site_level / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_site_level / typeAdded value: +"boolean" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "name", - "project", - "datecreated", - "dateupdated", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "name", + "project", + "datecreated", + "dateupdated", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_ids / typeAdded value: +"array" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / show_deleted / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / show_deleted / typeAdded value: +"boolean" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_custom_item_fields19 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / ids / typeAdded value: +"array" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / show_deleted / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / show_deleted / typeAdded value: +"boolean"
- Changed
twprojects-list_custom_item_records28 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / ids / typeAdded value: +"array" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "displayorder", - "name", - "customitemfield", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "displayorder", + "name", + "customitemfield", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_by_field_id / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by_field_id / minimumAdded value: +1 - added
Input schema / properties / order_by_field_id / typeAdded value: +"integer" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / section_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / section_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / section_ids / typeAdded value: +"array" - removed
Input schema / properties / show_deleted / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / show_deleted / typeAdded value: +"boolean"
- Changed
twprojects-list_custom_items22 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / ids / typeAdded value: +"array" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "name", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "name", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / show_deleted / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / show_deleted / typeAdded value: +"boolean"
- Changed
twprojects-list_jobroles19 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "isActive", - "createdByUser", - "createdAt", - "updatedByUser", - "updatedAt", - "deletedByUser", - "deletedAt", - "users", - "primaryUsers" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "isActive", + "createdByUser", + "createdAt", + "updatedByUser", + "updatedAt", + "deletedByUser", + "deletedAt", + "users", + "primaryUsers" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_links21 fields changed- removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "code", - "project-id", - "tags", - "created-by-userId", - "created-date", - "updated-by-userId", - "updated-date" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "description", + "code", + "project-id", + "tags", + "created-by-userId", + "created-date", + "updated-by-userId", + "updated-date" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_message_replies28 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "body", - "author", - "message", - "meta", - "createdAt", - "updatedAt", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / message_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / message_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / message_ids / typeAdded value: +"array" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "createdat", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "createdat", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_ids / typeAdded value: +"array" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_messages30 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "title", - "project", - "tags", - "lastReply", - "replyStatus", - "status", - "body", - "author", - "message", - "meta", - "createdAt", - "updatedAt" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "title", + "project", + "tags", + "lastReply", + "replyStatus", + "status", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "createdat", - "updatedat", - "category", - "project", - "createdby", - "unread", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "createdat", + "updatedat", + "category", + "project", + "createdby", + "unread", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_ids / typeAdded value: +"array" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_milestones37 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / due_after / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_after / formatAdded value: +"date" - added
Input schema / properties / due_after / typeAdded value: +"string" - removed
Input schema / properties / due_before / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_before / formatAdded value: +"date" - added
Input schema / properties / due_before / typeAdded value: +"string" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "deadline", - "project", - "tasklists", - "tags", - "responsibleParties", - "createdOn", - "lastChangedOn", - "deletedOn", - "completedOn", - "completedBy", - "completed", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "description", + "deadline", + "project", + "tasklists", + "tags", + "responsibleParties", + "createdOn", + "lastChangedOn", + "deletedOn", + "completedOn", + "completedBy", + "completed", + "status" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "date", - "dateonly", - "name", - "project", - "user", - "dateCreated", - "dateUpdated", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "date", + "dateonly", + "name", + "project", + "user", + "dateCreated", + "dateUpdated", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / show_completed / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / show_completed / typeAdded value: +"boolean" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_notebooks32 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "contents", - "type", - "project", - "tags", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "deletedAt", - "deletedBy", - "deleted" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "description", + "contents", + "type", + "project", + "tags", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy", + "deleted" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / include_contents / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_contents / typeAdded value: +"boolean" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "name", - "project", - "dateCreated", - "dateUpdated", - "category", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "name", + "project", + "dateCreated", + "dateUpdated", + "category", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_ids / typeAdded value: +"array" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_project_budgets24 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / cursor / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / cursor / typeAdded value: +"string" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "projectId", - "type", - "status", - "capacity", - "capacityUsed", - "originatorBudgetId", - "isRepeating", - "repeatPeriod", - "repeatUnit", - "repeatsRemaining", - "sequenceNumber", - "startDateTime", - "endDateTime", - "currencyCode", - "timelogType", - "expenseType", - "defaultRate", - "notificationIds", - "createdByUserId", - "dateCreated", - "updatedBy", - "dateUpdated", - "completedByUserId", - "dateCompleted", - "deletedByUserId", - "dateDeleted" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "projectId", + "type", + "status", + "capacity", + "capacityUsed", + "originatorBudgetId", + "isRepeating", + "repeatPeriod", + "repeatUnit", + "repeatsRemaining", + "sequenceNumber", + "startDateTime", + "endDateTime", + "currencyCode", + "timelogType", + "expenseType", + "defaultRate", + "notificationIds", + "createdByUserId", + "dateCreated", + "updatedBy", + "dateUpdated", + "completedByUserId", + "dateCompleted", + "deletedByUserId", + "dateDeleted" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +"integer" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_ids / typeAdded value: +"array" - removed
Input schema / properties / status / anyOfRemoved value: -[ - { - "enum": [ - "UPCOMING", - "ACTIVE", - "COMPLETED" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / status / enumAdded value: +[ + "UPCOMING", + "ACTIVE", + "COMPLETED" +] - added
Input schema / properties / status / typeAdded value: +"string" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_project_categories16 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "color", - "parent", - "count" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "color", + "parent", + "count" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_project_templates17 fields changed- removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_category_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_category_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_category_ids / typeAdded value: +"array" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array"
- Changed
twprojects-list_project_updates34 fields changed- removed
Input schema / properties / active_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / active_only / typeAdded value: +"boolean" - removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - changed
Input schema / properties / created_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "text", - "health", - "healthLabel", - "color", - "projectId", - "project", - "createdBy", - "createdAt", - "updatedAt", - "isActive", - "deleted", - "deletedAt", - "deletedBy", - "likeFromUserIDs", - "likeFromUsers", - "reactions" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "text", + "health", + "healthLabel", + "color", + "projectId", + "project", + "createdBy", + "createdAt", + "updatedAt", + "isActive", + "deleted", + "deletedAt", + "deletedBy", + "likeFromUserIDs", + "likeFromUsers", + "reactions" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / include_archived / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_archived / typeAdded value: +"boolean" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "date", - "color", - "health", - "project", - "user", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "date", + "color", + "health", + "project", + "user", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_healths / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "good", - "ok", - "bad", - "not_set" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_healths / itemsAdded value: +{ + "enum": [ + "good", + "ok", + "bad", + "not_set" + ], + "type": "string" +} - added
Input schema / properties / project_healths / typeAdded value: +"array" - removed
Input schema / properties / project_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_ids / typeAdded value: +"array" - removed
Input schema / properties / show_deleted / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / show_deleted / typeAdded value: +"boolean" - changed
Input schema / properties / updated_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_projects66 fields changed- removed
Input schema / properties / company_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / company_ids / typeAdded value: +"array" - removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "description", - "name", - "startAt", - "endAt", - "category", - "company", - "projectOwner", - "tags", - "update", - "lastWorkedOn", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "completedAt", - "completedBy", - "status", - "isBillable", - "type" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "description", + "name", + "startAt", + "endAt", + "category", + "company", + "projectOwner", + "tags", + "update", + "lastWorkedOn", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "completedAt", + "completedBy", + "status", + "isBillable", + "type" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / hide_observed / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / hide_observed / typeAdded value: +"boolean" - removed
Input schema / properties / include_archived / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_archived / typeAdded value: +"boolean" - removed
Input schema / properties / include_subcategories / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_subcategories / typeAdded value: +"boolean" - removed
Input schema / properties / include_tentative / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_tentative / typeAdded value: +"boolean" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / only_admin_access / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_admin_access / typeAdded value: +"boolean" - removed
Input schema / properties / only_archived / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_archived / typeAdded value: +"boolean" - removed
Input schema / properties / only_starred / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_starred / typeAdded value: +"boolean" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "budgetused", - "categoryname", - "companyname", - "creatorname", - "customfield", - "datecreated", - "duedate", - "health", - "lastactivity", - "lastworkedon", - "mobilespecial", - "name", - "namecaseinsensitive", - "ownercompany", - "ownername", - "starred", - "starredcompanyname", - "starredfirst", - "startdate", - "status", - "taskcompletion", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "budgetused", + "categoryname", + "companyname", + "creatorname", + "customfield", + "datecreated", + "duedate", + "health", + "lastactivity", + "lastworkedon", + "mobilespecial", + "name", + "namecaseinsensitive", + "ownercompany", + "ownername", + "starred", + "starredcompanyname", + "starredfirst", + "startdate", + "status", + "taskcompletion", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_by_custom_field_id / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by_custom_field_id / minimumAdded value: +1 - added
Input schema / properties / order_by_custom_field_id / typeAdded value: +"integer" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_category_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_category_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_category_ids / typeAdded value: +"array" - removed
Input schema / properties / project_healths / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "good", - "ok", - "bad", - "not_set" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_healths / itemsAdded value: +{ + "enum": [ + "good", + "ok", + "bad", + "not_set" + ], + "type": "string" +} - added
Input schema / properties / project_healths / typeAdded value: +"array" - removed
Input schema / properties / project_owner_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_owner_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_owner_ids / typeAdded value: +"array" - removed
Input schema / properties / project_statuses / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "active", - "current", - "late", - "upcoming", - "completed", - "deleted" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_statuses / itemsAdded value: +{ + "enum": [ + "active", + "current", + "late", + "upcoming", + "completed", + "deleted" + ], + "type": "string" +} - added
Input schema / properties / project_statuses / typeAdded value: +"array" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / team_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / team_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / team_ids / typeAdded value: +"array" - changed
Input schema / properties / updated_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_ids / typeAdded value: +"array" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_skills19 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "createdByUser", - "createdAt", - "updatedByUser", - "updatedAt", - "deletedByUser", - "deletedAt", - "users" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "createdByUser", + "createdAt", + "updatedByUser", + "updatedAt", + "deletedByUser", + "deletedAt", + "users" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_tags28 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "color", - "project" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "color", + "project" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / item_type / anyOfRemoved value: -[ - { - "enum": [ - "PROJECT", - "TASK", - "TASKLIST", - "MILESTONE", - "MESSAGE", - "TIMELOG", - "NOTEBOOK", - "FILE", - "COMPANY", - "LINK" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / item_type / enumAdded value: +[ + "PROJECT", + "TASK", + "TASKLIST", + "MILESTONE", + "MESSAGE", + "TIMELOG", + "NOTEBOOK", + "FILE", + "COMPANY", + "LINK" +] - added
Input schema / properties / item_type / typeAdded value: +"string" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "name", - "count", - "project", - "color", - "datelastupdated", - "projectdatelastused", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "name", + "count", + "project", + "color", + "datelastupdated", + "projectdatelastused", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_ids / typeAdded value: +"array" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_tasklist_budgets20 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "type", - "capacity", - "capacityUsed", - "projectId", - "projectbudget", - "tasklist", - "milestone", - "notifications", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "deletedAt", - "deletedBy" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "type", + "capacity", + "capacityUsed", + "projectId", + "projectbudget", + "tasklist", + "milestone", + "notifications", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "dateCreated", - "displayOrder", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "dateCreated", + "displayOrder", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_tasklists26 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "project", - "milestone", - "createdAt", - "updatedAt", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "description", + "project", + "milestone", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "displayorder", - "name", - "status", - "createdat", - "updatedat", - "project", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "displayorder", + "name", + "status", + "createdat", + "updatedat", + "project", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / show_completed / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / show_completed / typeAdded value: +"boolean" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_tasks69 fields changed- removed
Input schema / properties / assignee_user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / assignee_user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / assignee_user_ids / typeAdded value: +"array" - changed
Input schema / properties / completed_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - changed
Input schema / properties / completed_before / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - changed
Input schema / properties / created_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - changed
Input schema / properties / created_before / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / created_by_user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / created_by_user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / created_by_user_ids / typeAdded value: +"array" - removed
Input schema / properties / date_filter / anyOfRemoved value: -[ - { - "enum": [ - "anytime", - "overdue", - "today", - "tomorrow", - "yesterday", - "thisweek", - "upcoming", - "started", - "within7", - "within14", - "within30", - "within365", - "nodate", - "noduedate", - "nostartdate", - "hasdate" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / date_filter / enumAdded value: +[ + "anytime", + "overdue", + "today", + "tomorrow", + "yesterday", + "thisweek", + "upcoming", + "started", + "within7", + "within14", + "within30", + "within365", + "nodate", + "noduedate", + "nostartdate", + "hasdate" +] - added
Input schema / properties / date_filter / typeAdded value: +"string" - removed
Input schema / properties / due_after / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_after / formatAdded value: +"date" - added
Input schema / properties / due_after / typeAdded value: +"string" - removed
Input schema / properties / due_before / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_before / formatAdded value: +"date" - added
Input schema / properties / due_before / typeAdded value: +"string" - removed
Input schema / properties / exclude_assignee_user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / exclude_assignee_user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / exclude_assignee_user_ids / typeAdded value: +"array" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "descriptionContentType", - "priority", - "progress", - "startDate", - "dueDate", - "estimateMinutes", - "tasklist", - "parentTask", - "assignees", - "tags", - "predecessors", - "subTaskIds", - "workflowStages", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deletedBy", - "deletedAt", - "completedBy", - "completedAt", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "description", + "descriptionContentType", + "priority", + "progress", + "startDate", + "dueDate", + "estimateMinutes", + "tasklist", + "parentTask", + "assignees", + "tags", + "predecessors", + "subTaskIds", + "workflowStages", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt", + "deletedBy", + "deletedAt", + "completedBy", + "completedAt", + "status" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / only_completed / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_completed / typeAdded value: +"boolean" - removed
Input schema / properties / only_unassigned / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_unassigned / typeAdded value: +"boolean" - removed
Input schema / properties / only_unplanned / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / only_unplanned / typeAdded value: +"boolean" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "id", - "startdate", - "createdat", - "priority", - "project", - "flattenedtasklist", - "company", - "manual", - "active", - "completedat", - "duestartdate", - "alldates", - "tasklistname", - "tasklistdisplayorder", - "tasklistid", - "duedate", - "updatedat", - "taskname", - "createdby", - "completedby", - "assignedto", - "taskstatus", - "taskduedate", - "customfield", - "estimatedtime", - "boardcolumn", - "taskgroupid", - "taskgroupname", - "taskgroup", - "displayorder", - "projectmanual", - "stagedisplayorder", - "stage", - "parenttask" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "id", + "startdate", + "createdat", + "priority", + "project", + "flattenedtasklist", + "company", + "manual", + "active", + "completedat", + "duestartdate", + "alldates", + "tasklistname", + "tasklistdisplayorder", + "tasklistid", + "duedate", + "updatedat", + "taskname", + "createdby", + "completedby", + "assignedto", + "taskstatus", + "taskduedate", + "customfield", + "estimatedtime", + "boardcolumn", + "taskgroupid", + "taskgroupname", + "taskgroup", + "displayorder", + "projectmanual", + "stagedisplayorder", + "stage", + "parenttask" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_by_custom_field_id / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by_custom_field_id / minimumAdded value: +1 - added
Input schema / properties / order_by_custom_field_id / typeAdded value: +"integer" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / show_completed / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / show_completed / typeAdded value: +"boolean" - removed
Input schema / properties / start_after / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_after / formatAdded value: +"date" - added
Input schema / properties / start_after / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / tasklist_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / tasklist_id / typeAdded value: +"integer" - changed
Input schema / properties / updated_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - changed
Input schema / properties / updated_before / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_teams24 fields changed- removed
Input schema / properties / company_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_id / typeAdded value: +"integer" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "handle", - "logoUrl", - "logoIcon", - "logoColor", - "projectId", - "company", - "parentTeam", - "rootTeam", - "members", - "createdByUserId", - "dateCreated", - "updatedByUserId", - "dateUpdated", - "deleted", - "deletedDate" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "description", + "handle", + "logoUrl", + "logoIcon", + "logoColor", + "projectId", + "company", + "parentTeam", + "rootTeam", + "members", + "createdByUserId", + "dateCreated", + "updatedByUserId", + "dateUpdated", + "deleted", + "deletedDate" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "name", - "picker", - "dateAdded" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "name", + "picker", + "dateAdded" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_timelogs49 fields changed- removed
Input schema / properties / assigned_company_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / assigned_company_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / assigned_company_ids / typeAdded value: +"array" - removed
Input schema / properties / assigned_team_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / assigned_team_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / assigned_team_ids / typeAdded value: +"array" - removed
Input schema / properties / assigned_user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / assigned_user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / assigned_user_ids / typeAdded value: +"array" - removed
Input schema / properties / billable_type / anyOfRemoved value: -[ - { - "enum": [ - "all", - "billable", - "nonbillable" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / billable_type / enumAdded value: +[ + "all", + "billable", + "nonbillable" +] - added
Input schema / properties / billable_type / typeAdded value: +"string" - removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - changed
Input schema / properties / end_date / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "description", - "billable", - "minutes", - "timeLogged", - "user", - "task", - "project", - "tags", - "deskTicketId", - "createdAt", - "loggedBy", - "updatedAt", - "updatedBy", - "deletedAt", - "deletedBy", - "deleted" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "description", + "billable", + "minutes", + "timeLogged", + "user", + "task", + "project", + "tags", + "deskTicketId", + "createdAt", + "loggedBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy", + "deleted" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / invoiced_type / anyOfRemoved value: -[ - { - "enum": [ - "all", - "invoiced", - "noninvoiced" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / invoiced_type / enumAdded value: +[ + "all", + "invoiced", + "noninvoiced" +] - added
Input schema / properties / invoiced_type / typeAdded value: +"string" - removed
Input schema / properties / match_all_tags / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / match_all_tags / typeAdded value: +"boolean" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "company", - "date", - "dateupdated", - "project", - "task", - "tasklist", - "user", - "description", - "billed", - "billable", - "timespent", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "company", + "date", + "dateupdated", + "project", + "task", + "tasklist", + "user", + "description", + "billed", + "billable", + "timespent", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - changed
Input schema / properties / start_date / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / task_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / task_id / typeAdded value: +"integer" - removed
Input schema / properties / ticketIds / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / ticketIds / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / ticketIds / typeAdded value: +"array" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_timers22 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "description", - "running", - "billable", - "user", - "task", - "project", - "timelog", - "createdAt", - "updatedAt", - "deletedAt", - "deleted", - "duration", - "lastStartedAt", - "timerLastIntervalEnd", - "intervals" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "description", + "running", + "billable", + "user", + "task", + "project", + "timelog", + "createdAt", + "updatedAt", + "deletedAt", + "deleted", + "duration", + "lastStartedAt", + "timerLastIntervalEnd", + "intervals" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / running_timers_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / running_timers_only / typeAdded value: +"boolean" - removed
Input schema / properties / task_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / task_id / typeAdded value: +"integer" - removed
Input schema / properties / user_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_id / typeAdded value: +"integer" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_users26 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "firstName", - "lastName", - "title", - "email", - "isAdmin", - "type", - "userCost", - "userRate", - "company", - "jobRoles", - "skills", - "workingHour", - "lengthOfDay", - "deleted", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "firstName", + "lastName", + "title", + "email", + "isAdmin", + "type", + "userCost", + "userRate", + "company", + "jobRoles", + "skills", + "workingHour", + "lengthOfDay", + "deleted", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "name", - "namecaseinsensitive", - "company", - "id" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "name", + "namecaseinsensitive", + "company", + "id" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / type / typeAdded value: +"string" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_workflow_stages20 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "workflow" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "workflow" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "id", - "name", - "displayorder" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "id", + "name", + "displayorder" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-list_workflows16 fields changed- removed
Input schema / properties / count_only / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / count_only / typeAdded value: +"boolean" - removed
Input schema / properties / fields / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "id", - "name", - "defaultWorkflow" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / fields / itemsAdded value: +{ + "enum": [ + "id", + "name", + "defaultWorkflow" + ], + "type": "string" +} - added
Input schema / properties / fields / typeAdded value: +"array" - removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean"
- Changed
twprojects-search24 fields changed- removed
Input schema / properties / cursor / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / cursor / typeAdded value: +"string" - removed
Input schema / properties / extended_search / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / extended_search / typeAdded value: +"boolean" - removed
Input schema / properties / include_completed_items / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_completed_items / typeAdded value: +"boolean" - removed
Input schema / properties / include_highlights / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_highlights / typeAdded value: +"boolean" - removed
Input schema / properties / limit / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / limit / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / search_term / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / search_term / typeAdded value: +"string" - removed
Input schema / properties / sideload / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "comments", - "companies", - "links", - "messages", - "milestones", - "notebooks", - "projects", - "tasklists", - "tasks", - "teams", - "timelogs", - "users" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / sideload / itemsAdded value: +{ + "enum": [ + "comments", + "companies", + "links", + "messages", + "milestones", + "notebooks", + "projects", + "tasklists", + "tasks", + "teams", + "timelogs", + "users" + ], + "type": "string" +} - added
Input schema / properties / sideload / typeAdded value: +"array" - removed
Input schema / properties / types / anyOfRemoved value: -[ - { - "items": { - "enum": [ - "projects", - "tasks", - "tasklists", - "milestones", - "messages", - "notebooks", - "links", - "comments", - "taskcomments", - "milestonecomments", - "filecomments", - "linkcomments", - "notebookcomments", - "timelogs", - "users", - "teams", - "companies" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / types / itemsAdded value: +{ + "enum": [ + "projects", + "tasks", + "tasklists", + "milestones", + "messages", + "notebooks", + "links", + "comments", + "taskcomments", + "milestonecomments", + "filecomments", + "linkcomments", + "notebookcomments", + "timelogs", + "users", + "teams", + "companies" + ], + "type": "string" +} - added
Input schema / properties / types / typeAdded value: +"array" - changed
Input schema / properties / updated_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + } +] - removed
Input schema / properties / verbose / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / verbose / typeAdded value: +"boolean" - removed
Input schema / requiredRemoved value: -[ - "search_term" -]
- Changed
twprojects-summarize_timelogs29 fields changed- removed
Input schema / properties / company_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / company_ids / typeAdded value: +"array" - removed
Input schema / properties / include_archived_projects / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / include_archived_projects / typeAdded value: +"boolean" - removed
Input schema / properties / order_by / anyOfRemoved value: -[ - { - "enum": [ - "name", - "loggedtime", - "billabletime", - "nonbillabletime", - "billedtime", - "budget" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_by / enumAdded value: +[ + "name", + "loggedtime", + "billabletime", + "nonbillabletime", + "billedtime", + "budget" +] - added
Input schema / properties / order_by / typeAdded value: +"string" - removed
Input schema / properties / order_mode / anyOfRemoved value: -[ - { - "enum": [ - "asc", - "desc" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / order_mode / enumAdded value: +[ + "asc", + "desc" +] - added
Input schema / properties / order_mode / typeAdded value: +"string" - removed
Input schema / properties / project_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_ids / typeAdded value: +"array" - removed
Input schema / properties / task_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / task_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / task_ids / typeAdded value: +"array" - removed
Input schema / properties / tasklist_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tasklist_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tasklist_ids / typeAdded value: +"array" - removed
Input schema / properties / team_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / team_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / team_ids / typeAdded value: +"array" - removed
Input schema / properties / timelog_tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / timelog_tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / timelog_tag_ids / typeAdded value: +"array" - removed
Input schema / properties / user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_ids / typeAdded value: +"array"
- Changed
twprojects-update_allocation30 fields changed- removed
Input schema / properties / assigned_user_id / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / assigned_user_id / minimumAdded value: +1 - added
Input schema / properties / assigned_user_id / typeAdded value: +"integer" - removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "maxLength": 255, - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / maxLengthAdded value: +255 - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / end_date / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / end_date / typeAdded value: +"string" - removed
Input schema / properties / ignore_collisions / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / ignore_collisions / typeAdded value: +"boolean" - removed
Input schema / properties / inform_of_over_allocation / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / inform_of_over_allocation / typeAdded value: +"boolean" - removed
Input schema / properties / is_billable / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / is_billable / typeAdded value: +"boolean" - removed
Input schema / properties / linked_task_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / linked_task_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / linked_task_ids / typeAdded value: +"array" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / minimumAdded value: +1 - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / seconds_per_day / anyOfRemoved value: -[ - { - "minimum": 60, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / seconds_per_day / minimumAdded value: +60 - added
Input schema / properties / seconds_per_day / typeAdded value: +"integer" - removed
Input schema / properties / start_date / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_date / typeAdded value: +"string" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "maxLength": 100, - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / maxLengthAdded value: +100 - added
Input schema / properties / title / typeAdded value: +"string"
- Changed
twprojects-update_comment6 fields changed- removed
Input schema / properties / content_type / anyOfRemoved value: -[ - { - "enum": [ - "TEXT", - "HTML" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content_type / enumAdded value: +[ + "TEXT", + "HTML" +] - added
Input schema / properties / content_type / typeAdded value: +"string" - changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.", - "type": "boolean" - }, - { - "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } +] - removed
Input schema / properties / notify_current_user / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / notify_current_user / typeAdded value: +"boolean"
- Changed
twprojects-update_company35 fields changed- removed
Input schema / properties / address_one / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / address_one / typeAdded value: +"string" - removed
Input schema / properties / address_two / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / address_two / typeAdded value: +"string" - removed
Input schema / properties / city / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / city / typeAdded value: +"string" - removed
Input schema / properties / country_code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / country_code / typeAdded value: +"string" - removed
Input schema / properties / email_one / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / email_one / typeAdded value: +"string" - removed
Input schema / properties / email_three / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / email_three / typeAdded value: +"string" - removed
Input schema / properties / email_two / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / email_two / typeAdded value: +"string" - removed
Input schema / properties / fax / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / fax / typeAdded value: +"string" - removed
Input schema / properties / industry_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / industry_id / typeAdded value: +"integer" - removed
Input schema / properties / manager_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / manager_id / typeAdded value: +"integer" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / phone / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / phone / typeAdded value: +"string" - removed
Input schema / properties / profile / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / profile / typeAdded value: +"string" - removed
Input schema / properties / state / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / state / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / website / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / website / typeAdded value: +"string" - removed
Input schema / properties / zip / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / zip / typeAdded value: +"string"
- Changed
twprojects-update_custom_field14 fields changed- removed
Input schema / properties / currency_code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / currency_code / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / formula / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / formula / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - changed
Input schema / properties / options / anyOfPrevious value: -[ - { - "properties": { - "choices": { - "items": { - "properties": { - "color": { - "description": "The hex color code for the choice (e.g. #ff0000).", - "type": "string" - }, - "value": { - "description": "The display value of the choice. For 'dropdown' fields, this is the value that will be set on entities when this choice is selected.", - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - } - }, - "type": "object" - }, - { - "properties": { - "color": { - "description": "The hex color code for the rating icons (e.g. #ff0000).", - "type": "string" - }, - "icon": { - "description": "The icon to use for the rating, e.g. 'star', 'heart', etc.", - "type": "string" - } - }, - "type": "object" - }, - { - "properties": { - "decimals": { - "description": "The number of decimal places to allow for number-decimal custom fields.", - "type": "integer" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "properties": { + "choices": { + "items": { + "properties": { + "color": { + "description": "The hex color code for the choice (e.g. #ff0000).", + "type": "string" + }, + "value": { + "description": "The display value of the choice. For 'dropdown' fields, this is the value that will be set on entities when this choice is selected.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + { + "properties": { + "color": { + "description": "The hex color code for the rating icons (e.g. #ff0000).", + "type": "string" + }, + "icon": { + "description": "The icon to use for the rating, e.g. 'star', 'heart', etc.", + "type": "string" + } + }, + "type": "object" + }, + { + "properties": { + "decimals": { + "description": "The number of decimal places to allow for number-decimal custom fields.", + "type": "integer" + } + }, + "type": "object" + } +] - removed
Input schema / properties / required / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / required / typeAdded value: +"boolean" - removed
Input schema / properties / unit / anyOfRemoved value: -[ - { - "enum": [ - "currency", - "duration", - "date", - "percent", - "currency/duration", - "duration/currency" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / unit / enumAdded value: +[ + "currency", + "duration", + "date", + "percent", + "currency/duration", + "duration/currency" +] - added
Input schema / properties / unit / typeAdded value: +"string"
- Changed
twprojects-update_custom_field_value5 fields changed- removed
Input schema / properties / country_code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / country_code / typeAdded value: +"string" - removed
Input schema / properties / currency_code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / currency_code / typeAdded value: +"string" - changed
Input schema / properties / value / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ] - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "type": "array" + } +]
- Changed
twprojects-update_custom_item8 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / display_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / display_name / typeAdded value: +"string" - removed
Input schema / properties / label_plural / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / label_plural / typeAdded value: +"string" - removed
Input schema / properties / label_singular / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / label_singular / typeAdded value: +"string"
- Changed
twprojects-update_custom_item_field6 fields changed- removed
Input schema / properties / definition / anyOfRemoved value: -[ - { - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / definition / typeAdded value: +"object" - removed
Input schema / properties / display_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / display_name / typeAdded value: +"string" - removed
Input schema / properties / position_after_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / position_after_id / typeAdded value: +"integer"
- Changed
twprojects-update_custom_item_record11 fields changed- removed
Input schema / properties / clear_section / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / clear_section / typeAdded value: +"boolean" - removed
Input schema / properties / field_values / anyOfRemoved value: -[ - { - "items": { - "properties": { - "field_name": { - "description": "Display name of the field, case-insensitive.", - "type": "string" - }, - "value": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "items": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - } - ] - }, - "type": "array" - }, - { - "type": "object" - }, - { - "type": "null" - } - ], - "description": "Value to set. Type depends on the field โ see the tool description." - } - }, - "required": [ - "field_name", - "value" - ], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / field_values / itemsAdded value: +{ + "properties": { + "field_name": { + "description": "Display name of the field, case-insensitive.", + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + } + ] + }, + "type": "array" + }, + { + "type": "object" + } + ], + "description": "Value to set. Type depends on the field โ see the tool description." + } + }, + "required": [ + "field_name" + ], + "type": "object" +} - added
Input schema / properties / field_values / typeAdded value: +"array" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / position_after_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / position_after_id / typeAdded value: +"integer" - removed
Input schema / properties / section_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / section_id / typeAdded value: +"integer"
- Changed
twprojects-update_jobrole2 fields changed- removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string"
- Changed
twprojects-update_link12 fields changed- removed
Input schema / properties / code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / code / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "true is the same as \"all\": notify all project members. false notifies nobody.", - "type": "boolean" - }, - { - "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } +] - removed
Input schema / properties / notify_current_user / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / notify_current_user / typeAdded value: +"boolean" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / typeAdded value: +"string"
- Changed
twprojects-update_message7 fields changed- removed
Input schema / properties / body / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / body / typeAdded value: +"string" - changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "true is the same as \"all\": notify all project members. false notifies nobody.", - "type": "boolean" - }, - { - "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } +] - removed
Input schema / properties / notify_current_user / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / notify_current_user / typeAdded value: +"boolean" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / typeAdded value: +"string"
- Changed
twprojects-update_message_reply5 fields changed- removed
Input schema / properties / body / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / body / typeAdded value: +"string" - changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "true is the same as \"all\": notify all project members. false notifies nobody.", - "type": "boolean" - }, - { - "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } +] - removed
Input schema / properties / notify_current_user / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / notify_current_user / typeAdded value: +"boolean"
- Changed
twprojects-update_milestone17 fields changed- removed
Input schema / properties / assignees / anyOfRemoved value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / assignees / maxPropertiesAdded value: +3 - added
Input schema / properties / assignees / minPropertiesAdded value: +1 - added
Input schema / properties / assignees / propertiesAdded value: +{ + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } +} - added
Input schema / properties / assignees / typeAdded value: +"object" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / due_date / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_date / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / tasklist_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tasklist_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tasklist_ids / typeAdded value: +"array"
- Changed
twprojects-update_notebook12 fields changed- removed
Input schema / properties / contents / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / contents / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / type / anyOfRemoved value: -[ - { - "enum": [ - "MARKDOWN", - "HTML" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / type / enumAdded value: +[ + "MARKDOWN", + "HTML" +] - added
Input schema / properties / type / typeAdded value: +"string"
- Changed
twprojects-update_project20 fields changed- removed
Input schema / properties / category_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / category_id / typeAdded value: +"integer" - removed
Input schema / properties / company_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_id / typeAdded value: +"integer" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / end_at / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / end_at / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / owned_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / owned_id / typeAdded value: +"integer" - removed
Input schema / properties / start_at / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_at / typeAdded value: +"string" - removed
Input schema / properties / status / anyOfRemoved value: -[ - { - "enum": [ - "active", - "archived" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / status / enumAdded value: +[ + "active", + "archived" +] - added
Input schema / properties / status / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array"
- Changed
twprojects-update_project_category6 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / parent_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / parent_id / typeAdded value: +"integer"
- Changed
twprojects-update_skill5 fields changed- removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_ids / typeAdded value: +"array"
- Changed
twprojects-update_tag6 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer"
- Changed
twprojects-update_task59 fields changed- removed
Input schema / properties / assignees / anyOfRemoved value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / assignees / maxPropertiesAdded value: +4 - added
Input schema / properties / assignees / minPropertiesAdded value: +1 - added
Input schema / properties / assignees / propertiesAdded value: +{ + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } +} - added
Input schema / properties / assignees / typeAdded value: +"object" - removed
Input schema / properties / attachment_file_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / attachment_file_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / attachment_file_ids / typeAdded value: +"array" - removed
Input schema / properties / attachment_refs / anyOfRemoved value: -[ - { - "items": { - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / attachment_refs / itemsAdded value: +{ + "type": "string" +} - added
Input schema / properties / attachment_refs / typeAdded value: +"array" - removed
Input schema / properties / change_followers / anyOfRemoved value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / change_followers / maxPropertiesAdded value: +4 - added
Input schema / properties / change_followers / minPropertiesAdded value: +1 - added
Input schema / properties / change_followers / propertiesAdded value: +{ + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } +} - added
Input schema / properties / change_followers / typeAdded value: +"object" - removed
Input schema / properties / clear_assignees / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / clear_assignees / typeAdded value: +"boolean" - removed
Input schema / properties / clear_parent_task / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / clear_parent_task / typeAdded value: +"boolean" - removed
Input schema / properties / comment_followers / anyOfRemoved value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / comment_followers / maxPropertiesAdded value: +4 - added
Input schema / properties / comment_followers / minPropertiesAdded value: +1 - added
Input schema / properties / comment_followers / propertiesAdded value: +{ + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } +} - added
Input schema / properties / comment_followers / typeAdded value: +"object" - removed
Input schema / properties / complete_followers / anyOfRemoved value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -] - added
Input schema / properties / complete_followers / maxPropertiesAdded value: +4 - added
Input schema / properties / complete_followers / minPropertiesAdded value: +1 - added
Input schema / properties / complete_followers / propertiesAdded value: +{ + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } +} - added
Input schema / properties / complete_followers / typeAdded value: +"object" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / due_date / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / due_date / formatAdded value: +"date" - added
Input schema / properties / due_date / typeAdded value: +"string" - removed
Input schema / properties / estimated_minutes / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / estimated_minutes / typeAdded value: +"integer" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / parent_task_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / parent_task_id / typeAdded value: +"integer" - removed
Input schema / properties / predecessors / anyOfRemoved value: -[ - { - "items": { - "properties": { - "task_id": { - "description": "The ID of the predecessor task.", - "type": "integer" - }, - "type": { - "description": "'start' means this task can complete when the predecessor starts; 'complete' means this task can complete when the predecessor completes.", - "enum": [ - "start", - "complete" - ], - "type": "string" - } - }, - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / predecessors / itemsAdded value: +{ + "properties": { + "task_id": { + "description": "The ID of the predecessor task.", + "type": "integer" + }, + "type": { + "description": "'start' means this task can complete when the predecessor starts; 'complete' means this task can complete when the predecessor completes.", + "enum": [ + "start", + "complete" + ], + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / predecessors / typeAdded value: +"array" - removed
Input schema / properties / priority / anyOfRemoved value: -[ - { - "enum": [ - "low", - "medium", - "high" - ], - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / priority / enumAdded value: +[ + "low", + "medium", + "high" +] - added
Input schema / properties / priority / typeAdded value: +"string" - removed
Input schema / properties / progress / anyOfRemoved value: -[ - { - "maximum": 100, - "minimum": 0, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / progress / maximumAdded value: +100 - added
Input schema / properties / progress / minimumAdded value: +0 - added
Input schema / properties / progress / typeAdded value: +"integer" - removed
Input schema / properties / start_date / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / start_date / formatAdded value: +"date" - added
Input schema / properties / start_date / typeAdded value: +"string" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / tasklist_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / tasklist_id / typeAdded value: +"integer"
- Changed
twprojects-update_tasklist6 fields changed- removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / milestone_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / milestone_id / typeAdded value: +"integer" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string"
- Changed
twprojects-update_team15 fields changed- removed
Input schema / properties / company_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_id / typeAdded value: +"integer" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / handle / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / handle / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string" - removed
Input schema / properties / parent_team_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / parent_team_id / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_ids / typeAdded value: +"array"
- Changed
twprojects-update_timelog27 fields changed- removed
Input schema / properties / billable / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / billable / typeAdded value: +"boolean" - removed
Input schema / properties / clear_task / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / clear_task / typeAdded value: +"boolean" - removed
Input schema / properties / date / anyOfRemoved value: -[ - { - "format": "date", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / date / formatAdded value: +"date" - added
Input schema / properties / date / typeAdded value: +"string" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / hours / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / hours / typeAdded value: +"integer" - removed
Input schema / properties / is_utc / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / is_utc / typeAdded value: +"boolean" - removed
Input schema / properties / minutes / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / minutes / typeAdded value: +"integer" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / tag_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / tag_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / tag_ids / typeAdded value: +"array" - removed
Input schema / properties / task_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / task_id / typeAdded value: +"integer" - removed
Input schema / properties / time / anyOfRemoved value: -[ - { - "pattern": "^(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$", - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / time / patternAdded value: +"^(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d$" - added
Input schema / properties / time / typeAdded value: +"string" - removed
Input schema / properties / user_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_id / typeAdded value: +"integer"
- Changed
twprojects-update_timer10 fields changed- removed
Input schema / properties / billable / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / billable / typeAdded value: +"boolean" - removed
Input schema / properties / description / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / description / typeAdded value: +"string" - removed
Input schema / properties / project_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_id / typeAdded value: +"integer" - removed
Input schema / properties / running / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / running / typeAdded value: +"boolean" - removed
Input schema / properties / task_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / task_id / typeAdded value: +"integer"
- Changed
twprojects-update_user14 fields changed- removed
Input schema / properties / admin / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / admin / typeAdded value: +"boolean" - removed
Input schema / properties / company_id / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / company_id / typeAdded value: +"integer" - removed
Input schema / properties / email / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / email / typeAdded value: +"string" - removed
Input schema / properties / first_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / first_name / typeAdded value: +"string" - removed
Input schema / properties / last_name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / last_name / typeAdded value: +"string" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / typeAdded value: +"string" - removed
Input schema / properties / type / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / type / typeAdded value: +"string"
- Changed
twprojects-update_workflow2 fields changed- removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string"
- Changed
twprojects-update_workflow_stage2 fields changed- removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string"
- Changed
twprojects-users_workload19 fields changed- removed
Input schema / properties / page / anyOfRemoved value: -[ - { - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page / minimumAdded value: +1 - added
Input schema / properties / page / typeAdded value: +"integer" - removed
Input schema / properties / page_size / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / page_size / maximumAdded value: +500 - added
Input schema / properties / page_size / minimumAdded value: +1 - added
Input schema / properties / page_size / typeAdded value: +"integer" - removed
Input schema / properties / project_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / project_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / project_ids / typeAdded value: +"array" - removed
Input schema / properties / user_company_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_company_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_company_ids / typeAdded value: +"array" - removed
Input schema / properties / user_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_ids / typeAdded value: +"array" - removed
Input schema / properties / user_team_ids / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / user_team_ids / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / user_team_ids / typeAdded value: +"array"
- Changed
twspaces-create_category2 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string"
- Changed
twspaces-create_comment4 fields changed- removed
Input schema / properties / isPrivate / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isPrivate / typeAdded value: +"boolean" - removed
Input schema / properties / parentId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / parentId / typeAdded value: +"integer"
- Changed
twspaces-create_page16 fields changed- removed
Input schema / properties / changeMessage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / changeMessage / typeAdded value: +"string" - removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content / typeAdded value: +"string" - removed
Input schema / properties / isFullWidth / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isFullWidth / typeAdded value: +"boolean" - removed
Input schema / properties / isPublish / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isPublish / typeAdded value: +"boolean" - removed
Input schema / properties / isRequiredReading / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isRequiredReading / typeAdded value: +"boolean" - removed
Input schema / properties / parentId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / parentId / typeAdded value: +"integer" - removed
Input schema / properties / readerInlineCommentsEnabled / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / readerInlineCommentsEnabled / typeAdded value: +"boolean" - removed
Input schema / properties / slug / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / slug / typeAdded value: +"string"
- Changed
twspaces-create_space10 fields changed- removed
Input schema / properties / categoryId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / categoryId / typeAdded value: +"integer" - removed
Input schema / properties / icon / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / icon / typeAdded value: +"string" - removed
Input schema / properties / projectId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / projectId / typeAdded value: +"integer" - removed
Input schema / properties / purpose / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / purpose / typeAdded value: +"string" - removed
Input schema / properties / spaceColor / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / spaceColor / typeAdded value: +"string"
- Changed
twspaces-duplicate_page4 fields changed- removed
Input schema / properties / parentId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / parentId / typeAdded value: +"integer" - removed
Input schema / properties / slug / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / slug / typeAdded value: +"string"
- Changed
twspaces-list_categories6 fields changed- removed
Input schema / properties / pageOffset / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageOffset / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +500 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer"
- Changed
twspaces-list_comments6 fields changed- removed
Input schema / properties / pageOffset / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageOffset / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +500 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer"
- Changed
twspaces-list_pages6 fields changed- removed
Input schema / properties / pageOffset / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageOffset / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +500 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer"
- Changed
twspaces-list_spaces6 fields changed- removed
Input schema / properties / pageOffset / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageOffset / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +500 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer"
- Changed
twspaces-list_tags6 fields changed- removed
Input schema / properties / pageOffset / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageOffset / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +500 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer"
- Changed
twspaces-search11 fields changed- removed
Input schema / properties / includeDeleted / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / includeDeleted / typeAdded value: +"boolean" - removed
Input schema / properties / pageOffset / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageOffset / typeAdded value: +"integer" - removed
Input schema / properties / pageSize / anyOfRemoved value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / pageSize / maximumAdded value: +500 - added
Input schema / properties / pageSize / minimumAdded value: +1 - added
Input schema / properties / pageSize / typeAdded value: +"integer" - removed
Input schema / properties / spaceIds / anyOfRemoved value: -[ - { - "items": { - "type": "integer" - }, - "type": "array" - }, - { - "type": "null" - } -] - added
Input schema / properties / spaceIds / itemsAdded value: +{ + "type": "integer" +} - added
Input schema / properties / spaceIds / typeAdded value: +"array"
- Changed
twspaces-update_category4 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string"
- Changed
twspaces-update_comment6 fields changed- removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content / typeAdded value: +"string" - removed
Input schema / properties / isPrivate / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isPrivate / typeAdded value: +"boolean" - removed
Input schema / properties / state / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / state / typeAdded value: +"string"
- Changed
twspaces-update_page22 fields changed- removed
Input schema / properties / changeMessage / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / changeMessage / typeAdded value: +"string" - removed
Input schema / properties / content / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / content / typeAdded value: +"string" - removed
Input schema / properties / draftVersion / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / draftVersion / typeAdded value: +"integer" - removed
Input schema / properties / isFullWidth / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isFullWidth / typeAdded value: +"boolean" - removed
Input schema / properties / isMinorChange / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isMinorChange / typeAdded value: +"boolean" - removed
Input schema / properties / isPublish / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isPublish / typeAdded value: +"boolean" - removed
Input schema / properties / isRequiredReading / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / isRequiredReading / typeAdded value: +"boolean" - removed
Input schema / properties / parentId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / parentId / typeAdded value: +"integer" - removed
Input schema / properties / readerInlineCommentsEnabled / anyOfRemoved value: -[ - { - "type": "boolean" - }, - { - "type": "null" - } -] - added
Input schema / properties / readerInlineCommentsEnabled / typeAdded value: +"boolean" - removed
Input schema / properties / slug / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / slug / typeAdded value: +"string" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / typeAdded value: +"string"
- Changed
twspaces-update_space16 fields changed- removed
Input schema / properties / categoryId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / categoryId / typeAdded value: +"integer" - removed
Input schema / properties / code / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / code / typeAdded value: +"string" - removed
Input schema / properties / icon / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / icon / typeAdded value: +"string" - removed
Input schema / properties / projectId / anyOfRemoved value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -] - added
Input schema / properties / projectId / typeAdded value: +"integer" - removed
Input schema / properties / purpose / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / purpose / typeAdded value: +"string" - removed
Input schema / properties / spaceColor / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / spaceColor / typeAdded value: +"string" - removed
Input schema / properties / state / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / state / typeAdded value: +"string" - removed
Input schema / properties / title / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / title / typeAdded value: +"string"
- Changed
twspaces-update_tag4 fields changed- removed
Input schema / properties / color / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / color / typeAdded value: +"string" - removed
Input schema / properties / name / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "null" - } -] - added
Input schema / properties / name / typeAdded value: +"string"
2 tool updates
v1.39.0- Changed
twprojects-count_tasks4 fields changed- added
Input schema / properties / date_filterAdded value: +{ + "anyOf": [ + { + "enum": [ + "anytime", + "overdue", + "today", + "tomorrow", + "yesterday", + "thisweek", + "upcoming", + "started", + "within7", + "within14", + "within30", + "within365", + "nodate", + "noduedate", + "nostartdate", + "hasdate" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Where the task's dates fall relative to today, in your own timezone. This is the filter for \"late\", \"overdue\", \"due today\", \"started\" and \"upcoming\"; omit it for no date restriction. overdue: due before today and not completed โ this is \"late\", and it never returns completed tasks whatever show_completed says. today: due today, without adding the overdue ones. thisweek: the calendar week containing today, the days of it already past included. upcoming: due today or later. started: the start date has arrived and the due date has not passed โ start date on or before today, and either no due date at all or one falling today or later. within7, within14, within30, within365: due between today and that many days from today, both days included. nodate: no start date, no due date and no milestone. anytime: no date restriction, what the endpoint applies when this is omitted. Completed tasks stay hidden unless show_completed is true, and overdue never returns one even then; for completed work alone use only_completed, which combines with any value here except overdue. A task with no due date of its own is matched on its milestone's." +} - added
Input schema / properties / exclude_assignee_user_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Leave out tasks assigned to any of these users. A task is dropped when any one of the listed users is assigned to it, even when it also carries assignees you did not exclude. A user reached only through a team, company or job-role assignment on the task is not matched. Combines with assignee_user_ids and every other filter." +} - added
Input schema / properties / only_completedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, return only completed tasks. It combines with every other filter, date_filter included โ except date_filter=overdue, which never matches a completed task and so returns nothing. Tasks in completed tasklists still need show_completed." +} - added
Input schema / properties / start_afterAdded value: +{ + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Only include tasks whose own start date falls on or after this date; the day itself matches. A task with no start date never matches โ there is no milestone fallback. There is no upper bound on the start date, so for work that has already begun use date_filter=started instead.", + "examples": [ + "2023-01-01" + ] +}
- Changed
twprojects-list_tasks4 fields changed- added
Input schema / properties / date_filterAdded value: +{ + "anyOf": [ + { + "enum": [ + "anytime", + "overdue", + "today", + "tomorrow", + "yesterday", + "thisweek", + "upcoming", + "started", + "within7", + "within14", + "within30", + "within365", + "nodate", + "noduedate", + "nostartdate", + "hasdate" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Where the task's dates fall relative to today, in your own timezone. This is the filter for \"late\", \"overdue\", \"due today\", \"started\" and \"upcoming\"; omit it for no date restriction. overdue: due before today and not completed โ this is \"late\", and it never returns completed tasks whatever show_completed says. today: due today, without adding the overdue ones. thisweek: the calendar week containing today, the days of it already past included. upcoming: due today or later. started: the start date has arrived and the due date has not passed โ start date on or before today, and either no due date at all or one falling today or later. within7, within14, within30, within365: due between today and that many days from today, both days included. nodate: no start date, no due date and no milestone. anytime: no date restriction, what the endpoint applies when this is omitted. Completed tasks stay hidden unless show_completed is true, and overdue never returns one even then; for completed work alone use only_completed, which combines with any value here except overdue. A task with no due date of its own is matched on its milestone's." +} - added
Input schema / properties / exclude_assignee_user_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Leave out tasks assigned to any of these users. A task is dropped when any one of the listed users is assigned to it, even when it also carries assignees you did not exclude. A user reached only through a team, company or job-role assignment on the task is not matched. Combines with assignee_user_ids and every other filter." +} - added
Input schema / properties / only_completedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, return only completed tasks. It combines with every other filter, date_filter included โ except date_filter=overdue, which never matches a completed task and so returns nothing. Tasks in completed tasklists still need show_completed." +} - added
Input schema / properties / start_afterAdded value: +{ + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Only include tasks whose own start date falls on or after this date; the day itself matches. A task with no start date never matches โ there is no milestone fallback. There is no upper bound on the start date, so for work that has already begun use date_filter=started instead.", + "examples": [ + "2023-01-01" + ] +}
1 tool update
v1.38.1- Changed
twprojects-list_calendar_events4 fields changed- added
Input schema / properties / calendar_id / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / calendar_id / descriptionPrevious value: -"The ID of the calendar to list events from."New value: +"The ID of the calendar to list events from. Omit it for the calling user's own calendar: the connected Google or Outlook calendar when there is one, otherwise the calendar of type 'blocked_time'. Every event reports the calendar it came from." - removed
Input schema / properties / calendar_id / typeRemoved value: -"integer" - removed
Input schema / requiredRemoved value: -[ - "calendar_id" -]
13 tool updates
v1.38.0- Changed
twprojects-create_comment1 field changed- changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the new comment. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the new comment. Omit it unless the user named who to notify: the default notifies every follower of the related entity, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-create_link1 field changed- changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the new link. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the new link. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-create_message1 field changed- changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the new message. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the new message. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-create_message_reply1 field changed- changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the new reply. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who to notify of the new reply. Omit it unless the user named who to notify: the default notifies all project members, and a value here replaces that set rather than adding to it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-get_project3 fields changed- changed
Input schema / properties / fields / anyOfPrevious value: -[ - { - "items": { - "enum": [ - "id", - "description", - "name", - "startAt", - "endAt", - "category", - "company", - "projectOwner", - "tags", - "lastWorkedOn", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "completedAt", - "completedBy", - "status", - "isBillable", - "type" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "enum": [ + "id", + "description", + "name", + "startAt", + "endAt", + "category", + "company", + "projectOwner", + "tags", + "update", + "lastWorkedOn", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "completedAt", + "completedBy", + "status", + "isBillable", + "type" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Output schema / properties / included / properties / projectUpdatesAdded value: +{ + "type": "object" +} - added
Output schema / properties / project / properties / updateAdded value: +{ + "properties": { + "id": { + "type": "integer" + }, + "meta": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": [ + "null", + "object" + ] +}
- Changed
twprojects-list_activities2 fields changed- added
Input schema / properties / exclude_user_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Exclude activities created by these users. Pass the current user's ID to drop their own activity from the feed." +} - added
Input schema / properties / user_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Filter activities by the users who created them." +}
- Changed
twprojects-list_project_templates2 fields changed- added
Output schema / properties / included / properties / projectUpdatesAdded value: +{ + "type": "object" +} - added
Output schema / properties / projects / items / properties / updateAdded value: +{ + "properties": { + "id": { + "type": "integer" + }, + "meta": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": [ + "null", + "object" + ] +}
- Added
twprojects-list_project_updates - Changed
twprojects-list_projects3 fields changed- changed
Input schema / properties / fields / anyOfPrevious value: -[ - { - "items": { - "enum": [ - "id", - "description", - "name", - "startAt", - "endAt", - "category", - "company", - "projectOwner", - "tags", - "lastWorkedOn", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "completedAt", - "completedBy", - "status", - "isBillable", - "type" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "enum": [ + "id", + "description", + "name", + "startAt", + "endAt", + "category", + "company", + "projectOwner", + "tags", + "update", + "lastWorkedOn", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "completedAt", + "completedBy", + "status", + "isBillable", + "type" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Output schema / properties / included / properties / projectUpdatesAdded value: +{ + "type": "object" +} - added
Output schema / properties / projects / items / properties / updateAdded value: +{ + "properties": { + "id": { + "type": "integer" + }, + "meta": { + "type": "object" + }, + "type": { + "type": "string" + } + }, + "type": [ + "null", + "object" + ] +}
- Changed
twprojects-update_comment1 field changed- changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the comment change. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who 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 it, so a narrower one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-update_link1 field changed- changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the link update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who 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 silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-update_message1 field changed- changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the message update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who 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 one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-update_message_reply1 field changed- changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the reply update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."New value: +"Who 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 one silently drops everyone else who would have been told. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
21 tool updates
v1.37.0- Changed
twprojects-add_project_file1 field changed- changed
Input schema / properties / reference / descriptionPrevious value: -"The reference of an uploaded file, as returned by twprojects-create_upload_url or twprojects-create_file. It looks like \"tf_1a2b\" and can only be used once."New value: +"The reference of an uploaded file, as returned by twprojects-create_upload_url or twprojects-create_file. It is \"tf_\" followed by a UUID and the file extension, and can only be used once."
- Changed
twprojects-count_projects1 field changed- changed
Input schema / properties / updated_after / descriptionPrevious value: -"Filter projects updated after. 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."New value: +"Only include projects whose last activity is strictly after this moment; the boundary itself does not match. Any activity in the project counts, not just edits to the project record. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
- Changed
twprojects-count_tasks8 fields changed- changed
Input schema / properties / completed_after / descriptionPrevious value: -"Filter tasks completed after. 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."New value: +"Only include tasks completed at or after this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / completed_before / descriptionPrevious value: -"Filter tasks completed before. 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."New value: +"Only include tasks completed at or before this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / created_after / descriptionPrevious value: -"Filter tasks created after. 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."New value: +"Only include tasks created at or after this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / created_before / descriptionPrevious value: -"Filter tasks created before. 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."New value: +"Only include tasks created at or before this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / due_after / descriptionPrevious value: -"Filter tasks due after."New value: +"Only include tasks due after this date, excluding the day itself โ unless due_before is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's." - changed
Input schema / properties / due_before / descriptionPrevious value: -"Filter tasks due before."New value: +"Only include tasks due before this date, excluding the day itself โ unless due_after is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's." - changed
Input schema / properties / updated_after / descriptionPrevious value: -"Filter tasks updated after. 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."New value: +"Only include tasks updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / updated_before / descriptionPrevious value: -"Filter tasks updated before. 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."New value: +"Only include tasks updated strictly before this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
- Changed
twprojects-count_timelogs2 fields changed- changed
Input schema / properties / end_date / descriptionPrevious value: -"End of the timelog window. 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."New value: +"End of the timelog window; the boundary itself is included, and a plain date covers that whole day. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / start_date / descriptionPrevious value: -"Start of the timelog window. 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."New value: +"Start of the timelog window; the boundary itself is included. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
- Changed
twprojects-create_comment1 field changed- changed
Input schema / properties / attachment_refs / descriptionPrevious value: -"References of files to attach to the comment, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."New value: +"References of files to attach to the comment, as returned by twprojects-create_upload_url or twprojects-create_file. Each is \"tf_\" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed."
- Changed
twprojects-create_message1 field changed- changed
Input schema / properties / attachment_refs / descriptionPrevious value: -"References of files to attach to the message, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."New value: +"References of files to attach to the message, as returned by twprojects-create_upload_url or twprojects-create_file. Each is \"tf_\" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed."
- Changed
twprojects-create_milestone3 fields changed- changed
Input schema / properties / assignees / anyOfPrevious value: -[ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } -]New value: +[ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + } +] - changed
Input schema / properties / assignees / maxPropertiesPrevious value: -4New value: +3 - removed
Input schema / properties / assignees / properties / job_role_idsRemoved value: -{ - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" -}
- Changed
twprojects-create_task3 fields changed- changed
Input schema / properties / attachment_refs / descriptionPrevious value: -"References of files to attach to the task, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."New value: +"References of files to attach to the task, as returned by twprojects-create_upload_url or twprojects-create_file. Each is \"tf_\" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed." - added
Input schema / properties / stage_idAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "The ID of the workflow stage to place the new task in. Required together with workflow_id. Omit both to leave the task in the workflow's backlog. Use twprojects-list_workflow_stages to find one." +} - added
Input schema / properties / workflow_idAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "The ID of the workflow to place the new task in a stage of. Required together with stage_id, and must be a workflow attached to the task's own project: another one is ignored and the task lands in the backlog, with nothing in the response saying so. Use twprojects-list_workflows to find one." +}
- Changed
twprojects-list_activities2 fields changed- changed
Input schema / properties / end_date / descriptionPrevious value: -"End of the activity window. 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."New value: +"End of the activity 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 covers that whole day in UTC." - changed
Input schema / properties / start_date / descriptionPrevious value: -"Start of the activity window. 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."New value: +"Start of the activity 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."
- Changed
twprojects-list_allocations2 fields changed- changed
Input schema / properties / deleted_after / descriptionPrevious value: -"Only return allocations deleted after this moment. Pair it with show_deleted, which is what switches the results to deleted allocations. 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."New value: +"Only return allocations deleted at or after this moment; the boundary itself matches, unlike updated_after. Pair it with show_deleted, which is what switches the results to deleted allocations. 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." - changed
Input schema / properties / updated_after / descriptionPrevious value: -"Only return allocations updated after this moment. 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."New value: +"Only return allocations 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 that whole day in UTC."
- Changed
twprojects-list_calendar_events2 fields changed- changed
Input schema / properties / ended_before_date / descriptionPrevious value: -"Filter events that end before this date (format: YYYY-MM-DD)."New value: +"Only include events ending before this day starts, so the day named here is itself excluded โ pass the day after the last one you want (format: YYYY-MM-DD). Note the asymmetry with started_after_date." - changed
Input schema / properties / started_after_date / descriptionPrevious value: -"Filter events that start after this date (format: YYYY-MM-DD)."New value: +"Only include events starting on or after this day, which is itself included (format: YYYY-MM-DD)."
- Changed
twprojects-list_comments1 field changed- changed
Input schema / properties / updated_after / descriptionPrevious value: -"Filter comments updated after. Defaults to the last 3 months. 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."New value: +"Only include comments edited strictly after this moment; the boundary itself does not match. Defaults to the last 3 months. 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."
- Changed
twprojects-list_projects1 field changed- changed
Input schema / properties / updated_after / descriptionPrevious value: -"Filter projects updated after. 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."New value: +"Only include projects whose last activity is strictly after this moment; the boundary itself does not match. Any activity in the project counts, not just edits to the project record. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
- Changed
twprojects-list_tasks8 fields changed- changed
Input schema / properties / completed_after / descriptionPrevious value: -"Filter tasks completed after. 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."New value: +"Only include tasks completed at or after this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / completed_before / descriptionPrevious value: -"Filter tasks completed before. 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."New value: +"Only include tasks completed at or before this moment; the boundary itself matches. Setting it narrows the result to completed tasks. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / created_after / descriptionPrevious value: -"Filter tasks created after. 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."New value: +"Only include tasks created at or after this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / created_before / descriptionPrevious value: -"Filter tasks created before. 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."New value: +"Only include tasks created at or before this moment; the boundary itself matches. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / due_after / descriptionPrevious value: -"Filter tasks due after."New value: +"Only include tasks due after this date, excluding the day itself โ unless due_before is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's." - changed
Input schema / properties / due_before / descriptionPrevious value: -"Filter tasks due before."New value: +"Only include tasks due before this date, excluding the day itself โ unless due_after is set too, which makes both bounds inclusive. A task with no due date is matched on its milestone's." - changed
Input schema / properties / updated_after / descriptionPrevious value: -"Filter tasks updated after. 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."New value: +"Only include tasks updated strictly after this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / updated_before / descriptionPrevious value: -"Filter tasks updated before. 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."New value: +"Only include tasks updated strictly before this moment; the boundary itself does not match. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
- Changed
twprojects-list_timelogs2 fields changed- changed
Input schema / properties / end_date / descriptionPrevious value: -"End of the timelog window. 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."New value: +"End of the timelog window; the boundary itself is included, and a plain date covers that whole day. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC." - changed
Input schema / properties / start_date / descriptionPrevious value: -"Start of the timelog window. 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."New value: +"Start of the timelog window; the boundary itself is included. Accepts an RFC 3339 timestamp (2026-08-03T14:30:00Z) or a plain YYYY-MM-DD date (2026-08-03), which covers that whole day in UTC."
- Changed
twprojects-move_task_to_workflow_stage1 field changed- changed
Input schema / properties / task_ids / descriptionPrevious value: -"The IDs of the tasks to move. At least one is needed; all of them move in a single call."New value: +"The 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."
- Changed
twprojects-search4 fields changed- removed
Input schema / properties / includeRemoved value: -{ - "anyOf": [ - { - "items": { - "enum": [ - "comments", - "companies", - "links", - "messages", - "milestones", - "notebooks", - "projects", - "tasklists", - "tasks", - "teams", - "timelogs", - "users" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } - ], - "description": "Entity types to return as full records in the response sideloads. Defaults to all supported types; narrow it to the types of interest to keep the response small." -} - added
Input schema / properties / sideloadAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "comments", + "companies", + "links", + "messages", + "milestones", + "notebooks", + "projects", + "tasklists", + "tasks", + "teams", + "timelogs", + "users" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Which 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 whose type is left out comes back as a bare {id, type} pair with no name." +} - added
Input schema / properties / typesAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "projects", + "tasks", + "tasklists", + "milestones", + "messages", + "notebooks", + "links", + "comments", + "taskcomments", + "milestonecomments", + "filecomments", + "linkcomments", + "notebookcomments", + "timelogs", + "users", + "teams", + "companies" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Entity types to search. Only records of these types are found. Omit it to search every type." +} - changed
Input schema / properties / updated_after / descriptionPrevious value: -"Only include items updated after this date. 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."New value: +"Only 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 that whole day in UTC."
- Changed
twprojects-summarize_timelogs8 fields changed- changed
Input schema / properties / group_by / descriptionPrevious value: -"Dimension to group totals by. Defaults to user."New value: +"Dimension 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." - changed
Input schema / properties / group_by / enumPrevious value: -[ - "user", - "project" -]New value: +[ + "user", + "project", + "task", + "day", + "week", + "month" +] - changed
Input schema / properties / order_by / descriptionPrevious value: -"The field to sort the summary rows by. Omit to keep the ordering the API applies by default."New value: +"The 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." - changed
Input schema / properties / order_mode / descriptionPrevious value: -"The direction to sort the results in."New value: +"The direction to sort the results in. Rejected for day, week and month: period rows are chronological." - added
Output schema / properties / groups / descriptionAdded value: +"Entity rows; empty for a day, week or month grouping." - added
Output schema / properties / periodsAdded value: +{ + "description": "Period rows, chronological; empty for an entity grouping.", + "items": { + "additionalProperties": false, + "properties": { + "billableHours": { + "type": "number" + }, + "billableMinutes": { + "type": "integer" + }, + "billedHours": { + "type": "number" + }, + "billedMinutes": { + "type": "integer" + }, + "endDate": { + "type": "string" + }, + "loggedHours": { + "type": "number" + }, + "loggedMinutes": { + "type": "integer" + }, + "nonBillableHours": { + "type": "number" + }, + "nonBillableMinutes": { + "type": "integer" + }, + "startDate": { + "type": "string" + }, + "unbilledBillableHours": { + "type": "number" + }, + "unbilledBillableMinutes": { + "type": "integer" + } + }, + "required": [ + "startDate", + "endDate", + "loggedMinutes", + "loggedHours", + "billableMinutes", + "billableHours", + "nonBillableMinutes", + "nonBillableHours", + "billedMinutes", + "billedHours", + "unbilledBillableMinutes", + "unbilledBillableHours" + ], + "type": "object" + }, + "type": [ + "null", + "array" + ] +} - added
Output schema / properties / totals / properties / groupCount / descriptionAdded value: +"Number of rows returned." - changed
Output schema / requiredPrevious value: -[ - "scope", - "totals", - "groups" -]New value: +[ + "scope", + "totals", + "groups", + "periods" +]
- Changed
twprojects-update_milestone1 field changed- changed
Input schema / properties / assignees / anyOfPrevious value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + } + ], + "maxProperties": 3, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
twprojects-update_task1 field changed- changed
Input schema / properties / attachment_refs / descriptionPrevious value: -"References of files to attach to the task, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed."New value: +"References of files to attach to the task, as returned by twprojects-create_upload_url or twprojects-create_file. Each is \"tf_\" followed by a UUID and the file extension, and can only be used once, so reserve an upload for each place a file should go. Files are added to whatever is already attached; nothing is removed."
- Changed
twprojects-users_workload2 fields changed- changed
Input schema / properties / end_date / descriptionPrevious value: -"End of the workload period."New value: +"End of the workload period; the boundary day itself is included." - changed
Input schema / properties / start_date / descriptionPrevious value: -"Start of the workload period."New value: +"Start of the workload period; the boundary day itself is included."
11 tool updates
v1.35.0- Added
twprojects-add_project_file - Changed
twprojects-count_milestones3 fields changed- added
Input schema / properties / due_afterAdded value: +{ + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Only include milestones with a deadline on or after this date." +} - added
Input schema / properties / due_beforeAdded value: +{ + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Only include milestones with a deadline on or before this date." +} - added
Input schema / properties / show_completedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": true, + "description": "If false, only return milestones that are not completed yet. Included by default, unlike the task and tasklist lists." +}
- Changed
twprojects-count_timelogs2 fields changed- added
Input schema / properties / billable_typeAdded value: +{ + "anyOf": [ + { + "enum": [ + "all", + "billable", + "nonbillable" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Restrict the results to billable or non-billable timelogs. Omit, or pass all, to include both. For billable hours rather than the entries themselves, twprojects-summarize_timelogs reports them without paging." +} - added
Input schema / properties / invoiced_typeAdded value: +{ + "anyOf": [ + { + "enum": [ + "all", + "invoiced", + "noninvoiced" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Restrict the results to timelogs that have or have not been added to an invoice. Omit, or pass all, to include both. Invoiced is not the same as billed: noninvoiced answers \"what is still to be invoiced\" only for billable time, so pass billable_type alongside it." +}
- Changed
twprojects-create_task1 field changed- added
Input schema / properties / attachment_file_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "IDs of files already in a project's files area to attach to the task, as returned by twprojects-add_project_file. Unlike a reference these can be used repeatedly, so this is how one file reaches several tasks. Files are added to whatever is already attached; nothing is removed." +}
- Added
twprojects-create_upload_url - Changed
twprojects-list_milestones3 fields changed- added
Input schema / properties / due_afterAdded value: +{ + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Only include milestones with a deadline on or after this date." +} - added
Input schema / properties / due_beforeAdded value: +{ + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Only include milestones with a deadline on or before this date." +} - added
Input schema / properties / show_completedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": true, + "description": "If false, only return milestones that are not completed yet. Included by default, unlike the task and tasklist lists." +}
- Changed
twprojects-list_timelogs2 fields changed- added
Input schema / properties / billable_typeAdded value: +{ + "anyOf": [ + { + "enum": [ + "all", + "billable", + "nonbillable" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Restrict the results to billable or non-billable timelogs. Omit, or pass all, to include both. For billable hours rather than the entries themselves, twprojects-summarize_timelogs reports them without paging." +} - added
Input schema / properties / invoiced_typeAdded value: +{ + "anyOf": [ + { + "enum": [ + "all", + "invoiced", + "noninvoiced" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Restrict the results to timelogs that have or have not been added to an invoice. Omit, or pass all, to include both. Invoiced is not the same as billed: noninvoiced answers \"what is still to be invoiced\" only for billable time, so pass billable_type alongside it." +}
- Changed
twprojects-update_message1 field changed- removed
Input schema / properties / project_idRemoved value: -{ - "anyOf": [ - { - "type": "integer" - }, - { - "type": "null" - } - ], - "description": "The ID of the project to create the message in." -}
- Changed
twprojects-update_task1 field changed- added
Input schema / properties / attachment_file_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "IDs of files already in a project's files area to attach to the task, as returned by twprojects-add_project_file. Unlike a reference these can be used repeatedly, so this is how one file reaches several tasks. Files are added to whatever is already attached; nothing is removed." +}
- Changed
twprojects-update_team1 field changed- changed
Input schema / properties / parent_team_id / descriptionPrevious value: -"The ID of the parent team. This is used to create a hierarchy of teams."New value: +"The ID of the parent team, which places this team in a hierarchy. Pass 0 to move the team back to the top level."
- Changed
twprojects-update_timelog3 fields changed- added
Input schema / properties / clear_taskAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Set to true to detach the timelog from its task, leaving it logged against the project. Cannot be combined with task_id." +} - changed
Input schema / properties / project_id / descriptionPrevious value: -"Project the timelog is logged against. Provide exactly one of project_id or task_id."New value: +"Move the timelog to this project. The API takes the project from the task whenever the timelog is logged against one, so pass clear_task alongside it to move a timelog off its task." - changed
Input schema / properties / task_id / descriptionPrevious value: -"Task the timelog is logged against. Provide exactly one of project_id or task_id."New value: +"Move the timelog to this task, and with it to the task's own project."
13 tool updates
v1.33.1- Added
twprojects-create_allocation - Added
twprojects-get_allocation - Changed
twprojects-get_task2 fields changed- changed
Input schema / properties / fields / anyOfPrevious value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "descriptionContentType", - "priority", - "progress", - "startDate", - "dueDate", - "estimateMinutes", - "tasklist", - "parentTask", - "assignees", - "tags", - "predecessors", - "workflowStages", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deletedBy", - "deletedAt", - "completedBy", - "completedAt", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "enum": [ + "id", + "name", + "description", + "descriptionContentType", + "priority", + "progress", + "startDate", + "dueDate", + "estimateMinutes", + "tasklist", + "parentTask", + "assignees", + "tags", + "predecessors", + "subTaskIds", + "workflowStages", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt", + "deletedBy", + "deletedAt", + "completedBy", + "completedAt", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Output schema / properties / task / properties / subTaskIdsAdded value: +{ + "items": { + "type": "integer" + }, + "type": [ + "null", + "array" + ] +}
- Added
twprojects-link_task_to_allocation - Added
twprojects-list_allocations - Changed
twprojects-list_project_templates1 field changed- added
Output schema / properties / suggestionsAdded value: +{ + "description": "Present 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. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.", + "items": { + "properties": { + "id": { + "description": "The ID of the candidate.", + "type": "integer" + }, + "name": { + "description": "The name of the candidate.", + "type": "string" + }, + "type": { + "description": "The entity type of the candidate.", + "enum": [ + "project", + "task", + "tasklist", + "milestone", + "notebook", + "message", + "link", + "company", + "team", + "user" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
- Changed
twprojects-list_projects1 field changed- added
Output schema / properties / suggestionsAdded value: +{ + "description": "Present 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. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.", + "items": { + "properties": { + "id": { + "description": "The ID of the candidate.", + "type": "integer" + }, + "name": { + "description": "The name of the candidate.", + "type": "string" + }, + "type": { + "description": "The entity type of the candidate.", + "enum": [ + "project", + "task", + "tasklist", + "milestone", + "notebook", + "message", + "link", + "company", + "team", + "user" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
- Changed
twprojects-list_tasklists1 field changed- added
Output schema / properties / suggestionsAdded value: +{ + "description": "Present 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. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.", + "items": { + "properties": { + "id": { + "description": "The ID of the candidate.", + "type": "integer" + }, + "name": { + "description": "The name of the candidate.", + "type": "string" + }, + "type": { + "description": "The entity type of the candidate.", + "enum": [ + "project", + "task", + "tasklist", + "milestone", + "notebook", + "message", + "link", + "company", + "team", + "user" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +}
- Changed
twprojects-list_tasks3 fields changed- changed
Input schema / properties / fields / anyOfPrevious value: -[ - { - "items": { - "enum": [ - "id", - "name", - "description", - "descriptionContentType", - "priority", - "progress", - "startDate", - "dueDate", - "estimateMinutes", - "tasklist", - "parentTask", - "assignees", - "tags", - "predecessors", - "workflowStages", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deletedBy", - "deletedAt", - "completedBy", - "completedAt", - "status" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "enum": [ + "id", + "name", + "description", + "descriptionContentType", + "priority", + "progress", + "startDate", + "dueDate", + "estimateMinutes", + "tasklist", + "parentTask", + "assignees", + "tags", + "predecessors", + "subTaskIds", + "workflowStages", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt", + "deletedBy", + "deletedAt", + "completedBy", + "completedAt", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Output schema / properties / suggestionsAdded value: +{ + "description": "Present 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. A candidate may be of another type than the one listed, or of the same type but excluded by this tool's filters โ completed items are searched regardless of show_completed, so a candidate says nothing about completion. Read it with the entity type's own get tool.", + "items": { + "properties": { + "id": { + "description": "The ID of the candidate.", + "type": "integer" + }, + "name": { + "description": "The name of the candidate.", + "type": "string" + }, + "type": { + "description": "The entity type of the candidate.", + "enum": [ + "project", + "task", + "tasklist", + "milestone", + "notebook", + "message", + "link", + "company", + "team", + "user" + ], + "type": "string" + } + }, + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / tasks / items / properties / subTaskIdsAdded value: +{ + "items": { + "type": "integer" + }, + "type": [ + "null", + "array" + ] +}
- Added
twprojects-restore_allocation - Changed
twprojects-search1 field changed- changed
Input schema / properties / include_completed_items / descriptionPrevious value: -"Whether to include completed items in the search results."New value: +"Whether to include completed items in the search results. Excluded by default."
- Added
twprojects-unlink_task_from_allocation - Added
twprojects-update_allocation
50 tool updates
v1.31.0- Added
twdesk-link_task_to_ticket - Added
twdesk-unlink_task_from_ticket - Added
twprojects-count_milestones - Added
twprojects-count_projects - Added
twprojects-count_tasks - Added
twprojects-count_timelogs - Changed
twprojects-create_comment1 field changed- added
Input schema / properties / attachment_refsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "References of files to attach to the comment, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed." +}
- Added
twprojects-create_file - Changed
twprojects-create_message1 field changed- added
Input schema / properties / attachment_refsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "References of files to attach to the message, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed." +}
- Changed
twprojects-create_tag1 field changed- added
Input schema / properties / colorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The color of the tag. It must be a valid hex color code." +}
- Changed
twprojects-create_task1 field changed- added
Input schema / properties / attachment_refsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "References of files to attach to the task, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed." +}
- Changed
twprojects-get_tag2 fields changed- added
Output schema / properties / tag / properties / colorAdded value: +{ + "type": "string" +} - changed
Output schema / properties / tag / requiredPrevious value: -[ - "id", - "name", - "project" -]New value: +[ + "id", + "name", + "color", + "project" +]
- Changed
twprojects-get_team5 fields changed- removed
Output schema / properties / team / properties / deletedDate / additionalPropertiesRemoved value: -false - added
Output schema / properties / team / properties / deletedDate / descriptionAdded value: +"Null or RFC3339 date-time string. Null when the value is unset." - added
Output schema / properties / team / properties / deletedDate / formatAdded value: +"date-time" - removed
Output schema / properties / team / properties / deletedDate / propertiesRemoved value: -{} - changed
Output schema / properties / team / properties / deletedDate / typePrevious value: -[ - "null", - "object" -]New value: +[ + "null", + "string" +]
- Changed
twprojects-list_activities6 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching activities, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / item_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Filter activities by the IDs of the items they refer to, such as task, milestone or message IDs. Item IDs are only unique within an item type, so combine this with log_item_types to avoid matching activities of other types that happen to share an ID." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "date", + "projectId", + "userId", + "activityTypes", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the activities by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_calendar_events2 fields changed- added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "startTime", + "updated", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the calendar events by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +}
- Changed
twprojects-list_calendars5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching calendars, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "name", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the calendars by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_comments5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching comments, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "all", + "date", + "project", + "user", + "type", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the comments by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_companies6 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching companies, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "name", + "accounts", + "clients", + "collaborators", + "contacts", + "projects", + "tasks", + "country", + "health", + "website", + "email", + "phone", + "fax", + "industry", + "dateadded", + "ownercompany", + "ownername", + "taskscompletion", + "customfield", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the companies by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_by_custom_field_idAdded value: +{ + "anyOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "The custom field to sort the companies by. Required when order_by is \"customfield\", and ignored otherwise." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_custom_field_values3 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching custom field values, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_custom_fields5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching custom fields, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - changed
Input schema / properties / order_by / anyOfPrevious value: -[ - { - "enum": [ - "name", - "project", - "datecreated", - "dateupdated" - ], - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "name", + "project", + "datecreated", + "dateupdated", + "id" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / order_by / descriptionPrevious value: -"The field to sort the results by."New value: +"The field to sort the custom fields by. Omit to keep the ordering the API applies by default." - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_custom_item_fields4 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching custom item fields, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - changed
Input schema / properties / order_mode / descriptionPrevious value: -"The direction to order the results by (asc, desc)."New value: +"The direction to sort the results in." - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_custom_item_records7 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching custom item records, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - changed
Input schema / properties / order_by / anyOfPrevious value: -[ - { - "enum": [ - "name", - "displayorder", - "customitemfield" - ], - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "displayorder", + "name", + "customitemfield", + "id" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / order_by / descriptionPrevious value: -"Field to sort by."New value: +"The field to sort the custom item records by. Omit to keep the ordering the API applies by default." - added
Input schema / properties / order_by_field_idAdded value: +{ + "anyOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "The custom field to sort the records by. Required when order_by is \"customitemfield\", and ignored otherwise." +} - changed
Input schema / properties / order_mode / descriptionPrevious value: -"The direction to order the results by (asc, desc)."New value: +"The direction to sort the results in." - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_custom_items6 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching custom items, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - changed
Input schema / properties / order_by / anyOfPrevious value: -[ - { - "enum": [ - "name" - ], - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "name", + "id" + ], + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / order_by / descriptionPrevious value: -"Field to sort by."New value: +"The field to sort the custom items by. Omit to keep the ordering the API applies by default." - changed
Input schema / properties / order_mode / descriptionPrevious value: -"The direction to order the results by (asc, desc)."New value: +"The direction to sort the results in." - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_jobroles4 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching job roles, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_message_replies5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching message replies, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "createdat", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the message replies by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_messages5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching messages, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "createdat", + "updatedat", + "category", + "project", + "createdby", + "unread", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the messages by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_milestones5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching milestones, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "date", + "dateonly", + "name", + "project", + "user", + "dateCreated", + "dateUpdated", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the milestones by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_notebooks5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching notebooks, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "name", + "project", + "dateCreated", + "dateUpdated", + "category", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the notebooks by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_project_budgets5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching project budgets, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - changed
Output schema / properties / meta / properties / page / properties / count / typePrevious value: -"integer"New value: +[ + "null", + "integer" +] - removed
Output schema / properties / meta / properties / page / properties / pageOffsetRemoved value: -{ - "type": "integer" -} - removed
Output schema / properties / meta / properties / page / properties / pageSizeRemoved value: -{ - "type": "integer" -}
- Changed
twprojects-list_project_categories3 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching project categories, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_project_templates2 fields changed- added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_projects20 fields changed- added
Input schema / properties / company_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Filter projects by the company that owns them." +} - added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching projects, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / hide_observedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, leave out the projects the calling user only observes, keeping the ones they actually work on." +} - added
Input schema / properties / include_archivedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, return archived projects alongside the active ones; excluded by default." +} - added
Input schema / properties / include_subcategoriesAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, project_category_ids also matches the categories nested under the ones given." +} - added
Input schema / properties / include_tentativeAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, return tentative projects alongside the normal ones; excluded by default." +} - added
Input schema / properties / only_admin_accessAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, only return the projects the calling user administers." +} - added
Input schema / properties / only_archivedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, only return archived projects." +} - added
Input schema / properties / only_starredAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, only return the projects the calling user has starred." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "budgetused", + "categoryname", + "companyname", + "creatorname", + "customfield", + "datecreated", + "duedate", + "health", + "lastactivity", + "lastworkedon", + "mobilespecial", + "name", + "namecaseinsensitive", + "ownercompany", + "ownername", + "starred", + "starredcompanyname", + "starredfirst", + "startdate", + "status", + "taskcompletion", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the projects by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_by_custom_field_idAdded value: +{ + "anyOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "The custom field to sort the projects by. Required when order_by is \"customfield\", and ignored otherwise." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Input schema / properties / project_healthsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "good", + "ok", + "bad", + "not_set" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Filter projects by the health rating set on them, matching any of the values given. \"not_set\" matches the projects nobody has rated." +} - added
Input schema / properties / project_owner_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Filter projects by the user who owns them." +} - added
Input schema / properties / project_statusesAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "active", + "current", + "late", + "upcoming", + "completed", + "deleted" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Filter projects by progress state, matching any of the values given. \"late\" is past its end date and not yet completed, \"upcoming\" has not started yet, \"current\" is running now, and \"active\" is every project that is neither completed nor archived. Omit to keep the endpoint's own default set." +} - added
Input schema / properties / team_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Filter projects by team, matching the projects any member of those teams belongs to." +} - added
Input schema / properties / updated_afterAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter projects updated after. 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.", + "examples": [ + "2026-08-03", + "2026-08-03T14:30:00Z" + ] +} - added
Input schema / properties / user_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Filter projects by the users holding an explicit membership of them. For \"my projects\", pass the ID returned by twprojects-get_user_me." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_skills4 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching skills, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_tags7 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching tags, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - changed
Input schema / properties / fields / anyOfPrevious value: -[ - { - "items": { - "enum": [ - "id", - "name", - "project" - ], - "type": "string" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "enum": [ + "id", + "name", + "color", + "project" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "name", + "count", + "project", + "color", + "datelastupdated", + "projectdatelastused", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the tags by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +} - added
Output schema / properties / tags / items / properties / colorAdded value: +{ + "type": "string" +}
- Changed
twprojects-list_tasklist_budgets5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching tasklist budgets, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "dateCreated", + "displayOrder", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the task list budgets by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_tasklists5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching tasklists, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "displayorder", + "name", + "status", + "createdat", + "updatedat", + "project", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the task lists by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_tasks6 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching tasks, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "id", + "startdate", + "createdat", + "priority", + "project", + "flattenedtasklist", + "company", + "manual", + "active", + "completedat", + "duestartdate", + "alldates", + "tasklistname", + "tasklistdisplayorder", + "tasklistid", + "duedate", + "updatedat", + "taskname", + "createdby", + "completedby", + "assignedto", + "taskstatus", + "taskduedate", + "customfield", + "estimatedtime", + "boardcolumn", + "taskgroupid", + "taskgroupname", + "taskgroup", + "displayorder", + "projectmanual", + "stagedisplayorder", + "stage", + "parenttask" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the tasks by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_by_custom_field_idAdded value: +{ + "anyOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "The custom field to sort the tasks by. Required when order_by is \"customfield\", and ignored otherwise." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_teams6 fields changed- added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "name", + "picker", + "dateAdded" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the teams by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / teams / items / properties / deletedDate / descriptionAdded value: +"Null or RFC3339 date-time string. Null when the value is unset." - added
Output schema / properties / teams / items / properties / deletedDate / formatAdded value: +"date-time" - removed
Output schema / properties / teams / items / properties / deletedDate / propertiesRemoved value: -{} - changed
Output schema / properties / teams / items / properties / deletedDate / typePrevious value: -[ - "null", - "object" -]New value: +[ + "null", + "string" +]
- Changed
twprojects-list_timelogs5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching timelogs, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "company", + "date", + "dateupdated", + "project", + "task", + "tasklist", + "user", + "description", + "billed", + "billable", + "timespent", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the timelogs by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_timers3 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching timers, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_users5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching users, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "name", + "namecaseinsensitive", + "company", + "id" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the users by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_workflow_stages5 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching workflow stages, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "id", + "name", + "displayorder" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the workflow stages by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-list_workflows3 fields changed- added
Input schema / properties / count_onlyAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, return only {\"count\": N}: the exact number of matching workflows, no rows โ use for \"how many\". Ignores page, page_size, verbose, fields." +} - added
Output schema / properties / countAdded value: +{ + "description": "Exact number of matches across every page. Returned instead of the rows when count_only.", + "type": "integer" +} - added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +}
- Changed
twprojects-move_task_to_workflow_stage4 fields changed- changed
Input schema / properties / stage_id / descriptionPrevious value: -"The ID of the workflow stage to move the task to."New value: +"The ID of the workflow stage to move the tasks to." - removed
Input schema / properties / task_idRemoved value: -{ - "description": "The ID of the task to move.", - "type": "integer" -} - added
Input schema / properties / task_idsAdded value: +{ + "description": "The IDs of the tasks to move. At least one is needed; all of them move in a single call.", + "items": { + "type": "integer" + }, + "type": "array" +} - changed
Input schema / requiredPrevious value: -[ - "workflow_id", - "stage_id", - "task_id" -]New value: +[ + "workflow_id", + "stage_id" +]
- Added
twprojects-move_tasks - Changed
twprojects-search2 fields changed- added
Input schema / properties / include_highlightsAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "Whether to return why each result matched, as fragments under its meta.highlights. Unavailable on an extended search." +} - added
Output schema / properties / search / items / properties / meta / properties / highlightsAdded value: +{ + "description": "Fragments that matched, keyed by field, with the matches wrapped in <em> tags.", + "type": "object" +}
- Changed
twprojects-summarize_timelogs2 fields changed- added
Input schema / properties / order_byAdded value: +{ + "anyOf": [ + { + "enum": [ + "name", + "loggedtime", + "billabletime", + "nonbillabletime", + "billedtime", + "budget" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The field to sort the summary rows by. Omit to keep the ordering the API applies by default." +} - added
Input schema / properties / order_modeAdded value: +{ + "anyOf": [ + { + "enum": [ + "asc", + "desc" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The direction to sort the results in." +}
- Changed
twprojects-update_tag1 field changed- added
Input schema / properties / colorAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The color of the tag. It must be a valid hex color code." +}
- Changed
twprojects-update_task4 fields changed- added
Input schema / properties / attachment_refsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "References of files to attach to the task, as returned by twprojects-create_file. Each looks like \"tf_1a2b\" and can only be used once, so upload a file for each place it should go. Files are added to whatever is already attached; nothing is removed." +} - added
Input schema / properties / clear_parent_taskAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, detaches the task from its parent, promoting it to a top-level task. Cannot be combined with parent_task_id." +} - changed
Input schema / properties / parent_task_id / descriptionPrevious value: -"The ID of the parent task if creating a subtask."New value: +"The 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. To detach the task from its parent, use clear_parent_task instead." - changed
Input schema / properties / tasklist_id / descriptionPrevious value: -"The ID of the tasklist."New value: +"The 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."
- Changed
twprojects-users_workload2 fields changed- added
Output schema / properties / meta / properties / page / properties / countAdded value: +{ + "type": [ + "null", + "integer" + ] +} - changed
Output schema / properties / meta / properties / page / requiredPrevious value: -[ - "hasMore" -]New value: +[ + "count", + "hasMore" +]
66 tool updates
v1.27.2- Changed
twchat-list_messages6 fields changed- changed
Input schema / properties / created_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / created_after / descriptionPrevious value: -"Return messages created after this time."New value: +"Return messages created after this time. 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." - added
Input schema / properties / created_after / examplesAdded value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +] - changed
Input schema / properties / created_before / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / created_before / descriptionPrevious value: -"Return messages created before this time."New value: +"Return messages created before this time. 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." - added
Input schema / properties / created_before / examplesAdded value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +]
- Changed
twdesk-create_helpdoc_article1 field changed- changed
Input schema / properties / siteID / descriptionPrevious value: -"The ID of the help doc site to create the article in."New value: +"The ID of the help doc site to create the article in. Use twdesk-list_helpdoc_sites to discover."
- Added
twdesk-get_helpdoc_site - Changed
twdesk-list_companies2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
- Changed
twdesk-list_customers2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
- Added
twdesk-list_helpdoc_sites - Changed
twdesk-list_inboxes2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
- Changed
twdesk-list_priorities2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
- Changed
twdesk-list_statuses2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
- Changed
twdesk-list_tags2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
- Changed
twdesk-list_ticket_types2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
- Changed
twdesk-list_users2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 100, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-100). The API silently reduces anything above 100, so a larger value returns fewer results rather than more."
- Changed
twdesk-search_helpdoc_articles1 field changed- changed
Input schema / properties / siteID / descriptionPrevious value: -"Filter by help doc site ID."New value: +"Filter by help doc site ID. Use twdesk-list_helpdoc_sites to discover."
- Changed
twdesk-search_tickets5 fields changed- added
Input schema / properties / createdAfterAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter by ticket creation date: only tickets created on or after this day. This search filters by whole days, so a time of day is ignored. 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.", + "examples": [ + "2026-08-03", + "2026-08-03T14:30:00Z" + ] +} - added
Input schema / properties / createdBeforeAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter by ticket creation date: only tickets created on or before this day. This search filters by whole days, so a time of day is ignored. 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.", + "examples": [ + "2026-08-03", + "2026-08-03T14:30:00Z" + ] +} - changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "maximum": 500, - "minimum": 1, - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 200, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination (1-500)."New value: +"Number of results per page for pagination (1-200). The API silently reduces anything above 200, so a larger value returns fewer results rather than more." - changed
Input schema / requiredPrevious value: -[ - "page", - "pageSize", - "orderBy", - "orderDirection", - "fields", - "search", - "inboxIDs", - "customerIDs", - "companyIDs", - "tagIDs", - "statusIDs", - "priorityIDs", - "userIDs" -]New value: +[ + "page", + "pageSize", + "orderBy", + "orderDirection", + "fields", + "search", + "inboxIDs", + "customerIDs", + "companyIDs", + "tagIDs", + "statusIDs", + "priorityIDs", + "userIDs", + "createdAfter", + "createdBefore" +]
- Changed
twprojects-create_comment2 fields changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "Notify all followers of the entity this comment is related to.", - "enum": [ - true - ], - "type": "boolean" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the new comment."New value: +"Who to notify of the new comment. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-create_link2 fields changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the new link."New value: +"Who to notify of the new link. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-create_message2 fields changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the new message."New value: +"Who to notify of the new message. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-create_message_reply2 fields changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the new reply."New value: +"Who to notify of the new reply. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-get_comment11 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "body", + "htmlBody", + "contentType", + "object", + "project", + "postedBy", + "postedDateTime", + "lastEditedBy", + "dateLastEdited", + "deleted", + "deletedBy", + "dateDeleted" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each comment, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / comments / additionalPropertiesRemoved value: -false - removed
Output schema / properties / comments / properties / object / additionalPropertiesRemoved value: -false - removed
Output schema / properties / comments / properties / object / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / comments / properties / object / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / comments / properties / project / additionalPropertiesRemoved value: -false - removed
Output schema / properties / comments / properties / project / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / comments / properties / project / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / comments / requiredRemoved value: -[ - "id", - "body", - "htmlBody", - "contentType", - "object", - "project", - "postedBy", - "postedDateTime", - "lastEditedBy", - "dateLastEdited", - "deleted", - "deletedBy", - "dateDeleted" -] - removed
Output schema / requiredRemoved value: -[ - "comments" -]
- Changed
twprojects-get_company17 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "addressOne", + "addressTwo", + "city", + "countryCode", + "emailOne", + "emailTwo", + "emailThree", + "fax", + "name", + "phone", + "profileText", + "state", + "website", + "zip", + "clientManagedBy", + "industry", + "tags", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each company, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / company / additionalPropertiesRemoved value: -false - removed
Output schema / properties / company / properties / clientManagedBy / additionalPropertiesRemoved value: -false - removed
Output schema / properties / company / properties / clientManagedBy / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / company / properties / clientManagedBy / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / company / properties / industry / additionalPropertiesRemoved value: -false - removed
Output schema / properties / company / properties / industry / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / company / properties / industry / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / company / properties / tags / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / company / properties / tags / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / company / properties / tags / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / company / requiredRemoved value: -[ - "id", - "addressOne", - "addressTwo", - "city", - "countryCode", - "emailOne", - "emailTwo", - "emailThree", - "fax", - "name", - "phone", - "profileText", - "state", - "website", - "zip", - "clientManagedBy", - "industry", - "tags", - "createdAt", - "updatedAt", - "status" -] - removed
Output schema / properties / included / additionalPropertiesRemoved value: -false - removed
Output schema / properties / included / properties / customfieldCompanies / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "company": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "countryCode": { - "type": "string" - }, - "createdAt": { - "type": [ - "null", - "string" - ] - }, - "createdBy": { - "type": [ - "null", - "integer" - ] - }, - "currencySymbol": { - "type": "string" - }, - "customfield": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "id": { - "type": "integer" - }, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "task": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - }, - "updatedBy": { - "type": [ - "null", - "integer" - ] - }, - "value": true - }, - "required": [ - "id", - "value", - "currencySymbol", - "countryCode", - "customfield", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / customfields / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "createdAt": { - "type": [ - "null", - "string" - ] - }, - "createdBy": { - "type": "integer" - }, - "currencyCode": { - "type": [ - "null", - "string" - ] - }, - "deleted": { - "type": "boolean" - }, - "deletedAt": { - "type": [ - "null", - "string" - ] - }, - "deletedBy": { - "type": [ - "null", - "integer" - ] - }, - "description": { - "type": "string" - }, - "entity": { - "type": "string" - }, - "formula": { - "type": [ - "null", - "string" - ] - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "options": true, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "required": { - "type": "boolean" - }, - "type": { - "type": "string" - }, - "unitId": { - "type": [ - "null", - "string" - ] - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - }, - "updatedBy": { - "type": [ - "null", - "integer" - ] - } - }, - "required": [ - "id", - "name", - "description", - "type", - "entity", - "required", - "formula", - "currencyCode", - "unitId", - "project", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deleted", - "deletedBy", - "deletedAt", - "options" - ], - "type": "object" -} - removed
Output schema / requiredRemoved value: -[ - "company", - "included" -]
- Changed
twprojects-get_jobrole11 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "isActive", + "createdByUser", + "createdAt", + "updatedByUser", + "updatedAt", + "deletedByUser", + "deletedAt", + "users", + "primaryUsers" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each job role, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / jobRole / additionalPropertiesRemoved value: -false - removed
Output schema / properties / jobRole / properties / primaryUsers / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / jobRole / properties / primaryUsers / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / jobRole / properties / primaryUsers / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / jobRole / properties / users / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / jobRole / properties / users / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / jobRole / properties / users / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / jobRole / requiredRemoved value: -[ - "id", - "name", - "isActive", - "createdByUser", - "createdAt", - "updatedByUser", - "updatedAt", - "deletedByUser", - "deletedAt", - "users", - "primaryUsers" -] - removed
Output schema / requiredRemoved value: -[ - "jobRole" -]
- Changed
twprojects-get_message24 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "title", + "project", + "tags", + "lastReply", + "replyStatus", + "status", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each message, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / message / additionalPropertiesRemoved value: -false - removed
Output schema / properties / message / properties / author / additionalPropertiesRemoved value: -false - removed
Output schema / properties / message / properties / author / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / message / properties / author / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / message / properties / lastReply / additionalPropertiesRemoved value: -false - removed
Output schema / properties / message / properties / lastReply / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / message / properties / lastReply / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / message / properties / message / additionalPropertiesRemoved value: -false - removed
Output schema / properties / message / properties / message / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / message / properties / message / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / message / properties / meta / additionalPropertiesRemoved value: -false - removed
Output schema / properties / message / properties / meta / properties / permissions / additionalPropertiesRemoved value: -false - removed
Output schema / properties / message / properties / meta / properties / permissions / requiredRemoved value: -[ - "canEdit" -] - removed
Output schema / properties / message / properties / meta / requiredRemoved value: -[ - "isRead", - "permissions" -] - removed
Output schema / properties / message / properties / project / additionalPropertiesRemoved value: -false - removed
Output schema / properties / message / properties / project / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / message / properties / project / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / message / properties / tags / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / message / properties / tags / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / message / properties / tags / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / message / requiredRemoved value: -[ - "id", - "title", - "project", - "tags", - "body", - "author", - "message", - "createdAt", - "updatedAt", - "lastReply", - "replyStatus", - "status" -] - removed
Output schema / requiredRemoved value: -[ - "message" -]
- Changed
twprojects-get_message_reply15 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each message reply, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / messageReply / additionalPropertiesRemoved value: -false - removed
Output schema / properties / messageReply / properties / author / additionalPropertiesRemoved value: -false - removed
Output schema / properties / messageReply / properties / author / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / messageReply / properties / author / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / messageReply / properties / message / additionalPropertiesRemoved value: -false - removed
Output schema / properties / messageReply / properties / message / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / messageReply / properties / message / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / messageReply / properties / meta / additionalPropertiesRemoved value: -false - removed
Output schema / properties / messageReply / properties / meta / properties / permissions / additionalPropertiesRemoved value: -false - removed
Output schema / properties / messageReply / properties / meta / properties / permissions / requiredRemoved value: -[ - "canEdit" -] - removed
Output schema / properties / messageReply / properties / meta / requiredRemoved value: -[ - "isRead", - "permissions" -] - removed
Output schema / properties / messageReply / requiredRemoved value: -[ - "id", - "body", - "author", - "message", - "createdAt", - "updatedAt", - "status" -] - removed
Output schema / requiredRemoved value: -[ - "messageReply" -]
- Changed
twprojects-get_milestone17 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "description", + "deadline", + "project", + "tasklists", + "tags", + "responsibleParties", + "createdOn", + "lastChangedOn", + "deletedOn", + "completedOn", + "completedBy", + "completed", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each milestone, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / milestone / additionalPropertiesRemoved value: -false - removed
Output schema / properties / milestone / properties / project / additionalPropertiesRemoved value: -false - removed
Output schema / properties / milestone / properties / project / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / milestone / properties / project / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / milestone / properties / responsibleParties / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / milestone / properties / responsibleParties / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / milestone / properties / responsibleParties / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / milestone / properties / tags / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / milestone / properties / tags / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / milestone / properties / tags / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / milestone / properties / tasklists / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / milestone / properties / tasklists / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / milestone / properties / tasklists / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / milestone / requiredRemoved value: -[ - "id", - "name", - "description", - "deadline", - "project", - "tasklists", - "tags", - "responsibleParties", - "createdOn", - "lastChangedOn", - "deletedOn", - "completedOn", - "completedBy", - "completed", - "status" -] - removed
Output schema / requiredRemoved value: -[ - "milestone" -]
- Changed
twprojects-get_notebook11 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "description", + "contents", + "type", + "project", + "tags", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy", + "deleted" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each notebook, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / notebook / additionalPropertiesRemoved value: -false - removed
Output schema / properties / notebook / properties / project / additionalPropertiesRemoved value: -false - removed
Output schema / properties / notebook / properties / project / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / notebook / properties / project / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / notebook / properties / tags / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / notebook / properties / tags / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / notebook / properties / tags / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / notebook / requiredRemoved value: -[ - "id", - "name", - "description", - "type", - "project", - "tags", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "deletedAt", - "deletedBy", - "deleted" -] - removed
Output schema / requiredRemoved value: -[ - "notebook" -]
- Changed
twprojects-get_project21 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "description", + "name", + "startAt", + "endAt", + "category", + "company", + "projectOwner", + "tags", + "lastWorkedOn", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "completedAt", + "completedBy", + "status", + "isBillable", + "type" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each project, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / included / additionalPropertiesRemoved value: -false - removed
Output schema / properties / included / properties / customfieldProjects / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "company": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "countryCode": { - "type": "string" - }, - "createdAt": { - "type": [ - "null", - "string" - ] - }, - "createdBy": { - "type": [ - "null", - "integer" - ] - }, - "currencySymbol": { - "type": "string" - }, - "customfield": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "id": { - "type": "integer" - }, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "task": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - }, - "updatedBy": { - "type": [ - "null", - "integer" - ] - }, - "value": true - }, - "required": [ - "id", - "value", - "currencySymbol", - "countryCode", - "customfield", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / customfields / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "createdAt": { - "type": [ - "null", - "string" - ] - }, - "createdBy": { - "type": "integer" - }, - "currencyCode": { - "type": [ - "null", - "string" - ] - }, - "deleted": { - "type": "boolean" - }, - "deletedAt": { - "type": [ - "null", - "string" - ] - }, - "deletedBy": { - "type": [ - "null", - "integer" - ] - }, - "description": { - "type": "string" - }, - "entity": { - "type": "string" - }, - "formula": { - "type": [ - "null", - "string" - ] - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "options": true, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "required": { - "type": "boolean" - }, - "type": { - "type": "string" - }, - "unitId": { - "type": [ - "null", - "string" - ] - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - }, - "updatedBy": { - "type": [ - "null", - "integer" - ] - } - }, - "required": [ - "id", - "name", - "description", - "type", - "entity", - "required", - "formula", - "currencyCode", - "unitId", - "project", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deleted", - "deletedBy", - "deletedAt", - "options" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / projectCategories / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "color": { - "type": "string" - }, - "count": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "parent": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - } - }, - "required": [ - "id", - "name", - "color", - "parent", - "count" - ], - "type": "object" -} - removed
Output schema / properties / project / additionalPropertiesRemoved value: -false - removed
Output schema / properties / project / properties / category / additionalPropertiesRemoved value: -false - removed
Output schema / properties / project / properties / category / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / project / properties / category / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / project / properties / company / additionalPropertiesRemoved value: -false - removed
Output schema / properties / project / properties / company / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / project / properties / company / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / project / properties / projectOwner / additionalPropertiesRemoved value: -false - removed
Output schema / properties / project / properties / projectOwner / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / project / properties / projectOwner / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / project / properties / tags / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / project / properties / tags / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / project / properties / tags / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / project / requiredRemoved value: -[ - "id", - "description", - "name", - "startAt", - "endAt", - "category", - "company", - "projectOwner", - "tags", - "lastWorkedOn", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "completedAt", - "completedBy", - "status", - "isBillable", - "type" -] - removed
Output schema / requiredRemoved value: -[ - "project", - "included" -]
- Changed
twprojects-get_project_category8 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "color", + "parent", + "count" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each project category, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / projectCategory / additionalPropertiesRemoved value: -false - removed
Output schema / properties / projectCategory / properties / parent / additionalPropertiesRemoved value: -false - removed
Output schema / properties / projectCategory / properties / parent / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / projectCategory / properties / parent / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / projectCategory / requiredRemoved value: -[ - "id", - "name", - "color", - "parent", - "count" -] - removed
Output schema / requiredRemoved value: -[ - "projectCategory" -]
- Changed
twprojects-get_task25 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "description", + "descriptionContentType", + "priority", + "progress", + "startDate", + "dueDate", + "estimateMinutes", + "tasklist", + "parentTask", + "assignees", + "tags", + "predecessors", + "workflowStages", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt", + "deletedBy", + "deletedAt", + "completedBy", + "completedAt", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each task, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / included / additionalPropertiesRemoved value: -false - removed
Output schema / properties / included / properties / customfieldTasks / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "company": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "countryCode": { - "type": "string" - }, - "createdAt": { - "type": [ - "null", - "string" - ] - }, - "createdBy": { - "type": [ - "null", - "integer" - ] - }, - "currencySymbol": { - "type": "string" - }, - "customfield": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "id": { - "type": "integer" - }, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "task": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - }, - "updatedBy": { - "type": [ - "null", - "integer" - ] - }, - "value": true - }, - "required": [ - "id", - "value", - "currencySymbol", - "countryCode", - "customfield", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / customfields / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "createdAt": { - "type": [ - "null", - "string" - ] - }, - "createdBy": { - "type": "integer" - }, - "currencyCode": { - "type": [ - "null", - "string" - ] - }, - "deleted": { - "type": "boolean" - }, - "deletedAt": { - "type": [ - "null", - "string" - ] - }, - "deletedBy": { - "type": [ - "null", - "integer" - ] - }, - "description": { - "type": "string" - }, - "entity": { - "type": "string" - }, - "formula": { - "type": [ - "null", - "string" - ] - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "options": true, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "required": { - "type": "boolean" - }, - "type": { - "type": "string" - }, - "unitId": { - "type": [ - "null", - "string" - ] - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - }, - "updatedBy": { - "type": [ - "null", - "integer" - ] - } - }, - "required": [ - "id", - "name", - "description", - "type", - "entity", - "required", - "formula", - "currencyCode", - "unitId", - "project", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deleted", - "deletedBy", - "deletedAt", - "options" - ], - "type": "object" -} - removed
Output schema / properties / task / additionalPropertiesRemoved value: -false - removed
Output schema / properties / task / properties / assignees / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / task / properties / assignees / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / task / properties / assignees / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / task / properties / parentTask / additionalPropertiesRemoved value: -false - removed
Output schema / properties / task / properties / parentTask / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / task / properties / parentTask / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / task / properties / predecessors / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / task / properties / predecessors / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / task / properties / predecessors / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / task / properties / tags / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / task / properties / tags / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / task / properties / tags / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / task / properties / tasklist / additionalPropertiesRemoved value: -false - removed
Output schema / properties / task / properties / tasklist / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / task / properties / tasklist / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / task / properties / workflowStages / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / task / properties / workflowStages / items / requiredRemoved value: -[ - "workflowId", - "stageId" -] - removed
Output schema / properties / task / requiredRemoved value: -[ - "id", - "name", - "description", - "descriptionContentType", - "priority", - "progress", - "startDate", - "dueDate", - "estimateMinutes", - "tasklist", - "parentTask", - "assignees", - "tags", - "predecessors", - "workflowStages", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deletedBy", - "deletedAt", - "status" -] - removed
Output schema / requiredRemoved value: -[ - "task", - "included" -]
- Changed
twprojects-get_tasklist11 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "description", + "project", + "milestone", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each tasklist, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / tasklist / additionalPropertiesRemoved value: -false - removed
Output schema / properties / tasklist / properties / milestone / additionalPropertiesRemoved value: -false - removed
Output schema / properties / tasklist / properties / milestone / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / tasklist / properties / milestone / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / tasklist / properties / project / additionalPropertiesRemoved value: -false - removed
Output schema / properties / tasklist / properties / project / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / tasklist / properties / project / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / tasklist / requiredRemoved value: -[ - "id", - "name", - "description", - "project", - "milestone", - "createdAt", - "updatedAt", - "status" -] - removed
Output schema / requiredRemoved value: -[ - "tasklist" -]
- Changed
twprojects-get_timelog17 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "description", + "billable", + "minutes", + "timeLogged", + "user", + "task", + "project", + "tags", + "deskTicketId", + "createdAt", + "loggedBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy", + "deleted" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each timelog, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timelog / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timelog / properties / project / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timelog / properties / project / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / timelog / properties / project / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / timelog / properties / tags / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timelog / properties / tags / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / timelog / properties / tags / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / timelog / properties / task / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timelog / properties / task / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / timelog / properties / task / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / timelog / properties / user / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timelog / properties / user / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / timelog / properties / user / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / timelog / requiredRemoved value: -[ - "id", - "description", - "billable", - "minutes", - "timeLogged", - "user", - "task", - "project", - "createdAt", - "loggedBy", - "updatedAt", - "updatedBy", - "deletedAt", - "deletedBy", - "deleted" -] - removed
Output schema / requiredRemoved value: -[ - "timelog" -]
- Changed
twprojects-get_timer19 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "description", + "running", + "billable", + "user", + "task", + "project", + "timelog", + "createdAt", + "updatedAt", + "deletedAt", + "deleted", + "duration", + "lastStartedAt", + "timerLastIntervalEnd", + "intervals" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each timer, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timer / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timer / properties / intervals / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timer / properties / intervals / items / requiredRemoved value: -[ - "id", - "from", - "to", - "duration" -] - removed
Output schema / properties / timer / properties / project / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timer / properties / project / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / timer / properties / project / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / timer / properties / task / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timer / properties / task / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / timer / properties / task / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / timer / properties / timelog / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timer / properties / timelog / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / timer / properties / timelog / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / timer / properties / user / additionalPropertiesRemoved value: -false - removed
Output schema / properties / timer / properties / user / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / timer / properties / user / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / timer / requiredRemoved value: -[ - "id", - "description", - "running", - "billable", - "user", - "task", - "project", - "createdAt", - "updatedAt", - "deletedAt", - "deleted", - "duration", - "lastStartedAt", - "intervals" -] - removed
Output schema / requiredRemoved value: -[ - "timer" -]
- Changed
twprojects-get_user23 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "firstName", + "lastName", + "title", + "email", + "isAdmin", + "type", + "userCost", + "userRate", + "company", + "jobRoles", + "skills", + "workingHour", + "lengthOfDay", + "deleted", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each user, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / person / additionalPropertiesRemoved value: -false - removed
Output schema / properties / person / properties / company / additionalPropertiesRemoved value: -false - removed
Output schema / properties / person / properties / company / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / person / properties / company / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / person / properties / createdBy / additionalPropertiesRemoved value: -false - removed
Output schema / properties / person / properties / createdBy / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / person / properties / createdBy / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / person / properties / jobRoles / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / person / properties / jobRoles / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / person / properties / jobRoles / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / person / properties / skills / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / person / properties / skills / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / person / properties / skills / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / person / properties / updatedBy / additionalPropertiesRemoved value: -false - removed
Output schema / properties / person / properties / updatedBy / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / person / properties / updatedBy / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / person / properties / workingHour / additionalPropertiesRemoved value: -false - removed
Output schema / properties / person / properties / workingHour / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / person / properties / workingHour / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / person / requiredRemoved value: -[ - "id", - "firstName", - "lastName", - "title", - "email", - "isAdmin", - "type", - "userCost", - "userRate", - "company", - "workingHour", - "lengthOfDay", - "deleted", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt" -] - removed
Output schema / requiredRemoved value: -[ - "person" -]
- Changed
twprojects-get_workflow5 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "defaultWorkflow" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each workflow, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / workflow / additionalPropertiesRemoved value: -false - removed
Output schema / properties / workflow / requiredRemoved value: -[ - "id", - "name", - "defaultWorkflow" -] - removed
Output schema / requiredRemoved value: -[ - "workflow" -]
- Changed
twprojects-get_workflow_stage8 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "workflow" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each workflow stage, from the listed names." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / stage / additionalPropertiesRemoved value: -false - removed
Output schema / properties / stage / properties / workflow / additionalPropertiesRemoved value: -false - removed
Output schema / properties / stage / properties / workflow / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / stage / properties / workflow / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / properties / stage / requiredRemoved value: -[ - "id", - "name", - "workflow" -] - removed
Output schema / requiredRemoved value: -[ - "stage" -]
- Changed
twprojects-list_activities7 fields changed- changed
Input schema / properties / end_date / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / end_date / descriptionPrevious value: -"End of the activity window."New value: +"End of the activity window. 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." - added
Input schema / properties / end_date / examplesAdded value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +] - added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "activityType", + "latestActivityType", + "dateTime", + "description", + "extraDescription", + "publicInfo", + "dueDate", + "forUserName", + "itemLink", + "link", + "user", + "forUser", + "project", + "company", + "item" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each activity, from the listed names." +} - changed
Input schema / properties / start_date / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / start_date / descriptionPrevious value: -"Start of the activity window."New value: +"Start of the activity window. 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." - added
Input schema / properties / start_date / examplesAdded value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +]
- Changed
twprojects-list_calendar_events1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "summary", + "description", + "organizer", + "eventCreator", + "start", + "end", + "allDay", + "location", + "type", + "recurrence", + "guestsCanInviteOthers", + "guestsCanModify", + "guestsCanSeeOtherGuests", + "transparency", + "visibility", + "videoCallLink", + "calOwnerCanEdit", + "timeblock", + "attendees", + "attendeesOmitted", + "calendar", + "status", + "createdBy", + "createdAt", + "updatedAt" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each calendar event, from the listed names." +}
- Changed
twprojects-list_calendars1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "type", + "createdAt", + "updatedAt" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each calendar, from the listed names." +}
- Changed
twprojects-list_comments5 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "body", + "htmlBody", + "contentType", + "object", + "project", + "postedBy", + "postedDateTime", + "lastEditedBy", + "dateLastEdited", + "deleted", + "deletedBy", + "dateDeleted" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each comment, from the listed names." +} - changed
Input schema / properties / updated_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / updated_after / descriptionPrevious value: -"Filter comments updated after. Defaults to the last 3 months."New value: +"Filter comments updated after. Defaults to the last 3 months. 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." - added
Input schema / properties / updated_after / examplesAdded value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +] - added
Input schema / properties / user_idsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "A list of user IDs to filter comments by" +}
- Changed
twprojects-list_companies1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "addressOne", + "addressTwo", + "city", + "countryCode", + "emailOne", + "emailTwo", + "emailThree", + "fax", + "name", + "phone", + "profileText", + "state", + "website", + "zip", + "clientManagedBy", + "industry", + "tags", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each company, from the listed names." +}
- Changed
twprojects-list_custom_field_values1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "value", + "currencySymbol", + "countryCode", + "customfield", + "task", + "project", + "company", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each custom field value, from the listed names." +}
- Changed
twprojects-list_custom_fields1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "options", + "id", + "name", + "description", + "type", + "entity", + "required", + "formula", + "currencyCode", + "unitId", + "project", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt", + "deleted", + "deletedBy", + "deletedAt" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each custom field, from the listed names." +}
- Changed
twprojects-list_jobroles1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "isActive", + "createdByUser", + "createdAt", + "updatedByUser", + "updatedAt", + "deletedByUser", + "deletedAt", + "users", + "primaryUsers" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each job role, from the listed names." +}
- Changed
twprojects-list_links1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "description", + "code", + "project-id", + "tags", + "created-by-userId", + "created-date", + "updated-by-userId", + "updated-date" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each link, from the listed names." +}
- Changed
twprojects-list_message_replies1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each message reply, from the listed names." +}
- Changed
twprojects-list_messages1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "title", + "project", + "tags", + "lastReply", + "replyStatus", + "status", + "body", + "author", + "message", + "meta", + "createdAt", + "updatedAt" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each message, from the listed names." +}
- Changed
twprojects-list_milestones1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "description", + "deadline", + "project", + "tasklists", + "tags", + "responsibleParties", + "createdOn", + "lastChangedOn", + "deletedOn", + "completedOn", + "completedBy", + "completed", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each milestone, from the listed names." +}
- Changed
twprojects-list_notebooks1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "description", + "contents", + "type", + "project", + "tags", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy", + "deleted" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each notebook, from the listed names." +}
- Changed
twprojects-list_project_budgets2 fields changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "projectId", + "type", + "status", + "capacity", + "capacityUsed", + "originatorBudgetId", + "isRepeating", + "repeatPeriod", + "repeatUnit", + "repeatsRemaining", + "sequenceNumber", + "startDateTime", + "endDateTime", + "currencyCode", + "timelogType", + "expenseType", + "defaultRate", + "notificationIds", + "createdByUserId", + "dateCreated", + "updatedBy", + "dateUpdated", + "completedByUserId", + "dateCompleted", + "deletedByUserId", + "dateDeleted" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each project budget, from the listed names." +} - changed
Input schema / properties / status / anyOfPrevious value: -[ - { - "enum": [ - "upcoming", - "active", - "complete" - ], - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "enum": [ + "UPCOMING", + "ACTIVE", + "COMPLETED" + ], + "type": "string" + }, + { + "type": "null" + } +]
- Changed
twprojects-list_project_categories1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "color", + "parent", + "count" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each project category, from the listed names." +}
- Changed
twprojects-list_projects1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "description", + "name", + "startAt", + "endAt", + "category", + "company", + "projectOwner", + "tags", + "lastWorkedOn", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "completedAt", + "completedBy", + "status", + "isBillable", + "type" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each project, from the listed names." +}
- Changed
twprojects-list_skills1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "createdByUser", + "createdAt", + "updatedByUser", + "updatedAt", + "deletedByUser", + "deletedAt", + "users" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each skill, from the listed names." +}
- Changed
twprojects-list_tags1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "project" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each tag, from the listed names." +}
- Changed
twprojects-list_tasklist_budgets1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "type", + "capacity", + "capacityUsed", + "projectId", + "projectbudget", + "tasklist", + "milestone", + "notifications", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each tasklist budget, from the listed names." +}
- Changed
twprojects-list_tasklists1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "description", + "project", + "milestone", + "createdAt", + "updatedAt", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each tasklist, from the listed names." +}
- Changed
twprojects-list_tasks19 fields changed- changed
Input schema / properties / completed_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / completed_after / descriptionPrevious value: -"Filter tasks completed after."New value: +"Filter tasks completed after. 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." - changed
Input schema / properties / completed_after / examplesPrevious value: -[ - "2023-01-01T00:00:00Z" -]New value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +] - changed
Input schema / properties / completed_before / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / completed_before / descriptionPrevious value: -"Filter tasks completed before."New value: +"Filter tasks completed before. 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." - changed
Input schema / properties / completed_before / examplesPrevious value: -[ - "2023-12-31T23:59:59Z" -]New value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +] - changed
Input schema / properties / created_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / created_after / descriptionPrevious value: -"Filter tasks created after."New value: +"Filter tasks created after. 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." - changed
Input schema / properties / created_after / examplesPrevious value: -[ - "2023-01-01T00:00:00Z" -]New value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +] - changed
Input schema / properties / created_before / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / created_before / descriptionPrevious value: -"Filter tasks created before."New value: +"Filter tasks created before. 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." - changed
Input schema / properties / created_before / examplesPrevious value: -[ - "2023-12-31T23:59:59Z" -]New value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +] - added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "description", + "descriptionContentType", + "priority", + "progress", + "startDate", + "dueDate", + "estimateMinutes", + "tasklist", + "parentTask", + "assignees", + "tags", + "predecessors", + "workflowStages", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt", + "deletedBy", + "deletedAt", + "completedBy", + "completedAt", + "status" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each task, from the listed names." +} - changed
Input schema / properties / updated_after / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / updated_after / descriptionPrevious value: -"Filter tasks updated after."New value: +"Filter tasks updated after. 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." - changed
Input schema / properties / updated_after / examplesPrevious value: -[ - "2023-01-01T00:00:00Z" -]New value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +] - changed
Input schema / properties / updated_before / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / updated_before / descriptionPrevious value: -"Filter tasks updated before."New value: +"Filter tasks updated before. 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." - changed
Input schema / properties / updated_before / examplesPrevious value: -[ - "2023-12-31T23:59:59Z" -]New value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +]
- Changed
twprojects-list_teams1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "description", + "handle", + "logoUrl", + "logoIcon", + "logoColor", + "projectId", + "company", + "parentTeam", + "rootTeam", + "members", + "createdByUserId", + "dateCreated", + "updatedByUserId", + "dateUpdated", + "deleted", + "deletedDate" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each team, from the listed names." +}
- Changed
twprojects-list_timelogs7 fields changed- changed
Input schema / properties / end_date / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / end_date / descriptionPrevious value: -"End of the timelog window."New value: +"End of the timelog window. 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." - added
Input schema / properties / end_date / examplesAdded value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +] - added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "description", + "billable", + "minutes", + "timeLogged", + "user", + "task", + "project", + "tags", + "deskTicketId", + "createdAt", + "loggedBy", + "updatedAt", + "updatedBy", + "deletedAt", + "deletedBy", + "deleted" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each timelog, from the listed names." +} - changed
Input schema / properties / start_date / anyOfPrevious value: -[ - { - "format": "date-time", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / start_date / descriptionPrevious value: -"Start of the timelog window."New value: +"Start of the timelog window. 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." - added
Input schema / properties / start_date / examplesAdded value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +]
- Changed
twprojects-list_timers1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "description", + "running", + "billable", + "user", + "task", + "project", + "timelog", + "createdAt", + "updatedAt", + "deletedAt", + "deleted", + "duration", + "lastStartedAt", + "timerLastIntervalEnd", + "intervals" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each timer, from the listed names." +}
- Changed
twprojects-list_users1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "firstName", + "lastName", + "title", + "email", + "isAdmin", + "type", + "userCost", + "userRate", + "company", + "jobRoles", + "skills", + "workingHour", + "lengthOfDay", + "deleted", + "createdBy", + "createdAt", + "updatedBy", + "updatedAt" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each user, from the listed names." +}
- Changed
twprojects-list_workflow_stages1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "workflow" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each workflow stage, from the listed names." +}
- Changed
twprojects-list_workflows1 field changed- added
Input schema / properties / fieldsAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "id", + "name", + "defaultWorkflow" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "The attributes to return for each workflow, from the listed names." +}
- Changed
twprojects-search26 fields changed- added
Input schema / properties / includeAdded value: +{ + "anyOf": [ + { + "items": { + "enum": [ + "comments", + "companies", + "links", + "messages", + "milestones", + "notebooks", + "projects", + "tasklists", + "tasks", + "teams", + "timelogs", + "users" + ], + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "description": "Entity types to return as full records in the response sideloads. Defaults to all supported types; narrow it to the types of interest to keep the response small." +} - changed
Input schema / properties / updated_after / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "type": "string" + }, + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / updated_after / descriptionPrevious value: -"Only include items updated after this date."New value: +"Only include items updated after this date. 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." - changed
Input schema / properties / updated_after / examplesPrevious value: -[ - "2023-01-01T00:00:00Z" -]New value: +[ + "2026-08-03", + "2026-08-03T14:30:00Z" +] - removed
Input schema / properties / updated_after / formatRemoved value: -"date-time" - added
Input schema / properties / verboseAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": true, + "description": "If false, returns id + name only โ useful when scanning many results." +} - removed
Output schema / additionalPropertiesRemoved value: -false - removed
Output schema / properties / included / additionalPropertiesRemoved value: -false - removed
Output schema / properties / included / properties / comments / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "object": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "postedBy": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "postedDateTime": { - "type": [ - "null", - "string" - ] - }, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "title": { - "type": "string" - } - }, - "required": [ - "id", - "title", - "object", - "project", - "postedBy", - "postedDateTime" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / companies / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "addressOne": { - "type": "string" - }, - "addressTwo": { - "type": "string" - }, - "city": { - "type": "string" - }, - "clientManagedBy": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "countryCode": { - "type": "string" - }, - "createdAt": { - "type": [ - "null", - "string" - ] - }, - "emailOne": { - "type": "string" - }, - "emailThree": { - "type": "string" - }, - "emailTwo": { - "type": "string" - }, - "fax": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "industry": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "name": { - "type": "string" - }, - "phone": { - "type": "string" - }, - "profileText": { - "type": [ - "null", - "string" - ] - }, - "state": { - "type": "string" - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - }, - "website": { - "type": "string" - }, - "zip": { - "type": "string" - } - }, - "required": [ - "id", - "addressOne", - "addressTwo", - "city", - "countryCode", - "emailOne", - "emailTwo", - "emailThree", - "fax", - "name", - "phone", - "profileText", - "state", - "website", - "zip", - "clientManagedBy", - "industry", - "tags", - "createdAt", - "updatedAt", - "status" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / links / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "code": { - "type": "string" - }, - "created-by-userId": { - "type": "integer" - }, - "created-date": { - "type": "string" - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "project-id": { - "type": "integer" - }, - "tags": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "projectId": { - "type": [ - "null", - "integer" - ] - } - }, - "required": [ - "id", - "name", - "projectId" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "updated-by-userId": { - "type": [ - "null", - "integer" - ] - }, - "updated-date": { - "type": [ - "null", - "string" - ] - } - }, - "required": [ - "id", - "name", - "description", - "code", - "project-id", - "tags", - "created-by-userId", - "created-date", - "updated-by-userId", - "updated-date" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / messages / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "author": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "body": { - "type": "string" - }, - "createdAt": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "lastReply": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "message": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "meta": { - "additionalProperties": false, - "properties": { - "isRead": { - "type": "boolean" - }, - "permissions": { - "additionalProperties": false, - "properties": { - "canEdit": { - "type": "boolean" - } - }, - "required": [ - "canEdit" - ], - "type": "object" - } - }, - "required": [ - "isRead", - "permissions" - ], - "type": [ - "null", - "object" - ] - }, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "replyStatus": { - "type": "string" - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "title": { - "type": "string" - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - } - }, - "required": [ - "id", - "title", - "project", - "tags", - "body", - "author", - "message", - "createdAt", - "updatedAt", - "lastReply", - "replyStatus", - "status" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / milestones / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "completed": { - "type": "boolean" - }, - "completedBy": { - "type": [ - "null", - "integer" - ] - }, - "completedOn": { - "type": [ - "null", - "string" - ] - }, - "createdOn": { - "type": [ - "null", - "string" - ] - }, - "deadline": { - "type": "string" - }, - "deletedOn": { - "type": [ - "null", - "string" - ] - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "lastChangedOn": { - "type": [ - "null", - "string" - ] - }, - "name": { - "type": "string" - }, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "responsibleParties": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "tasklists": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - } - }, - "required": [ - "id", - "name", - "description", - "deadline", - "project", - "tasklists", - "tags", - "responsibleParties", - "createdOn", - "lastChangedOn", - "deletedOn", - "completedOn", - "completedBy", - "completed", - "status" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / notebooks / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "contents": { - "type": [ - "null", - "string" - ] - }, - "createdAt": { - "type": [ - "null", - "string" - ] - }, - "createdBy": { - "type": [ - "null", - "integer" - ] - }, - "deleted": { - "type": "boolean" - }, - "deletedAt": { - "type": [ - "null", - "string" - ] - }, - "deletedBy": { - "type": [ - "null", - "integer" - ] - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "tags": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "type": { - "type": "string" - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - }, - "updatedBy": { - "type": [ - "null", - "integer" - ] - } - }, - "required": [ - "id", - "name", - "description", - "type", - "project", - "tags", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "deletedAt", - "deletedBy", - "deleted" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / projects / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "category": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "company": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "completedAt": { - "type": [ - "null", - "string" - ] - }, - "completedBy": { - "type": [ - "null", - "integer" - ] - }, - "createdAt": { - "type": [ - "null", - "string" - ] - }, - "createdBy": { - "type": [ - "null", - "integer" - ] - }, - "description": { - "type": [ - "null", - "string" - ] - }, - "endAt": { - "type": [ - "null", - "string" - ] - }, - "id": { - "type": "integer" - }, - "isBillable": { - "type": [ - "null", - "boolean" - ] - }, - "lastWorkedOn": { - "type": [ - "null", - "string" - ] - }, - "name": { - "type": "string" - }, - "projectOwner": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "startAt": { - "type": [ - "null", - "string" - ] - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "type": { - "type": "string" - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - }, - "updatedBy": { - "type": [ - "null", - "integer" - ] - } - }, - "required": [ - "id", - "description", - "name", - "startAt", - "endAt", - "category", - "company", - "projectOwner", - "tags", - "lastWorkedOn", - "createdAt", - "createdBy", - "updatedAt", - "updatedBy", - "completedAt", - "completedBy", - "status", - "isBillable", - "type" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / tasklists / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "createdAt": { - "type": [ - "null", - "string" - ] - }, - "description": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "milestone": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "name": { - "type": "string" - }, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "status": { - "type": "string" - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - } - }, - "required": [ - "id", - "name", - "description", - "project", - "milestone", - "createdAt", - "updatedAt", - "status" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / tasks / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "assignees": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "completedAt": { - "type": [ - "null", - "string" - ] - }, - "completedBy": { - "type": [ - "null", - "integer" - ] - }, - "createdAt": { - "type": [ - "null", - "string" - ] - }, - "createdBy": { - "type": [ - "null", - "integer" - ] - }, - "deletedAt": { - "type": [ - "null", - "string" - ] - }, - "deletedBy": { - "type": [ - "null", - "integer" - ] - }, - "description": { - "type": [ - "null", - "string" - ] - }, - "descriptionContentType": { - "type": [ - "null", - "string" - ] - }, - "dueDate": { - "description": "Null or date-only date string", - "format": "date", - "type": [ - "null", - "string" - ] - }, - "estimateMinutes": { - "type": "integer" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - }, - "parentTask": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "predecessors": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "priority": { - "type": [ - "null", - "string" - ] - }, - "progress": { - "type": "integer" - }, - "startDate": { - "description": "Null or date-only date string", - "format": "date", - "type": [ - "null", - "string" - ] - }, - "status": { - "type": "string" - }, - "tags": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "tasklist": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "updatedAt": { - "type": "string" - }, - "updatedBy": { - "type": [ - "null", - "integer" - ] - }, - "workflowStages": { - "items": { - "additionalProperties": false, - "properties": { - "stageId": { - "type": [ - "null", - "integer" - ] - }, - "workflowId": { - "type": [ - "null", - "integer" - ] - } - }, - "required": [ - "workflowId", - "stageId" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - } - }, - "required": [ - "id", - "name", - "description", - "descriptionContentType", - "priority", - "progress", - "startDate", - "dueDate", - "estimateMinutes", - "tasklist", - "parentTask", - "assignees", - "tags", - "predecessors", - "workflowStages", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt", - "deletedBy", - "deletedAt", - "status" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / teams / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "company": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id", - "name" - ], - "type": [ - "null", - "object" - ] - }, - "createdByUserId": { - "type": "integer" - }, - "dateCreated": { - "type": "string" - }, - "dateUpdated": { - "type": "string" - }, - "deleted": { - "type": "boolean" - }, - "deletedDate": { - "additionalProperties": false, - "properties": {}, - "type": [ - "null", - "object" - ] - }, - "description": { - "type": [ - "null", - "string" - ] - }, - "handle": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "logoColor": { - "type": [ - "null", - "string" - ] - }, - "logoIcon": { - "type": [ - "null", - "string" - ] - }, - "logoUrl": { - "type": [ - "null", - "string" - ] - }, - "members": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "name": { - "type": "string" - }, - "parentTeam": { - "additionalProperties": false, - "properties": { - "handle": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id", - "name", - "handle" - ], - "type": [ - "null", - "object" - ] - }, - "projectId": { - "type": "integer" - }, - "rootTeam": { - "additionalProperties": false, - "properties": { - "handle": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "name": { - "type": "string" - } - }, - "required": [ - "id", - "name", - "handle" - ], - "type": [ - "null", - "object" - ] - }, - "updatedByUserId": { - "type": "integer" - } - }, - "required": [ - "id", - "name", - "description", - "handle", - "logoUrl", - "logoIcon", - "logoColor", - "projectId", - "company", - "parentTeam", - "rootTeam", - "members", - "createdByUserId", - "dateCreated", - "updatedByUserId", - "dateUpdated", - "deleted", - "deletedDate" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / timelogs / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "billable": { - "type": "boolean" - }, - "createdAt": { - "type": "string" - }, - "deleted": { - "type": "boolean" - }, - "deletedAt": { - "type": [ - "null", - "string" - ] - }, - "deletedBy": { - "type": [ - "null", - "integer" - ] - }, - "description": { - "type": "string" - }, - "deskTicketId": { - "type": [ - "null", - "integer" - ] - }, - "id": { - "type": "integer" - }, - "loggedBy": { - "type": "integer" - }, - "minutes": { - "type": "integer" - }, - "project": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "tags": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "task": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "timeLogged": { - "type": "string" - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - }, - "updatedBy": { - "type": [ - "null", - "integer" - ] - }, - "user": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - } - }, - "required": [ - "id", - "description", - "billable", - "minutes", - "timeLogged", - "user", - "task", - "project", - "createdAt", - "loggedBy", - "updatedAt", - "updatedBy", - "deletedAt", - "deletedBy", - "deleted" - ], - "type": "object" -} - removed
Output schema / properties / included / properties / users / additionalPropertiesRemoved value: -{ - "additionalProperties": false, - "properties": { - "company": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "createdBy": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "deleted": { - "type": "boolean" - }, - "email": { - "type": "string" - }, - "firstName": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "isAdmin": { - "type": "boolean" - }, - "jobRoles": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "lastName": { - "type": "string" - }, - "lengthOfDay": { - "type": "number" - }, - "skills": { - "items": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": "object" - }, - "type": [ - "null", - "array" - ] - }, - "title": { - "type": [ - "null", - "string" - ] - }, - "type": { - "type": "string" - }, - "updatedAt": { - "type": [ - "null", - "string" - ] - }, - "updatedBy": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - }, - "userCost": { - "type": [ - "null", - "integer" - ] - }, - "userRate": { - "type": [ - "null", - "integer" - ] - }, - "workingHour": { - "additionalProperties": false, - "properties": { - "id": { - "type": "integer" - }, - "meta": { - "additionalProperties": true, - "type": "object" - }, - "type": { - "type": "string" - } - }, - "required": [ - "id", - "type" - ], - "type": [ - "null", - "object" - ] - } - }, - "required": [ - "id", - "firstName", - "lastName", - "title", - "email", - "isAdmin", - "type", - "userCost", - "userRate", - "company", - "workingHour", - "lengthOfDay", - "deleted", - "createdBy", - "createdAt", - "updatedBy", - "updatedAt" - ], - "type": "object" -} - removed
Output schema / properties / meta / additionalPropertiesRemoved value: -false - removed
Output schema / properties / meta / requiredRemoved value: -[ - "prevCursor", - "nextCursor", - "limit" -] - removed
Output schema / properties / search / items / additionalPropertiesRemoved value: -false - removed
Output schema / properties / search / items / properties / meta / additionalPropertiesRemoved value: -true - removed
Output schema / properties / search / items / requiredRemoved value: -[ - "id", - "type" -] - removed
Output schema / requiredRemoved value: -[ - "meta", - "search", - "included" -]
- Changed
twprojects-update_comment2 fields changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "Notify all followers of the entity this comment is related to.", - "enum": [ - true - ], - "type": "boolean" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true notifies all followers of the entity this comment is related to. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the comment change."New value: +"Who to notify of the comment change. Accepts the string \"all\" to notify all project members, the boolean true to notify all followers of the related entity, the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-update_link2 fields changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the link update."New value: +"Who to notify of the link update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-update_message2 fields changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the message update."New value: +"Who to notify of the message update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
- Changed
twprojects-update_message_reply2 fields changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - }, - { - "required": [ - "job_role_ids" - ] - } - ], - "maxProperties": 4, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "job_role_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "true is the same as \"all\": notify all project members. false notifies nobody.", + "type": "boolean" + }, + { + "description": "The IDs of the users to notify; shorthand for {\"user_ids\": [...]}.", + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / notify / descriptionPrevious value: -"Who to notify of the reply update."New value: +"Who to notify of the reply update. Accepts the string \"all\" to notify all project members, the boolean true as an alias for \"all\", the boolean false to notify nobody, a plain array of user IDs (e.g. [123, 456]), or an object selecting user_ids, company_ids, team_ids and/or job_role_ids (e.g. {\"user_ids\": [123, 456]})."
47 tool updates
v1.26.5- Changed
twchat-list_messages2 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)."
- Changed
twdesk-list_companies4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twdesk-list_customers4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twdesk-list_inboxes4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twdesk-list_priorities4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twdesk-list_statuses4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twdesk-list_tags4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twdesk-list_ticket_types4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twdesk-list_users4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twdesk-search_tickets4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_activities4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_calendars4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_comments4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_companies4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_custom_field_values4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_custom_fields4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_custom_item_fields4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_custom_item_records4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_custom_items4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_jobroles4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_links4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_message_replies4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_messages4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_milestones4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_notebooks4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_project_budgets7 fields changed- changed
Input schema / properties / cursor / descriptionPrevious value: -"Cursor for fetching the next page of results."New value: +"Opaque cursor from a previous response, for cursor pagination. This is not an offset or a page number โ never construct one. Setting it makes the endpoint ignore page and page_size. To walk pages, use page instead." - changed
Input schema / properties / limit / descriptionPrevious value: -"Maximum number of budgets to return."New value: +"Maximum number of budgets to return. Only applies alongside cursor; ignored when paging with page/page_size." - added
Input schema / properties / pageAdded value: +{ + "anyOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Page number for pagination of results (1-based)." +} - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)." - added
Output schema / properties / budgets / items / properties / updatedByAdded value: +{ + "type": [ + "null", + "integer" + ] +} - removed
Output schema / properties / budgets / items / properties / updatedUserIdRemoved value: -{ - "type": [ - "null", - "integer" - ] -}
- Changed
twprojects-list_project_categories4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_project_templates4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_projects4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_skills4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_tags4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_tasklist_budgets4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_tasklists4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_tasks4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_teams4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_timelogs4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_timers4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_users4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_workflow_stages4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-list_workflows4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twprojects-users_workload4 fields changed- changed
Input schema / properties / page / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page / descriptionPrevious value: -"Page number for pagination of results."New value: +"Page number for pagination of results (1-based)." - changed
Input schema / properties / page_size / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / page_size / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twspaces-list_categories2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twspaces-list_comments2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twspaces-list_pages2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twspaces-list_spaces2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twspaces-list_tags2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
- Changed
twspaces-search2 fields changed- changed
Input schema / properties / pageSize / anyOfPrevious value: -[ - { - "type": "integer" - }, - { - "type": "null" - } -]New value: +[ + { + "maximum": 500, + "minimum": 1, + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / pageSize / descriptionPrevious value: -"Number of results per page for pagination."New value: +"Number of results per page for pagination (1-500)."
119 tool updates
v1.26.0- Added
twchat-get_conversation - Added
twchat-send_message - Added
twdesk-create_company - Added
twdesk-create_customer - Added
twdesk-create_file - Added
twdesk-create_helpdoc_article - Added
twdesk-get_helpdoc_article - Added
twdesk-get_inbox - Added
twdesk-get_priority - Added
twdesk-get_status - Added
twdesk-get_tag - Added
twdesk-get_ticket - Added
twdesk-get_ticket_type - Added
twdesk-get_user - Added
twdesk-list_customers - Added
twdesk-list_inboxes - Added
twdesk-list_priorities - Added
twdesk-list_statuses - Added
twdesk-list_ticket_types - Added
twdesk-list_users - Added
twdesk-reply_ticket - Added
twdesk-search_helpdoc_articles - Added
twdesk-search_tickets - Added
twdesk-update_company - Added
twdesk-update_customer - Added
twdesk-update_helpdoc_article - Added
twdesk-update_priority - Added
twdesk-update_status - Added
twdesk-update_tag - Added
twdesk-update_ticket - Added
twdesk-update_ticket_type - Added
twprojects-add_project_member - Added
twprojects-clone_project - Added
twprojects-complete_task - Added
twprojects-complete_timer - Added
twprojects-create_company - Added
twprojects-create_custom_field - Added
twprojects-create_custom_field_value - Added
twprojects-create_custom_item_field - Added
twprojects-create_custom_item_record - Added
twprojects-create_jobrole - Added
twprojects-create_link - Added
twprojects-create_message - Added
twprojects-create_message_reply - Added
twprojects-create_milestone - Added
twprojects-create_notebook - Added
twprojects-create_project - Added
twprojects-create_project_category - Added
twprojects-create_project_template - Added
twprojects-create_skill - Added
twprojects-create_tasklist - Added
twprojects-create_team - Added
twprojects-create_timer - Added
twprojects-create_user - Added
twprojects-create_workflow - Added
twprojects-create_workflow_stage - Added
twprojects-get_comment - Added
twprojects-get_custom_field - Added
twprojects-get_custom_item - Added
twprojects-get_custom_item_field - Added
twprojects-get_custom_item_record - Added
twprojects-get_jobrole - Added
twprojects-get_link - Added
twprojects-get_message - Added
twprojects-get_message_reply - Added
twprojects-get_milestone - Added
twprojects-get_notebook - Added
twprojects-get_project_category - Added
twprojects-get_skill - Added
twprojects-get_tag - Added
twprojects-get_timelog - Added
twprojects-get_timer - Added
twprojects-get_user - Added
twprojects-get_user_me - Added
twprojects-get_workflow - Added
twprojects-get_workflow_stage - Added
twprojects-link_project_to_workflow - Added
twprojects-list_activities - Added
twprojects-list_calendar_events - Added
twprojects-list_calendars - Added
twprojects-list_companies - Added
twprojects-list_custom_field_values - Added
twprojects-list_custom_fields - Added
twprojects-list_custom_item_fields - Added
twprojects-list_custom_items - Added
twprojects-list_industries - Added
twprojects-list_jobroles - Added
twprojects-list_links - Added
twprojects-list_message_replies - Added
twprojects-list_messages - Added
twprojects-list_project_categories - Added
twprojects-list_project_templates - Added
twprojects-list_skills - Added
twprojects-list_tags - Added
twprojects-list_tasklist_budgets - Changed
twprojects-list_tasklists1 field changed- added
Input schema / properties / show_completedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, include completed tasklists; excluded by default." +}
- Changed
twprojects-list_tasks1 field changed- added
Input schema / properties / show_completedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": false, + "description": "If true, include completed tasks and tasks belonging to completed tasklists; both excluded by default." +}
- Added
twprojects-list_teams - Added
twprojects-list_users - Added
twprojects-list_workflow_stages - Added
twprojects-list_workflows - Added
twprojects-pause_timer - Added
twprojects-resume_timer - Added
twprojects-summarize_timelogs - Added
twprojects-update_comment - Added
twprojects-update_company - Added
twprojects-update_custom_field - Added
twprojects-update_custom_field_value - Added
twprojects-update_custom_item - Added
twprojects-update_custom_item_field - Added
twprojects-update_custom_item_record - Added
twprojects-update_link - Added
twprojects-update_message - Added
twprojects-update_message_reply - Added
twprojects-update_milestone - Added
twprojects-update_notebook - Added
twprojects-update_project - Added
twprojects-users_workload - Added
twspaces-create_tags
117 tool updates
v1.25.0- Removed
twchat-get_conversation - Removed
twchat-send_message - Removed
twdesk-create_company - Removed
twdesk-create_customer - Removed
twdesk-create_file - Removed
twdesk-create_helpdoc_article - Removed
twdesk-get_helpdoc_article - Removed
twdesk-get_inbox - Removed
twdesk-get_priority - Removed
twdesk-get_status - Removed
twdesk-get_tag - Removed
twdesk-get_ticket - Removed
twdesk-get_ticket_type - Removed
twdesk-get_user - Removed
twdesk-list_customers - Removed
twdesk-list_inboxes - Removed
twdesk-list_priorities - Removed
twdesk-list_statuses - Removed
twdesk-list_ticket_types - Removed
twdesk-list_users - Removed
twdesk-reply_ticket - Removed
twdesk-search_helpdoc_articles - Removed
twdesk-search_tickets - Removed
twdesk-update_company - Removed
twdesk-update_customer - Removed
twdesk-update_helpdoc_article - Removed
twdesk-update_priority - Removed
twdesk-update_status - Removed
twdesk-update_tag - Removed
twdesk-update_ticket - Removed
twdesk-update_ticket_type - Removed
twprojects-add_project_member - Removed
twprojects-clone_project - Removed
twprojects-complete_task - Removed
twprojects-complete_timer - Removed
twprojects-create_company - Removed
twprojects-create_custom_field - Removed
twprojects-create_custom_field_value - Removed
twprojects-create_custom_item_field - Removed
twprojects-create_custom_item_record - Removed
twprojects-create_jobrole - Removed
twprojects-create_link - Removed
twprojects-create_message - Removed
twprojects-create_message_reply - Removed
twprojects-create_milestone - Removed
twprojects-create_notebook - Removed
twprojects-create_project - Removed
twprojects-create_project_category - Removed
twprojects-create_project_template - Removed
twprojects-create_skill - Removed
twprojects-create_tasklist - Removed
twprojects-create_team - Removed
twprojects-create_timer - Removed
twprojects-create_user - Removed
twprojects-create_workflow - Removed
twprojects-create_workflow_stage - Removed
twprojects-get_comment - Removed
twprojects-get_custom_field - Removed
twprojects-get_custom_item - Removed
twprojects-get_custom_item_field - Removed
twprojects-get_custom_item_record - Removed
twprojects-get_jobrole - Removed
twprojects-get_link - Removed
twprojects-get_message - Removed
twprojects-get_message_reply - Removed
twprojects-get_milestone - Removed
twprojects-get_notebook - Removed
twprojects-get_project_category - Removed
twprojects-get_skill - Removed
twprojects-get_tag - Removed
twprojects-get_timelog - Removed
twprojects-get_timer - Removed
twprojects-get_user - Removed
twprojects-get_user_me - Removed
twprojects-get_workflow - Removed
twprojects-get_workflow_stage - Removed
twprojects-link_project_to_workflow - Removed
twprojects-list_activities - Removed
twprojects-list_calendar_events - Removed
twprojects-list_calendars - Removed
twprojects-list_companies - Removed
twprojects-list_custom_field_values - Removed
twprojects-list_custom_fields - Removed
twprojects-list_custom_item_fields - Removed
twprojects-list_custom_items - Removed
twprojects-list_industries - Removed
twprojects-list_jobroles - Removed
twprojects-list_links - Removed
twprojects-list_message_replies - Removed
twprojects-list_messages - Removed
twprojects-list_project_categories - Removed
twprojects-list_project_templates - Removed
twprojects-list_skills - Removed
twprojects-list_tags - Removed
twprojects-list_tasklist_budgets - Changed
twprojects-list_tasks2 fields changed- added
Input schema / properties / only_unassignedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, only return tasks that have no assignee." +} - added
Input schema / properties / only_unplannedAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, only return tasks that are unplanned, meaning they are missing an assignee, a due date, or estimated time." +}
- Removed
twprojects-list_teams - Removed
twprojects-list_users - Removed
twprojects-list_workflow_stages - Removed
twprojects-list_workflows - Removed
twprojects-pause_timer - Removed
twprojects-resume_timer - Removed
twprojects-update_comment - Removed
twprojects-update_company - Removed
twprojects-update_custom_field - Removed
twprojects-update_custom_field_value - Removed
twprojects-update_custom_item - Removed
twprojects-update_custom_item_field - Removed
twprojects-update_custom_item_record - Removed
twprojects-update_link - Removed
twprojects-update_message - Removed
twprojects-update_message_reply - Removed
twprojects-update_milestone - Removed
twprojects-update_notebook - Removed
twprojects-update_project - Removed
twprojects-users_workload - Removed
twspaces-create_tags
6 tool updates
v1.23.4- Changed
twprojects-list_tasks2 fields changed- added
Input schema / properties / due_afterAdded value: +{ + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter tasks due after.", + "examples": [ + "2023-01-01" + ] +} - added
Input schema / properties / due_beforeAdded value: +{ + "anyOf": [ + { + "format": "date", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Filter tasks due before.", + "examples": [ + "2023-12-31" + ] +}
- Removed
twspaces-delete_category - Removed
twspaces-delete_comment - Removed
twspaces-delete_page - Removed
twspaces-delete_space - Removed
twspaces-delete_tag
12 tool updates
v1.23.0- Changed
twprojects-create_comment1 field changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "Notify all followers of the entity this comment is related to.", - "enum": [ - true - ], - "type": "boolean" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "Notify all followers of the entity this comment is related to.", + "enum": [ + true + ], + "type": "boolean" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } + ] + }, + { + "type": "null" + } +]
- Changed
twprojects-create_link1 field changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } + ] + }, + { + "type": "null" + } +]
- Changed
twprojects-create_message1 field changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } + ] + }, + { + "type": "null" + } +]
- Changed
twprojects-create_message_reply1 field changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } + ] + }, + { + "type": "null" + } +]
- Changed
twprojects-create_milestone3 fields changed- changed
Input schema / properties / assignees / anyOfPrevious value: -[ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } -]New value: +[ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } +] - changed
Input schema / properties / assignees / maxPropertiesPrevious value: -3New value: +4 - added
Input schema / properties / assignees / properties / job_role_idsAdded value: +{ + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" +}
- Changed
twprojects-create_task4 fields changed- changed
Input schema / properties / assignees / anyOfPrevious value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / change_followers / anyOfPrevious value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / comment_followers / anyOfPrevious value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / complete_followers / anyOfPrevious value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
twprojects-update_comment1 field changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "description": "Notify all followers of the entity this comment is related to.", - "enum": [ - true - ], - "type": "boolean" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "description": "Notify all followers of the entity this comment is related to.", + "enum": [ + true + ], + "type": "boolean" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } + ] + }, + { + "type": "null" + } +]
- Changed
twprojects-update_link1 field changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } + ] + }, + { + "type": "null" + } +]
- Changed
twprojects-update_message1 field changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } + ] + }, + { + "type": "null" + } +]
- Changed
twprojects-update_message_reply1 field changed- changed
Input schema / properties / notify / anyOfPrevious value: -[ - { - "anyOf": [ - { - "description": "Notify all project members.", - "enum": [ - "all" - ], - "type": "string" - }, - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - } - ] - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "description": "Notify all project members.", + "enum": [ + "all" + ], + "type": "string" + }, + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + } + ] + }, + { + "type": "null" + } +]
- Changed
twprojects-update_milestone1 field changed- changed
Input schema / properties / assignees / anyOfPrevious value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
twprojects-update_task6 fields changed- changed
Input schema / properties / assignees / anyOfPrevious value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / assignees / descriptionPrevious value: -"Assignees for the task."New value: +"Assignees for the task. To remove all assignees, use clear_assignees instead." - changed
Input schema / properties / change_followers / anyOfPrevious value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - added
Input schema / properties / clear_assigneesAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "If true, removes all assignees from the task, leaving it unassigned. Cannot be combined with a non-empty assignees value." +} - changed
Input schema / properties / comment_followers / anyOfPrevious value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +] - changed
Input schema / properties / complete_followers / anyOfPrevious value: -[ - { - "anyOf": [ - { - "required": [ - "user_ids" - ] - }, - { - "required": [ - "company_ids" - ] - }, - { - "required": [ - "team_ids" - ] - } - ], - "maxProperties": 3, - "minProperties": 1, - "properties": { - "company_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "team_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - }, - "user_ids": { - "items": { - "type": "integer" - }, - "minItems": 1, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "anyOf": [ + { + "required": [ + "user_ids" + ] + }, + { + "required": [ + "company_ids" + ] + }, + { + "required": [ + "team_ids" + ] + }, + { + "required": [ + "job_role_ids" + ] + } + ], + "maxProperties": 4, + "minProperties": 1, + "properties": { + "company_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "job_role_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "team_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + }, + "user_ids": { + "items": { + "type": "integer" + }, + "minItems": 1, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
2 tool updates
v1.21.6- Changed
twprojects-create_timelog1 field changed- removed
Input schema / properties / billable / defaultRemoved value: -false
- Changed
twprojects-update_timelog1 field changed- removed
Input schema / properties / billable / defaultRemoved value: -false
TDQS
Scored across 213 tools
The module prefixes (twprojects, twdesk, twchat, twspaces) combined with a consistent verb_noun naming pattern make most tools clearly distinct. However, the vast number of tools (213) creates some ambiguity between similar operations across modules (e.g., create_tag in projects, desk, and spaces) and a few near-duplicates like send_dm vs send_message.
The overwhelming majority of tools follow a clear prefix + verb_noun convention (e.g., twprojects-list_tasks, twdesk-update_ticket). Minor deviations exist, such as twprojects-users_workload (noun_noun instead of verb_noun) and compound verbs like link_task_to_allocation, but these are rare and the pattern is still predictable.
213 tools is an extreme number for any MCP server. Even for a comprehensive integration spanning Projects, Desk, Chat, and Spaces, this far exceeds the typical well-scoped range (3-15 tools) and falls into the 50+ extreme mismatch category. The sheer volume makes it impractical for an agent to select from effectively.
While the server covers a broad set of entities (projects, tasks, tickets, pages, chats, custom items, etc.) with create/get/update/list operations, it is notably missing delete operations for virtually every entity (e.g., no twprojects-delete_task, no twdesk-delete_ticket, no twspaces-delete_page). This is a significant gap in lifecycle coverage that will force agents into dead ends when cleanup or removal is requested.
Maintenance
Related MCP Connectors
Official MCP server for Agentwork โ delegate tasks to AI agents with human-in-the-loop
Official MCP server for Certifier to issue, manage, and track certificates and badges.
Official TimeToPost MCP server for social post drafting, scheduling, publishing and approval queues.
Related MCP Servers
- MIT
- AlicenseBqualityCmaintenanceAn MCP server that connects to the Teamwork API, providing a simplified interface for interacting with Teamwork projects and tasks.3623 npm13MIT
- AlicenseNot gradedqualityAmaintenanceOfficial MCP Server for Buildkite.54MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that connects to the Teamwork API, providing tools to manage projects, tasks, companies, people, time entries, and reports, with built-in competitive intelligence capabilities.23 npmMIT