Teamwork MCP
The Teamwork MCP server provides a simplified interface for interacting with Teamwork through RESTful API endpoints, allowing you to:
Project Management: Retrieve, create, and manage projects
Task Management: Create, update, delete tasks and subtasks; access task metrics and comments
People Management: Manage team members and their project assignments; retrieve utilization metrics
Company Management: Create, update, and delete companies
Reporting & Metrics: Generate reports on task completion, user performance, and utilization
Time Management: Access time entries and project allocations
Comments: Create comments for tasks, milestones, notebooks, and files
Integration: Easily integrate with applications like Cursor via MCP capabilities
Supports configuration management for the Teamwork MCP server, allowing secure storage of API credentials and server settings.
Serves as the runtime environment for the MCP server that connects to Teamwork, enabling project management operations like retrieving, creating, updating, and deleting tasks.
Enables seamless interaction with the Teamwork project management API, providing tools for managing projects, tasks, subtasks, people, and generating reports like utilization data in various formats.
Click on "Install 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., "@Teamwork MCPshow me all tasks for project 12345 that are overdue"
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
An MCP server that connects to the Teamwork API, providing a simplified interface for interacting with Teamwork projects and tasks.
Features
Connect to Teamwork API
Retrieve projects and tasks
Create, update, and delete tasks
RESTful API endpoints
Error handling and logging
MCP server for integration with Cursor and other applications
Related MCP server: Teamwork
Prerequisites
Node.js (v14.17 or higher, recommend 18+ or even better latest LTS version)
npm or yarn
Teamwork account with API access
Available Teamwork MCP Tools
The following tools are available through the MCP server:
Project Tools
getProjects- Get all projects from TeamworkgetCurrentProject- Gets details about the current projectcreateProject- Create a new project in Teamwork
Task Tools
getTasks- Get all tasks from TeamworkgetTasksByProjectId- Get all tasks from a specific project in TeamworkgetTaskListsByProjectId- Get all task lists from a specific project in TeamworkgetTasksByTaskListId- Gets all tasks from a specific task list ID from TeamworkgetTaskById- Get a specific task by ID from TeamworkcreateTask- Create a new task in TeamworkcreateSubTask- Create a new subtask under a parent task in TeamworkupdateTask- Update an existing task in TeamworkdeleteTask- Delete a task from TeamworkgetTasksMetricsComplete- Get the total count of completed tasks in TeamworkgetTasksMetricsLate- Get the total count of late tasks in TeamworkgetTaskSubtasks- Get all subtasks for a specific task in TeamworkgetTaskComments- Get comments for a specific task from Teamwork
Comment Tools
createComment- Create a comment related to a task/message/notebook
Company Tools
getCompanies- Get all companies from Teamwork with optional filteringgetCompanyById- Get a specific company by IDcreateCompany- Create a new company in TeamworkupdateCompany- Update an existing company's informationdeleteCompany- Delete a company from Teamwork
People Tools
getPeople- Get all people from TeamworkgetPersonById- Get a specific person by ID from TeamworkgetProjectPeople- Get all people assigned to a specific project from TeamworkaddPeopleToProject- Add people to a specific project in TeamworkdeletePerson- Delete a person from TeamworkupdatePerson- Update a person's information (timezone, name, email, etc.)getProjectsPeopleMetricsPerformance- Get people metrics performancegetProjectsPeopleUtilization- Get people utilizationgetProjectPerson- Get a specific person on a project
Reporting Tools
getProjectsReportingUserTaskCompletion- Get user task completion reportgetProjectsReportingUtilization- Get utilization report in various formats CSV & HTML
Time Tools
getTime- Get all time entriesgetProjectsAllocationsTime- Get project allocations timegetTimezones- Get all available timezones in Teamwork (useful when updating user timezones)
Installation
Using NPX (Recommended)
The easiest way to use Teamwork MCP is with npx. This method doesn't require cloning the repository or building the code locally:
npx @vizioz/teamwork-mcpYou can also pass configuration options directly:
npx @vizioz/teamwork-mcp --domain=your-company --user=your-email@example.com --pass=your-passwordConfiguration
Setting Credentials
You can provide your Teamwork credentials in three ways:
Environment Variables: Set
TEAMWORK_DOMAIN,TEAMWORK_USERNAME, andTEAMWORK_PASSWORDin your environment..env File: Create a
.envfile with the required variables:TEAMWORK_DOMAIN=your-company TEAMWORK_USERNAME=your-email@example.com TEAMWORK_PASSWORD=your-passwordCommand Line Arguments: Pass credentials when running the application:
npx @vizioz/teamwork-mcp --teamwork-domain=your-company --teamwork-username=your-email@example.com --teamwork-password=your-passwordOr using short form:
npx @vizioz/teamwork-mcp --domain=your-company --user=your-email@example.com --pass=your-password
Logging Configuration
By default, the Teamwork MCP server creates log files in a logs directory to help with debugging and monitoring. You can disable logging completely using the following methods:
Command Line Arguments:
npx @vizioz/teamwork-mcp --disable-loggingOr using the alternative form:
npx @vizioz/teamwork-mcp --no-loggingEnvironment Variable:
DISABLE_LOGGING=true npx @vizioz/teamwork-mcp
When logging is enabled, the server creates two log files in the logs directory:
error.log- Contains only error-level messagescombined.log- Contains all log messages (info, warnings, errors)
Each log file includes a header with instructions on how to disable logging if needed.
Tool Filtering
You can control which tools are available to the MCP server using the following command-line arguments:
Allow List: Only expose specific tools:
npx @vizioz/teamwork-mcp --allow-tools=getProjects,getTasks,getTaskByIdOr using short form:
npx @vizioz/teamwork-mcp --allow=getProjects,getTasks,getTaskByIdDeny List: Expose all tools except those specified:
npx @vizioz/teamwork-mcp --deny-tools=deleteTask,updateTaskOr using short form:
npx @vizioz/teamwork-mcp --deny=deleteTask,updateTask
Tool Filtering with Groups
You can now specify groups of tools for filtering, allowing for more flexible control over which tools are available to the MCP server. The available groups are:
Projects: Includes all project-related tools.
Tasks: Includes all task-related tools.
People: Includes all people-related tools.
Reporting: Includes all reporting-related tools.
Time: Includes all time-related tools.
Comments: Includes specific comment tools.
Using Groups in Tool Filtering
You can specify these groups in the allow or deny lists to include or exclude all tools within a group. For example:
Allow List with Groups: Only expose specific groups of tools:
npx @vizioz/teamwork-mcp --allow-tools=Tasks,PeopleOr using short form:
npx @vizioz/teamwork-mcp --allow=Tasks,PeopleDeny List with Groups: Expose all tools except those in specified groups:
npx @vizioz/teamwork-mcp --deny-tools=Reporting,TimeOr using short form:
npx @vizioz/teamwork-mcp --deny=Reporting,Time
By default, all tools are exposed if neither allow nor deny list is provided. If both are provided, the allow list takes precedence.
The tool filtering is enforced at two levels for enhanced security:
When listing available tools (tools not in the allow list or in the deny list won't be visible)
When executing tool calls (attempts to call filtered tools will be rejected with an error)
Setting Up Your Teamwork Project
To associate your current solution with a Teamwork project, you can use the following method:
Using a Configuration File
You can create a .teamwork file in the root of your project with the following structure:
PROJECT_ID = YourTeamworkProjectIDThis simple configuration file associates your solution with a specific Teamwork project, we may use it to store more details in the future.
Once configured, the MCP will be able to find your Teamwork project and associate it with your current solution, reducing the number of API calls needed to get the project and tasks related to the solution you are working on.
Adding to MCP Clients
Cursor
To add this MCP server to Cursor:
Versions before 0.47
Open Cursor Settings > Features > MCP
Click "+ Add New MCP Server"
Enter a name for the server (e.g., "Teamwork API")
Select "stdio" as the transport type
Enter the command to run the server:
npx @vizioz/teamwork-mcpand add the credentials and domain command line arguments as mentioned above.You can include tool filtering options:
--allow=getProjects,getTasksor--deny=deleteTask
Click "Add"
Versions after 0.47 (editing the config manually)
"Teamwork": {
"command": "npx",
"args": [
"-y",
"@vizioz/teamwork-mcp",
"--domain",
"yourdomain",
"--user",
"youruser@yourdomain.com",
"--pass",
"yourPassword"
]
}To disable logging in Cursor, add the --disable-logging argument:
"Teamwork": {
"command": "npx",
"args": [
"-y",
"@vizioz/teamwork-mcp",
"--domain",
"yourdomain",
"--user",
"youruser@yourdomain.com",
"--pass",
"yourPassword",
"--disable-logging"
]
}If you want to add the allow or deny arguments mentioned above you just add them like this, you can add any of the examples given above, you can also add both groups and individual tools as shown below:
"Teamwork": {
"command": "npx",
"args": [
"-y",
"@vizioz/teamwork-mcp",
"--domain",
"yourdomain",
"--user",
"youruser@yourdomain.com",
"--pass",
"yourPassword",
"--allow",
"Tasks,Projects",
"--deny",
"getProjectsPeopleMetricsPerformance,getProjectsPeopleUtilization"
]
}The Teamwork MCP tools will now be available to the Cursor Agent in Composer.
Claude Desktop
To add this MCP server to Claude Desktop, edit your Claude Desktop configuration file:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Add the following configuration:
{
"mcpServers": {
"teamwork": {
"command": "npx",
"args": [
"-y",
"@vizioz/teamwork-mcp",
"--domain",
"yourdomain",
"--user",
"youruser@yourdomain.com",
"--pass",
"yourPassword"
]
}
}
}Windsurf
To add this MCP server to Windsurf, follow similar steps to Cursor by adding the MCP server configuration with the npx command and your credentials.
Building from Source
Note: You only need to follow these instructions if you plan to contribute to the project or submit a pull request. For regular usage, use the NPX installation method above.
Local Development Setup
Clone the repository:
git clone https://github.com/readingdancer/teamwork-mcp.git cd teamwork-mcpInstall dependencies:
npm installCreate a
.envfile based on the.env.examplefile:cp .env.example .envUpdate the
.envfile with your Teamwork credentials:PORT=3000 NODE_ENV=development LOG_LEVEL=info TEAMWORK_DOMAIN=your-company TEAMWORK_USERNAME=your-email@example.com TEAMWORK_PASSWORD=your-password
Building the Application
Build the application:
npm run buildThis will compile the TypeScript code ready to be used as an MCP Server.
Running as an MCP Server (Local Build)
To run as an MCP server for integration with Cursor and other applications, if you are using the .env file for your username, password & url, or if you have saved them in environment variables:
NOTE: Don't forget to change the drive and path details based on where you have saved the repository.
node C:/your-full-path/build/index.jsOr you can pass them using line arguments:
node C:/your-full-path/build/index.js --teamwork-domain=your-company --teamwork-username=your-email@example.com --teamwork-password=your-passwordYou can also use the short form:
node C:/your-full-path/build/index.js --domain=your-company --user=your-email@example.com --pass=your-passwordUsing the MCP Inspector
To run the MCP inspector for debugging:
npm run inspectorLicense
This project is licensed under the MIT License - see the LICENSE file for details.
Disclaimer
This project is not affiliated with, endorsed by, or sponsored by Teamwork.com. The use of the name "Teamwork" in the package name (@vizioz/teamwork-mcp) is solely for descriptive purposes to indicate compatibility with the Teamwork.com API.
Available Tools
36 toolsaddPeopleToProjectB
Add people to a specific project in Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to add people to | |
| userIds | Yes | Array of user IDs to add to the project | |
| checkTeamIds | No | Optional array of team IDs to check |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations: it indicates a write operation (readOnlyHint=false) and non-destructive action (destructiveHint=false). However, it provides no additional behavioral context, such as whether adding people appends or replaces existing members, 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, concise sentence without any wasted words. It is appropriately front-loaded with the action and resource. However, it could include slightly more detail 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?
Given there is no output schema, the description should provide some indication of the result (e.g., success response, error conditions, or side effects). It does not, leaving the agent without expectations for the return value or state changes beyond the basic 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?
The input schema already documents all three parameters with clear descriptions (100% coverage). The description does not add any new meaning beyond what is in the schema, 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 clearly states the tool adds people to a specific project. It uses a specific verb ('Add') and resource ('people to a specific project'), making the purpose understandable. However, it lacks differentiation from sibling tools like 'createProject' which might also involve adding people.
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 (e.g., using project creation to include members, or other assignment tools). There is no 'when not to use' or mention of prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCommentB
Creates a new comment for a specific resource (tasks, milestones, notebooks, links, fileversions) in Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| resource | Yes | The resource type (tasks, milestones, notebooks, links, fileversions) | |
| resourceId | Yes | The ID of the resource to add a comment to | |
| body | Yes | The content of the comment | |
| notify | No | Who to notify ('all' to notify all project users, 'true' to notify followers, specific user IDs, or empty for no notification) | |
| isPrivate | No | Whether the comment should be private | |
| pendingFileAttachments | No | Comma-separated list of pending file references to attach to the comment | |
| contentType | No | Content type of the comment (html or plain text) | plaintext |
| authorId | No | ID of the user to post as (only for admins) |
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 adds no behavioral context beyond what the schema provides. It does not explain side effects like whether the comment is posted immediately, if notifications trigger, or what happens on failure.
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, making it highly concise. It successfully conveys the core function 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?
Despite having 8 parameters and no output schema, the description provides minimal context. It fails to explain the comment creation workflow, what the response contains, or how the notify/isPrivate parameters affect behavior. A richer description 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?
Input schema has 100% description coverage, so each parameter is already documented. The description does not add any meaning beyond the schema; it merely repeats the verb 'creates a comment'.
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 it creates a comment and lists the specific resource types (tasks, milestones, notebooks, links, fileversions). This clearly distinguishes it from sibling tools like createTask or createProject which create different entities.
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 for adding comments to resources, but it does not explicitly state when to use this tool versus alternatives like updateTask or getTaskComments. No exclusion criteria or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createCompanyC
Create a new company. This tool allows you to create a company. The request requires a companyRequest object with various properties like addressOne, emailOne, name, and tags.
| Name | Required | Description | Default |
|---|---|---|---|
| companyRequest | Yes | ||
| options | No | Additional options for the request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it is not read-only (readOnlyHint: false) and not destructive (destructiveHint: false). The description adds that it creates a company, which is consistent, but does not disclose behavioral details like idempotency, duplicate handling, or 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 two sentences, but the second sentence largely repeats the first. It could be more concise without losing meaning, e.g., 'Create a company using a companyRequest object with properties like address, email, name, and tags.'
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 nested object structure and lack of output schema, the description fails to clarify that 'name' is required within the nested 'company' object, and does not describe the return value. It omits important context 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?
The input schema has detailed descriptions for many properties (90% coverage by my count), so the description's mention of a few properties adds little value. The schema already defines the companyRequest object structure, making the description's contribution marginal.
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 'Create a new company' with a specific verb and resource. It is distinct from siblings like updateCompany and deleteCompany, but the description is somewhat redundant and lacks additional specificity.
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 updateCompany or deleteCompany. There is no mention of prerequisites, error handling, or usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createProjectB
Create a new project in Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The name of the project (required) | |
| description | No | The description of the project | |
| companyId | No | The ID of the company the project belongs to | |
| categoryId | No | The ID of the category the project belongs to | |
| startDate | No | The start date of the project (format: YYYYMMDD) | |
| endDate | No | The end date of the project (format: YYYYMMDD) | |
| status | No | The status of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the agent knows it's a write operation. The description adds no extra behavioral context 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?
Single sentence, no wasted words, straight to the point. Front-loaded with the key 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?
Description is minimal with no output schema. While schema covers parameters, the description does not explain return values or behavior like permission requirements. Adequate but not comprehensive.
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 has 100% description coverage for all 7 parameters. Tool description adds no additional meaning beyond the schema descriptions, so score is at 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?
Description clearly states verb 'create', resource 'project', and system 'Teamwork'. It distinguishes from siblings by name and title, but does not explicitly differentiate from other creation tools like createTask or createCompany.
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 such as addPeopleToProject or createTask. No prerequisites or context provided for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createSubTaskB
Creates a subtask. Create a new subtask under the provided parent task.
| Name | Required | Description | Default |
|---|---|---|---|
| taskRequest | Yes | Request body: taskRequest | |
| taskId | Yes | Path parameter: taskId |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate the tool is not read-only and not destructive, but the description adds no further behavioral context such as required permissions, side effects on parent task, or notification defaults. Minimal transparency 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 concise (two sentences) but contains redundancy: 'Creates a subtask. Create a new subtask...' could be merged. Structurally fine but not maximally 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?
Given the complexity of the schema (many nested objects and options) and no output schema, the description fails to provide sufficient context about how to use the tool effectively. Important details like identifying the parent task are left implicit.
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 baseline is 3. The description does not add any additional meaning to parameters 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 clearly states the action ('Creates a subtask') and distinguishes from sibling tools like createTask by specifying 'under the provided parent task'. This provides clear purpose and 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 implies usage when a subtask needs to be created under a parent task, but it does not explicitly state when not to use it or suggest alternatives for top-level tasks. Usage context is implied but not articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createTaskB
Creates a task. Create a new task in the provided task list.
| Name | Required | Description | Default |
|---|---|---|---|
| taskRequest | Yes | Request body: taskRequest | |
| tasklistId | Yes | Path parameter: tasklistId |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the write nature is clear. The description adds no additional behavioral context (e.g., side effects, auth needs). No contradiction, but no 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?
Two sentences, but the second is largely redundant with the first. Could be shortened to one sentence without loss. Adequate but not tight.
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 input schema (nested objects, many fields), the description is too minimal. No mention of return values, error handling, or required fields like tasklistId being mandatory. The output schema is missing, but annotations provide limited safety 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%, with inline descriptions for each parameter (e.g., 'Path parameter: tasklistId'). The tool description adds no parameter-specific information, so it relies entirely on the schema for 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 'Creates a task' and specifies 'Create a new task in the provided task list,' providing a specific verb and resource. It distinguishes from siblings like createSubTask and updateTask by focusing on top-level task creation.
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 like createSubTask or updateTask. The description does not mention prerequisites (e.g., existing task list) or when not to use it. The agent must infer from the required parameter tasklistId.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteCompanyADestructive
This tool allows you to delete a company, be careful with this tool as it will delete the company and all associated data. It requires the following parameters: companyId.
| Name | Required | Description | Default |
|---|---|---|---|
| companyId | Yes | Path parameter: companyId |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description adds that it deletes 'all associated data', providing useful context beyond the annotation.
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, but slightly wordy ('be careful with this tool as it will delete...'). Could be more 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?
For a simple deletion tool with no output schema and adequate annotations, the description is nearly complete. It could mention if the company must exist or error 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 coverage is 100% with a description for companyId. The description repeats the parameter necessity but adds no new 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 clearly states the action (delete) and the resource (company). It distinguishes from sibling tools like deletePerson and deleteTask, as it specifically targets 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 description includes a warning about the irreversible nature of the deletion, but lacks explicit guidance on when to use this tool versus alternatives or conditions for safe usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deletePersonBDestructive
Delete a person from Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| personId | Yes | The ID of the person to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description merely repeats the destructive nature already indicated by destructiveHint=true. It adds no extra behavioral context, such as permanence, cascading effects, 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?
Single sentence, front-loaded with key action and resource. No unnecessary 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 delete operation with annotations, the description is adequate but could mention permanence or that the deletion is irrevocable. Lacks detail about side effects.
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 description of personId being clear. The tool 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 clearly states the action (delete), resource (person), and system (Teamwork), making it easy to distinguish from sibling tools like deleteTask or deleteCompany.
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 (e.g., updatePerson or getPersonById). No preconditions or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deleteTaskBDestructive
Delete a task from Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the annotation destructiveHint: true. It does not clarify whether the deletion is permanent 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 a single direct sentence, concise and front-loaded. It is not verbose but could include more context without losing 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 destructive tool with one parameter, the description is minimally adequate. It lacks detail on operation result or confirmation, but the annotations partially compensate.
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 parameter description 'The ID of the task to delete'. The tool description adds no extra 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 explicitly states 'Delete a task from Teamwork', providing a specific verb and resource. It clearly distinguishes from sibling tools like createTask or updateTask.
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 or when not to. It does not mention alternatives or prerequisites, relying solely on the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCompaniesB
Get a list of companies, retrieve all companies for the provided filters. This endpoint allows you to filter companies by various parameters including custom fields, tags, search terms, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| searchTerm | No | Filter by company name and description | |
| page | No | Page number for pagination | |
| pageSize | No | Number of items per page | |
| orderBy | No | Field to order results by (e.g., name, dateadded, etc.) | |
| orderMode | No | Sort order (asc or desc) | |
| tagIds | No | Filter by tag IDs | |
| includeCustomFields | No | Include custom fields in the response | |
| fullProfile | No | Include full profile information | |
| getStats | No | Include stats of company tasks and projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Get' indicating a read-only operation, but annotations set readOnlyHint=false, contradicting the description. No additional behavioral context is provided beyond 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?
Two concise sentences with no wasted words, front-loaded with the main 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?
The description covers basic purpose and filtering but lacks details on pagination, ordering, and optionality of parameters. Adequate for a list endpoint but could be more 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 description adds minimal value. It highlights some filter types (custom fields, tags, search terms) but does not clarify behavior beyond 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 specific verb 'Get' and resource 'companies', and mentions filtering capabilities. It clearly distinguishes from sibling getCompanyById by implying list vs single 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?
The description implies when to use (when a filtered list of companies is needed) but does not explicitly state exclusions or alternatives like getCompanyById for single company retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCompanyByIdB
Get a specific company by ID. Retrieves detailed information about a company identified by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| companyId | Yes | The ID of the company to retrieve | |
| includeCustomFields | No | Include custom fields in the response | |
| fullProfile | No | Include full profile information | |
| getStats | No | Include stats of company tasks and projects |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only operation ('Retrieves'), but annotations set readOnlyHint to false, creating a contradiction. No additional behavioral traits disclosed (e.g., error handling, authentication needs).
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, first is direct, second is slightly redundant. Could be more concise, but overall efficient and 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?
Missing output schema description and does not explain what 'detailed information' includes or how the boolean parameters affect the response. Incomplete for a 4-parameter retrieval 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 parameters are well-documented there. The description adds no extra meaning to the parameters beyond what is 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 clearly states the verb 'Get' and the resource 'company by ID', distinguishing it from siblings like 'getCompanies' (list) and mutation tools such as 'createCompany' or 'updateCompany'. The title matches.
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 vs alternatives (e.g., 'getCompanies' for a list, or 'getCurrentProject' for a different entity). No mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getCurrentProjectA
Get the current solution's Teamwork project, always check the .teamwork file in the root of the solution for the Teamwork project ID or ask the user which project they are working on.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The current Teamwork project ID associated with the solution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context (checking a file, asking user) beyond annotations. No contradiction with annotations; readOnlyHint false is not clearly contradicted by 'get' since it may imply a mutation? Actually, 'get' suggests read-only, but annotation says false, so slight ambiguity. But description doesn't mention mutations, so 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 a single sentence but includes an imperative instruction. It is relatively concise and front-loaded with the purpose, though it could be more streamlined.
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?
Missing output schema and no description of what the tool returns. The tool likely returns a project object, but this is not specified. Given the complexity and sibling tools, more details would be beneficial.
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 a clear description for projectId (100% coverage). The tool description adds little additional meaning, just that the parameter can be obtained from a file or user.
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 it gets the Teamwork project for the current solution, using a specific resource and verb. It mentions checking a file or asking the user, which adds specificity but could be clearer about how it differs from getProjectById.
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 advises checking a file or asking the user, implying when to use it. However, it does not explicitly state when not to use it or contrast with sibling tools like getProjects or getProjectById.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPeopleC
Get all people from Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| userType | No | Filter by user type | |
| updatedAfter | No | Filter by users updated after this date-time (format: ISO 8601) | |
| searchTerm | No | Filter by name or email | |
| orderMode | No | Order mode | |
| orderBy | No | Order by field | |
| lastLoginAfter | No | Filter by users who logged in after this date-time | |
| pageSize | No | Number of items per page | |
| page | No | Page number | |
| includeCollaborators | No | Include collaborator users | |
| includeClients | No | Include client users | |
| teamIds | No | Filter by team IDs | |
| projectIds | No | Filter by project IDs | |
| companyIds | No | Filter by company IDs |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint: false, destructiveHint: false) and contradictory (readOnlyHint false for a read operation). Description adds no behavioral traits like pagination, auth requirements, or rate limits, providing little transparency beyond the bare 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?
The description is a single concise sentence with no waste. It is front-loaded with the action and resource, but could benefit from slight expansion for clarity 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?
Despite schema coverage, the description is incomplete for a tool with 13 parameters and no output schema. It omits details on pagination, filtering behavior, ordering, result format, and response structure, leaving significant 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?
Input schema has full coverage (100%) with descriptions for all 13 parameters. The description does not add any additional semantics, examples, or context 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 all people from Teamwork' clearly states the verb (Get) and resource (people), and specifies the source (Teamwork). It is not a tautology and distinguishes from siblings like getPersonById, though it could be more specific about what 'people' includes.
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 such as getProjectPeople, getPersonById, or getProjectPerson. The description does not mention any context or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPersonByIdB
Get a specific person by ID from Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| personId | Yes | The ID of the person to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read operation ('Get'), but the annotation 'readOnlyHint' is false, suggesting potential write behavior. This contradiction misleads the agent about the tool's safety profile.
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 unnecessary words, efficiently conveying the tool's 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?
For a simple retrieval tool, the description covers the basic purpose but omits details about the return value or any additional behavior, which is adequate but not thorough.
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 the single parameter 'personId', and the description adds no extra semantic value 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 'Get a specific person by ID from Teamwork' clearly states the action (get) and resource (person by ID), distinguishing it from sibling tools like getPeople or deletePerson.
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 getPeople or other person-related tools, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getProjectPeopleB
Get all people assigned to a specific project from Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to get people from | |
| userType | No | Filter by user type | |
| searchTerm | No | Filter by name or email | |
| orderMode | No | Order mode | |
| orderBy | No | Order by field | |
| pageSize | No | Number of items per page | |
| page | No | Page number | |
| includeObservers | No | Include project observers |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Get' which implies a read-only operation, but annotations set readOnlyHint to false, indicating potential side effects. This contradiction undermines trust. No additional behavioral context like authentication needs or rate limits 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?
Single sentence, front-loaded with the main action, no extraneous words. Ideal 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?
No output schema is provided, and the description does not hint at return format or pagination. For a tool with 8 parameters including pagination and filters, the description lacks 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?
All parameters have clear descriptions in the schema, so the description adds no extra value. Baseline score of 3 is appropriate as 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 clearly states the tool retrieves all people assigned to a specific project, using specific verb 'Get' and resource 'people' scoped to a project. It distinguishes from sibling tools like getPeople (all people) and getPersonById (single person).
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 such as addPeopleToProject or getPeople. No context on prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getProjectPersonBRead-onlyIdempotent
Returns one or more people on a project. Retrieve a person(s) record.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Path parameter: projectId | |
| personId | Yes | Path parameter: personId | |
| userType | No | user type | |
| updatedAfter | No | date time | |
| searchTerm | No | filter by comment content | |
| orderMode | No | order mode | |
| orderBy | No | order by | |
| lastLoginAfter | No | Query parameter: lastLoginAfter | |
| pageSize | No | number of items in a page (not used when generating reports) | |
| page | No | page number (not used when generating reports) | |
| skipCounts | No | SkipCounts allows you to skip doing counts on a list API endpoint for performance reasons. | |
| showDeleted | No | include deleted items | |
| searchUserJobRole | No | Include user job role in search | |
| orderPrioritiseCurrentUser | No | Force to have the current/session user in the response | |
| onlySiteOwner | No | Query parameter: onlySiteOwner | |
| onlyOwnerCompany | No | return people only from the owner company. This will replace any provided company ID. | |
| inclusiveFilter | No | make the filter inclusive for user ids, teamIds, companyIds | |
| includeServiceAccounts | No | include service accounts | |
| includePlaceholders | No | include placeholder users | |
| includeCollaborators | No | exclude collaborators types, returning only account and contact. | |
| includeClients | No | include clients | |
| filterByNoCostRate | No | Returns users who are missing cost rates(OCA only) | |
| excludeContacts | No | exclude contact types, returning only account and collaborator. | |
| teamIds | No | team ids | |
| projectIds | No | filter by project ids | |
| include | No | include (not used when generating reports) | |
| ids | No | filter by user ids | |
| fieldsTeams | No | Query parameter: fields[teams] | |
| fieldsPerson | No | Query parameter: fields[person] | |
| fieldsPeople | No | Query parameter: fields[people] | |
| fieldsCompanies | No | Query parameter: fields[companies] | |
| fieldsProjectPermissions | No | Query parameter: fields[ProjectPermissions] | |
| excludeProjectIds | No | exclude people assigned to certain project id | |
| excludeIds | No | exclude certain user ids | |
| companyIds | No | company ids |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true, so the agent knows it's safe. The description adds minimal behavioral context (returns one or more people, retrieves a record) but does not explain pagination, filtering behavior, or output format—leaving gaps despite good annotation coverage.
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?
Description is very short (two sentences) and front-loaded with the purpose. However, it could be slightly more concise by removing redundancy ('Returns one or more people' and 'Retrieve a person(s) record' overlap).
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 high complexity (35 parameters) and no output schema, the description is insufficient. It does not explain how to use the many optional filters, pagination parameters, or what the response structure looks like. More detail is needed for the agent to effectively use 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%, with each parameter having a short description. The tool description adds 'Returns one or more people on a project. Retrieve a person(s) record.' which does not enhance parameter understanding beyond the schema. 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 clearly states it returns people on a project, using specific verb 'Returns' and resource 'people on a project'. However, it does not explicitly differentiate from sibling tools like getProjectPeople or getPeople, which could cause 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?
No guidance on when to use this tool versus alternatives. No prerequisites, context, or exclusions mentioned. The description is generic and does not help the agent decide when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getProjectsC
Get all projects from Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| updatedAfter | No | Filter projects updated after this date-time (format: ISO 8601) | |
| timeMode | No | Profitability time mode | |
| searchTerm | No | Filter by project name | |
| reportType | No | Define the type of the report | |
| reportTimezone | No | Configure the report dates displayed in a timezone | |
| reportFormat | No | Define the format of the report | |
| projectType | No | Filter by project type | |
| orderMode | No | Order mode | |
| orderBy | No | Order by field | |
| notCompletedBefore | No | Filter by projects that have not been completed before the given date (format: YYYY-MM-DD) | |
| minLastActivityDate | No | Filter by min last activity date (format: YYYY-MM-DD) | |
| maxLastActivityDate | No | Filter by max last activity date (format: YYYY-MM-DD) | |
| userId | No | Filter by user id | |
| pageSize | No | Number of items in a page (not used when generating reports) | |
| page | No | Page number (not used when generating reports) | |
| orderByCustomFieldId | No | Order by custom field id when orderBy is equal to customfield | |
| minBudgetCapacityUsedPercent | No | Filter by minimum budget capacity used | |
| maxBudgetCapacityUsedPercent | No | Filter by maximum budget capacity used | |
| includeArchivedProjects | No | Include archived projects | |
| includeCompletedProjects | No | Include completed projects | |
| includeProjectOwner | No | Include project owner | |
| includeProjectCreator | No | Include project creator | |
| includeProjectCompany | No | Include project company | |
| includeProjectCategory | No | Include project category | |
| includeProjectTags | No | Include project tags | |
| includeProjectStatus | No | Include project status | |
| includeProjectHealth | No | Include project health | |
| includeProjectBudget | No | Include project budget | |
| includeProjectProfitability | No | Include project profitability | |
| includeProjectCustomFields | No | Include project custom fields | |
| includeProjectBillingMethod | No | Include project billing method | |
| includeProjectRateCards | No | Include project rate cards | |
| includeProjectRateCardRates | No | Include project rate card rates | |
| includeProjectRateCardCurrencies | No | Include project rate card currencies | |
| includeProjectRateCardUsers | No | Include project rate card users | |
| includeProjectRateCardUserRates | No | Include project rate card user rates | |
| includeProjectRateCardUserCurrencies | No | Include project rate card user currencies | |
| includeProjectRateCardTasks | No | Include project rate card tasks | |
| includeProjectRateCardTaskRates | No | Include project rate card task rates | |
| includeProjectRateCardTaskCurrencies | No | Include project rate card task currencies |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description states 'Get' implying a read-only operation, but annotations set readOnlyHint: false, indicating possible side effects. This contradiction confuses whether the tool modifies data. No additional behavioral details are 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?
Single sentence is concise and front-loaded. However, it sacrifices essential details like behavior and usage context, but it remains non-redundant.
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 40 parameters, no output schema, and no usage guidance, the description is insufficient. It does not explain pagination, the effect of include booleans, or how filters interact with the 'all' claim. Agents need more context to invoke 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?
All 40 parameters have descriptions in the schema (100% coverage). The description adds no extra parameter information beyond what the schema already provides, 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?
Description 'Get all projects from Teamwork' clearly specifies the action (get) and resource (projects). It distinguishes from sibling tools like 'getCurrentProject' which targets a single project. However, saying 'all' is slightly misleading because the schema includes many filters, implying it can return a subset.
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 (e.g., getCurrentProject, createProject). An agent would need to infer the use case 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.
getProjectsAllocationsTimeB
Get time entries for a specific allocation. Return logged time entries for a specific allocation. Only the time entries that the logged-in user can access will be returned.
| Name | Required | Description | Default |
|---|---|---|---|
| allocationId | Yes | filter by allocation id | |
| updatedAfter | No | filter by updated after date | |
| startDate | No | filter by a starting date | |
| endDate | No | filter by an ending date | |
| orderBy | No | sort order | |
| orderMode | No | order mode | |
| page | No | page number | |
| pageSize | No | number of items in a page | |
| includeTotals | No | include totals | |
| includePermissions | No | include permissions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Get time entries', which indicates a read-only operation, but the annotation readOnlyHint is false, suggesting the tool may modify state. This is a direct contradiction. The description also adds access control context but fails to resolve the inconsistency.
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 (two sentences) but contains redundancy: the first two sentences essentially repeat the same information. It could be more concise by merging them.
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 mentions that only accessible time entries are returned, which is useful. However, it lacks details about the structure of the response, pagination behavior, or how parameters like page and pageSize work, especially since 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?
Schema coverage is 100%, so the baseline is 3. The description does not add additional meaning beyond what the schema provides for each parameter, e.g., it does not explain the format of date strings or the effect of orderBy options.
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 that the tool retrieves time entries for a specific allocation, using the verb 'Get' and specifying the resource 'time entries for a specific allocation'. This distinguishes it from sibling tools like 'getTime' which likely retrieves all time entries.
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 retrieving time entries related to a specific allocation, but it does not explicitly state when to use this tool versus alternatives (e.g., getTime) or provide 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.
getProjectsPeopleMetricsPerformanceA
Performance of users completing the most tasks. Count the number of completed tasks by user for the provided period. By default the user with the most completed tasks is shown first.
| Name | Required | Description | Default |
|---|---|---|---|
| startDate | No | Start date for the performance metrics period | |
| endDate | No | End date for the performance metrics period | |
| orderMode | No | Order mode for sorting results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description describes a read-like operation (counting/showing), but annotations have readOnlyHint=false, which is neutral—not a contradiction. The description does not disclose additional behaviors such as authentication requirements or side effects, but given the simple counting nature, this 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 extremely concise with two sentences, front-loading the main purpose. Every sentence adds value 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?
For a tool with no output schema, the description lacks detail on the return format (e.g., list of users with counts). It is adequate for a simple tool but could be improved by specifying the output structure.
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 parameters are well-documented. The description adds minor value by stating the default sort order (most completed tasks first), which relates to the 'orderMode' parameter but does not explicitly tie it. This provides slight additional context.
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 it shows performance of users by counting completed tasks for a period, which is specific and actionable. However, it does not differentiate from the similarly named sibling tool 'getProjectsReportingUserTaskCompletion', leaving 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?
The description implies usage for viewing task completion performance and notes default ordering, but does not specify when to use this tool over alternatives like 'getProjectsPeopleUtilization' or 'getTasksMetricsComplete'. No explicit when-not or alternative suggestions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getProjectsPeopleUtilizationC
Return the user utilization data. This endpoint provides detailed information about user utilization, including billable and non-billable time, availability, and various utilization metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| zoom | No | determine the type of zoom filter used to display on the report | |
| startDate | No | filter by start date | |
| sortOrder | No | order mode | |
| sort | No | sort by (deprecated, use orderBy) | |
| searchTerm | No | filter by user first or last name | |
| reportFormat | No | define the format of the report | |
| orderMode | No | group by | |
| orderBy | No | sort by | |
| groupBy | No | group by | |
| endDate | No | filter by end date | |
| pageSize | No | number of items in a page | |
| page | No | page number | |
| skipCounts | No | skip doing counts on a list API endpoint for performance reasons | |
| legacyResponse | No | return response without summary and its legacy body structure | |
| isReportDownload | No | generate a report document | |
| isCustomDateRange | No | determine if the query is for a custom date range | |
| includeUtilizations | No | adds report rows for individual entities | |
| includeTotals | No | adds report summary to response | |
| includeCollaborators | No | include collaborators | |
| includeClients | No | include client users | |
| includeArchivedProjects | No | include archived projects | |
| IncludeCompletedTasks | No | include completed tasks | |
| userIds | No | filter by userIds | |
| teamIds | No | filter by team ids | |
| selectedColumns | No | customise the report by selecting columns to be displayed | |
| projectIds | No | filter by project ids | |
| jobRoleIds | No | filter by jobrole ids | |
| include | No | include additional data | |
| fieldsUtilizations | No | Query parameter: fields[utilizations] - specific utilization fields to include | |
| fieldsUsers | No | Query parameter: fields[users] - specific user fields to include | |
| companyIds | No | filter by company ids |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only states it returns data, but annotations indicate readOnlyHint=false, which could be contradictory. No details on pagination, rate limits, or side effects. The description adds minimal behavioral context 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 concise sentences with no fluff. Front-loaded with the core action and immediately specifies what data is included.
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 31 parameters and no output schema, the description is only two sentences. It lacks explanation of how parameters affect results, return structure, or behavior. For a complex reporting tool, 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?
All 31 parameters have descriptions in the schema (100% coverage). The tool description summarizes output fields but does not add extra meaning to parameters. 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 the tool returns user utilization data, including billable and non-billable time, availability, and metrics. The verb 'Return' and resource 'user utilization data' are specific. However, it does not differentiate from sibling tools like getProjectsReportingUtilization, which may have overlapping 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?
No guidance on when to use this tool versus alternatives or when to avoid it. The description lacks any usage 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.
getProjectsReportingUserTaskCompletionC
Returns task completions for a given user. Retrieve a person record and its task completion stats.
| Name | Required | Description | Default |
|---|---|---|---|
| userId | Yes | Path parameter: userId | |
| userType | No | user type | |
| updatedAfter | No | date time | |
| startDate | No | start date for task completion report | |
| endDate | No | end date for task completion report | |
| searchTerm | No | filter by comment content | |
| reportFormat | No | define the format of the report | |
| orderMode | No | order mode | |
| orderBy | No | order by | |
| lastLoginAfter | No | Query parameter: lastLoginAfter | |
| pageSize | No | number of items in a page (not used when generating reports) | |
| page | No | page number (not used when generating reports) | |
| skipCounts | No | SkipCounts allows you to skip doing counts on a list API endpoint for performance reasons. | |
| showDeleted | No | include deleted items | |
| searchUserJobRole | No | Include user job role in search | |
| orderPrioritiseCurrentUser | No | Force to have the current/session user in the response | |
| onlySiteOwner | No | Query parameter: onlySiteOwner | |
| onlyOwnerCompany | No | return people only from the owner company. This will replace any provided company ID. | |
| isReportDownload | No | generate a report document | |
| inclusiveFilter | No | make the filter inclusive for user ids, teamIds, companyIds | |
| includeServiceAccounts | No | include service accounts | |
| includePlaceholders | No | include placeholder users | |
| includeCollaborators | No | exclude collaborators types, returning only account and contact. | |
| includeClients | No | include clients | |
| includeArchivedProjects | No | include archived projects in the report | |
| filterByNoCostRate | No | Returns users who are missing cost rates(OCA only) | |
| excludeContacts | No | exclude contact types, returning only account and collaborator. | |
| teamIds | No | team ids | |
| selectedColumns | No | customise the report by selecting columns | |
| projectIds | No | filter by project ids | |
| jobRoleIds | No | filter by job role ids | |
| include | No | include (not used when generating reports) | |
| ids | No | filter by user ids | |
| fieldsTeams | No | Query parameter: fields[teams] | |
| fieldsPerson | No | Query parameter: fields[person] | |
| fieldsPeople | No | Query parameter: fields[people] | |
| fieldsCompanies | No | Query parameter: fields[companies] | |
| fieldsProjectPermissions | No | Query parameter: fields[ProjectPermissions] | |
| excludeProjectIds | No | exclude people assigned to certain project id | |
| excludeIds | No | exclude certain user ids | |
| companyIds | No | company ids |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=false and destructiveHint=false, but the description adds no behavioral context beyond implying a read operation. It does not disclose any side effects, authentication needs, or data mutation possibilities, which is important given the readOnlyHint is false.
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 with two sentences, front-loading the core purpose. However, it could be slightly more informative without losing conciseness, such as mentioning that it supports reporting or 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 41 parameters, no output schema, and complex reporting capabilities, the description is severely incomplete. It doesn't explain pagination, report formats, filtering behavior, or how parameters like isReportDownload work. The agent would lack critical 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?
Input schema covers 100% of parameters with descriptions, so the baseline is 3. The description adds minimal value beyond mentioning 'given user' and 'task completions', which map weakly to the many filter and pagination parameters. It does not enhance understanding of parameter usage.
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 clearly states the tool returns task completions for a given user and retrieves a person record with stats. It uses specific verbs and resources, distinguishing it from sibling tools like getTasksMetricsComplete and getPersonById. However, it doesn't explicitly differentiate from all siblings, such as getProjectsReportingUtilization.
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 getTasksMetricsComplete or getPersonById. It lacks explicit usage context, exclusions, or prerequisites, leaving the agent to infer 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.
getProjectsReportingUtilizationA
Generate utilization report in various formats (CSV, HTML, PDF, XLSX). Generates a utilization report containing all people for the provided filters. Only the people that the logged-in user can access will be returned.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | The format of the report | |
| zoom | No | determine the type of zoom filter used to display on the report | |
| startDate | No | filter by start date | |
| sortOrder | No | order mode | |
| sort | No | sort by (deprecated, use orderBy) | |
| searchTerm | No | filter by user first or last name | |
| reportFormat | No | define the format of the report | |
| orderMode | No | group by | |
| orderBy | No | sort by | |
| groupBy | No | group by | |
| endDate | No | filter by end date | |
| pageSize | No | number of items in a page | |
| page | No | page number | |
| skipCounts | No | SkipCounts allows you to skip doing counts on a list API endpoint for performance reasons. | |
| legacyResponse | No | return response without summary and its legacy body structure | |
| isReportDownload | No | generate a report document | |
| isCustomDateRange | No | determine if the query is for a custom date range | |
| includeUtilizations | No | adds report rows for individual entities | |
| includeTotals | No | adds report summary to response | |
| includeCollaborators | No | include collaborators | |
| includeClients | No | include client users | |
| includeArchivedProjects | No | include archived projects | |
| IncludeCompletedTasks | No | include completed tasks | |
| userIds | No | filter by userIds | |
| teamIds | No | filter by team ids | |
| selectedColumns | No | customise the report by selecting columns to be displayed. | |
| projectIds | No | filter by project ids | |
| jobRoleIds | No | filter by jobrole ids | |
| include | No | include | |
| fieldsUtilizations | No | Query parameter: fields[utilizations] | |
| fieldsUsers | No | Query parameter: fields[users] | |
| companyIds | No | filter by company ids |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and destructiveHint=false, and the description adds that only accessible people are returned. It does not disclose whether the report is generated server-side and stored, or just returned as a response. Since annotations already indicate non-read-only nature, the description adds minimal 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?
The description is two sentences, front-loaded with core purpose and formats, followed by details on scope and access. Every sentence adds value 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?
With 32 parameters and no output schema, the description covers the general output (people data) but lacks details on how utilization is calculated, the meaning of various options like zoom, groupBy, etc. For a complex reporting tool, more context on typical usage scenarios 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?
Input schema has 100% coverage with descriptions for all 32 parameters. The description adds a high-level statement about filtering and output content. Given full schema coverage, the description does not need to elaborate on each parameter; it adds marginal 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 clearly states the tool generates utilization reports in multiple formats (CSV, HTML, PDF, XLSX) and returns people data filtered by accessibility. This distinguishes it from sibling tools like getProjectsPeopleUtilization (likely raw data) and getProjectsReportingUserTaskCompletion (task completion focus). The verb 'generate report' and explicit formats make 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 does not explicitly state when to use this tool over alternatives. It implies usage for report generation, but without comparing to siblings like getProjectsReportingUserTaskCompletion or getProjectsPeopleUtilization, an agent may not know the best tool for raw utilization data versus formatted reports. No 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.
getTaskByIdB
Get a specific task by ID from Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description says 'Get' implying a read-only operation, but annotations set readOnlyHint=false, contradicting the operation. No additional behavioral 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?
Single sentence of 9 words, perfectly concise and front-loaded with the essential 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?
Fully adequate for a simple get-by-ID tool with one parameter, but the annotation contradiction undermines 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 coverage is 100% with clear description for taskId. Description adds no extra meaning beyond the schema, achieving baseline for 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?
Description clearly states verb 'Get', resource 'a specific task by ID', and source 'from Teamwork', distinguishing it from sibling tools that list tasks or operate on other 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?
No explicit when-to-use or alternatives provided, but context from siblings implies this is for retrieving a single task by ID, distinct from listing tools like getTasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTaskCommentsA
Get comments for a specific task from Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task to retrieve comments for | |
| page | No | Page number for pagination | |
| pageSize | No | Number of items per page | |
| orderBy | No | Order by field | |
| orderMode | No | Order mode | |
| searchTerm | No | Filter by comment content | |
| updatedAfter | No | Filter by updated after date (ISO 8601 format) | |
| commentStatus | No | Filter by comment status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description is straightforward but does not disclose any behavioral traits beyond reading. Annotations indicate readOnlyHint=false and destructiveHint=false, but the tool is clearly read-only. No mention of pagination behavior or rate 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?
Single concise sentence that is front-loaded with the action and resource. 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?
While the tool is simple, the description omits details about return format or pagination behavior. Given 8 parameters and lack of output schema, slightly more 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 coverage is 100% with descriptions for all 8 parameters. The description adds no extra meaning beyond what the schema already provides, so baseline score 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 'Get' and the resource 'comments for a specific task', distinguishing it from sibling tools like createComment and getTaskById.
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 such as createComment or other getters. Lacks 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.
getTaskListsByProjectIdB
Get all task lists by project ID
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to get task lists from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no safety hints (readOnlyHint=false, destructiveHint=false). Description simply restates the function without adding behavioral details like authentication, rate limits, or 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?
Single sentence with no fluff. Efficiently conveys the core 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?
No output schema, yet description does not explain return values or any additional context. Simple tool but missing completeness for expected 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 coverage is 100%, so the description adds no extra meaning. Baseline score of 3 is appropriate as the parameter is 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?
Description clearly states verb (Get), resource (task lists), and scope (by project ID). Distinguishes from sibling tool 'getTasksByProjectId' which returns 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?
No guidance on when to use this tool versus alternatives. Lacks context about prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTasksARead-onlyIdempotent
Get tasks, Return multiple tasks according to the optional provided filter.
| Name | Required | Description | Default |
|---|---|---|---|
| updatedBefore | No | filter by updated before date | |
| updatedAfter | No | filter by updated after date | |
| today | No | filter by today | |
| taskFilter | No | filter by a taskFilter | |
| startDate | No | filter on start date | |
| searchTerm | No | filter by search term | |
| reportType | No | define the type of the report | |
| reportFormat | No | define the format of the report | |
| priority | No | filter by task priority | |
| orderMode | No | order mode | |
| orderBy | No | order by | |
| notCompletedBefore | No | filter by projects that have not been completed before the given date | |
| endDate | No | filter on end date | |
| dueBefore | No | filter before a due date | |
| dueAfter | No | filter after a due date | |
| deletedAfter | No | filter on deleted after date | |
| createdFilter | No | filter by created filter | |
| createdDateCode | No | filter by created date code | |
| createdBefore | No | filter by created before date | |
| createdAfter | No | filter by created after date | |
| completedBefore | No | filter by completed before date | |
| completedAfter | No | filter by completed after date | |
| updatedByUserId | No | filter by updated user id | |
| parentTaskId | No | filter by parent task ids | |
| pageSize | No | number of items in a page | |
| page | No | page number | |
| orderByCustomFieldId | No | order by custom field id when orderBy is equal to custom field | |
| includeTaskId | No | include task id | |
| filterId | No | provide a user saved filter ID | |
| completedByUserId | No | filter by completed user id | |
| useTaskDateRange | No | use date range logic from table when getting the tasks | |
| useStartDatesForTodaysTasks | No | use start dates for todays tasks | |
| useFormulaFields | No | use formula fields | |
| useAllProjects | No | filter on all projects | |
| sortActiveFirst | No | sort active tasks first | |
| skipCounts | No | Skip counts allows you to skip doing counts on a list API endpoint for performance reasons. | |
| showDeleted | No | include deleted items | |
| showCompletedLists | No | include tasks from completed lists | |
| searchCompaniesTeams | No | include companies and teams in the search term | |
| searchAssignees | No | include assignees in the search | |
| onlyUntaggedTasks | No | only untagged tasks | |
| onlyUnplanned | No | only return tasks that are unplanned. Not assigned, no due date or missing estimated time. | |
| onlyTasksWithUnreadComments | No | filter by only tasks with unread comments | |
| onlyTasksWithTickets | No | filter by only tasks with tickets | |
| onlyTasksWithEstimatedTime | No | only return tasks with estimated time | |
| onlyStarredProjects | No | filter by starred projects only | |
| onlyAdminProjects | No | only include tasks from projects where the user is strictly a project admin. site admins have visibility to all projects. | |
| nestSubTasks | No | nest sub tasks | |
| matchAllTags | No | match all tags | |
| matchAllProjectTags | No | match all project tags | |
| matchAllExcludedTags | No | match all exclude tags | |
| isReportDownload | No | generate a report export. | |
| includeUpdate | No | include tasks latest update action | |
| includeUntaggedTasks | No | include untagged tasks | |
| includeTomorrow | No | filter by include tomorrow | |
| includeToday | No | filter by include today | |
| includeTeamUserIds | No | include members of the given teams | |
| includeTasksWithoutDueDates | No | include tasks without due dates | |
| includeTasksWithCards | No | include tasks with cards | |
| includeTasksFromDeletedLists | No | include tasks from deleted lists | |
| includeTasksCount | No | include total count of tasks for given filter | |
| includeRelatedTasks | No | include ids of active subtasks, dependencies, predecessors | |
| includePrivateItems | No | include private items | |
| includeOverdueTasks | No | include overdue tasks | |
| includeOriginalDueDate | No | include original due date of a task | |
| includeCustomFields | No | include custom fields | |
| includeCompletedTasks | No | include completed tasks | |
| includeCompletedPredecessors | No | include ids of completed predecessors. It must be provided with includeRelatedTasks flag or with the predecessors sideload. | |
| includeCompanyUserIds | No | include members of the given companies | |
| includeCommentStats | No | include number of unread and read comments for each task | |
| includeBlocked | No | filter by include blocked | |
| includeAttachmentCommentStats | No | include number of unread and read comments for each file attachment | |
| includeAssigneeTeams | No | include teams related to the responsible user ids | |
| includeAssigneeCompanies | No | include companies related to the responsible user ids | |
| includeArchivedProjects | No | include archived projects | |
| includeAllComments | No | include all comments | |
| groupByTasklist | No | group by tasklist | |
| groupByTaskgroup | No | group by taskgroup | |
| getSubTasks | No | get sub tasks | |
| getFiles | No | get files | |
| fallbackToMilestoneDueDate | No | set due date as milestone due date if due date is null and there's a related milestone | |
| extractTemplateRoleName | No | For tasks created in a project template it's possible to assign a role instead of people, companies or teams. This role is then stored with the task name as a prefix. When this flag is enabled it will extract the role name and return it inside a special field. | |
| excludeAssigneeNotOnProjectTeams | No | exclude assignee not on project teams | |
| completedOnly | No | only completed tasks | |
| checkForReminders | No | check if task has reminders | |
| allowAssigneesOutsideProject | No | when filtering by assigned or unassigned tasks, include assignees that are not in the project. | |
| tasksSelectedColumns | No | customize the report by selecting columns to be displayed for tasks report | |
| tasklistIds | No | filter by tasklist ids | |
| taskgroupIds | No | filter by taskgroup ids | |
| taskIncludedSet | No | filter by task included set | |
| tags | No | filter by tag values | |
| tagIds | No | filter by tag ids | |
| status | No | filter by list of task status | |
| skipCRMDealIds | No | skip crm deal ids | |
| selectedColumns | No | customize the report by selecting columns to be displayed for planned vs actual. | |
| responsiblePartyIds | No | filter by responsible party ids | |
| projectTagIds | No | filter by project tag ids | |
| projectStatuses | No | filter by project status | |
| projectOwnerIds | No | filter by project owner ids | |
| projectIds | No | filter by project ids | |
| projectHealths | No | filter by project healths 0: not set 1: bad 2: ok 3: good | |
| projectFeaturesEnabled | No | filter by projects that have features enabled | |
| projectCompanyIds | No | filter by company ids | |
| projectCategoryIds | No | filter by project category ids | |
| includeCustomFieldIds | No | include specific custom fields | |
| include | No | include | |
| ids | No | filter by task ids | |
| followedByUserIds | No | filter by followed by user ids | |
| filterBoardColumnIds | No | filter by board column ids | |
| fieldsUsers | No | Query parameter: fields[users] | |
| fieldsTimers | No | Query parameter: fields[timers] | |
| fieldsTeams | No | Query parameter: fields[teams] | |
| fieldsTasks | No | Query parameter: fields[tasks] | |
| fieldsTasklists | No | Query parameter: fields[tasklists] | |
| fieldsTaskgroups | No | Query parameter: fields[taskgroups] | |
| fieldsTaskSequences | No | Query parameter: fields[taskSequences] | |
| fieldsTags | No | Query parameter: fields[tags] | |
| fieldsProjects | No | Query parameter: fields[projects] | |
| fieldsMilestones | No | Query parameter: fields[milestones] | |
| fieldsLockdowns | No | Query parameter: fields[lockdowns] | |
| fieldsGroups | No | Query parameter: fields[groups] | |
| fieldsFiles | No | Query parameter: fields[files] | |
| fieldsCustomfields | No | Query parameter: fields[customfields] | |
| fieldsCustomfieldTasks | No | Query parameter: fields[customfieldTasks] | |
| fieldsCompanies | No | Query parameter: fields[companies] | |
| fieldsComments | No | Query parameter: fields[comments] | |
| fieldsColumns | No | Query parameter: fields[columns] | |
| fieldsCards | No | Query parameter: fields[cards] | |
| fieldsProjectPermissions | No | Query parameter: fields[ProjectPermissions] | |
| expandedIds | No | the ids of the expanded tasks | |
| excludeTagIds | No | filter by excluded tag ids | |
| crmDealIds | No | filter by crm deal ids | |
| createdByUserIds | No | filter by creator user ids | |
| assigneeTeamIds | No | filter by assignee team ids | |
| assigneeCompanyIds | No | filter by assignee company ids | |
| CustomFields | No | filter by custom fields |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds minimal context beyond 'Return multiple tasks.' It is consistent with annotations and does not contradict them, but does not elaborate on behavior like pagination or rate 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?
Very concise: two sentences. The first sentence 'Get tasks' is somewhat redundant with the name, but the second sentence adds value. No wasted words, though it could be slightly more 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?
Given the complexity (136 parameters, no output schema, but relatively rich annotations), the description is too minimal. It does not summarize the extensive filtering capabilities, pagination, or common use cases. The schema descriptions compensate partially, but the overall tool description lacks 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 the schema already documents all 136 parameters. The description only adds a generic statement about filtering, which does not add meaningful detail beyond what the schema provides. 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?
Description clearly states 'Get tasks' and 'Return multiple tasks according to the optional provided filter.' The verb+resource is specific, and it distinguishes from sibling tools like getTaskById (single task) or getTasksByProjectId (scoped to 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?
Description implies usage via 'optional provided filter' but does not explicitly state when to use this general tool versus more specific siblings like getTasksByProjectId or getTaskListsByProjectId. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTasksByProjectIdB
Get all tasks from a specific project in Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to get tasks from |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read operation ('Get'), but annotations set readOnlyHint to false, creating a contradiction. No additional behavioral traits (e.g., permissions, side effects) are disclosed beyond the implicit read 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 sentence with no unnecessary words. It is front-loaded and 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?
Given the simple one-parameter structure and no output schema, the description is mostly complete. However, it lacks details about the return format or pagination, but this is acceptable for a straightforward retrieval.
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 'projectId' is described in the schema. The description adds no extra meaning beyond the schema, so 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 clearly states 'Get all tasks from a specific project', using a specific verb and resource. Among sibling tools like getTasks and getTasksByTaskListId, this one is uniquely scoped to 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?
The description provides no guidance on when to use this tool versus alternatives like getTasks or getTasksByTaskListId. No exclusion criteria or context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTasksByTaskListIdC
Get all tasks from a specific task list in Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| tasklistId | Yes | The ID of the task list to get tasks from | |
| page | No | Page number for pagination | |
| pageSize | No | Number of items per page | |
| includeCompletedTasks | No | Include completed tasks in the results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description implies a read operation ('Get all tasks'), but annotations set readOnlyHint=false, indicating possible side effects. This contradiction undermines transparency. No additional behavioral details are 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?
Single sentence is concise and front-loaded with purpose. Could benefit from slight restructuring to include usage hints, but 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?
Lacks details on pagination, result set limits, or behavior of optional parameters like includeCompletedTasks. With no output schema, the description should provide more operational 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%, so the baseline is 3. Description adds no extra meaning beyond the parameter descriptions already in the schema, e.g., does not clarify pagination or default behavior of includeCompletedTasks.
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 clearly states verb 'Get', resource 'tasks', and specifier 'from a specific task list'. It unambiguously differentiates from siblings like getTasksByProjectId or getTasks.
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 such as getTasks or getTasksByProjectId. Agent cannot determine context for choosing this tool over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTasksMetricsCompleteB
Get the total count of completed tasks in Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description implies a read-only operation ('Get'), but annotations set readOnlyHint to false, creating a contradiction. No additional behavioral context 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?
Single, concise sentence with no redundant information. Appropriate length for a simple 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 no parameters and no output schema, the description sufficiently conveys its purpose. However, it could mention the return format (e.g., integer) 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?
No parameters exist, so schema coverage is 100%. Description adds no parameter-specific info, but baseline 4 applies per rules.
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 clearly states the action (Get) and resource (total count of completed tasks). It differentiates from siblings like getTasksMetricsLate but could be more explicit about its distinction from getTasks or other metric 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 on when to use this tool versus alternatives (e.g., getTasksMetricsLate). No explicit when-not or alternative tools mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTasksMetricsLateC
Get the total count of late tasks in Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description claims to 'Get' data, implying a read-only operation, but the readOnlyHint annotation is false, indicating potential mutation. This is a direct contradiction. The description also fails to disclose any behavioral traits like authentication requirements or how 'late' is defined.
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 without excess words. It is concise, but could be slightly more structured to include key details like the definition of 'late'.
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 with no parameters and no output schema, the description is minimally adequate. However, it lacks context on what constitutes a late task and the expected output format, leaving some ambiguity.
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 no parameters, so schema coverage is 100%. The description does not need to add parameter semantics since none exist. Baseline score of 4 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 tool retrieves the total count of late tasks. It uses a specific verb ('Get') and resource ('total count of late tasks'). However, it does not explicitly differentiate from similar sibling tools like getTasksMetricsComplete, which likely retrieves counts of completed 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?
No guidance is provided on when to use this tool versus alternatives such as getTasksMetricsComplete or getTasks. There is no mention of context, prerequisites, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTaskSubtasksB
Get all subtasks for a specific task in Teamwork
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task to get subtasks from | |
| page | No | Page number for pagination | |
| pageSize | No | Number of items per page | |
| includeCompletedTasks | No | Include completed tasks in the results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false (implying it's not read-only, though the operation is inherently read) and destructiveHint=false. The description adds no behavioral details (e.g., pagination behavior, error cases, output format).
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-formed sentence that is front-loaded with the core purpose. No extraneous 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?
Given the tool has pagination and filtering parameters and no output schema, the description provides no information about the return format, pagination defaults, or whether subtasks include nested ones. Incomplete for a moderate-complexity 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 schema already documents all four parameters. 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 clearly states the verb 'Get' and the resource 'subtasks for a specific task', and it distinguishes from siblings like getTasks (which returns top-level tasks) and createSubTask.
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 such as getTasks (which might include subtasks) or createSubTask. No 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.
getTimeB
Get all time entries. Return all logged time entries for all projects. Only the time entries that the logged-in user can access will be returned.
| Name | Required | Description | Default |
|---|---|---|---|
| updatedAfter | No | filter by updated after date | |
| startDate | No | filter by a starting date | |
| reportFormat | No | define the format of the report | |
| projectStatus | No | filter by project status | |
| orderMode | No | order mode | |
| orderBy | No | sort order | |
| invoicedType | No | filter by invoiced type | |
| endDate | No | filter by an ending date | |
| billableType | No | filter by billable type | |
| updatedBy | No | filter by the user who updated the timelog | |
| ticketId | No | filter by ticket id | |
| tasklistId | No | filter by tasklist id | |
| taskId | No | filter by task id (deprecated, use taskIds) | |
| projectId | No | filter by project id (deprecated, use projectIds) | |
| pageSize | No | number of items in a page | |
| page | No | page number | |
| invoiceId | No | filter by invoice id | |
| budgetId | No | filter by budget id | |
| allocationId | No | filter by allocation id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read operation ('Return all logged time entries'), but the annotation readOnlyHint is false, suggesting potential mutation. This contradiction undermines transparency. Additionally, no behavioral details like pagination or rate limits are 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?
Two sentences, front-loaded with purpose, no fluff. Efficiently conveys core functionality.
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 19 parameters and no output schema, the description is minimal. It does not explain return format, pagination, filtering behavior, or how parameters interact. More context is needed 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 coverage is 100%, so baseline is 3. The description adds no parameter semantics beyond what the schema already provides. No examples or usage patterns are given.
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 all time entries' and specifies that it returns all logged time entries for all projects accessible to the user. This is specific and distinguishes from sibling tools like getTasks or getProjects.
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 vs alternatives. The description does not provide any context about when to choose getTime over other tools like getTasks or getProjects, nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getTimezonesA
Get all timezones available in Teamwork. This is useful when you need to update a user's timezone and need to know the available options.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only operation ('Get all timezones'), but the annotation 'readOnlyHint' is set to false, contradicting the description. No additional behavioral details (e.g., side effects, data freshness) are provided. This contradiction severely undermines 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 consists of two concise sentences that front-load the primary purpose and then add a usage context. Every word adds value, 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?
The description explains the purpose and use case but lacks detail on the output format (e.g., list of timezone names, codes). Since there is no output schema, the agent is left guessing the return structure. Additionally, no information about authentication or caching is given, though it may be considered standard 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 tool has no parameters, so the description adds no parameter-level information beyond the schema. According to guidelines, 0 parameters baseline is 4, and the description does not require parameter details.
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 'Get all timezones available in Teamwork', clearly identifying the verb (get) and resource (timezones). No sibling tool deals with timezones, so it is well-differentiated.
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 specifies a use case: 'when you need to update a user's timezone and need to know the available options.' This provides clear context, though it does not mention when to avoid using the tool or list alternatives, which are unnecessary given the unique functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateCompanyC
This tool allows you to update a company. It requires parameters: companyId and companyRequest.
| Name | Required | Description | Default |
|---|---|---|---|
| companyId | Yes | Path parameter: companyId | |
| companyRequest | Yes | ||
| options | No | Additional options for the request |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but description adds no additional behavioral details beyond 'update', such as whether it's a partial update or what side effects 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?
Single sentence is concise, but structure is not optimized; listing parameters in prose is less clear than a structured format.
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 nested input and no output schema, the description lacks detail on the update behavior, typical use cases, and differentiation from sibling 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 provides descriptions for most parameters, but description only repeats parameter names, adding no new semantic value beyond what the schema already offers.
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 updates a company, but does not differentiate from siblings like createCompany, deleteCompany, or other 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?
No guidance on when to use this tool versus alternatives like createCompany or deleteCompany. No prerequisites or constraints mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updatePersonB
Update a person in Teamwork. This endpoint allows you to modify user information like timezone, name, email, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| personId | Yes | The ID of the person to update | |
| first-name | No | First name of the person | |
| last-name | No | Last name of the person | |
| email-address | No | Email address of the person | |
| title | No | Job title or position of the person | |
| phone-number-office | No | Office phone number | |
| timezoneId | No | Timezone ID for the person | |
| administrator | No | Make this person an administrator | |
| user-type | No | User type (account, collaborator, contact) | |
| company-id | No | ID of the company the person belongs to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate the tool is not read-only and not destructive, which is consistent with an update operation. The description adds that it modifies user information but does not elaborate on side effects, error scenarios, or permission requirements. With annotations providing basic safety info, the description adds minimal 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?
The description is two short sentences with no extraneous information. Every word serves a purpose, making it highly concise and clear.
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 10 parameters with full schema descriptions and annotations, the description is adequate but lacks context on expected return value (e.g., updated object or success message) and any limitations (e.g., immutable fields). It covers the basics but could be improved.
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 schema descriptions, so the description's mention of 'timezone, name, email, etc.' adds little beyond enumeration. The description does not clarify any parameter-specific constraints (e.g., valid formats, interdependent fields). Baseline 3 is appropriate given 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 clearly states the tool updates a person in Teamwork and lists examples of modifiable fields. However, it does not differentiate from sibling update tools (updateCompany, updateTask), which is acceptable as the resource is 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 guidance on when to use this tool vs alternatives, or under what conditions (e.g., required permissions, prerequisites). The description only states what it does, not when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
updateTaskB
Update an existing task. Modify the properties of an existing task.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task to update | |
| taskRequest | Yes | The task data to update |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds no extra behavioral context such as side effects, permissions required, or notification behavior. For a mutation tool, more transparency is expected.
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 contains redundant sentences ('Update an existing task' and 'Modify the properties of an existing task' say nearly the same thing). It is concise but could be more 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?
Despite the tool's complexity (nested objects, many properties in taskRequest), the description is minimal and does not cover return values, partial updates, or typical use cases. Output schema is absent, increasing the need for description detail.
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 descriptions for both parameters. The description does not add additional meaning beyond what is in the schema, 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 clearly states the purpose: 'Update an existing task. Modify the properties of an existing task.' It specifies the verb (update) and resource (task), and distinguishes from sibling tools like createTask or deleteTask.
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 guidelines are provided. The description does not indicate when to use this tool versus alternatives (e.g., when to update vs create), nor does it mention any prerequisites or context for using it.
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. Dates show when Glama detected each change.
1 tool update
v1.0.0- Changed
getProjectsPeopleUtilization4 fields changed- added
Input schema / properties / fieldsUsersAdded value: +{ + "description": "Query parameter: fields[users] - specific user fields to include", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / fieldsUtilizationsAdded value: +{ + "description": "Query parameter: fields[utilizations] - specific utilization fields to include", + "items": { + "type": "string" + }, + "type": "array" +} - removed
Input schema / properties / fields[users]Removed value: -{ - "description": "specific user fields to include", - "items": { - "type": "string" - }, - "type": "array" -} - removed
Input schema / properties / fields[utilizations]Removed value: -{ - "description": "specific utilization fields to include", - "items": { - "type": "string" - }, - "type": "array" -}
36 tool updates
- First observed
addPeopleToProject - First observed
createComment - First observed
createCompany - First observed
createProject - First observed
createSubTask - First observed
createTask - First observed
deleteCompany - First observed
deletePerson - First observed
deleteTask - First observed
getCompanies - First observed
getCompanyById - First observed
getCurrentProject - First observed
getPeople - First observed
getPersonById - First observed
getProjectPeople - First observed
getProjectPerson - First observed
getProjects - First observed
getProjectsAllocationsTime - First observed
getProjectsPeopleMetricsPerformance - First observed
getProjectsPeopleUtilization - First observed
getProjectsReportingUserTaskCompletion - First observed
getProjectsReportingUtilization - First observed
getTaskById - First observed
getTaskComments - First observed
getTaskListsByProjectId - First observed
getTasks - First observed
getTasksByProjectId - First observed
getTasksByTaskListId - First observed
getTasksMetricsComplete - First observed
getTasksMetricsLate - First observed
getTaskSubtasks - First observed
getTime - First observed
getTimezones - First observed
updateCompany - First observed
updatePerson - First observed
updateTask
TDQS
Most tools have distinct purposes, but some overlap exists, such as getPeople and getPersonById, which might cause confusion if an agent needs to retrieve a single person. Similarly, getProjectsPeople and getProjectPerson serve similar functions. However, descriptions generally clarify boundaries, and core operations like create, get, update, and delete are well-separated.
The naming is mixed, with some tools using verb_noun patterns (e.g., createComment, deleteTask) and others using noun_verb patterns (e.g., getCompanies, updatePerson). There are also inconsistencies like addPeopleToProject (verb_noun_preposition_noun) and getProjectsAllocationsTime (noun_noun_noun). While readable, the lack of a uniform convention reduces predictability.
With 36 tools, the count is excessive for a project management server, leading to potential overwhelm and redundancy. Many tools could be consolidated (e.g., multiple get methods for tasks or people). A more focused set of 10-20 tools would better serve the domain without sacrificing functionality.
The tool set provides comprehensive coverage for Teamwork's domain, including CRUD operations for companies, people, projects, tasks, and comments, plus reporting and metrics tools. There are no obvious gaps; agents can manage full lifecycles and access detailed analytics, ensuring no dead ends in workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The Teamwork.com official MCP server helps teams efficiently manage client projects with AI.
A MCP server built for developers enabling Git based project management with project and personal…
A basic MCP server to operate on the Postman API.
Related MCP Servers
- MIT
- MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that integrates with the Tweek API to manage calendars, tasks, and custom colors. It enables users to perform full task CRUD operations, list accessible calendars, and fetch color preferences through secure authentication.1MIT
- 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.23MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Vizioz/Teamwork-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server