Skip to main content
Glama

Things3 MCP Logo

Things 3 MCP Server

This Model Context Protocol (MCP) server lets you use Claude Desktop to interact with your task management data in Things 3. You can ask Claude or your MCP client of choice to create tasks, analyze projects, help manage priorities, and more.

This MCP server leverages a combination of the Things.py library and Things 3’s AppleScript support, enabling reading and writing to Things 3.

Why Things MCP?

This MCP server unlocks the power of AI for your task management:

  • Natural Language Task Creation: Ask Claude to create richly-detailed tasks and descriptions in natural language

  • Smart Task Analysis: Let Claude explore your project lists and focus areas and provide insights into your work

  • GTD & Productivity Workflows: Let Claude help you implement productivity and prioritisation systems

  • Seamless Integration: Works directly with your existing Things 3 data

Related MCP server: Things MCP Server

Features

  • Access to all major Things lists (Inbox, Today, Upcoming, Logbook, Someday, etc.)

  • Project and Area management and assignment

  • Tagging operations for tasks and projects

  • Advanced search capabilities

  • Recent items tracking

  • Support for nested data (projects within areas, todos within projects)

  • Checklist/Subtask support - Read and display existing checklist items from todos

Installation

Prerequisites

  • Python 3.12+

  • Claude Desktop

  • Things 3 for MacOS

Step 1: Install the package

Option A: Install from PyPI in a virtual environment (recommended)

# Create a virtual environment in your home directory
python3 -m venv ~/.venvs/things3-mcp-env
source ~/.venvs/things3-mcp-env/bin/activate

# Install the package
pip install Things3-MCP-server==2.0.6

Option B: Install from source (for development/contributors)

# Install uv if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh
# Restart your terminal afterwards

# Clone and install the package with development dependencies
git clone https://github.com/rossshannon/Things3-MCP
cd Things3-MCP
uv venv
uv pip install -e ".[dev]"  # Install in development mode with extra dependencies

Step 2: Configure Claude Desktop

Edit the Claude Desktop configuration file:

code ~/Library/Application\ Support/Claude/claude_desktop_config.json

Add the Things server to the mcpServers key in the configuration file:

Option A: Using PyPI package in virtual environment

{
    "mcpServers": {
        "things": {
            "command": "~/.venvs/things3-mcp-env/bin/Things3-MCP-server"
        }
    }
}

Option B: Using source installation (for development/contributors)

{
    "mcpServers": {
        "things": {
            "command": "uv",
            "args": [
                "--directory",
                "/ABSOLUTE/PATH/TO/PARENT/FOLDER/Things3-MCP",
                "run",
                "Things3-MCP-server"
            ]
        }
    }
}

Step 3: Restart Claude Desktop

Restart the Claude Desktop app to enable the integration.

Sample Usage with Claude Desktop

  • “What’s on my todo list today?”

  • “Create a todo to prepare for each of my 1-on-1s next week”

  • “Evaluate my todos scheduled for today using the Eisenhower matrix.”

  • “Help me conduct a GTD-style weekly review using Things.”

Tips

  • Create a Project in Claude with custom instructions that explains how you use Things and organize areas, projects, tags, etc. Tell Claude what information you want included when it creates a new task (e.g., asking it to include relevant details in the task description, whether to use emojis, etc.).

  • Try combining this with another MCP server that gives Claude access to your calendar. This will let you ask Claude to block time on your calendar for specific tasks, create tasks that relate to upcoming calendar events (e.g., prep for a meeting), etc.

Available Tools

List Views

  • get_inbox - Get todos from Inbox

  • get_today - Get todos due today

  • get_upcoming - Get upcoming todos

  • get_anytime - Get todos from Anytime list

  • get_someday - Get todos from Someday list

  • get_logbook - Get completed todos

  • get_trash - Get trashed todos

Random Sampling (for LLM Enrichment)

  • get_random_inbox - Get a random sample of todos from Inbox

  • get_random_anytime - Get a random sample of items from Anytime list

  • get_random_todos - Get a random sample of todos, optionally filtered by project

Basic Operations

  • get_todos - Get todos, optionally filtered by project

  • get_projects - Get all projects

  • get_areas - Get all areas

Tag Operations

  • get_tags - Get all tags

  • get_tagged_items - Get items with a specific tag

Search Operations

  • search_todos - Simple search by title/notes

  • search_advanced - Advanced search with multiple filters

Time-based Operations

  • get_recent - Get recently created items

Modification Operations

  • add_todo - Create a new todo with full parameter support

  • add_project - Create a new project with tags and todos

  • update_todo - Update an existing todo

  • update_project - Update an existing project

  • show_item - Show a specific item or list in Things

  • search_items - Search for items in Things

Tool Parameters

get_todos

  • project_uuid (optional) - Filter todos by project

get_projects / get_areas / get_tags

  • include_items (optional, default: false) - Include contained items

search_advanced

  • status - Filter by status (incomplete/completed/canceled)

  • start_date - Filter by start date (YYYY-MM-DD)

  • deadline - Filter by deadline (YYYY-MM-DD)

  • tag - Filter by tag

  • area - Filter by area UUID

  • type - Filter by item type (to-do/project/heading)

get_recent

  • period - Time period (e.g., '3d', '1w', '2m', '1y')

  • limit - Maximum number of items to return

Random Sampling Tools

  • get_random_inbox(count=5) - Get random sample from Inbox

  • get_random_anytime(count=5) - Get random sample from Anytime list

  • get_random_todos(project_uuid=None, count=5) - Get random sample of todos, optionally from specific project

add_todo

  • title - Title of the todo

  • notes (optional) - Notes for the todo (supports Markdown formatting including checkboxes like - [ ] Task)

  • when (optional) - When to schedule the todo (today, tomorrow, evening, anytime, someday, or YYYY-MM-DD)

  • deadline (optional) - Deadline for the todo (YYYY-MM-DD)

  • tags (optional) - Tags to apply to the todo

  • list_title (optional) - Title of project/area to add to (must exactly match existing name)

  • list_id (optional) - ID of project/area to add to (takes priority over list_title if both provided)

  • Note: While Things’ native checklist feature (i.e., subtasks) cannot be created via AppleScript, you and your LLMs can use Markdown checkboxes in the notes field to achieve similar functionality. Things3 - Subtasks - Markdown Checklist

update_todo

  • id - ID of the todo to update

  • title (optional) - New title

  • notes (optional) - New notes

  • when (optional) - When to schedule the todo (today, tomorrow, evening, anytime, someday, or YYYY-MM-DD)

  • deadline (optional) - Deadline for the todo (YYYY-MM-DD)

  • tags (optional) - New tags

  • completed (optional) - Mark as completed

  • canceled (optional) - Mark as canceled

  • list_name (optional) - Name of built-in list, project, or area to move the todo to. For built-in lists use: "Inbox", "Today", "Anytime", "Someday". For projects/areas, use the exact name.

  • list_id (optional) - ID of project/area to move the todo to (takes priority over list_name if both provided)

add_project

  • title - Title of the project

  • notes (optional) - Notes for the project

  • when (optional) - When to schedule the project

  • deadline (optional) - Deadline for the project

  • tags (optional) - Tags to apply to the project

  • area_title or area_id (optional) - Title or ID of area to add to (must exactly match an existing area title — look them up with get_areas)

  • todos (optional) - Initial todos to create in the project

update_project

  • id - ID of the project to update

  • title (optional) - New title

  • notes (optional) - New notes

  • when (optional) - When to schedule the project (today, tomorrow, evening, anytime, someday, or YYYY-MM-DD)

  • deadline (optional) - Deadline for the project (YYYY-MM-DD)

  • tags (optional) - New tags

  • completed (optional) - Mark as completed

  • canceled (optional) - Mark as canceled

show_item

  • id - ID of item to show, or one of: inbox, today, upcoming, anytime, someday, logbook

  • query (optional) - Optional query to filter by

  • filter_tags (optional) - Optional tags to filter by

Usage Examples

Creating Todos with List Assignment

# Create todo in Inbox (default)
add_todo(title="Review quarterly report")

# Create todo in a built-in list
add_todo(title="Call dentist", when="today")
add_todo(title="Plan vacation", when="someday")

# Create todo in a project by name
add_todo(title="Design new logo", list_title="Website Redesign")

# Create todo in a project by ID (more precise, recommended for automation)
add_todo(title="Write documentation", list_id="ABC123DEF456")

# When both are provided, list_id takes priority
add_todo(
    title="Important task",
    list_id="ABC123DEF456",     # This will be used
    list_title="Other Project"  # This will be ignored
)

Moving Todos Between Lists

# Move to built-in list
update_todo(id="TODO123", list_name="Today")
update_todo(id="TODO456", list_name="Someday")

# Move to project by name
update_todo(id="TODO789", list_name="Website Redesign")

# Move to project by ID (recommended for precision)
update_todo(id="TODO101", list_id="ABC123DEF456")

When to Use ID vs Title

  • Use list_title/list_name when:

    • Working interactively with human-readable names

    • You're certain the name is unique and won't change

    • Creating simple scripts or one-off tasks

  • Use list_id when:

    • Building automation or applications

    • You need precision and reliability

    • Working with projects/areas that might have similar names

Using Tags

Things will automatically create missing tags when they are added to a task or project. Configure your LLM to do a lookup of your tags first before making changes if you want to control this.

LLM Enrichment Workflows

The random sampling tools (get_random_inbox, get_random_anytime, get_random_todos) are designed for iterative task improvement workflows where you want to gradually enhance your todo items using AI assistance.

Use Cases

Incremental Task Enhancement

  • Pull 5 random todos from your Inbox to add better descriptions, break down into subtasks, or estimate time requirements

  • Sample from your Anytime list to identify tasks that could benefit from better scheduling or prioritization

  • Avoid downloading hundreds of tasks into context when you only need a few

Content Enrichment

  • Add or improve context and suggest more actionable language

  • Add context, dependencies, or next steps to existing todos

  • Standardize formatting across your task descriptions

  • Find tasks that might be too vague or overly complex

  • Discover todos that could be automated or delegated

Development

This project uses pyproject.toml to manage dependencies and build configuration. It's built using the Model Context Protocol, which allows Claude to securely access tools and data.

Development Workflow

Setting up a development environment

# Clone the repository
git clone https://github.com/rossshannon/Things3-MCP
cd Things3-MCP

# Set up a virtual environment with development dependencies
uv venv
uv pip install -e ".[dev]"  # Install in development mode with extra dependencies

Testing changes during development

Run the comprehensive test suite to ensure everything is working as expected:

# Run all tests (116 tests, ~3-4 minutes)
uv run pytest

# Run tests with coverage report
uv run pytest --cov=things3_mcp --cov-report=term-missing

# Run specific test file
uv run pytest tests/test_list_assignment_operations.py

# Run tests with minimal output
uv run pytest -q

# Run tests matching a pattern
uv run pytest -k "error_handling"

Test Configuration:

  • 116 comprehensive tests covering all functionality

  • Automatic cleanup - tests don't affect your existing Things data

  • Edge case coverage - malformed UUIDs, timeouts, error conditions

  • Integration testing - tests against real Things app

The tests clean up after themselves and don't affect your existing data, so you can run them as often as you like.

Things 3 MCP Test Suite

Troubleshooting

The server includes error handling for:

  • Invalid UUIDs

  • Missing required parameters

  • Things database access errors

  • Data formatting errors

  • Authentication token issues

  • AppleScript execution failures

Common Issues

  1. Things app not running: Make sure the Things app is running on your Mac for AppleScript methods to work.

Checking Logs

All errors are logged and returned with descriptive messages. To review the MCP logs:

# Follow main logs in real-time
tail -f ~/.things-mcp/logs/things3_mcp.log

# Check error logs
tail -f ~/.things-mcp/logs/things3_mcp_errors.log

# View structured logs for analysis
cat ~/.things-mcp/logs/things3_mcp_structured.json | jq

# Claude Desktop MCP logs
tail -n 20 -f ~/Library/Logs/Claude/mcp*.log

Acknowledgements

This MCP server was originally based on the Applescript bridge method from things-mcp by excelsier, which was in turn based on things-mcp by hald.

Available Tools

24 tools
add_projectA

Create a new project in Things.

Args:
----
    title: Title of the project
    notes: Notes for the project
    when: When to schedule the project
    deadline: Deadline for the project
    tags: Tags to apply to the project. IMPORTANT: Always pass as an array of
        strings (e.g., ["tag1", "tag2"]) NOT as a comma-separated string.
        Passing as a string will treat each character as a separate tag.
    area_id: ID of area to add to
    area_title: Title of area to add to (must exactly match an existing area title — look them up with get_areas)
    todos: Initial todos to create in the project
ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
whenNo
notesNo
titleYes
todosNo
area_idNo
deadlineNo
area_titleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.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 bears full responsibility for disclosing behavioral traits. However, it only documents input parameters and does not describe side effects, authentication needs, or what happens on success or failure. Key behavioral aspects like whether duplicate titles are allowed or if area_title must match an existing area are only implied.

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 well-structured with a clear opening sentence followed by a bulleted list of parameters. It is front-loaded and each parameter earns its place. While slightly verbose in listing all args, the format aids readability. One minor point: the 'Args' section could be trimmed, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 8 parameters, 0% schema coverage, no annotations, and an output schema exists, the description provides thorough input documentation. It covers all parameters with explanations and critical formatting notes. The output schema presumably handles return values. One gap is lack of error conditions or constraints, but overall complete enough for an experienced user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the schema provides no parameter descriptions. The tool's description compensates fully by explaining each parameter's purpose and format, including critical details like 'tags must be an array of strings' and 'area_title must exactly match an existing area title.' This adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new project in Things.' This verb+resource combination is specific and immediately distinguishes the tool from sibling tools like add_todo or update_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 explicit guidance on when to use this tool versus alternatives like update_project or add_todo. It does not state prerequisites, exclusions, 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.

add_todoA

Create a new todo in Things.

Args:
----
    title: Title of the todo
    notes: Notes for the todo
    when: When to schedule the todo (today, tomorrow, evening, anytime, someday, or YYYY-MM-DD)
    deadline: Deadline for the todo (YYYY-MM-DD)
    tags: Tags to apply to the todo. IMPORTANT: Always pass as an array of
        strings (e.g., ["tag1", "tag2"]) NOT as a comma-separated string.
        Passing as a string will treat each character as a separate tag.
    list_id: ID of project/area to add to (takes priority over list_title if both provided)
    list_title: Title of project/area to add to (must exactly match an existing area or project title — look them up with get_areas or get_projects).
        If both list_id and list_title are provided, list_id takes priority.
ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
whenNo
notesNo
titleYes
list_idNo
deadlineNo
list_titleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses important behavioral traits: the array vs string pitfall for tags, and the priority rule between list_id and list_title. It does not mention idempotency, duplication behavior, or error handling for invalid list_title, but the note to look up lists mitigates some risk.

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 well-structured with a one-line summary followed by a bullet-point argument list. Each line is necessary and informative. It front-loads the purpose and uses clear formatting.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (not shown but known to exist), the description does not need to explain return values. It covers parameter constraints, usage guidance, and key behavioral notes. For a creation tool, this is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully explain parameters. It explains all parameters: title (implied), notes, when (with valid values), deadline (format), tags (with critical format warning), list_id and list_title (with usage and priority). This adds significant value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Create a new todo in Things.' This is a clear and specific verb (Create) + resource (todo) statement. It distinguishes this tool from siblings like update_todo or get_todos by specifying the action and target.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides guidance on using list_id vs list_title, including priority and the need to look up existing areas/projects with get_areas or get_projects. It also warns about tags format. However, it does not explicitly compare this tool to siblings like add_project or when to use alternative tools for different tasks.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_anytimeA

Get all todos from Anytime list. Note that this will return an extensive list of tasks. It is generally recommended to use get_todos with filters or search_todos instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool returns an extensive list, which is a behavioral trait. However, it does not explicitly state whether it is read-only, destructive, or any authentication requirements. The description is adequate but lacks depth.

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?

Two sentences with no wasted words: first sentence states purpose, second provides usage guidance and alternatives. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool with an output schema, the description is mostly complete. It explains what it returns (list of tasks), warns about volume, and suggests alternatives. Could mention pagination or ordering, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters (0), so the baseline is 4. The description does not add parameter semantics, but none are needed since the schema is empty and coverage is 100%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets all todos from the Anytime list. The verb 'Get' and resource 'all todos from Anytime list' are specific. It distinguishes from siblings like get_todos and search_todos by warning about extensive results and recommending alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends using get_todos with filters or search_todos instead, providing clear guidance on when not to use this tool and naming alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_areasA

Get all areas from Things. Use these names when assigning a task or project to an area.

Args:
----
    include_items: Include projects and tasks within areas
ParametersJSON Schema
NameRequiredDescriptionDefault
include_itemsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes the effect of the include_items parameter but does not disclose read-only nature or other behavioral traits; no annotations provided so description carries burden.

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?

Extremely concise: two sentences and an args block. Every sentence adds value. No redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for the tool's simplicity: explains purpose, parameter, and usage context. Output schema exists, so return format need not be detailed. Lacks explicit sibling differentiation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Explains the single parameter include_items: 'Include projects and tasks within areas', adding meaning beyond the schema's boolean name. Satisfactory compensation for 0% schema description 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?

Clearly states it gets all areas from Things and mentions usage for assignment. Distinguishes from sibling tools like get_projects by focusing on areas, but does not explicitly differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies when to use (for obtaining area names for assignment), but provides no guidance on when not to use or alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_inboxB

Get todos from Inbox.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description does not disclose behavioral traits such as read-only nature, side effects, or access permissions. With no annotations, the description should provide more context.

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?

Extremely concise with no wasted words. The single sentence is efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and an output schema present, the description is adequate for a simple retrieval tool. However, it could mention the sorting or filtering behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is complete. Description adds no parameter info, but none is needed.

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 'Get todos from Inbox' clearly states the action and resource. It distinguishes from siblings like 'get_today' or 'get_anytime' by specifying 'Inbox', but could be more explicit about the 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?

No guidance on when to use this tool versus alternatives (e.g., 'get_todos'). There are no exclusions or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_logbookA

Get completed todos from Logbook, defaults to last 7 days.

Args:
----
    period: Time period to look back (e.g., '3d', '1w', '2m', '1y'). Defaults to '7d'.
    limit: Maximum number of entries to return. Defaults to 50.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
periodNo7d

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses default behavior (7 days, 50 limit) but omits explicit statements about being read-only, idempotent, or any side effects. Sufficient for simple read 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?

Extremely concise, front-loaded with purpose, followed by two-line parameter breakdown. Every sentence is necessary and informative with no redundancies.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two optional parameters and an output schema, the description covers the core functionality and parameters. Lacks explanation of what 'Logbook' is (e.g., a history of completed items), but this is minor given sibling context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description adds vital meaning: explains period format (e.g., '3d', '1w', '2m', '1y') and limits default. However, no additional constraints on limit (e.g., maximum) or explanation of period units beyond examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states verb 'Get' and resource 'completed todos from Logbook', with a default scope of last 7 days. Unambiguous and distinct from sibling tools like get_todos (all todos) or get_recent (recently modified).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance. The description implies usage for retrieving completed tasks over a period, but does not exclude alternatives or provide context like when to prefer get_todos or get_recent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_projectsB

Get all projects from Things.

Args:
----
    include_items: Include tasks within projects.
ParametersJSON Schema
NameRequiredDescriptionDefault
include_itemsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only states 'Get all projects from Things,' implying a read operation, but does not mention authentication requirements, whether projects are mutable, or how the data is structured. The behavior is minimally conveyed.

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 extremely concise at two sentences, making it quick to parse. The first sentence provides the core purpose, and the second documents the parameter. However, it could be structured better with a clear separation of description and parameter details.

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?

For a simple one-parameter tool with an output schema, the description is minimally adequate. It explains the tool's main action and parameter, but lacks context about the scope of 'all projects' (e.g., user-specific or global), no mention of ordering or pagination, and no guidance on expected return format beyond what the output schema might provide.

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 coverage is 0%, so the description must add meaning. It explains the 'include_items' parameter as 'Include tasks within projects,' which clarifies its purpose beyond the schema's default and title. However, it does not specify what 'include' means structurally (e.g., nested tasks or a separate tasks array), leaving room for ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get all projects from Things,' specifying the verb 'Get,' the resource 'projects,' and the scope 'all.' This effectively distinguishes it from siblings like 'add_project' and 'update_project,' which are mutative, and from other retrieval tools like 'get_today' or 'get_inbox.'

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 'search_todos' or 'get_areas.' It lacks any context about prerequisites, limitations, or scenarios where this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_random_anytimeA

Get a random sample of items from the Anytime list.

Note: The Anytime list can contain both todos and projects. This returns a
random subset without filtering types.

Args:
----
    count: Number of random items to return. Defaults to 5.
ParametersJSON Schema
NameRequiredDescriptionDefault
countNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full responsibility. It discloses that the tool returns a random subset and does not filter types, but it does not state that it is read-only, any side effects, or behavior on invalid inputs. Adequate but not thorough.

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 concise, with five lines including a helpful note. No unnecessary words or repetition. Efficiently communicates the core functionality.

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 has one parameter and an output schema (not provided for review), the description covers the basic purpose but lacks comparative context with 23 sibling tools. It is adequate but not fully enriched for an agent to confidently select among alternatives.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should add meaning beyond the schema. It restates the 'count' parameter as 'Number of random items to return. Defaults to 5.' which exactly matches the schema, providing no additional semantics like min/max or special behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a random sample of items from the Anytime list' with specific verb 'Get' and resource 'random sample from Anytime list'. It notes that the list can contain both todos and projects, distinguishing it from siblings like get_random_inbox and get_random_todos.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that it returns a random subset without filtering types, which implies when to use (e.g., for a mixed sample). However, it provides no explicit guidance on when not to use or comparisons with alternative tools like get_random_inbox or get_random_todos.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_random_inboxA

Get a random sample of todos from Inbox.

Args:
----
    count: Number of random items to return. Defaults to 5.
ParametersJSON Schema
NameRequiredDescriptionDefault
countNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions random sampling but does not disclose whether the tool is read-only, any side effects, or behavioral nuances. Since no annotations are provided, the description carries full burden; it provides basic transparency but omits details about safety or consistency.

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 short and front-loaded with the main purpose. However, the 'Args:' section with delimiter lines adds unnecessary verbosity. It could be more streamlined without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/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 (1 non-required parameter, no annotations, output schema exists), the description sufficiently covers the purpose and parameter. It does not explain the output structure, but the output schema likely covers that. The description is adequate for this context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant value to the parameter 'count' by explaining 'Number of random items to return. Defaults to 5.' This exceeds the schema which only provides type and default; schema coverage is 0%, so the description fully compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a random sample of todos from Inbox,' specifying the verb 'get', resource 'todos from Inbox', and the random sampling nature, effectively distinguishing it from siblings like get_inbox and get_random_todos.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the default behavior of the count parameter but does not explicitly state when to use this tool versus alternatives such as get_inbox or get_random_anytime. It is clear in its context but lacks explicit usage boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_random_todosA

Get a random sample of todos, optionally filtered by project.

Args:
----
    project_uuid: Optional UUID of a specific project to draw todos from.
    count: Number of todos to return. Defaults to 5.
ParametersJSON Schema
NameRequiredDescriptionDefault
countNo
project_uuidNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided. The description transparently explains it returns a random sample with a default count, but does not disclose whether the operation is read-only or other behavioral traits like idempotency.

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 well-structured docstring with an Args section. It is concise and front-loaded with the purpose. Minor redundancy could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the two parameters and no annotations, the description covers the core functionality adequately. The output schema exists, so return values are documented elsewhere. Slight room for improvement in behavioral details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description compensates by explaining the purpose of each parameter (project_uuid and count) including their default values, adding significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get a random sample of todos' with an optional filter, which is specific and distinguishes it from siblings like get_todos (which gets all todos) and other random getters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool over alternatives like get_todos or get_random_anytime. It implies usage for random sampling, but lacks direct guidance or comparisons.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_recentB

Get recently created items.

Args:
----
    period: Time period (e.g., '3d', '1w', '2m', '1y')
ParametersJSON Schema
NameRequiredDescriptionDefault
periodYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description should disclose behavioral traits. It mentions period examples but lacks details on return order, limits, or whether unsaved items are included. Adequate for a simple tool but incomplete.

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?

Very short and front-loaded with purpose, then parameter explanation. The 'Args: ---' format is informal but efficient. No wasted sentences.

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 existence of an output schema, return values need not be explained. However, with many sibling tools and no annotations, the description could provide more context on scope (e.g., across all projects) and differences from similar tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It explains the period parameter with example values but no format specification, default, or validation rules. Minimal added 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 'Get recently created items', specifying verb and resource. It is distinct from siblings like get_today or get_todos, but does not clarify which item types are included (e.g., projects, todos).

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 vs. alternatives such as get_today, get_upcoming, or get_anytime. The period parameter is given examples but no context on selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_somedayA

Get todos from Someday list.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description only states the basic functionality without disclosing any behavioral traits such as read-only nature, pagination, ordering, or permissions. Given no annotations, the description carries the full burden of transparency, and it falls short.

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, concise sentence that immediately states the action and resource. Every word is necessary.

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?

The description is minimal but functional. However, given the large number of sibling get_* tools, the description could benefit from a sentence explaining what distinguishes the Someday list from others. The presence of an output schema might compensate for return values, but the description does not hint at the structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the input schema is trivially fully covered. The description does not need to add parameter semantics. Baseline score 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' and resource 'todos from Someday list' which clearly indicates the tool retrieves todos from a specific list. It distinguishes itself from sibling tools like get_today, get_inbox, etc. that target different lists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no explicit guidance on when to use this tool vs alternatives like get_anytime or get_inbox. The name 'Someday' implies it's for a specific list, but without explanation, an AI agent might not understand the difference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tagged_itemsC

Get items with a specific tag.

Args:
----
    tag: Tag title to filter by
ParametersJSON Schema
NameRequiredDescriptionDefault
tagYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 must fully disclose behavior. It only states that it gets items with a tag, omitting details like pagination, ordering, case-sensitivity, or whether it returns all types of items. Minimal behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Very concise (one sentence plus arg list). No fluff. However, the 'Args:' header is unnecessary for a single param, but overall structure is efficient.

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?

Considering the tool's simplicity (1 param) and that an output schema exists, the description is still incomplete. It doesn't clarify what 'items' are (todos? projects?) or provide examples. An output schema may define return structure, but the meaning of filtered items remains ambiguous.

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 single parameter 'tag' is described as 'Tag title to filter by', which clarifies it's a title not an ID. Since schema property lacks a description (0% coverage), this adds some value but no format details or possible values. Baseline 3 due to low 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?

Description clearly states the verb 'Get' and resource 'items with a specific tag'. It distinguishes from siblings like get_tags (which returns tags) and other getters that filter by different criteria. However, it doesn't specify what 'items' includes (todos, projects, etc.), which could be ambiguous.

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 like search_todos or get_projects. The description only states what it does, not the context of use or when to avoid it. There are many sibling tools without differentiation hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tagsB

Get all tags.

Args:
----
    include_items: Include items tagged with each tag
ParametersJSON Schema
NameRequiredDescriptionDefault
include_itemsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description lacks behavioral details such as pagination, ordering, authentication requirements, or error handling. It only restates the parameter purpose.

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 very concise, consisting of a single line and a simple parameter note. It is front-loaded with the core purpose, though the args format is slightly informal.

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 existence of an output schema and the tool's simplicity, the description provides basic completeness. However, it lacks context on when to set include_items to true and does not mention any potential scope or limits (e.g., all tags in the system).

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 0%, but the description adds 'Include items tagged with each tag,' which clarifies the parameter's meaning beyond the schema's title and default value. However, no additional parameter details are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get all tags,' which is a specific verb-resource pair. It distinguishes itself from siblings like 'get_tagged_items' by focusing on tags themselves, not tagged items.

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 like 'get_tagged_items' or 'search_items.' The description does not mention any prerequisites, exclusions, 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.

get_todayB

Get todos due today.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits, but it only states the basic function. It does not mention whether results include completed tasks, recurrences, sort order, or timezone handling.

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 very concise (5 words) and front-loaded. However, it may be too sparse given the need to differentiate from many similar sibling tools.

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 absence of parameters and the presence of an output schema, the description is minimally adequate. It explains the basic purpose but lacks details about edge cases (e.g., overdue items) and does not fully differentiate from siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so by rule the baseline is 4. The description adds no parameter details because none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get todos due today' clearly specifies the verb 'Get' and the resource 'todos due today', which distinguishes it from sibling tools like get_anytime (anytime tasks) or get_upcoming (future tasks). It is specific and unambiguous.

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 vs alternatives such as get_todos or get_upcoming. The description lacks context for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_todosB

Get todos from Things, optionally filtered by project.

Args:
----
    project_uuid: Optional UUID of a specific project to get todos from.
ParametersJSON Schema
NameRequiredDescriptionDefault
project_uuidNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully convey behavior. It only states 'Get todos from Things' without detailing output format, pagination, authentication, or read-only nature. This is insufficient for an unannotated 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 concise: one sentence stating purpose and one parameter description. It is front-loaded and contains no superfluous information.

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?

For a simple tool with one optional parameter and an output schema, the description covers the basics. However, it omits context about output structure or usage prerequisites, which would be helpful given the lack of annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description includes an 'Args' section explaining project_uuid as an optional UUID. This adds meaning beyond the schema type definition, though the UUID format could be more specific.

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 tool retrieves todos from Things with optional project filtering. However, it does not explicitly differentiate from siblings like search_todos, which could be used for similar purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when fetching todos, optionally filtered by project, but provides no guidance on when to use this over siblings like get_anytime or search_todos. No exclusions or alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_trashB

Get trashed todos.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only states 'Get trashed todos' without explaining what 'trashed' means, whether it's a read operation, or any side effects. 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise at two words, but it lacks sufficient context. It could be improved by adding a brief explanation of what 'trashed' means or how the results are sorted.

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?

The tool is simple with no parameters and has an output schema, so the description could be minimal. However, it does not clarify the scope (e.g., all trashed items or just todos) or any default ordering, which would help the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters in the input schema. The description does not need to add parameter semantics, and the baseline score for 0 parameters is 4, which 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 verb 'Get' and resource 'trashed todos', indicating it retrieves deleted items. However, it does not distinguish from sibling tools like get_inbox or get_todos, which could be confusing.

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 get_inbox or get_todos. The context signals show many sibling tools, but the description offers no selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_upcomingA

Get all upcoming todos (those with a start date in the future).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It discloses the filter criteria (future start date) but does not mention ordering, pagination, or exact time boundary. The output schema may fill some gaps, but the description alone is minimal.

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, well-structured sentence that immediately conveys the tool's purpose without redundant words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (zero parameters, no nested objects), the description is largely complete. However, it omits details like default ordering or whether the result set is limited, which would be useful for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist; schema coverage is 100% by default. The description adds meaning by clarifying the scope ('start date in the future'), which qualifies as helpful context beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get all upcoming todos' and defines 'upcoming' as those with a start date in the future. This is a specific verb-resource pair and distinguishes from siblings like get_today or get_recent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use guidance or alternatives are provided. The tool's purpose implies usage for future-dated todos, but with many siblings, explicit guidance would help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_advancedC

Advanced todo search with multiple filters.

Args:
----
    status: Filter by todo status (incomplete/completed/canceled)
    start_date: Filter by start date (YYYY-MM-DD)
    deadline: Filter by deadline (YYYY-MM-DD)
    tag: Filter by tag
    area: Filter by area UUID
    type: Filter by item type (to-do/project/heading)
ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
areaNo
typeNo
statusNo
deadlineNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only lists parameters; it does not state whether this tool is read-only, whether it respects user context, what the default behavior is when no filters are given (returns all?), or any side effects. This lack of transparency could lead to misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two sentences plus parameter list). However, the parameter list uses raw 'Args:' formatting with dash bullets, which is functional but not polished. It could be more structured (e.g., table or enumerated list). No extraneous words, but some parameter descriptions are ambiguous (e.g., 'tag' as a string but not clear if it's exact match).

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 (6 optional parameters) and many sibling tools, the description is incomplete. It does not explain how filters combine (AND, OR?), whether all parameters are optional and what an empty search returns, or how pagination works. An output schema exists (not shown), but the tool's behavior remains underdefined.

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 0%, so the description bears full responsibility for parameter meaning. It adds basic descriptions (e.g., 'Filter by todo status (incomplete/completed/canceled)'), which clarify purpose. However, it does not specify expected formats (e.g., UUID for area, date format for start_date/deadline). The parameter list is minimally helpful but not comprehensive.

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 states 'Advanced todo search with multiple filters' which clearly identifies the action (search) and resource (todos). The listed parameters (status, start_date, etc.) reinforce this. However, it does not explicitly differentiate from sibling search tools like 'search_items' or 'search_todos', leaving the agent to infer from the 'advanced' name.

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 its many siblings. It does not specify prerequisites, alternative tools, or exclusions. The agent must guess from the name and parameter list, which is insufficient for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_itemsC

Search for items in Things.

Args:
----
    query: Search query
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.1/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behaviors. It only says 'Search for items in Things,' which reveals nothing about authentication needs, rate limits, mutation risks, or response characteristics. This is severely insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short (one sentence), but it fails to provide necessary information. While concise, it is under-specified and does not earn its place; it sacrifices completeness for brevity.

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 presence of sibling tools and no annotations, the description should elaborate on scope, behavior, and output. It does not mention what is returned, pagination, or limitations, making it incomplete even for a simple search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, meaning neither schema nor description adequately explains parameters. The description adds only 'query: Search query,' which simply repeats the parameter name without clarifying format, constraints, or examples.

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 'Search for items in Things,' which is a clear verb+resource. However, it lacks differentiation from sibling tools like search_todos and search_advanced, which also search but likely in more specific scopes. The term 'items' is vague and could encompass multiple entity types.

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 search_todos or search_advanced. The description does not mention any context, prerequisites, or exclusions, leaving the agent without decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_todosA

Search todos by title or notes.

Args:
----
    query: Search term to look for in todo titles and notes
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description carries full burden. It reveals that the tool searches both title and notes, but omits details like case sensitivity, partial matching, pagination, or response structure. Minimal behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: one-line summary plus a single parameter doc. No unnecessary words, front-loaded with purpose. Efficient and clear.

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 simplicity (one param, output schema present), the description is adequate but leaves gaps: no mention of matching behavior (exact/substring), result limits, or ordering. Could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds valuable meaning: 'Search term to look for in todo titles and notes.' This clarifies that the query applies to both fields, which the schema's 'Query' title alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Search todos by title or notes', specifying the verb, resource, and search scope. It distinguishes from sibling tools like 'search_advanced' or 'search_items' which may target different fields or use more complex logic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/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. The description implies usage for basic text search on todos, but fails to mention when not to use it (e.g., for filters or advanced queries) or list alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

show_itemB

Show a specific item or list in Things.

Args:
----
    id: ID of item to show, or one of: inbox, today, upcoming, anytime, someday, logbook
    query: Optional query to filter by
    filter_tags: Optional tags to filter by. IMPORTANT: Always pass as an
    array of strings (e.g., ["tag1", "tag2"]) NOT as a comma-separated
    string. Passing as a string will treat each character as a separate tag.
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
queryNo
filter_tagsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description partially covers behavior: it mentions the format constraint for filter_tags and the special id values. However, it lacks details on error handling, authentication, or side effects, leaving gaps.

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 concise, front-loaded with purpose, and uses a structured Args section. The filter_tags instruction, though lengthy, is important for correctness. No unnecessary content.

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?

The description covers purpose and parameter details adequately but lacks usage guidance and behavioral context (e.g., invalid ID handling). Given the presence of an output schema, return value explanations are not needed. Overall, adequate but with gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds critical meaning: it enumerates special id values, explains query as optional filtering, and gives a crucial note on filter_tags array format. This significantly aids correct usage.

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 'Show a specific item or list in Things' and lists the special IDs (inbox, today, etc.), distinguishing it from sibling get_* tools that only fetch specific lists. However, it does not explicitly differentiate itself from those 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 show_item versus alternatives like get_today or get_inbox. It lists possible id values but does not explain trade-offs or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_projectA

Update an existing project in Things.

Args:
----
    id: ID of the project to update
    title: New title
    notes: New notes
    when: New schedule (today, tomorrow, anytime, someday, or YYYY-MM-DD)
    deadline: New deadline (YYYY-MM-DD)
    tags: New tags. IMPORTANT: Always pass as an array of strings (e.g., ["tag1", "tag2"]) NOT as a comma-separated string. Passing as a string will treat each character as a separate tag.
    completed: Mark as completed
    canceled: Mark as canceled
    list_name: Move project directly to a built-in list. Must be one of:
              - "Today": Move to Today list
              - "Anytime": Move to Anytime list
              - "Someday": Move to Someday list
              - "Trash": Move to trash
              Note: Projects cannot be moved to Inbox or Logbook. To move a project
              to Logbook, mark it as completed instead.
    area_title: Title of the area to move the project to
    area_id: ID of the area to move the project to
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
tagsNo
whenNo
notesNo
titleNo
area_idNo
canceledNo
deadlineNo
completedNo
list_nameNo
area_titleNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full burden. It includes important behavioral notes: tags must be array not string, list_name restrictions (cannot move to Inbox/Logbook), and how to move to Logbook via completed. However, it does not disclose error behavior or return value details.

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 front-loaded with purpose and uses a structured 'Args' section. It is slightly verbose due to detailed parameter notes, but every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 11 parameters and no annotations, the description covers all parameters with behavioral constraints. It lacks information about what happens on invalid id or error conditions, but output schema likely handles return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining each parameter's meaning. It provides valid values for 'when', warns about 'tags' array format, enumerates allowed 'list_name' values, and clarifies area parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update an existing project in Things,' specifying the verb (update) and resource (project). It distinguishes from sibling tools like add_project (create) and update_todo (update todos), making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool vs alternatives like add_project. It provides some parameter-specific guidance (e.g., list_name constraints) but lacks general when-to-use context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_todoA

Update an existing todo in Things.

Args:
----
    id: ID of the todo to update.
    title: New title.
    notes: New notes.
    when: When to schedule the todo (today, tomorrow, anytime, someday, or YYYY-MM-DD).
    deadline: New deadline (YYYY-MM-DD).
    tags: New tags. IMPORTANT: Always pass as an array of strings (e.g., ["tag1", "tag2"]) NOT as a comma-separated string. Passing as a string will treat each character as a separate tag.
    completed: Mark as completed.
    canceled: Mark as canceled.
    list_id: ID of project/area to move the todo to (takes priority over list_name if both provided).
    list_name: Name of built-in list, project, or area to move the todo to. For built-in lists use: "Inbox", "Today", "Anytime", "Someday". For projects or areas, use the exact name.
        If both list_id and list_name are provided, list_id takes priority.
ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
tagsNo
whenNo
notesNo
titleNo
list_idNo
canceledNo
deadlineNo
completedNo
list_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist; description covers basic update behavior but lacks details on partial vs full update, side effects, or authentication. It does warn about tags format and list_id priority.

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?

Description is front-loaded with purpose and structured as a list; each sentence adds value. Slight redundancy on list_id priority but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and output schema present, description covers all parameters adequately. Missing details on idempotency or return format, but not critical for update use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, description fully compensates by explaining each parameter's meaning, valid values (e.g., 'when' options), formatting constraints (tags as array), and priority rules (list_id over list_name).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Update' and the resource 'existing todo in Things', distinguishing it from sibling tools like add_todo (create) and update_project (project update).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implicitly clear (update an existing todo), but no explicit guidance on when not to use or alternatives is provided. The parameter descriptions offer some usage hints (e.g., list_id vs list_name priority).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 24 tool updatesv2.0.7
    • First observedadd_project
    • First observedadd_todo
    • First observedget_anytime
    • First observedget_areas
    • First observedget_inbox
    • First observedget_logbook
    • First observedget_projects
    • First observedget_random_anytime
    • First observedget_random_inbox
    • First observedget_random_todos
    • First observedget_recent
    • First observedget_someday
    • First observedget_tagged_items
    • First observedget_tags
    • First observedget_today
    • First observedget_todos
    • First observedget_trash
    • First observedget_upcoming
    • First observedsearch_advanced
    • First observedsearch_items
    • First observedsearch_todos
    • First observedshow_item
    • First observedupdate_project
    • First observedupdate_todo

TDQS

B3.3/5.0
Disambiguation4/5

Most tools have distinct purposes (e.g., get lists for different views, search tools with different scopes). Some overlap exists between search_items, search_todos, and search_advanced, but descriptions clarify the differences. Overall, an agent can reliably distinguish tools.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern in snake_case (add_, get_, update_, search_, show_). No mixing of styles or unpredictable patterns, making it easy to infer tool behavior from name.

Tool Count4/5

With 24 tools, the server covers a wide range of task management operations. While slightly on the higher side, each tool serves a specific purpose and fits the domain of a full-featured task manager.

Completeness3/5

The server provides strong coverage for creating, reading, and updating tasks and projects. However, there is no explicit delete tool (only move to trash via update), and the search functionality has some redundancy. Minor gaps exist but core workflows are supported.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables interaction with the Things app through Claude Desktop, allowing task creation, project analysis, and priority management using natural language commands.
    22
    574
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Lets you use Claude Desktop to interact with your task management data in Things app, enabling you to create tasks, analyze projects, manage priorities, and implement productivity workflows through natural language.
    36
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rossshannon/Things3-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server