Skip to main content
Glama
Wosh-i
by Wosh-i

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_TOKEN

With custom Vikunja URL:

npx vikunja-mcp --url https://your-vikunja.com/api/v1 --token YOUR_TOKEN

Or using environment variables:

export VIKUNJA_TOKEN=your_token
export VIKUNJA_URL=https://your-vikunja.com/api/v1
npx vikunja-mcp

Related 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_projects

List all projects the user has access to

get_project

Get a specific project by ID

create_project

Create a new project

update_project

Update an existing project

delete_project

Delete a project by ID

list_project_children

List child projects under a project

move_project

Move project to different parent/position

Tasks

Tool

Description

list_tasks

List all tasks across all projects

list_project_tasks

List all tasks for a specific project

get_task

Get a specific task by ID

create_task

Create a new task in a project

update_task

Update an existing task

delete_task

Delete a task by ID

Task State & Movement

Tool

Description

complete_task

Mark a task as done

reopen_task

Reopen a completed task

move_task

Move task to different project/position

Assignees

Tool

Description

add_task_assignee

Add a user as assignee to a task

remove_task_assignee

Remove assignee from a task

list_task_assignees

List all assignees for a task

Labels

Tool

Description

add_task_label

Add a label to a task

remove_task_label

Remove a label from a task

list_task_labels

List all labels on a task

list_labels

List all available labels (globally)

Comments

Tool

Description

list_comments

List all comments for a task

create_comment

Add a comment to a task

update_comment

Update a comment

delete_comment

Delete a comment

Relations

Tool

Description

create_relation

Create a relation between two tasks

delete_relation

Delete a relation between tasks

list_task_relations

List all relations for a task

Subtasks

Tool

Description

create_subtask

Create a subtask linked to parent task

list_subtasks

List all subtasks for a task

Attachments

Tool

Description

list_task_attachments

List all attachments for a task

delete_task_attachment

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 uses z.coerce.number() to automatically convert string IDs (like "123") to numbers. This means you can pass either 123 or "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 pagination

    • per_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 description

    • hex_color (string): Hex color code (e.g., "#FF5733")

    • identifier (string): Unique identifier for the project

    • parent_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 title

    • description (string): New description

    • hex_color (string): New hex color code

    • identifier (string): New identifier

    • parent_project_id (number): New parent project ID

    • is_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 pagination

    • per_page (number): Number of items per page

    • status (string): Filter by status (open, done, done_lte, done_gte)

    • priority (number): Filter by priority

    • due_date (string): Filter by due date

    • label (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 pagination

    • per_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 object

      • title (string, required): The task title

  • Optional:

    • task (object): The task object

      • description (string): Task description

      • done (boolean): Whether task is completed

      • due_date (string): Due date (ISO 8601 format)

      • start_date (string): Start date

      • end_date (string): End date

      • hex_color (string): Task color

      • priority (number): Priority (1-5, where 5 is highest)

      • percent_done (number): Progress (0-100)

      • repeat_after (number): Repeat after X minutes

      • repeat_mode (number): Repeat mode (0=relative, 1=absolute)

update_task

Update an existing task.

  • Parameters:

    • taskId (number, required): The task ID

    • taskUpdates (object, required): The task fields to update

  • Optional:

    • taskUpdates (object):

      • title (string): New title

      • description (string): New description

      • done (boolean): Completion status

      • due_date (string): New due date

      • start_date (string): New start date

      • end_date (string): New end date

      • hex_color (string): New color

      • priority (number): New priority

      • percent_done (number): Progress (0-100)

      • repeat_after (number): New repeat interval

      • repeat_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 ID

    • project_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 ID

    • userId (number, required): The user ID to add

remove_task_assignee

Remove assignee from a task.

  • Parameters:

    • taskId (number, required): The task ID

    • userId (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 ID

    • label_id (number, required): The label ID to add

remove_task_label

Remove a label from a task.

  • Parameters:

    • taskId (number, required): The task ID

    • label_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 ID

    • page (number): Page number

    • per_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 number

    • per_page (number): Items per page

create_comment

Add a comment to a task.

  • Parameters:

    • taskId (number, required): The task ID

    • comment (string, required): The comment text

update_comment

Update a comment.

  • Parameters:

    • taskId (number, required): The task ID

    • commentId (number, required): The comment ID

    • comment (string, required): New comment text

delete_comment

Delete a comment.

  • Parameters:

    • taskId (number, required): The task ID

    • commentId (number, required): The comment ID to delete

Relations

create_relation

Create a relation between two tasks.

  • Parameters:

    • taskId (number, required): The source task ID

    • otherTaskId (number, required): The related task ID

    • relationKind (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 ID

    • otherTaskId (number, required): The related task ID

    • relationKind (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 ID

    • parent_task_id (number, required): The parent task ID

    • task (object, required): The subtask object

  • Required:

    • task (object):

      • title (string, required): The subtask title

  • Optional:

    • task (object):

      • description (string): Subtask description

      • done (boolean): Whether subtask is completed

      • due_date (string): Due date

      • start_date (string): Start date

      • end_date (string): End date

      • hex_color (string): Subtask color

      • priority (number): Priority

      • percent_done (number): Progress (0-100)

      • repeat_after (number): Repeat after X minutes

      • repeat_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 number

    • per_page (number): Items per page

delete_task_attachment

Delete an attachment from a task.

  • Parameters:

    • taskId (number, required): The task ID

    • attachmentId (number, required): The attachment ID

Examples

Listing Projects and Tasks

list my vikunja projects

Returns all projects you have access to.

list_project_tasks projectId: 1

Returns all tasks in project ID 1.

list_tasks per_page: 50

Lists 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: 5

Marks task 5 as done.

reopen_task taskId: 5

Reopens task 5.

Working with Assignees

add_task_assignee taskId: 3 userId: 7

Adds user 7 as assignee to task 3.

list_task_assignees taskId: 3

Lists 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

  1. Log into your Vikunja instance

  2. Go to Settings → API Tokens

  3. Create a new token

Build from Source

git clone https://github.com/Wosh-i/vikunja-mcp.git
cd vikunja-mcp
npm install
npm run build

OpenCode Configuration

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 build

Then 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

VIKUNJA_URL

No

https://try.vikunja.io/api/v1

Your Vikunja API base URL

VIKUNJA_TOKEN

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

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 build

Then 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

VIKUNJA_URL

No

https://try.vikunja.io/api/v1

Your Vikunja API base URL

VIKUNJA_TOKEN

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.

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-mcp

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 build

Then 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.js

Configuration Scopes

Claude Code TUI supports different scopes for MCP server configuration:

Scope

Config Location

Description

user

~/.claude.json

Available to you across all projects

local (default)

~/.claude.json under project path

Available only in the current project

project

.mcp.json in project root

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-mcp

Managing 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
/mcp

Configuration Options

Option

Required

Default

Description

VIKUNJA_URL

No

https://try.vikunja.io/api/v1

Your Vikunja API base URL

VIKUNJA_TOKEN

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-mcp

Usage

CLI Options

Option

Alias

Description

--token

-t

Your Vikunja API token

--url

-u

Your Vikunja API base URL

--help

-h

Show help

Using with OpenCode

After configuration, you can use Vikunja tools in OpenCode:

list my vikunja projects
create a project called "My Tasks" with color #FF5733
add a task titled "Buy groceries" to project "My Tasks" with priority 3
show me all tasks in the Inbox project

Development

# Install dependencies
npm install

# Build
npm run build

# Run in development mode
npm run dev

# Run tests (when available)
npm test

License

MIT License - see LICENSE file for details.

Contributing

Contributions welcome! Please open an issue or pull request.

Available Tools

33 tools
add_task_assigneeC

Add a user as assignee to a task

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task
user_idYesThe ID of the user to add as assignee

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task
label_idYesThe ID of the label to add

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task to mark as done

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesProject title
descriptionNoProject description
hex_colorNoHex color code (e.g. #FF0000)
identifierNoProject identifier (0-10 characters)
parent_project_idNoID of the parent project
is_archivedNoWhether the project is archived

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task
otherTaskIdYesThe ID of the other task
relationKindYesThe type of relation

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID of the project for the subtask
taskYesSubtask data
parent_task_idYesThe ID of the parent task

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID of the project
taskYesTask data

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task
commentIdYesThe ID of the comment

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID of the project to delete

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task
otherTaskIdYesThe ID of the other task
relationKindYesThe type of relation

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task to delete

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task
attachmentIdYesThe ID of the attachment to delete

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID of the project

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task
expandNoExpand related data

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task
pageNoPage number for pagination
per_pageNoNumber of items per page (max 100)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task
commentIdYesThe ID of the comment
commentYesThe updated comment text

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idNoFilter labels by project ID

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID of the parent project

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
per_pageNoNumber of items per page (max 100)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID of the project
pageNoPage number for pagination
per_pageNoNumber of items per page (max 100)

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the parent task

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
per_pageNoNumber of items per page (max 100)
searchNoSearch query
sort_byNoField to sort by
order_byNoSort order
filter_byNoField to filter by
filter_valueNoValue to filter by

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID of the project to move
parent_project_idNoThe ID of the new parent project (null to move to root)
positionNoThe position in the parent project

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task to move
project_idYesThe ID of the target project
positionNoThe position in the target project

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task to move
projectIdYesThe project ID
viewIdYesThe project view ID (must be a kanban view)
bucketIdYesThe target bucket ID
positionNoPosition within the bucket

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task
userIdYesThe ID of the user to remove

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task
labelIdYesThe ID of the label to remove

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task to reopen

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID of the project to update
titleNoProject title
descriptionNoProject description
hex_colorNoHex color code (e.g. #FF0000)
identifierNoProject identifier (0-10 characters)
parent_project_idNoID of the parent project
is_archivedNoWhether the project is archived
is_favoriteNoWhether the project is favorited

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
taskIdYesThe ID of the task to update
taskUpdatesYesTask updates

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

  1. 33 tool updatesv1.0.0
    • First observedadd_task_assignee
    • First observedadd_task_label
    • First observedcomplete_task
    • First observedcreate_project
    • First observedcreate_relation
    • First observedcreate_subtask
    • First observedcreate_task
    • First observeddelete_comment
    • First observeddelete_project
    • First observeddelete_relation
    • First observeddelete_task
    • First observeddelete_task_attachment
    • First observedget_project
    • First observedget_task
    • First observedlist_attachments
    • First observedlist_comments
    • First observedlist_labels
    • First observedlist_project_children
    • First observedlist_project_tasks
    • First observedlist_projects
    • First observedlist_subtasks
    • First observedlist_task_assignees
    • First observedlist_task_labels
    • First observedlist_task_relations
    • First observedlist_tasks
    • First observedmove_project
    • First observedmove_task
    • First observedmove_task_to_bucket
    • First observedremove_task_assignee
    • First observedremove_task_label
    • First observedreopen_task
    • First observedupdate_project
    • First observedupdate_task

TDQS

B3.3/5.0

Scored across 33 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count3/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers