Vikunja MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Vikunja MCP Servercreate a task called 'Review Q3 report' in the Marketing project"
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.
Vikunja MCP Server
A Model Context Protocol server for managing Vikunja projects and tasks.
Quick Start
Run directly with npx (no installation required):
npx vikunja-mcp --token YOUR_VIKUNJA_TOKENWith custom Vikunja URL:
npx vikunja-mcp --url https://your-vikunja.com/api/v1 --token YOUR_TOKENOr using environment variables:
export VIKUNJA_TOKEN=your_token
export VIKUNJA_URL=https://your-vikunja.com/api/v1
npx vikunja-mcpRelated MCP server: vikunja-mcp
Features
Full CRUD operations for projects
Full CRUD operations for tasks
Task comments management
Task relations (subtasks, blocking, etc.)
Task attachments listing
Task assignees management
Task labels management
Project hierarchy (epics) management
Available Tools
Projects
Tool | Description |
| List all projects the user has access to |
| Get a specific project by ID |
| Create a new project |
| Update an existing project |
| Delete a project by ID |
| List child projects under a project |
| Move project to different parent/position |
Tasks
Tool | Description |
| List all tasks across all projects |
| List all tasks for a specific project |
| Get a specific task by ID |
| Create a new task in a project |
| Update an existing task |
| Delete a task by ID |
Task State & Movement
Tool | Description |
| Mark a task as done |
| Reopen a completed task |
| Move task to different project/position |
Assignees
Tool | Description |
| Add a user as assignee to a task |
| Remove assignee from a task |
| List all assignees for a task |
Labels
Tool | Description |
| Add a label to a task |
| Remove a label from a task |
| List all labels on a task |
| List all available labels (globally) |
Comments
Tool | Description |
| List all comments for a task |
| Add a comment to a task |
| Update a comment |
| Delete a comment |
Relations
Tool | Description |
| Create a relation between two tasks |
| Delete a relation between tasks |
| List all relations for a task |
Subtasks
Tool | Description |
| Create a subtask linked to parent task |
| List all subtasks for a task |
Attachments
Tool | Description |
| List all attachments for a task |
| Delete an attachment from a task |
See below for complete parameter documentation for all tools.
Tool Reference
Parameter Types
string: Text value
number: Numeric value (integer)
boolean: true/false value
required: This parameter must be provided
optional: This parameter can be omitted
Note: All ID parameters (e.g.,
projectId,taskId) accept both number and string values. The MCP server usesz.coerce.number()to automatically convert string IDs (like "123") to numbers. This means you can pass either123or"123"for any ID parameter. See Using String IDs for examples.
Projects
list_projects
List all projects the user has access to.
Parameters: None required
Optional:
page(number): Page number for paginationper_page(number): Number of items per page (default: 25)
get_project
Get a specific project by ID.
Parameters:
projectId(number, required): The project ID
create_project
Create a new project.
Parameters:
title(string, required): The project title
Optional:
description(string): Project descriptionhex_color(string): Hex color code (e.g., "#FF5733")identifier(string): Unique identifier for the projectparent_project_id(number): ID of parent project (for epics/hierarchy)is_archived(boolean): Whether the project is archived
update_project
Update an existing project.
Parameters:
projectId(number, required): The project ID
Optional:
title(string): New titledescription(string): New descriptionhex_color(string): New hex color codeidentifier(string): New identifierparent_project_id(number): New parent project IDis_archived(boolean): Archive status
delete_project
Delete a project by ID.
Parameters:
projectId(number, required): The project ID
list_project_children
List child projects under a project.
Parameters:
projectId(number, required): The parent project ID
move_project
Move project to different parent or position.
Parameters:
projectId(number, required): The project ID
Optional:
parent_project_id(number): New parent project ID (null to remove from parent)position(number): New position in the parent project
Tasks
list_tasks
List all tasks across all projects.
Parameters: None required
Optional:
page(number): Page number for paginationper_page(number): Number of items per pagestatus(string): Filter by status (open, done, done_lte, done_gte)priority(number): Filter by prioritydue_date(string): Filter by due datelabel(string): Filter by label
list_project_tasks
List all tasks for a specific project.
Parameters:
projectId(number, required): The project ID
Optional:
page(number): Page number for paginationper_page(number): Number of items per page
get_task
Get a specific task by ID.
Parameters:
taskId(number, required): The task ID
create_task
Create a new task in a project.
Parameters:
projectId(number, required): The project ID
Required:
task(object): The task objecttitle(string, required): The task title
Optional:
task(object): The task objectdescription(string): Task descriptiondone(boolean): Whether task is completeddue_date(string): Due date (ISO 8601 format)start_date(string): Start dateend_date(string): End datehex_color(string): Task colorpriority(number): Priority (1-5, where 5 is highest)percent_done(number): Progress (0-100)repeat_after(number): Repeat after X minutesrepeat_mode(number): Repeat mode (0=relative, 1=absolute)
update_task
Update an existing task.
Parameters:
taskId(number, required): The task IDtaskUpdates(object, required): The task fields to update
Optional:
taskUpdates(object):title(string): New titledescription(string): New descriptiondone(boolean): Completion statusdue_date(string): New due datestart_date(string): New start dateend_date(string): New end datehex_color(string): New colorpriority(number): New prioritypercent_done(number): Progress (0-100)repeat_after(number): New repeat intervalrepeat_mode(number): Repeat mode (0=relative, 1=absolute)
delete_task
Delete a task by ID.
Parameters:
taskId(number, required): The task ID
Task State & Movement
complete_task
Mark a task as done.
Parameters:
taskId(number, required): The task ID
reopen_task
Reopen a completed task.
Parameters:
taskId(number, required): The task ID
move_task
Move task to different project or position.
Parameters:
taskId(number, required): The task IDproject_id(number, required): Target project ID
Optional:
position(number): New position
Assignees
add_task_assignee
Add a user as assignee to a task.
Parameters:
taskId(number, required): The task IDuserId(number, required): The user ID to add
remove_task_assignee
Remove assignee from a task.
Parameters:
taskId(number, required): The task IDuserId(number, required): The user ID to remove
list_task_assignees
List all assignees for a task.
Parameters:
taskId(number, required): The task ID
Labels
add_task_label
Add a label to a task.
Parameters:
taskId(number, required): The task IDlabel_id(number, required): The label ID to add
remove_task_label
Remove a label from a task.
Parameters:
taskId(number, required): The task IDlabel_id(number, required): The label ID to remove
list_task_labels
List all labels on a task.
Parameters:
taskId(number, required): The task ID
list_labels
List all available labels (globally).
Parameters: None required
Optional:
project_id(number): Filter by project IDpage(number): Page numberper_page(number): Items per page
Comments
list_comments
List all comments for a task.
Parameters:
taskId(number, required): The task ID
Optional:
page(number): Page numberper_page(number): Items per page
create_comment
Add a comment to a task.
Parameters:
taskId(number, required): The task IDcomment(string, required): The comment text
update_comment
Update a comment.
Parameters:
taskId(number, required): The task IDcommentId(number, required): The comment IDcomment(string, required): New comment text
delete_comment
Delete a comment.
Parameters:
taskId(number, required): The task IDcommentId(number, required): The comment ID to delete
Relations
create_relation
Create a relation between two tasks.
Parameters:
taskId(number, required): The source task IDotherTaskId(number, required): The related task IDrelationKind(string, required): Relation type (unknown, subtask, parenttask, related, duplicateof, duplicates, blocking, blocked, precedes, follows, copiedfrom, copiedto)
delete_relation
Delete a relation between tasks.
Parameters:
taskId(number, required): The source task IDotherTaskId(number, required): The related task IDrelationKind(string, required): Relation type (unknown, subtask, parenttask, related, duplicateof, duplicates, blocking, blocked, precedes, follows, copiedfrom, copiedto)
list_task_relations
List all relations for a task.
Parameters:
taskId(number, required): The task ID
Subtasks
create_subtask
Create a subtask linked to parent task.
Parameters:
projectId(number, required): The project IDparent_task_id(number, required): The parent task IDtask(object, required): The subtask object
Required:
task(object):title(string, required): The subtask title
Optional:
task(object):description(string): Subtask descriptiondone(boolean): Whether subtask is completeddue_date(string): Due datestart_date(string): Start dateend_date(string): End datehex_color(string): Subtask colorpriority(number): Prioritypercent_done(number): Progress (0-100)repeat_after(number): Repeat after X minutesrepeat_mode(number): Repeat mode (0=relative, 1=absolute)
list_subtasks
List all subtasks for a task.
Parameters:
taskId(number, required): The parent task ID
Attachments
list_task_attachments
List all attachments for a task.
Parameters:
taskId(number, required): The task ID
Optional:
page(number): Page numberper_page(number): Items per page
delete_task_attachment
Delete an attachment from a task.
Parameters:
taskId(number, required): The task IDattachmentId(number, required): The attachment ID
Examples
Listing Projects and Tasks
list my vikunja projectsReturns all projects you have access to.
list_project_tasks projectId: 1Returns all tasks in project ID 1.
list_tasks per_page: 50Lists up to 50 tasks across all projects.
Creating Projects and Tasks
create_project title: "My Project" description: "A new project" hex_color: "#FF5733"Creates a new project with a title, description, and color.
create_task projectId: 1 title: "Buy groceries" priority: 3 due_date: "2024-12-25"Creates a task in project ID 1 with priority and due date.
Managing Task State
complete_task taskId: 5Marks task 5 as done.
reopen_task taskId: 5Reopens task 5.
Working with Assignees
add_task_assignee taskId: 3 userId: 7Adds user 7 as assignee to task 3.
list_task_assignees taskId: 3Lists all assignees for task 3.
Comments
create_comment taskId: 3 comment: "This should be done by Friday"Adds a comment to task 3.
Relations
create_relation taskId: 1 otherTaskId: 2 relationKind: "blocking"Creates a "blocks" relation from task 1 to task 2 (task 1 blocks task 2).
Using String IDs
All ID parameters accept strings, so these are equivalent:
get_project projectId: 1
get_project projectId: "1"This is useful when working with data from external sources:
list_project_tasks projectId: "123"Installation
Prerequisites
Node.js 18+
npm or bun
A Vikunja instance (self-hosted or cloud)
Vikunja API token
Getting a Vikunja API Token
Log into your Vikunja instance
Go to Settings → API Tokens
Create a new token
Build from Source
git clone https://github.com/Wosh-i/vikunja-mcp.git
cd vikunja-mcp
npm install
npm run buildOpenCode Configuration
Option 1: Using npx (Recommended)
The easiest way to configure Vikunja MCP is using npx. Add this to your OpenCode config (~/.config/opencode/opencode.jsonc):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"vikunja": {
"type": "local",
"command": ["npx", "-y", "vikunja-mcp"],
"environment": {
"VIKUNJA_URL": "https://your-vikunja-instance.com/api/v1",
"VIKUNJA_TOKEN": "your-api-token-here",
},
},
},
}Using npx with -y skips the confirmation prompt and automatically downloads the package.
Option 2: Build from Source
If you prefer to run locally without npx, build from source:
git clone https://github.com/Wosh-i/vikunja-mcp.git
cd vikunja-mcp
npm install
npm run buildThen configure OpenCode:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"vikunja": {
"type": "local",
"command": ["node", "/path/to/vikunja-mcp/dist/index.js"],
"environment": {
"VIKUNJA_URL": "https://your-vikunja-instance.com/api/v1",
"VIKUNJA_TOKEN": "your-api-token-here",
},
},
},
}Configuration Options
Option | Required | Default | Description |
| No | Your Vikunja API base URL | |
| Yes | - | Your Vikunja API token |
Environment Variables
You can also set environment variables globally in your shell:
export VIKUNJA_URL="https://your-vikunja-instance.com/api/v1"
export VIKUNJA_TOKEN="your-api-token-here"Then the OpenCode config can be simpler:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"vikunja": {
"type": "local",
"command": ["node", "/path/to/vikunja-mcp/dist/index.js"],
},
},
}Claude Code Desktop App Configuration
Option 1: Using npx (Recommended)
The easiest way to configure Vikunja MCP is using npx. Add this to your Claude Code desktop config file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"vikunja": {
"command": "npx",
"args": ["-y", "vikunja-mcp"],
"env": {
"VIKUNJA_URL": "https://your-vikunja-instance.com/api/v1",
"VIKUNJA_TOKEN": "your-api-token-here",
},
},
},
}Using npx with -y skips the confirmation prompt and automatically downloads the package.
Option 2: Build from Source
If you prefer to run locally without npx, build from source:
git clone https://github.com/Wosh-i/vikunja-mcp.git
cd vikunja-mcp
npm install
npm run buildThen configure Claude Code:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"vikunja": {
"command": "node",
"args": ["/path/to/vikunja-mcp/dist/index.js"],
"env": {
"VIKUNJA_URL": "https://your-vikunja-instance.com/api/v1",
"VIKUNJA_TOKEN": "your-api-token-here",
},
},
},
}Configuration Options
Option | Required | Default | Description |
| No | Your Vikunja API base URL | |
| Yes | - | Your Vikunja API token |
Environment Variables
You can also set environment variables globally in your shell:
export VIKUNJA_URL="https://your-vikunja-instance.com/api/v1"
export VIKUNJA_TOKEN="your-api-token-here"Then the Claude Code config can be simpler:
{
"mcpServers": {
"vikunja": {
"command": "node",
"args": ["/path/to/vikunja-mcp/dist/index.js"],
},
},
}Claude Code TUI Configuration
The Claude Code TUI (terminal user interface) uses the claude mcp add command to configure MCP servers.
Option 1: Using npx (Recommended)
The easiest way to configure Vikunja MCP is using npx:
claude mcp add --transport stdio --env VIKUNJA_URL=https://your-vikunja-instance.com/api/v1 --env VIKUNJA_TOKEN=your-api-token-here vikunja -- npx -y vikunja-mcpOption 2: Build from Source
If you prefer to run locally without npx, build from source:
git clone https://github.com/Wosh-i/vikunja-mcp.git
cd vikunja-mcp
npm install
npm run buildThen configure Claude Code:
claude mcp add --transport stdio --env VIKUNJA_URL=https://your-vikunja-instance.com/api/v1 --env VIKUNJA_TOKEN=your-api-token-here vikunja -- /path/to/vikunja-mcp/dist/index.jsConfiguration Scopes
Claude Code TUI supports different scopes for MCP server configuration:
Scope | Config Location | Description |
|
| Available to you across all projects |
|
| Available only in the current project |
|
| Shared with team members (checked into source control) |
# Add with user scope (available across all projects)
claude mcp add --transport stdio --scope user --env VIKUNJA_TOKEN=... vikunja -- npx -y vikunja-mcp
# Add with project scope (shared with team via .mcp.json)
claude mcp add --transport stdio --scope project --env VIKUNJA_TOKEN=... vikunja -- npx -y vikunja-mcpManaging MCP Servers
# List all configured servers
claude mcp list
# Get details for a specific server
claude mcp get vikunja
# Remove a server
claude mcp remove vikunja
# Within Claude Code, check server status
/mcpConfiguration Options
Option | Required | Default | Description |
| No | Your Vikunja API base URL | |
| Yes | - | Your Vikunja API token |
Environment Variables
You can also set environment variables globally in your shell:
export VIKUNJA_URL="https://your-vikunja-instance.com/api/v1"
export VIKUNJA_TOKEN="your-api-token-here"Then the configuration is simpler:
claude mcp add --transport stdio vikunja -- npx -y vikunja-mcpUsage
CLI Options
Option | Alias | Description |
|
| Your Vikunja API token |
|
| Your Vikunja API base URL |
|
| Show help |
Using with OpenCode
After configuration, you can use Vikunja tools in OpenCode:
list my vikunja projectscreate a project called "My Tasks" with color #FF5733add a task titled "Buy groceries" to project "My Tasks" with priority 3show me all tasks in the Inbox projectDevelopment
# Install dependencies
npm install
# Build
npm run build
# Run in development mode
npm run dev
# Run tests (when available)
npm testLicense
MIT License - see LICENSE file for details.
Contributing
Contributions welcome! Please open an issue or pull request.
Available Tools
33 toolsadd_task_assigneeC
Add a user as assignee to a task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task | |
| user_id | Yes | The ID of the user to add as assignee |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the action ('Add') but doesn't clarify if this requires specific permissions, whether it's idempotent (adding an existing assignee), what happens on success/failure, or any rate limits. The description is minimal and misses key operational context for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core action and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what the tool returns, error conditions, or side effects. Given the complexity of modifying task assignments and the lack of structured behavioral hints, more context is needed for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear parameter descriptions in the schema ('The ID of the task', 'The ID of the user to add as assignee'). The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline of 3 for high schema coverage without extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add a user as assignee') and the target resource ('to a task'), providing a specific verb+resource combination. It distinguishes from sibling tools like 'remove_task_assignee' by specifying addition rather than removal, though it doesn't explicitly contrast with other assignment-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'create_task' (which might include assignees) or 'update_task' (which might modify assignees). It lacks context about prerequisites, such as whether the task or user must exist, or when to choose this over other assignment methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_task_labelC
Add a label to a task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task | |
| label_id | Yes | The ID of the label to add |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states it's an 'Add' operation, implying mutation, but doesn't cover permissions needed, whether it's idempotent (e.g., adding duplicate labels), side effects, error conditions, or response format. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action and target, making it immediately scannable and appropriately sized 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?
Given this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens on success (e.g., returns updated task), error handling, or dependencies (e.g., label must exist). For a 2-parameter write operation, more context is needed to guide effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters clearly documented in the schema ('taskId' and 'label_id'). The description adds no additional parameter semantics beyond what the schema provides, such as format examples or relationship between parameters. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add') and target ('a label to a task'), making the purpose immediately understandable. It distinguishes from siblings like 'remove_task_label' by specifying the opposite operation. However, it doesn't explicitly differentiate from other label-related tools like 'list_task_labels' beyond the verb choice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing existing task and label IDs), when not to use it (e.g., for removing labels), or direct alternatives like 'update_task' if that supports label modifications. Usage is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_taskC
Mark a task as done
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task to mark as done |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the action ('Mark a task as done') but lacks critical behavioral details: whether this is a mutation (implied but not explicit), what permissions are required, if it's reversible (hinted by 'reopen_task' sibling but not stated), or what happens upon completion (e.g., status change, notifications).
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 zero wasted words. It front-loads the core action and outcome efficiently, making it easy to parse and understand immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation operation with no annotations and no output schema), the description is incomplete. It doesn't explain the behavioral implications (e.g., side effects, error conditions) or what the tool returns, leaving gaps for an AI agent to infer usage 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 100% description coverage, with the 'taskId' parameter fully documented in the schema. The description adds no additional semantic context beyond implying 'taskId' is needed to identify the task. Since schema coverage is high, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Mark a task as done' clearly states the action (marking) and resource (task) with a specific outcome (as done). It distinguishes from sibling tools like 'reopen_task' by indicating the opposite action, though it doesn't explicitly differentiate from other task-modification tools like 'update_task' or 'delete_task'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., task must exist), exclusions (e.g., cannot mark already completed tasks), or compare to similar tools like 'update_task' (which might also mark tasks as done).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_projectC
Create a new project
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Project title | |
| description | No | Project description | |
| hex_color | No | Hex color code (e.g. #FF0000) | |
| identifier | No | Project identifier (0-10 characters) | |
| parent_project_id | No | ID of the parent project | |
| is_archived | No | Whether the project is archived |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Create a new project' implies a write operation but doesn't specify permissions required, whether it's idempotent, rate limits, or what happens on success/failure. It lacks details on return values or side effects, which is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It's front-loaded and direct, though it could be more informative without sacrificing brevity. It earns a high score for conciseness but loses a point for under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (6 parameters, mutation operation) and lack of annotations and output schema, the description is incomplete. It doesn't explain behavioral aspects, usage context, or return values, making it inadequate for an AI agent to use effectively without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 6 parameters. The description adds no parameter-specific information beyond what's in the schema. Baseline 3 is appropriate as the schema handles parameter semantics adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new project' clearly states the verb ('create') and resource ('project'), but it's vague about what constitutes a project or its scope. It doesn't differentiate from sibling tools like 'create_task' or 'create_subtask' beyond the resource name, leaving the purpose somewhat generic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., permissions), when to choose 'create_project' over 'create_task' or 'create_subtask', or any exclusions. The description offers no contextual usage information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_relationC
Create a relation between two tasks
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task | |
| otherTaskId | Yes | The ID of the other task | |
| relationKind | Yes | The type of relation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states this is a creation operation, implying mutation, but doesn't address permission requirements, whether the relation is bidirectional, what happens if the relation already exists, or error conditions. This leaves significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's purpose with zero wasted words. It's appropriately sized and front-loaded with the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after creation, what the relation types mean, or how this tool interacts with the system. Given the complexity of creating task relationships, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters thoroughly. The description doesn't add any additional meaning about the parameters beyond what's in the schema, but with complete schema coverage, 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 action ('create a relation') and the resource ('between two tasks'), which is specific and unambiguous. However, it doesn't distinguish this tool from its sibling 'delete_relation', which would have been helpful for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites, when not to use it, or how it relates to sibling tools like 'list_task_relations' or 'delete_relation'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_subtaskC
Create a subtask under a parent task
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project for the subtask | |
| task | Yes | Subtask data | |
| parent_task_id | Yes | The ID of the parent task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Create' implies a write/mutation operation, but the description doesn't address permissions needed, whether the operation is idempotent, what happens on failure, or what the response contains. For a creation tool with zero annotation coverage, this leaves significant behavioral questions unanswered.
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 zero wasted words. It's front-loaded with the essential information (create subtask under parent task) and contains no unnecessary elaboration. Every word earns its place in this minimal but complete statement of 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 creation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after creation (e.g., returns subtask ID), error conditions, or system behavior. Given the complexity implied by the nested task object with many properties, the description should provide more context about the creation operation's scope and outcomes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with all parameters well-documented in the schema itself. The description adds no additional parameter semantics beyond what's in the schema - it doesn't explain the relationship between projectId, parent_task_id, and task, or provide examples of valid values. This meets the baseline of 3 when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('create') and resource ('subtask under a parent task'), making the purpose immediately understandable. It distinguishes from sibling tools like 'create_task' by specifying it's for subtasks rather than top-level tasks. However, it doesn't explicitly differentiate from other creation tools like 'create_project' or 'create_relation' beyond the subtask focus.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (like needing an existing parent task), when not to use it (e.g., for top-level tasks), or how it differs from 'create_task' beyond the parent-child relationship. The agent must infer usage from the tool name and parameter names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskC
Create a new task in a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project | |
| task | Yes | Task data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states it's a creation operation but doesn't mention permissions required, whether it's idempotent, what happens on failure, or what the response looks like. For a mutation tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states exactly what the tool does without any wasted words. It's appropriately sized and front-loaded with the 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 mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like error conditions, permissions, or response format. Given the complexity (nested objects, multiple date fields) and lack of structured behavioral information, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all parameters well-documented in the schema itself. The description adds no additional parameter information beyond what's already in the structured schema, so it meets the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new task in a project' clearly states the action (create) and resource (task in a project), making the purpose immediately understandable. It doesn't distinguish from siblings like 'create_subtask' or 'update_task', but it's not vague or tautological.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'create_subtask', 'update_task', or 'complete_task'. It lacks any mention of prerequisites, constraints, or typical use cases, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_commentC
Delete a comment from a task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task | |
| commentId | Yes | The ID of the comment |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but only states the action without disclosing behavioral traits like whether deletion is permanent, requires authentication, or has rate limits. It does not add context beyond the basic operation, leaving gaps in understanding the tool's impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no wasted words, clearly front-loading the purpose. It is appropriately sized for the tool's complexity, making it efficient and easy to understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description is insufficient. It lacks details on return values, error conditions, or behavioral implications, making it incomplete for safe and effective use by an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters (taskId and commentId) with descriptions. The description does not add any meaning beyond this, such as format examples or constraints, but meets the baseline for adequate 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 'Delete a comment from a task' clearly states the action (delete) and resource (comment from a task), distinguishing it from siblings like delete_task or delete_project. However, it does not specify if it's permanent or reversible, which could help differentiate further from similar tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as whether it requires specific permissions or if there are prerequisites like comment ownership. The description lacks context on exclusions or comparisons to sibling tools like delete_task_attachment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_projectC
Delete a project by ID
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Delete' implies a destructive mutation, the description doesn't specify whether this action is reversible, what permissions are required, what happens to associated tasks/subtasks, or what the response looks like (e.g., success confirmation or error). This is inadequate for a destructive 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 extremely concise at just four words, with zero wasted language. It's front-loaded with the core action and resource, making it immediately understandable 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?
For a destructive mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address critical context like permission requirements, irreversibility, side effects on related data, or what to expect upon success/failure. The 100% schema coverage helps with parameters but doesn't compensate for the missing behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'projectId' clearly documented in the schema. The description adds no additional parameter information beyond what's already in the structured schema, so it meets the baseline for adequate but unremarkable 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 verb ('Delete') and resource ('a project'), making the purpose unambiguous. However, it doesn't differentiate this tool from sibling deletion tools like delete_comment, delete_relation, delete_task, or delete_task_attachment, which all follow the same 'Delete X by ID' pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., project must exist, user must have permissions), consequences (e.g., irreversible deletion, impact on related tasks), or when to choose other tools like update_project or move_project instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_relationC
Delete a relation between two tasks
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task | |
| otherTaskId | Yes | The ID of the other task | |
| relationKind | Yes | The type of relation |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states this is a deletion operation, implying it's destructive, but doesn't specify whether the deletion is permanent, reversible, requires specific permissions, or has side effects (e.g., affecting task dependencies). For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states exactly what the tool does without any wasted words. It's appropriately sized for a straightforward deletion operation and is front-loaded with the core action.
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 destructive mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after deletion (e.g., confirmation, error handling), what relations can be deleted, or potential impacts on task workflows. Given the complexity of task relations and the lack of structured safety information, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters well-documented in the schema itself (taskId, otherTaskId, relationKind with enum values). The description adds no additional parameter semantics beyond what's already in the schema, so it meets the baseline score of 3 where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and resource ('relation between two tasks'), making the purpose immediately understandable. It distinguishes this from sibling tools like 'create_relation' by specifying deletion rather than creation. However, it doesn't specify what types of relations exist or provide examples, which keeps it from a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing relation), when not to use it, or how it differs from similar tools like 'delete_task' or 'create_relation'. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_taskC
Delete a task by ID
| 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?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'Delete' implies a destructive mutation, the description doesn't specify whether deletion is permanent, reversible, requires specific permissions, or has side effects (e.g., cascading deletion of subtasks). This is a significant gap for a destructive operation with zero 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?
The description is a single, efficient sentence with zero wasted words. It's front-loaded with the core action ('Delete a task'), making it immediately understandable. Every word earns its place, achieving optimal conciseness for such a straightforward 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?
Given the tool's destructive nature, lack of annotations, and absence of an output schema, the description is incomplete. It doesn't address critical context like deletion consequences, error conditions, or return values. For a mutation tool with no structured safety hints, this minimal description leaves the agent under-informed about risks and outcomes.
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 the parameter 'taskId' clearly documented in the schema. The description adds no additional semantic context beyond what's in the schema (e.g., format examples, validation rules, or ID sourcing). This meets the baseline for high schema coverage but doesn't enhance understanding.
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 ('Delete') and resource ('a task by ID'), making the purpose unambiguous. It distinguishes from siblings like 'delete_project' or 'delete_comment' by specifying the resource type. However, it doesn't explicitly mention what 'delete' entails (e.g., permanent removal vs. archiving), which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., task must exist), exclusions (e.g., cannot delete completed tasks), or related tools like 'complete_task' or 'reopen_task' that might affect deletion eligibility. This leaves the agent with insufficient context for optimal tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_task_attachmentC
Delete an attachment from a task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task | |
| attachmentId | Yes | The ID of the attachment to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Delete' implies a destructive operation, the description doesn't specify whether this is permanent or reversible, what permissions are required, whether there are confirmation prompts, or what happens on success/failure. For a destructive operation with zero annotation coverage, this leaves significant behavioral questions unanswered.
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 that communicates the core purpose without any wasted words. It's appropriately sized for a simple operation and gets straight to the point with no unnecessary elaboration or structural complexity.
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 destructive operation with no annotations and no output schema, the description is insufficiently complete. It doesn't address critical context like what happens after deletion (success indicators, error conditions), whether the operation is idempotent, or what the user should expect as a result. The combination of destructive nature and lack of structured metadata requires more comprehensive description coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage with clear parameter documentation, so the baseline is 3. The description doesn't add any meaningful parameter semantics beyond what's already in the schema - it mentions 'attachment' and 'task' which are already covered by the parameter descriptions, but provides no additional context about parameter relationships, validation rules, or usage examples.
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 target resource ('an attachment from a task'), making the purpose immediately understandable. However, it doesn't differentiate this tool from other deletion tools like 'delete_task' or 'delete_comment', which would require more specific context about what distinguishes attachment deletion from other deletion operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There's no mention of prerequisites (e.g., needing to list attachments first), no indication of when deletion is appropriate versus other operations, and no reference to sibling tools like 'list_attachments' that might logically precede this operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectC
Get a specific project by ID
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic operation. It doesn't disclose whether this is a read-only operation, what permissions are needed, what happens with invalid IDs, or what the return format looks like. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that gets straight to the point with zero wasted words. It's appropriately sized for a simple lookup tool and front-loads the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read operation with no annotations and no output schema, the description is insufficient. It doesn't explain what information is returned about the project, how to handle errors, or provide context about the project structure. Given the complexity of project management tools and lack of structured output documentation, more completeness is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the single parameter 'projectId' well-documented in the schema. The description adds no additional parameter information beyond what the schema already provides, which meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('a specific project by ID'), making the purpose immediately understandable. It distinguishes from siblings like 'list_projects' by specifying retrieval of a single item, though it doesn't explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'list_projects' or 'get_task'. The description implies usage when you have a project ID, but offers no context about prerequisites, error conditions, or relationship to other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_taskC
Get a specific task by ID
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task | |
| expand | No | Expand related data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral information. It doesn't disclose whether this is a read-only operation, what authentication is needed, error conditions, rate limits, or what the response contains. 'Get' implies retrieval but lacks specifics about behavior beyond the basic 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 extremely concise - a single sentence with zero wasted words. It's front-loaded with the core purpose and uses clear, direct language. Every word earns its place in this minimal description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what a 'task' contains, what the response format looks like, or how errors are handled. Given the rich sibling tool ecosystem and lack of structured metadata, more context would be helpful for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters (taskId and expand). The description adds no additional parameter semantics beyond what's in the schema - it mentions 'by ID' which is already covered by the taskId description. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get') and resource ('a specific task by ID'), making the purpose immediately understandable. It distinguishes this from list operations (like list_tasks) by specifying retrieval of a single task, though it doesn't explicitly differentiate from other get operations like get_project.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to prefer get_task over list_tasks for single-task retrieval, or how it relates to sibling tools like get_project. There's no context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_attachmentsC
List all attachments for a specific task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task | |
| page | No | Page number for pagination | |
| per_page | No | Number of items per page (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states this is a list operation, implying it's read-only and non-destructive, but doesn't disclose behavioral traits like pagination behavior (implied by parameters but not explained), rate limits, authentication needs, or what the output looks like. This leaves significant gaps for a tool with pagination parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose with zero waste. Every word earns its place, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has pagination parameters (page, per_page) and no output schema, the description is incomplete. It doesn't explain how pagination works, what the return format is (e.g., list of attachment objects), or any error conditions. For a list tool with pagination, this leaves the agent guessing about key behavioral aspects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all three parameters (taskId, page, per_page). The description adds no additional meaning beyond implying the tool operates on a specific task, which is already covered by the taskId parameter's description. This meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List all attachments') and the target resource ('for a specific task'), which is a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'delete_task_attachment' or 'list_tasks', which would be needed for a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'list_tasks' (which might include attachments) or 'get_task' (which might return attachment details). There's no mention of prerequisites, context, or exclusions for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commentsC
List all comments for a specific task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task | |
| commentId | Yes | The ID of the comment | |
| comment | Yes | The updated comment text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It states this is a list operation, implying read-only behavior, but doesn't clarify if it returns all comments at once or uses pagination, what the output format is (e.g., array of comment objects), or any error conditions (e.g., invalid task ID). For a tool with no annotations, this leaves significant gaps in understanding how it behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('List all comments for a specific task') with zero wasted words. Every element earns its place, making it easy for an agent to parse quickly without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (3 required parameters, no annotations, no output schema), the description is incomplete. It doesn't explain what the tool returns (e.g., comment objects with IDs, text, timestamps), how errors are handled, or any limitations (e.g., maximum comments returned). For a list operation with no structured output information, this leaves the agent guessing about the result format and behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with all three parameters ('taskId', 'commentId', 'comment') documented in the schema. The description adds no additional meaning beyond implying 'taskId' is required to scope the listing. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description doesn't compensate but doesn't detract either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('comments for a specific task'), making the purpose immediately understandable. It distinguishes from siblings like 'delete_comment' by focusing on retrieval rather than modification. However, it doesn't explicitly differentiate from other list operations like 'list_attachments' or 'list_task_labels' beyond the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid task ID), exclusions, or comparisons to similar tools like 'get_task' (which might include comments). The agent must infer usage solely from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_labelsC
List all available labels
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | No | Filter labels by project ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states it's a list operation but doesn't mention whether it's paginated, what format the output takes, permissions required, or rate limits. For a tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a simple list operation and front-loads the core purpose immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is insufficiently complete. It doesn't explain what 'labels' are in this context, how they're returned, or differentiate from similar sibling tools. For a tool in a rich ecosystem with many list operations, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with the single parameter 'project_id' well-documented in the schema as filtering labels by project ID. The description adds no additional parameter information beyond what's already in the structured schema, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('all available labels'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'list_task_labels' or specify what type of labels (project labels, task labels, etc.), which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'list_task_labels' or 'list_project_children'. There's no mention of context, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_childrenC
List all child projects of a project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the parent project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states it's a list operation, implying it's read-only, but does not address potential side effects, authentication needs, rate limits, or return format. This leaves significant gaps for a tool that interacts with project hierarchies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no wasted words. It is front-loaded with the core action and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It does not explain what constitutes a 'child project' (e.g., direct descendants only), how results are returned, or any error conditions. For a tool with no structured behavioral hints, this minimal description is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with 'projectId' clearly documented. The description adds no additional meaning beyond the schema, such as examples or constraints on valid project IDs. The baseline score of 3 is appropriate since the schema adequately covers the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('all child projects of a project'), making the purpose unambiguous. However, it does not explicitly differentiate from sibling tools like 'list_projects' or 'list_project_tasks', which could cause confusion about scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'list_projects' (which might list all projects) or 'list_project_tasks' (which lists tasks within a project). It lacks any context about prerequisites, exclusions, or specific scenarios for its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsC
List all projects the user has access to
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| per_page | No | Number of items per page (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic operation. It doesn't disclose behavioral traits like pagination behavior (implied by parameters but not explained), rate limits, authentication requirements, error conditions, or what 'access' means (view vs. edit). The description is minimal beyond the core function.
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, zero waste, front-loaded with the core action. Every word earns its place with no redundancy or 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?
For a list operation with 2 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain the return format (e.g., project objects with fields), pagination behavior, or error handling. Given the complexity and lack of structured data, 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 description coverage is 100%, so parameters are fully documented in the schema. The description adds no parameter-specific information beyond implying a list operation. Baseline 3 is appropriate as the schema handles parameter semantics adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('projects'), specifying scope as 'all projects the user has access to'. It distinguishes from siblings like 'get_project' (single project) and 'list_project_tasks' (tasks within projects), but doesn't explicitly contrast with 'list_project_children' or 'list_tasks' which have different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description doesn't mention when to choose 'list_projects' over 'get_project' (single project) or 'list_project_children' (child projects), nor does it provide context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_project_tasksC
List all tasks for a specific project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project | |
| page | No | Page number for pagination | |
| per_page | No | Number of items per page (max 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. While 'List all tasks' implies a read-only operation, the description doesn't mention pagination behavior (though schema shows page/per_page parameters), authentication requirements, rate limits, or what format the returned tasks will have. For a tool with 3 parameters and no output schema, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a simple listing tool and front-loads the essential information immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 3 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what 'tasks' include, what fields are returned, how pagination works in practice, or any error conditions. The agent would be guessing about the tool's behavior and output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters (projectId, page, per_page) with good descriptions. The description adds no additional parameter information beyond what's in the schema, meeting the baseline expectation when schema coverage is complete.
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 ('List all tasks') and target resource ('for a specific project'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from sibling tools like 'list_tasks' or 'list_project_children', which could have overlapping functionality.
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. With multiple list-related sibling tools (list_tasks, list_project_children, list_subtasks, etc.), there's no indication of what makes this tool distinct or when it should be preferred over other listing options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_subtasksB
List all subtasks for a task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the parent task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states it's a listing operation, implying read-only behavior, but doesn't specify whether it returns all subtasks at once, supports pagination, requires authentication, has rate limits, or what the output format looks like. For a tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that directly states the tool's purpose without unnecessary words. It's front-loaded with the core functionality and contains no redundant information. Every word earns its place, making it highly 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 tool's low complexity (single parameter, no output schema, no annotations), the description is minimally adequate. It states what the tool does but lacks behavioral context, usage guidance, and output information. For a simple read operation, it meets basic requirements but doesn't provide the completeness needed for optimal agent understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the single parameter 'taskId' well-documented in the schema. The description doesn't add any parameter details beyond what the schema provides (e.g., it doesn't explain what a taskId is or where to find it). With high schema coverage, the baseline score of 3 is appropriate as the description doesn't enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('subtasks for a task'), making the purpose immediately understandable. It distinguishes from siblings like 'list_tasks' or 'list_project_tasks' by specifying subtasks rather than tasks. However, it doesn't explicitly mention that it lists ALL subtasks or specify any filtering capabilities, which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid taskId), contrast with similar tools like 'list_tasks' or 'get_task', or indicate when this tool is appropriate versus when other listing tools might be better. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_task_assigneesC
List all assignees for a task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a read operation but doesn't disclose permissions, pagination, error handling, or response format. For a tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with zero waste. It's front-loaded and efficiently communicates the core purpose without unnecessary elaboration, making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'assignees' entails (e.g., user objects, IDs), return structure, or error cases. For a tool in a rich sibling context, more detail is needed to guide effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'taskId' well-documented in the schema. The description adds no additional meaning beyond implying the parameter is required, so it meets the baseline for high schema coverage without compensating value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and resource ('assignees for a task'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'list_tasks' or 'list_task_labels' beyond the specific resource, missing explicit sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid task ID), exclusions, or comparisons to similar tools like 'get_task' or 'list_tasks', leaving usage context implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_task_labelsC
List all labels for a task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't disclose if this is a read-only operation, what permissions are needed, how results are returned (e.g., pagination), or error handling, which are critical for a tool with mutation siblings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste, front-loading the core action. It's appropriately sized for a simple tool, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (1 parameter, 100% schema coverage) but lack of annotations and output schema, the description is incomplete. It doesn't address behavioral aspects like safety or return format, which are needed for the agent to use it effectively alongside mutation tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'taskId' fully documented in the schema. The description adds no additional meaning beyond implying it's for a specific task, which is already clear from the schema. Baseline 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and resource 'all labels for a task', making the purpose unambiguous. However, it doesn't differentiate from the sibling tool 'list_labels', which appears to list labels more generally rather than for a specific task, so it misses full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'list_labels' or other list-related siblings. It lacks context about prerequisites, such as needing a valid task ID, or exclusions, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_task_relationsC
List all relations for a task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'List all relations' but doesn't specify if this is a read-only operation, what the output format might be, whether there are pagination or rate limits, or any side effects. For a tool with no annotations, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with zero waste. It is appropriately sized and front-loaded, efficiently conveying the core purpose without unnecessary elaboration, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of listing relations (which could involve various types like dependencies or links), no annotations, and no output schema, the description is incomplete. It doesn't explain what 'relations' entail, the return format, or any behavioral constraints, leaving the agent with insufficient context 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?
The input schema has 100% description coverage, with 'taskId' clearly documented as 'The ID of the task'. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline of 3 for high schema coverage without compensating value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the verb 'List' and resource 'relations for a task', which clarifies the basic purpose. However, it doesn't differentiate from sibling tools like 'list_tasks' or 'list_subtasks' beyond the specific resource type, and it lacks specificity about what 'relations' means in this context (e.g., dependencies, links, or associations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description doesn't mention prerequisites, context for listing relations, or how it differs from other list operations like 'list_subtasks' or 'list_task_labels', leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksB
List all tasks across all projects
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number for pagination | |
| per_page | No | Number of items per page (max 100) | |
| search | No | Search query | |
| sort_by | No | Field to sort by | |
| order_by | No | Sort order | |
| filter_by | No | Field to filter by | |
| filter_value | No | Value to filter by |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it's a list operation, implying read-only behavior, but doesn't disclose pagination behavior (implied by parameters), rate limits, authentication needs, or what happens with large result sets. For a tool with 7 parameters and no annotations, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core purpose and appropriately sized for a list tool. Every word earns its place, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (7 parameters, no output schema, no annotations), the description is minimal but covers the basic purpose. It lacks behavioral details, usage guidelines, and output information, which are needed for full context. However, the high schema coverage mitigates some gaps, making it adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing detailed parameter documentation. The description adds no parameter-specific information beyond implying a broad scope ('all tasks across all projects'), which doesn't clarify individual parameters. With high schema coverage, the baseline is 3, as the description doesn't compensate but doesn't detract either.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List') and resource ('tasks'), specifying scope ('across all projects'). It distinguishes from siblings like list_project_tasks (project-specific) and list_subtasks (subtask-specific), though it doesn't explicitly name these alternatives. The purpose is unambiguous but could be more specific about sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like list_project_tasks or list_subtasks. The description implies a broad scope ('all tasks across all projects'), but there's no explicit when/when-not advice or prerequisites. Usage must be inferred from context rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_projectC
Move a project to a different parent or position
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to move | |
| parent_project_id | No | The ID of the new parent project (null to move to root) | |
| position | No | The position in the parent project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a mutation (moving changes hierarchy) but doesn't disclose permissions required, whether the move is reversible, effects on child projects/tasks, or error conditions (e.g., invalid parent). No rate limits, side effects, or response format are mentioned, leaving significant gaps for a tool that alters project structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste—it directly states the tool's purpose without fluff. It's appropriately sized for a simple operation and front-loaded with the core action, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't cover behavioral aspects like permissions, reversibility, or effects on related data (e.g., child tasks). Given the complexity of moving projects in a hierarchy, more context on constraints and outcomes is needed to adequately guide an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents parameters (projectId, parent_project_id, position). The description adds no additional meaning beyond implying these parameters relate to moving in hierarchy. It doesn't explain semantics like 'position' ordering (0-based vs 1-based) or special cases (null for root), so it meets the baseline but doesn't enhance understanding.
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 ('Move') and resource ('a project'), specifying the change in hierarchy ('to a different parent or position'). It distinguishes from siblings like 'move_task' by focusing on projects rather than tasks. However, it doesn't explicitly contrast with 'update_project' which might also handle parent changes.
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 'update_project' (which might handle parent changes) or 'create_project' (for new projects). The description lacks context about prerequisites, such as needing the project ID or valid parent IDs, and doesn't mention when not to use it (e.g., for non-hierarchical changes).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_taskC
Move a task to a different project or position
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task to move | |
| project_id | Yes | The ID of the target project | |
| position | No | The position in the target project |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool performs a mutation ('move'), but lacks critical behavioral details: whether it requires specific permissions, if the move is reversible, what happens to task dependencies or attachments, error conditions (e.g., invalid IDs), or response format. This is inadequate for a mutation tool with zero 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?
The description is a single, efficient sentence that front-loads the core action ('Move a task') and specifies the destination. There is no wasted wording or redundancy, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is insufficient. It lacks behavioral context (e.g., permissions, side effects), usage guidelines, and details on return values or errors. Given the complexity of moving tasks across projects, more completeness is needed to guide an agent effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear parameter descriptions in the schema (e.g., 'The ID of the task to move'). The description adds minimal value beyond the schema, only implying that 'project_id' and 'position' define the destination. No additional syntax, constraints, or examples are provided, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('move') and resource ('task'), specifying the destination ('to a different project or position'). It distinguishes from siblings like 'move_project' (different resource) and 'move_task_to_bucket' (different destination type), but doesn't explicitly contrast with all siblings like 'update_task' which might also reposition 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 explicit guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., task must exist), exclusions (e.g., cannot move to archived projects), or comparisons to siblings like 'update_task' for position changes within the same project. Usage is implied by the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_task_to_bucketC
Move a task to a different kanban bucket
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task to move | |
| projectId | Yes | The project ID | |
| viewId | Yes | The project view ID (must be a kanban view) | |
| bucketId | Yes | The target bucket ID | |
| position | No | Position within the bucket |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'move' implies a mutation operation, the description doesn't specify permissions required, whether the move is reversible, what happens to task relationships, or how the system responds. For a mutation tool with zero annotation coverage, this is inadequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states exactly what the tool does with zero wasted words. It's appropriately sized for a straightforward operation and gets directly to the point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is insufficient. It doesn't explain what happens after the move, what errors might occur, or how to interpret results. Given the complexity of moving tasks between kanban buckets (which could affect workflows, dependencies, or permissions), more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description doesn't add any additional meaning about parameters beyond what's already in the schema descriptions. The baseline score of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('move') and resource ('task to a different kanban bucket'), making the purpose immediately understandable. It doesn't explicitly differentiate from the sibling 'move_task' tool, which appears to be a more general move operation, so it doesn't reach the highest score for sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'move_task' or other task manipulation tools. There's no mention of prerequisites, constraints, or specific scenarios where this tool is appropriate versus other options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_task_assigneeC
Remove a user from task assignees
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task | |
| userId | Yes | The ID of the user to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While 'Remove' implies a destructive mutation, the description doesn't specify whether this requires special permissions, what happens if the user isn't currently assigned, whether the operation is reversible, or what the response looks like. For a mutation tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that communicates the core purpose without any wasted words. It's appropriately sized for a simple operation and front-loads the essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is inadequate. It doesn't explain what happens after removal, potential error conditions, permissions required, or how this differs from similar sibling tools. Given the complexity of modifying task assignments in a collaborative system, more contextual information would be valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters clearly documented in the schema. The description doesn't add any additional semantic context about the parameters beyond what's already in the schema (e.g., format examples, validation rules, or relationship between taskId and userId). Baseline score of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Remove') and resource ('a user from task assignees'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'remove_task_label' or 'delete_task', but the specificity of 'user from task assignees' provides adequate clarity for this particular operation.
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 'delete_task' (which might remove the entire task) or 'remove_task_label'. It doesn't mention prerequisites (e.g., the user must already be assigned) or contextual constraints, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_task_labelC
Remove a label from a task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task | |
| labelId | Yes | The ID of the label to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the mutation action ('Remove') but doesn't describe what happens on success/failure, whether the operation is reversible, permission requirements, or any side effects. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that states exactly what the tool does with zero wasted words. It's appropriately sized for a simple operation and front-loads the core action 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?
For a mutation tool with no annotations and no output schema, the description is insufficiently complete. It doesn't explain what happens after removal, whether there are confirmation prompts, error conditions, or what the return value might be. Given the complexity of a label removal operation, more behavioral context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters clearly documented in the schema. The description doesn't add any additional semantic context about the parameters beyond what the schema already provides (taskId and labelId). This meets the baseline expectation when schema coverage is complete.
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 ('Remove') and target ('a label from a task'), making the purpose immediately understandable. It distinguishes from siblings like 'add_task_label' by specifying removal rather than addition, though it doesn't explicitly contrast with other label-related operations beyond the name difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., the label must already be attached), when not to use it, or how it differs from other label management tools like 'list_task_labels' or 'add_task_label' beyond the obvious action difference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reopen_taskC
Reopen a completed task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task to reopen |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure but only states the basic action without details on permissions, side effects, error conditions, or what 'reopen' entails (e.g., status change, timestamp updates). For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words, front-loading the core action and target. It's appropriately sized for a simple tool, earning full marks for 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 mutation tool with no annotations and no output schema, the description is incomplete. It lacks information on behavioral traits, return values, error handling, and how it differs from siblings. Given the complexity of task management and rich sibling set, more context is needed for effective agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'taskId' fully documented in the schema. The description adds no additional parameter semantics beyond what the schema provides, such as format examples or constraints, meeting the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('reopen') and target resource ('a completed task'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'complete_task' or 'update_task' beyond the basic verb, missing explicit contrast that would warrant a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'update_task' for status changes or 'complete_task' for the reverse operation. The description implies usage for completed tasks but doesn't specify prerequisites, exclusions, or contextual triggers, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_projectC
Update an existing project
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to update | |
| title | No | Project title | |
| description | No | Project description | |
| hex_color | No | Hex color code (e.g. #FF0000) | |
| identifier | No | Project identifier (0-10 characters) | |
| parent_project_id | No | ID of the parent project | |
| is_archived | No | Whether the project is archived | |
| is_favorite | No | Whether the project is favorited |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool updates a project, implying mutation, but doesn't mention permissions required, whether changes are reversible, rate limits, or what happens to unspecified fields (e.g., partial updates). This is a significant gap for a mutation tool with zero 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?
The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. However, it could be more front-loaded with key details (e.g., 'Update fields of an existing project using its ID'), but it's appropriately sized for its minimal content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, mutation operation) and lack of annotations and output schema, the description is incomplete. It doesn't address behavioral aspects like error handling, response format, or constraints (e.g., archiving effects), leaving gaps that could hinder correct tool invocation by an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 100%, with each parameter well-documented in the schema (e.g., projectId, title, hex_color pattern). The description adds no additional meaning beyond the schema, such as explaining relationships between parameters or usage examples. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update an existing project' clearly states the action (update) and resource (project), which is adequate. However, it doesn't differentiate this from sibling tools like 'update_task' or specify what aspects of a project can be updated, making it somewhat vague compared to more specific alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'create_project', 'delete_project', or 'move_project'. The description lacks context about prerequisites (e.g., needing an existing project ID) or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_taskC
Update an existing task
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The ID of the task to update | |
| taskUpdates | Yes | Task updates |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. 'Update an existing task' implies a mutation operation but reveals nothing about permissions required, whether updates are partial or complete, validation behavior, error conditions, or what happens to unspecified fields. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a basic update operation and front-loads the essential information. Every word earns its place in this minimal but complete statement of function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like permissions, validation, error handling, or response format. Given the complexity of updating tasks with multiple fields and the lack of structured behavioral information, the description should provide more context about how the operation works.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters (taskId and taskUpdates) and all nested properties well-documented in the schema. The description adds no additional parameter semantics beyond what's already in the structured schema. According to scoring rules, when schema coverage is high (>80%), the baseline is 3 even with no param info in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update an existing task' clearly states the verb (update) and resource (task), but it's vague about what can be updated and doesn't differentiate from sibling tools like update_project, complete_task, or reopen_task. It provides basic purpose but lacks specificity about scope or distinction from related operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like complete_task, reopen_task, or update_project. There's no mention of prerequisites (e.g., task must exist), exclusions, or contextual recommendations. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
33 tool updates
v1.0.0- First observed
add_task_assignee - First observed
add_task_label - First observed
complete_task - First observed
create_project - First observed
create_relation - First observed
create_subtask - First observed
create_task - First observed
delete_comment - First observed
delete_project - First observed
delete_relation - First observed
delete_task - First observed
delete_task_attachment - First observed
get_project - First observed
get_task - First observed
list_attachments - First observed
list_comments - First observed
list_labels - First observed
list_project_children - First observed
list_project_tasks - First observed
list_projects - First observed
list_subtasks - First observed
list_task_assignees - First observed
list_task_labels - First observed
list_task_relations - First observed
list_tasks - First observed
move_project - First observed
move_task - First observed
move_task_to_bucket - First observed
remove_task_assignee - First observed
remove_task_label - First observed
reopen_task - First observed
update_project - First observed
update_task
TDQS
Scored across 33 tools
Every tool has a clearly distinct purpose with no ambiguity. Tools are precisely scoped to specific actions on specific resources (e.g., add_task_assignee vs. remove_task_assignee, create_task vs. update_task vs. delete_task). The descriptions reinforce this clarity, making misselection unlikely.
Tool names follow a highly consistent verb_noun pattern throughout (e.g., create_project, list_tasks, update_task). All names use snake_case uniformly, and verbs are predictable (create, get, list, update, delete, add, remove, move, complete, reopen). This consistency enhances readability and predictability.
With 33 tools, the count feels heavy for a task management server, bordering on excessive. While the tools cover many operations, a more streamlined set might improve usability. This is borderline, as it could overwhelm agents but is not extreme.
The tool surface is complete for the Vikunja task management domain. It covers full CRUD/lifecycle operations for projects, tasks, comments, attachments, labels, assignees, and relations, with no obvious gaps. Agents can perform all expected workflows without dead ends.
Maintenance
Related MCP Connectors
Create and manage MeisterTask projects, tasks, and notes from your AI assistant.
Manage tasks, Focus Zone, notes, projects, and task history from compatible AI assistants.
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
Manage projects, tasks, time tracking, and team collaboration through natural language.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceConnects Claude to self-hosted Vikunja instances for conversational task and project management. Supports CRUD operations on projects and tasks, plus labels, comments, weekly reviews, calendar feeds, and task relations.18 npm-
- AlicenseCqualityCmaintenanceEnables AI assistants to interact with Vikunja task management via ergonomic and raw REST tools for projects, tasks, labels, and comments.10011 npmMIT
- AlicenseCqualityFmaintenanceEnables AI assistants to interact with Vikunja task management instances, providing full task, project, label, team, user, and webhook management operations through subcommand-based tools.16283 npm108MIT
- AlicenseNot gradedqualityDmaintenanceEnables to interact with Vikunja task management through its REST API, supporting projects, tasks, comments, labels, assignees, and relations with field preservation.18 npmMIT