Skip to main content
Glama

Things API

CI Release Docker things-sdk on PyPI

RESTful API over Things3 data. Syncs bidirectionally with Things Cloud via the reverse-engineered sync protocol and exposes your tasks, projects, areas, and tags over HTTP/HTTPS.

This repository ships three related products:

  • things-api — a ready-to-run HTTP/HTTPS service

  • things-sdk — a standalone Python SDK for scripts, CLIs, workers, and integrations

  • things-cloud-mcp — an MCP server that gives AI agents (Claude, Codex, etc.) read/write access to your tasks

Looking for the Python library instead of the HTTP service? See packages/things-sdk/README.md. Want to connect your AI agent? See packages/things-mcp/README.md.

Which package should I use?

Use case

What to use

You want a hosted/self-hosted HTTP/HTTPS API

things-api

You want to build a CLI, script, worker, or integration in Python

things-sdk

You want AI agents to read/write your tasks

things-cloud-mcp (requires a running things-api)

If you just want to run a server and call it over HTTP/HTTPS, continue with the API docs below. If you want to embed the core functionality directly in Python, jump to the SDK README.

Related MCP server: Things MCP

Quick Start

cp .env.example .env
# Edit .env with your Things Cloud credentials and a strong API key

docker compose up -d

The API is available at http://localhost:3117. Interactive docs at http://localhost:3117/docs.

Configuration

All settings are configured via environment variables (or a .env file):

Variable

Required

Default

Description

API_KEY

Yes

Primary API key for authentication. Must be at least 32 characters. Passed via X-API-Key header.

API_KEY_NEXT

No

Optional secondary API key for zero-downtime key rotation.

THINGS_EMAIL

Yes

Your Things Cloud account email

THINGS_PASSWORD

Yes

Your Things Cloud account password

SYNC_INTERVAL_SECONDS

No

0

Background sync interval in seconds. 0 disables background sync. Recommended: 60.

ENABLE_SCHEDULER

No

true

Enable background scheduler in this process.

SCHEDULER_LOCK_SECONDS

No

30

Distributed scheduler leadership lease duration. Only the lock owner runs background sync.

SCHEDULER_HEARTBEAT_SECONDS

No

10

Lease renewal interval for scheduler leadership.

MANUAL_SYNC_LOCK_SECONDS

No

120

Lease duration for manual sync lock to prevent overlapping POST /api/sync runs.

SYNC_RETRY_ATTEMPTS

No

3

Number of retry attempts for transient cloud pull/push failures.

SYNC_RETRY_BASE_SECONDS

No

0.25

Exponential backoff base delay for retries.

SYNC_CIRCUIT_BREAKER_FAILURES

No

3

Consecutive sync failures required to open the circuit breaker.

SYNC_CIRCUIT_BREAKER_COOLDOWN_SECONDS

No

60

Cooldown period while breaker is open before a half-open probe is allowed.

READINESS_MAX_SYNC_ERRORS

No

5

Degrade /ready when total sync errors exceed this threshold.

LOG_FORMAT

No

text

Set to json to enable structured JSON logging.

ENABLE_METRICS

No

false

Set to true to expose GET /metrics (Prometheus-compatible counters).

DATABASE_URL

No

sqlite+aiosqlite:///./data/things.db

SQLAlchemy database URL

API Endpoints

All /api/* endpoints require the X-API-Key header.

Tasks

GET    /api/tasks          # List all non-trashed tasks
GET    /api/tasks/{uuid}   # Get a single task
POST   /api/tasks          # Create a task
PATCH  /api/tasks/{uuid}   # Update a task
DELETE /api/tasks/{uuid}   # Soft-delete (trash) a task

Smart Lists

GET    /api/tasks/inbox     # Unscheduled tasks
GET    /api/tasks/today     # Tasks for today or earlier
GET    /api/tasks/upcoming  # Tasks scheduled for the future
GET    /api/tasks/anytime   # Tasks available anytime
GET    /api/tasks/someday   # Low-priority ideas
GET    /api/tasks/logbook   # Completed tasks (default: last 30 days, ?since=<epoch>)
GET    /api/tasks/trash     # Trashed tasks
GET    /api/tasks/search?q=<text>           # Full-text search (title, notes, checklist items)
GET    /api/tasks/search/advanced?...       # Multi-predicate filter (status, type, schedule, area, project, tag, date ranges, modified/completed since)

Projects

GET    /api/projects                        # List active projects (?include_completed=true to include completed)
POST   /api/projects                        # Create a project
PATCH  /api/projects/{uuid}                 # Update a project
POST   /api/projects/{uuid}/complete        # Mark a project as completed
DELETE /api/projects/{uuid}                 # Soft-delete (trash) a project

All smart lists, GET /api/tasks, and GET /api/tasks/by-tag/{tag} accept optional ?limit=<int>&offset=<int> query params. Pagination is opt-in: omit both to fetch the complete result set in a single response, which is the recommended path for agents and scripts that need every task. To page through a very large list, increment offset by limit and stop when the returned array is shorter than limit.

Tags

GET    /api/tags            # List all tags
POST   /api/tags            # Create a tag
PATCH  /api/tags/{uuid}     # Update a tag
DELETE /api/tags/{uuid}     # Delete a tag
GET    /api/tasks/by-tag/{tag}  # List tasks by tag UUID or name (?include_descendants=true&limit=&offset=)

Tasks now include a tags field in all responses. Pass tags: ["uuid-or-name", ...] when creating or updating tasks.

Areas

GET    /api/areas           # List all areas

Sync

GET    /api/sync/status     # Current sync state (status, head index, last sync time, errors)
POST   /api/sync            # Manually trigger a full pull + push cycle (rate limited; overlap protected by lock)

Health

GET    /health              # Liveness check (no auth required)
GET    /ready               # Readiness check (DB + sync degradation/circuit state)
GET    /metrics             # Prometheus-compatible counters (disabled by default, set ENABLE_METRICS=true)

Create a task

curl -X POST http://localhost:3117/api/tasks \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"title": "Buy milk", "schedule": 1}'

Update a task

curl -X PATCH http://localhost:3117/api/tasks/{uuid} \
  -H "X-API-Key: your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"status": 3}'

Status values: 0 = pending, 2 = cancelled, 3 = completed. Schedule values: 0 = inbox, 1 = anytime, 2 = someday. Type values: 0 = task, 1 = project.

How Sync Works

The sync mechanism mirrors how Things3 itself operates:

Trigger

Behavior

API write (create/update/delete)

Task is flagged for push. Next sync cycle sends it to Things Cloud.

Background interval

Pulls remote changes, then pushes local changes. Configurable via SYNC_INTERVAL_SECONDS.

Manual trigger

POST /api/sync runs an immediate pull + push cycle.

Things Cloud uses an event-sourced model with a monotonically increasing index. Each sync pulls all changes since the last known index and applies them locally. Conflicts are resolved with remote-wins semantics.

Local Development

The repository uses a uv workspace:

  • root package: things-api

  • workspace packages: things-sdk, things-cloud-mcp

# Install both packages in editable mode
uv sync

You can then run the API or import things_sdk directly in local scripts/tests.

Requires Python 3.12+ and uv.

# Install dependencies
uv sync

# Run the dev server
uv run uvicorn things_api.main:app --reload

# Run tests
uv run pytest -v

# Run type checks (current typed foundation)
uv run pyright

# Run migrations
uv run alembic upgrade head

Deploying with Docker

docker compose up -d

The Docker setup uses a named volume (things-data) to persist the SQLite database across container restarts. The docker-compose.yml pulls the published image from ghcr.io/nkootstra/things.

For local development, build from source instead:

docker compose -f docker-compose.dev.yml up -d

For production, put a reverse proxy (Caddy, nginx, Traefik) in front for TLS termination:

                   ┌──────────┐      ┌──────────────┐
  HTTPS :443  ───▶ │  Caddy   │ ───▶ │  Things API  │
                   │  (TLS)   │      │  :8000       │
                   └──────────┘      └──────────────┘

CI / Release smoke checks

The automation now verifies both build artifacts and published artifacts:

  • SDK smoke test: build wheel, install it into a clean virtualenv, import things_sdk, and verify basic engine creation

  • Docker smoke test: build image, boot container, and verify /health, /ready, and authenticated GET /api/tasks

  • Post-release verification: after publication, install things-sdk==<version> from PyPI and pull ghcr.io/nkootstra/things:<version> from GHCR, then run the same basic checks against the published artifacts

This means a green release is not just "built" — it is also verified as installable from PyPI and runnable from GHCR.

Releasing a New Version

Releases are fully automated via GitHub Actions. Pushing a version tag triggers the pipeline:

preflight (tests) ─┬─▶ build (Docker image) ─▶ release (GitHub release)
                   ├─▶ publish-sdk (PyPI)
                   └─▶ verify-published-artifacts

To release:

./scripts/release.sh 0.2.1

The script will:

  1. update versions in both pyproject.toml files

  2. run uv sync --dev

  3. run the full test suite

  4. commit release: vX.Y.Z

  5. create tag vX.Y.Z

  6. push the commit and tag

Useful flags:

./scripts/release.sh 0.2.1 --no-push
./scripts/release.sh 0.2.1 --skip-tests

Manual fallback:

git add pyproject.toml packages/things-sdk/pyproject.toml
git commit -m "release: v0.2.1"
git tag v0.2.1
git push && git push --tags

This will:

  • Run all tests (preflight gate)

  • Build and push the Docker image to ghcr.io/nkootstra/things with tags 0.2.0, 0.2, and latest

  • Publish things-sdk to PyPI

  • Create a GitHub release with auto-generated release notes

Note: PyPI publishing uses trusted publishers. You must configure the GitHub Actions publisher for things-sdk on PyPI before the first publish.

Project Structure

This project is a monorepo with two packages:

Package

Path

Description

things-sdk

packages/things-sdk/

Reusable core library — models, cloud client, sync engine, task operations

things-api

root

FastAPI HTTP service built on top of the SDK

things-cloud-mcp

packages/things-mcp/

MCP server for AI agents (Claude, Codex, etc.)

You can use them together (run the API) or install only the SDK for scripts, CLIs, or other integrations.

SDK standalone usage

from things_sdk import ThingsClient, TaskService, configure_sync, create_engine_and_session, init_db, pull_sync

engine, session_factory = create_engine_and_session("sqlite+aiosqlite:///data/things.db")
await init_db(engine)
configure_sync(my_config)

client = ThingsClient(email="...", password="...")
async with session_factory() as session:
    await pull_sync(client, session)
    tasks = await TaskService().list_tasks(session)
await client.close()

See packages/things-sdk/README.md for full SDK documentation.

Directory layout

packages/things-sdk/src/things_sdk/   # SDK (reusable core)
├── __init__.py              # Public API exports
├── protocols.py             # CloudClientProtocol, SyncConfig
├── tasks.py                 # TaskService (CRUD + smart lists)
├── tags.py                  # TagService (CRUD + hierarchy resolution)
├── cloud/
│   ├── client.py            # ThingsCloudClient
│   ├── handlers.py          # Entity handler strategy pattern
│   ├── schema.py            # Wire format Pydantic models
│   └── sync.py              # Sync engine + circuit breaker
└── db/
    ├── engine.py            # Engine factory
    └── models.py            # Domain models (Task, Tag, TaskTag, Area, etc.)

src/things_api/                       # API (HTTP adapter)
├── main.py                  # FastAPI app, lifespan, scheduler
├── config.py                # pydantic-settings configuration
├── auth.py                  # API key authentication
├── api/
│   └── routes.py            # HTTP endpoints (tasks, smart lists, tags)
├── cloud/
│   └── scheduler.py         # Background sync loop
└── services/
    ├── contracts.py          # API-layer service protocols
    ├── health_service.py     # Readiness checks
    ├── sync_service.py       # Manual sync orchestration
    ├── task_service.py       # Re-exports SDK TaskService
    ├── tag_service.py        # Re-exports SDK TagService
    ├── task_command_mapper.py# Request DTO mapping
    ├── scheduler_leadership.py # Distributed lock
    └── scheduler_runtime.py  # Scheduler lifecycle

packages/things-mcp/src/things_mcp/   # MCP server
├── __init__.py              # Entry point
├── server.py                # FastMCP tools (22 tools)
├── client.py                # HTTP client for things-api
└── __main__.py              # python -m things_mcp

Available Tools

32 tools
add_checklist_itemB

Add a checklist item (sub-task) to a task.

Args: task_uuid: UUID of the parent task. title: Checklist item text.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_uuidYes
titleYes

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?

No annotations provided. The description only states the basic action without disclosing side effects, idempotency, or permission requirements.

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

Conciseness4/5

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

The description is very concise with two sentences for purpose and two lines for args. While efficient, it could be slightly more structured.

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?

Despite having an output schema, the description lacks context on what the tool returns, error handling, or how it relates to other checklist operations. Minimal completeness.

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?

Although schema coverage is 0%, the description explains each parameter: task_uuid as 'UUID of the parent task' and title as 'Checklist item text'. This adds meaning beyond the schema's type-only information.

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 'Add' and the resource 'checklist item (sub-task) to a task'. It distinguishes from sibling tools like complete_checklist_item and uncomplete_checklist_item.

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. Does not mention prerequisites or context for adding checklist items.

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

assign_tagsA

Replace the tags on a task.

Args: uuid: Task UUID. tags: List of tag UUIDs or names. Pass empty list to remove all tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes
tagsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

The description discloses that the tool replaces tags and notes the special case of an empty list to remove all tags. However, with no annotations provided, it does not address permissions, reversibility, or potential side effects, which are important for understanding the tool's impact.

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

Conciseness5/5

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

The description is concise, using a single line for the purpose and a brief list of arguments. Every sentence serves a clear purpose, and the structure is efficient.

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?

The tool has only two simple required parameters, both fully explained. The special behavior for empty lists is noted. An output schema exists, so return format is covered elsewhere. This is complete for the tool's complexity.

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 significant meaning beyond the schema by clarifying that uuid is a task UUID and tags can be UUIDs or names, and emphasizing the empty list edge case. This helps the agent correctly populate 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 states 'Replace the tags on a task,' which uses a specific verb and resource, clearly distinguishing it from sibling tools like create_tag or update_task. The purpose is unambiguous.

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

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. It does not mention any exclusions or alternative approaches for adding tags individually, leaving the agent to infer usage without comparative context.

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

cancel_taskC

Cancel a task (mark as cancelled, not deleted).

Args: uuid: Task UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes

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 exist, so description carries full burden. It reveals the action is a cancellation (soft deletion) but omits details on permissions, reversibility, side effects, or what happens to dependent items.

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. The 'Args:' line is slightly redundant but does not harm clarity. Could integrate parameter description into the first sentence.

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?

Has output schema so return values are covered, but as a mutation tool, it lacks behavioral context (e.g., what triggers cancellation, effects on checklists/attachments). The description is minimal.

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

Parameters1/5

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

Schema coverage is 0%, meaning the schema only provides type 'string' for uuid. The description adds 'Task UUID' but no format, source, or validation hints, failing to compensate for missing schema documentation.

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 'Cancel' and resource 'task', and explicitly distinguishes from deletion by stating 'mark as cancelled, not deleted'. This differentiates it from sibling tools like delete_task.

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

Usage Guidelines2/5

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

No explicit guidance on when to use cancel vs. alternatives like complete_task or delete_task. The note 'not deleted' implies a soft action, but no context is given for prerequisites or conditions.

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

complete_checklist_itemC

Check off a checklist item.

Args: uuid: Checklist item UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes

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 provided. Description does not disclose effects (e.g., reversibility, state changes) or prerequisites. Minimal information.

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 to the point, with no wasted words. However, it is under-informative.

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?

Has output schema, but description lacks behavioral context or edge cases. Incomplete for a simple one-parameter tool.

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

Parameters1/5

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

Schema has 0% description coverage. Description only repeats 'Checklist item UUID' for the uuid parameter, adding no meaning beyond the field 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?

Description clearly states 'Check off a checklist item,' which is a specific verb+resource. It distinguishes from siblings like add_checklist_item and uncomplete_checklist_item.

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 or alternatives. Only states the action without context or exclusions.

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

complete_projectC

Mark a project as completed.

Args: uuid: Project UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only states 'mark as completed' without disclosing side effects, required permissions, or what happens to related items.

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 short and gets to the point, but lacks structured sections (e.g., behavior, returns). It is concise but could be more informative without much added length.

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

Completeness2/5

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

Given the tool's simplicity and the presence of an output schema, the description is incomplete. It does not explain the output, preconditions, or effects on related entities like tasks or projects.

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?

With 0% schema description coverage, the description adds little: 'uuid: Project UUID' barely goes beyond the schema's 'string' type. It does not explain format, validation, or usage context.

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 'Mark a project as completed,' which is a specific verb and resource. It distinguishes from siblings like 'complete_task' by focusing on projects, 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 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 'complete_task' or 'cancel_task'. No context or exclusions provided.

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

complete_taskC

Mark a task as completed.

Args: uuid: Task UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes

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?

With no annotations, the description must fully disclose behavior. It only states 'Mark as completed' without indicating side effects (e.g., notifications, timestamps), required permissions, or error handling. This is minimal disclosure for a mutation tool.

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

Conciseness4/5

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

The description is concise and front-loaded with the purpose. The structured 'Args:' section adds clarity. However, it could be slightly more informative without increasing verbosity.

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 presence of an output schema (not shown), the description's brevity is somewhat acceptable. However, for a tool with no annotations and siblings, it lacks information on return values, error states, and preconditions. It is adequate but minimal.

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 must compensate. It adds 'Task UUID.' to the parameter, which clarifies its role but fails to provide constraints (format, length, example) or any additional semantic context beyond what the schema already shows.

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

Purpose4/5

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

The description clearly states the action ('Mark a task as completed') and the resource (task). It effectively distinguishes from siblings like 'complete_checklist_item' or 'complete_project' by specifying 'task'. However, it does not elaborate on scope or implied behaviors.

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 (e.g., 'cancel_task' or 'update_task'). There is no mention of prerequisites, such as whether the task must be not already completed, or context about idempotency.

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

create_projectB

Create a new project. Projects are multi-step tasks that hold sub-tasks.

Args: title: Project title (required). notes: Optional notes/description. schedule: 'inbox', 'anytime' (default), or 'someday'. area_uuid: Optional area to assign the project to. deadline: Unix timestamp deadline. start_date: Unix timestamp for the project's start date. tags: Optional list of tag UUIDs or names.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
notesNo
scheduleNoanytime
area_uuidNo
deadlineNo
start_dateNo
tagsNo

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?

With no annotations, the description must fully disclose behavior. It lists parameters but omits side effects, error states, permission requirements, or consequences of creating a project (e.g., duplicates, validation rules). This leaves significant behavioral gaps.

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

Conciseness4/5

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

The description is efficient: one sentence for purpose followed by bullet-point arguments. It is front-loaded with the main action. Slightly verbose with argument descriptions but acceptable.

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 7 parameters and an existing output schema, the description covers parameter meanings adequately but lacks behavioral context (error handling, naming conventions, or project limits). The output schema presumably covers return values, so this is not a major gap.

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 the description bears full burden for parameter meaning. It adds value beyond the schema by explaining 'title' as required, 'schedule' options, and clarifying optionality. However, some parameters (e.g., tags) are only briefly described.

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 'Create a new project' and distinguishes projects as multi-step tasks with sub-tasks. This differentiates it from create_task and update_project, but it does not explicitly contrast with siblings like complete_project or delete_project.

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 for creating projects but offers no explicit guidance on when to use this tool versus alternatives (e.g., update_project for modifications). No exclusionary or prerequisite information is provided.

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

create_tagB

Create a new tag.

Args: title: Tag name. parent: Optional parent tag UUID or name for hierarchy (e.g., creates 'errands' under 'work'). shortcut: Optional single-character keyboard shortcut.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
parentNo
shortcutNo

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, and the description only states that it creates a tag. It fails to disclose potential side effects, permission requirements, rate limits, or any other behavioral traits beyond the basic action.

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

Conciseness4/5

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

The description is concise and efficiently structured with an 'Args:' section. However, it could be slightly more streamlined, and the use of a colon after the title might be improved.

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 low complexity and the existence of an output schema (though not detailed), the description is minimally complete. It lacks output format details and usage context, which are important for a complete understanding.

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 meaningful context: it explains that 'parent' can be a UUID or name and provides an example, and that 'shortcut' is a single character. This compensates for the lack of schema descriptions.

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 tag' which is a specific verb+resource. This distinguishes it from sibling tools like assign_tags (which associates existing tags) and list_tags (which lists tags).

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. It does not mention when not to use it or suggest other tools like assign_tags for tag assignment.

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

create_taskA

Create a new task in Things3.

Args: title: Task title (required). notes: Optional notes/description. schedule: One of 'inbox', 'anytime', or 'someday'. Default: 'inbox'. tags: Optional list of tag UUIDs or names to assign. project_uuid: UUID of the project to add this task to. area_uuid: UUID of the area to assign this task to. deadline: Unix timestamp for the deadline. start_date: Unix timestamp for the start date (schedules for a specific day). evening: If True, schedule for 'This Evening' instead of morning.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYes
notesNo
scheduleNoinbox
tagsNo
project_uuidNo
area_uuidNo
deadlineNo
start_dateNo
eveningNo

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 present, so description must disclose behavioral traits. It only mentions creation but not side effects, authorization needs, or default behavior beyond schedule parameter explanation.

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, but the Args section adds length. It is structured clearly but could be more concise. Still, no wasted sentences.

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 output schema exists, return value omission is acceptable. The description covers all parameters. Missing side effects or error handling, but acceptable for a creation tool.

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 explains all 9 parameters, including default values and allowed values (e.g., schedule options). This compensates for the 0% schema description coverage.

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 creates a new task in Things3, distinguishing it from sibling tools like update_task or complete_task. It uses a specific verb and resource.

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 vs alternatives (e.g., update_task, schedule_task). No prerequisites or context about task management workflow provided.

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

delete_projectA

Move a project to the trash.

Args: uuid: Project UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes

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?

With no annotations, the description carries the full burden. It discloses that the action is 'move to trash', which implies non-permanent deletion. However, it omits details like whether tasks within the project are also trashed, if authorization is needed, or if the operation is reversible. The description adds some value beyond the name but is incomplete.

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

Conciseness5/5

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

The description is extremely concise: two sentences. It front-loads the purpose and immediately explains the argument. There is no redundant information. Every word earns its place.

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

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 one parameter, so the description is nearly complete for basic usage. However, it lacks details about return values, side effects on tasks, and recovery options. The output schema exists but is not described. Given the low complexity, a score of 3 reflects that it is adequate but not thorough.

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 is one required parameter 'uuid'. The description explicitly says 'uuid: Project UUID.' This adds meaning beyond the schema, which only has a title and type. Since schema description coverage is 0%, this compensation is significant, though it is minimal.

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 action: 'Move a project to the trash.' This is a specific verb and resource, and it distinguishes this tool from sibling tools like 'delete_task' and 'complete_project'. The phrase 'move to trash' also clarifies that it is not a permanent deletion.

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. For example, it doesn't mention that moving to trash is reversible or that the user can recover projects from trash using 'list_trash'. It lacks any context about prerequisites or compared to 'complete_project' or 'update_project'.

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

delete_taskC

Move a task to the trash.

Args: uuid: Task UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes

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?

With no annotations, the description must disclose behavioral traits. It states 'move to trash' but does not clarify if the operation is reversible, what happens to subtasks or attachments, or if any permissions are required. Minimal disclosure.

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—two lines. Front-loaded with the key action. However, it could be slightly more informative without losing conciseness (e.g., mentioning that the task is not permanently deleted).

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 low complexity (1 required param, no enums), the description is partially adequate. It identifies the parameter but lacks context on side effects, return value, or interaction with other tools. An output schema exists but is not detailed in the description.

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 the description should compensate. It adds 'Task UUID' to the parameter, but this only clarifies the parameter's purpose minimally. No format hint or additional context beyond the schema's 'string' type is provided.

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

Purpose4/5

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

The description clearly states the action ('Move a task to the trash') and the resource ('task'). It effectively communicates the core function. However, it does not explicitly differentiate from sibling tools like 'cancel_task' or 'complete_task', relying on the name for distinction.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., cancel_task, complete_task). There are no prerequisites, scenarios, or exclusions mentioned, leaving the agent to infer usage context.

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

get_taskA

Get a single task by its UUID. Returns full task details including tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description must convey behavioral traits. It indicates a read operation (get) and describes the output, but does not explicitly state that it is non-destructive or mention any side effects, auth requirements, or error handling. This is adequate but 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, concise sentence that conveys the essential information without any unnecessary words. It is front-loaded and efficient.

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

Completeness4/5

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

Given that this is a simple retrieval tool with one parameter and an output schema (implying return structure is documented), the description covers the key points: what it retrieves and by what key. It does not address edge cases like missing UUID or permissions, but for a straightforward get operation, it is largely sufficient.

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 schema has 0% description coverage for the 'uuid' parameter. The tool description does not explain what a UUID is, how to obtain it, or any constraints (e.g., format). With low schema coverage, the description should compensate, but it does not add 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 the verb 'Get', the resource 'single task', the method 'by its UUID', and what is returned: 'full task details including tags'. This distinguishes it from sibling tools that list or search multiple tasks.

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 implies the need for a UUID and that this tool retrieves one specific task. While it does not explicitly exclude other use cases or mention alternatives, the purpose is clear enough for an AI to know when to select this tool over listing or search tools.

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

list_all_tasksA

List every non-trashed task across the entire library.

Returns all tasks regardless of schedule, area, or project. By default fetches the full set in a single request — agents that need every task should call this without limit and offset. To page through a very large library, increment offset by limit until the response is shorter than limit.

Args: limit: Optional max number of tasks. Omit to fetch all tasks. offset: Optional pagination offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

Without annotations, the description carries the full burden. It covers non-trashed tasks, pagination behavior, and default full fetch. It could mention read-only nature or auth, but overall it's transparent.

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 with a front-loaded summary and efficient additional details. Every sentence adds value without redundancy.

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 output schema exists, the description sufficiently covers purpose, usage, and parameters. No critical gaps for a list-all tool.

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 coverage is 0%, so the description must explain parameters. It clearly defines limit (max number, omit for all) and offset (pagination offset), 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 'List every non-trashed task across the entire library,' specifying the verb, resource, and scope. This distinguishes it from filtered sibling tools like list_today or list_inbox.

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?

It explicitly tells agents to use this tool when needing all tasks without limit/offset, and describes pagination to handle large libraries. This guides appropriate usage versus other sibling tools.

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

list_anytimeA

List tasks in the Anytime list — available to work on, no specific date.

Anytime = schedule is 'anytime', not completed, not trashed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

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?

The description defines the filter criteria (schedule='anytime', not completed, not trashed), adding behavioral context beyond the tool name. However, without annotations, it does not disclose other traits like read-only nature or pagination behavior.

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

Conciseness5/5

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

The description is concise with two sentences: one stating the purpose and one defining the filter. No redundant information, and the key behavior is 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 the presence of an output schema and the simplicity of the tool, the description adequately defines what the tool does and what tasks it returns. The lack of parameter details is a minor gap but does not severely hinder overall completeness.

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

Parameters1/5

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

The description provides no explanation for the two parameters (limit and offset). With 0% schema description coverage, the description should compensate but fails to add any parameter semantics.

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 lists tasks from the 'Anytime' list, which is a specific resource. It defines 'Anytime' as tasks available to work on without a specific date, distinguishing it from sibling tools like list_today or list_inbox.

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 for tasks without a specific date but does not explicitly state when to use this tool versus alternatives. No guidance on exclusion criteria or comparative context is provided.

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

list_areasB

List all areas. Areas are high-level life categories (e.g., Work, Personal).

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?

No annotations provided, and the description only states 'List all areas' without disclosing behavioral traits like read-only nature, authentication requirements, or return format. The agent must infer behavior from the name alone.

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 efficient sentences: one for function, one for definition. No extraneous words; front-loaded with action.

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, the description provides necessary context about the concept of areas. Could be improved by mentioning typical usage or relationship to other entities.

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 zero parameters, and schema description coverage is 100%. The description adds value by defining what areas represent, which helps the agent understand the return data context.

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 'List all areas' and defines areas as 'high-level life categories (e.g., Work, Personal).' This provides a specific verb and resource, but does not explicitly differentiate from sibling list tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like list_projects or list_tags. No when-not or context cues for selection.

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

list_inboxA

List tasks in the Inbox — tasks not yet scheduled or assigned to a list.

Inbox = schedule is 'inbox', not completed, not trashed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

The description discloses the selection criteria (inbox, not completed, not trashed) and implies a read operation via 'list'. No annotations are provided, so the description carries the burden, which it meets adequately.

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 two sentences, front-loaded with the core purpose, and every sentence adds value. No wasted 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?

For a simple list tool with an output schema and clear inbox definition, the description is mostly complete. However, it lacks parameter documentation, which slightly reduces completeness.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain the 'limit' or 'offset' parameters. This is a significant gap, as the description adds no 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 the tool lists tasks in the Inbox, defined as tasks with schedule='inbox', not completed, not trashed. This distinguishes it from siblings like list_today or list_upcoming.

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 implies usage for unscheduled or unassigned tasks by defining the inbox criteria. It does not explicitly state when not to use or name alternatives, but the definition provides sufficient context.

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

list_logbookA

List completed tasks from the Logbook.

Shows tasks completed within the last since_days days (default 30). Ordered by completion date, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
since_daysNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Discloses key behavioral traits: tasks are limited to those completed within the last 'since_days' days (default 30) and ordered newest first. With no annotations provided, this covers the essential behavior, though the effect of the 'limit' parameter is omitted.

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 two clear sentences. The first sentence states the purpose, and the second provides key behavioral details. 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?

With an output schema present, return values are covered. However, the description lacks documentation for the 'limit' parameter, and the term 'Logbook' might require implicit context. Overall, adequate but missing details on pagination or limit behavior.

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?

Adds meaning only for 'since_days' by explaining its role in filtering by completion date and its default value. The 'limit' parameter is not described at all. Since schema coverage is 0%, the description does not adequately compensate for the lack of parameter documentation.

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?

Clearly states the tool lists completed tasks from the Logbook, distinguishing it from siblings like list_all_tasks or list_today. The verb 'list' and resource 'completed tasks from the Logbook' are 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 Guidelines3/5

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

Provides context that it shows completed tasks within a time window, but does not explicitly state when to use this tool versus alternatives like list_all_tasks or list_today. No exclusions or alternative tool names are given.

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

list_projectsA

List all projects. Projects are multi-step tasks that contain sub-tasks.

Args: include_completed: If True, also include completed/cancelled projects. Default False (active projects only). limit: Optional max number of projects. offset: Optional pagination offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_completedNo
limitNo
offsetNo

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?

Without annotations, the description only explains the include_completed flag and pagination parameters. It does not disclose sorting order, maximum limit, or whether the tool modifies any state (it likely does not).

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 very concise: a one-sentence summary followed by parameter documentation. No unnecessary 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?

The description covers parameters adequately but lacks behavioral context like default ordering, scope (all workspaces?), or any performance considerations. Since an output schema exists, return values are not needed.

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?

All three parameters (include_completed, limit, offset) are explained with default values and behavior (e.g., default false means active only), compensating for the 0% schema description coverage.

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 lists projects and defines what projects are (multi-step tasks with sub-tasks), distinguishing it from sibling tools that list tasks, today's tasks, etc.

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 other list tools or search functions. It does not specify that it lists all projects (likely across workspaces) or any exclusion criteria.

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

list_somedayA

List tasks in the Someday list — ideas and tasks without urgency.

Someday = schedule is 'someday', not completed, not trashed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/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 the full burden. It explains the filter criteria (schedule, completion, trash status) but does not mention pagination behavior, ordering, or whether the operation is safe and read-only.

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 two sentences, front-loading the verb and resource. Every sentence is essential, with no redundancy or fluff.

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 that an output schema exists (though not provided), the description adequately defines what is listed and the filter criteria. It could mention pagination, but for a simple listing tool, it is sufficiently complete.

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 two parameters (limit, offset) with no descriptions (0% coverage). The description does not mention these parameters or their usage, missing an opportunity to clarify pagination. The parameters are common, but the description adds no value 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 explicitly states 'List tasks in the Someday list' and defines the filter criteria (schedule='someday', not completed, not trashed). This distinguishes it from sibling tools like list_today and list_inbox.

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 clearly indicates the tool is for listing ideas and tasks without urgency (Someday). While it doesn't explicitly exclude other contexts or list when to use alternatives, the filter criteria make it evident that it is for the Someday list only.

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

list_tagsA

List all tags. Tags can be hierarchical (e.g., work/errands).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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, so description must disclose behavior. It mentions hierarchy but lacks details on pagination, ordering, or output structure.

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

Conciseness5/5

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

Two concise sentences, no redundancy, front-loaded with key information.

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?

Adequate for a simple 0-param tool with output schema. Could mention ordering or pagination, but hierarchy detail adds value.

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; schema coverage 100%. Description adds meaning by noting hierarchical tags, which is beyond 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?

Description clearly states 'List all tags' with verb and resource, and adds hierarchical detail to distinguish from a flat list.

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 siblings like 'list_tasks_by_tag' or 'create_tag'. Missing exclusions or alternatives.

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

list_tasks_by_tagA

List tasks with a specific tag.

Args: tag: Tag UUID or name (e.g., 'work' or 'work/errands'). include_descendants: If True (default), also matches child tags. limit: Optional max number of tasks to return. Omit to fetch every matching task in one call (typical for agent workflows). offset: Optional pagination offset. Page by setting offset += limit until the response is shorter than limit.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYes
include_descendantsNo
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description discloses key behaviors: include_descendants defaults to True and matches child tags, omitting limit fetches all tasks, and pagination pattern. It does not mention read-only nature or auth requirements, but these are inferable from 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?

The description is concise and well-structured with an 'Args' section. Every sentence adds value; no redundancy or fluff. It is front-loaded with the core purpose.

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 4 parameters and presence of an output schema, the description covers all inputs and their behavior. It explains pagination and default fetching mode, making it complete for agent usage.

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 coverage is 0%, so the description must fully explain parameters. It adds meaning beyond schema: explains tag accepts UUID or name with examples, include_descendants behavior, limit usage (omit for all), and offset pagination. This is comprehensive.

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 'List tasks with a specific tag', specifying the action (list), resource (tasks), and filtering criterion (tag). This distinguishes it from sibling tools like list_all_tasks which returns all tasks without filtering.

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 explains parameter usage (e.g., tag format, pagination via limit/offset) but does not provide explicit guidance on when to use this tool versus alternatives like search_tasks or list_all_tasks. Usage context is implied but not clarified.

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

list_todayB

List tasks scheduled for today or earlier that aren't completed.

Today = start date is today or before, not completed, not trashed. Ordered by today_index then index.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It discloses core behavior: lists uncompleted, non-trashed tasks with start date today or before, ordered. However, it does not mention edge cases (e.g., tasks without start dates) or performance considerations. A 3 is appropriate.

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

Conciseness5/5

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

The description is extremely concise: two sentences plus a clarifying definition. Every sentence adds essential information—no fluff or redundancy. It is front-loaded with the main purpose.

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 presence of an output schema, the description adequately covers the filtering and ordering logic. However, the complete absence of parameter guidance makes it less than fully complete for effective invocation. A 3 reflects this balance.

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

Parameters1/5

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

The input schema has two parameters (limit, offset) with 0% description coverage. The description adds no information about these parameters. An agent cannot infer valid values or effects from the description alone, making this a critical gap.

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's function: listing tasks scheduled for today or earlier that are not completed. It defines 'today' precisely (start date today or before) and specifies ordering criteria (today_index then index). This differentiates it from sibling tools like list_upcoming or list_anytime.

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 for today's tasks but does not explicitly guide when to use this tool over alternatives like list_upcoming or list_inbox. No exclusions or context for when-not-to-use are provided.

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

list_trashB

List trashed tasks. Ordered by modification date, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

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 carries full burden. It only reveals ordering information but omits other behavioral traits like pagination behavior, whether it returns full task data, or if it includes trashed projects. The description adds minimal value beyond the name.

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 two short sentences, front-loaded with the core action, and contains no unnecessary words. It is appropriately concise.

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 is adequate but could be more informative. It lacks context on whether only tasks are listed or if projects are included, and does not explain the limit parameter's effect.

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

Parameters1/5

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

The schema description coverage is 0%, and the description does not explain the 'limit' parameter at all. It fails to add meaning beyond the schema, leaving the agent to guess its purpose.

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 ('list') and the resource ('trashed tasks'), and provides additional detail about ordering ('Ordered by modification date, newest first'). This distinguishes it from siblings like list_all_tasks or list_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. There is no mention of exclusions (e.g., only tasks, not projects) or comparison with other list tools.

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

list_upcomingA

List tasks scheduled for a future date.

Upcoming = start date is after today, not completed, not trashed. Ordered by start date, then deadline.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

The description discloses the filtering and ordering behavior, which is good given no annotations. However, it fails to explicitly state that the operation is read-only or describe any side effects or limitations (e.g., pagination behavior).

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

Conciseness5/5

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

The description is concise with two clear sentences. No fluff or redundant information. The definition is front-loaded.

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 and there is an output schema, so return format is covered. However, the description lacks details about pagination (defaults, maximums) and does not explain the parameters. With many sibling tools, additional context could help differentiation.

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 two parameters (limit, offset) with 0% description coverage in the schema itself. The description does not mention or explain these parameters, forcing the agent to rely solely on parameter names. This is insufficient.

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 'List tasks scheduled for a future date' and defines the criteria (start date after today, not completed, not trashed, ordered by start date then deadline). This distinguishes it from sibling list tools like list_today or list_anytime.

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 clear criteria for when to use this tool (future start dates), but does not explicitly tell the agent when not to use it or mention alternatives. However, the criteria implicitly guide usage.

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

move_to_projectC

Move a task into a project.

Args: uuid: Task UUID. project_uuid: Target project UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes
project_uuidYes

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?

Without annotations, the description carries the full burden. It does not disclose behavioral traits like whether the task is removed from its previous project, impact on subtasks, or required permissions. The description is too minimal.

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 with the action front-loaded. However, a bit more detail could be added without sacrificing conciseness.

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

Completeness2/5

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

Given the presence of an output schema (not shown) and many sibling tools, the description lacks information about side effects or return values. It is insufficient for a mutation 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?

With 0% schema description coverage, the description should compensate, but it only adds slight clarification (Task UUID, Target project UUID) beyond the schema titles. It does not provide details like format or constraints.

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 action ('Move a task into a project') with a specific verb and resource, and it distinguishes from sibling tools like create_project or update_task.

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

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 prerequisites or when not to use it. The description only states the basic function.

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

schedule_taskA

Schedule a task for today, anytime, someday, or a specific date.

Args: uuid: Task UUID. schedule: 'inbox', 'anytime', or 'someday'. start_date: Optional Unix timestamp to schedule for a specific day. evening: If True, schedule for "This Evening" instead of morning.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes
scheduleYes
start_dateNo
eveningNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Despite no annotations, the description explains parameter values ('inbox', 'anytime', 'someday') and the effect of the 'evening' flag. However, it does not disclose that scheduling modifies an existing task, nor does it mention side effects or error conditions.

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 compact: a single-line overview followed by bullet-like arg details. Every sentence adds value without repetition or fluff.

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?

Covers input parameters well, but missing context on task existence requirement and behavior when conflicting parameters are provided (e.g., schedule='inbox' with a start_date). Output schema exists, so return values are not required in description.

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: uuid (Task UUID), schedule (allowed values), start_date (Unix timestamp), evening (boolean effect). Adds critical meaning beyond the schema types.

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 schedules a task with options for 'today, anytime, someday, or a specific date'. It provides a specific verb ('schedule') and resource ('a task'), distinguishing it from sibling tools like create_task or update_task.

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

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 over alternatives such as update_task, which might also set scheduling fields. Missing context on prerequisites or scenarios where this tool is preferred.

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

search_advancedA

Multi-predicate search. Every filter is optional and AND-combined.

Use this for GTD reviews ("what's overdue?"), area sweeps, or finding tasks modified recently.

Args: status: 'pending', 'cancelled', or 'completed'. type: 'task', 'project', or 'heading'. schedule: 'inbox', 'anytime', or 'someday'. area_uuid: Filter by area. project_uuid: Filter by parent project. tag: Tag UUID or name to filter by. include_descendants: When tag is set, also match descendant tags. start_date_from, start_date_to: Unix-timestamp range for start date. deadline_from, deadline_to: Unix-timestamp range for deadline. modified_since: Only tasks modified at or after this timestamp. completed_since: Only tasks completed at or after this timestamp. include_trashed: If True, also include trashed tasks. limit: Optional max number of tasks. offset: Optional pagination offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
typeNo
scheduleNo
area_uuidNo
project_uuidNo
tagNo
include_descendantsNo
start_date_fromNo
start_date_toNo
deadline_fromNo
deadline_toNo
modified_sinceNo
completed_sinceNo
include_trashedNo
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

No annotations provided; description discloses that filters are AND-combined and covers all parameters with behavioral details (e.g., include_trashed, include_descendants). Missing pagination or return format 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 usage tips, but the parameter list could be slightly more compact. Overall well-structured.

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 16 optional parameters and existing output schema, the description covers all necessary behavioral details including filter combination, parameter range, and usage 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?

With 0% schema coverage, the description fully compensates by explaining every parameter's meaning, accepted values, and defaults, adding significant value beyond the schema types.

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 it is a multi-predicate search with AND-combined optional filters. It explicitly contrasts with simpler listing tools, 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 Guidelines4/5

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

The description lists specific use cases (GTD reviews, area sweeps, finding recently modified tasks) but does not explicitly mention when not to use or alternatives.

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

search_tasksA

Full-text search across task titles, notes, and checklist items.

Case-insensitive substring match. Trashed tasks are excluded by default.

Args: query: Search string. Returns empty list when blank. include_trashed: If True, also search trashed tasks. include_checklists: If True (default), also match tasks whose checklist items contain the query. limit: Optional max number of tasks. offset: Optional pagination offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
include_trashedNo
include_checklistsNo
limitNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

No annotations provided, so description carries burden. Discloses default exclusion of trashed tasks, inclusion of checklists, case-insensitive matching, and behavior for blank queries. Lacks details on sorting, pagination default behavior, or result format (though output schema exists).

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

Conciseness5/5

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

Very concise: one-line purpose followed by parameter list. No redundant language. Well-structured for quick comprehension.

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?

Covers core functionality and parameter behaviors well. Missing context on result sorting, differentiation from 'search_advanced', and potential performance considerations. Output schema mitigates need for return value explanation.

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%, but description fully compensates by explaining each parameter's effect and defaults (e.g., blank query returns empty list, include_trashed default false, include_checklists default true, limit/offset optional). Adds context the schema lacks.

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 full-text search across specific fields (titles, notes, checklist items) and notes case-insensitive substring matching. However, it does not differentiate from sibling tool 'search_advanced' which may offer more advanced features.

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 'list_all_tasks' or 'search_advanced'. Missing when-not conditions or preferred scenarios.

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

trigger_syncA

Trigger a full pull + push sync with Things Cloud.

Call this after making changes so they appear on all your devices.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided. The description only mentions 'full pull + push sync' without detailing side effects, network requirements, duration, or conflict resolution, leaving significant behavioral gaps.

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

Conciseness5/5

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

The description is two sentences, front-loading the core action and usage. Every sentence is necessary and contributes to understanding.

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 no parameters and an output schema, the description is minimal. It explains what the tool does and when to use, but lacks details on sync behavior (e.g., bidirectional, conflict handling) that would be expected for a sync operation. It is adequate but not thorough.

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 schema coverage is 100%. The description adds no parameter information, but none is needed due to zero 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 the tool triggers a 'full pull + push sync' with Things Cloud. The verb 'trigger' and resource 'sync' are specific, and it is distinct from sibling CRUD tools.

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 advises calling the tool after making changes for propagation, providing clear usage context. It does not explicitly state when not to use, but no alternative syncing tools exist among siblings.

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

uncomplete_checklist_itemC

Uncheck a checklist item.

Args: uuid: Checklist item UUID.

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.5/5.0
Behavior1/5

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

No annotations are present, so the description must disclose behavioral traits. It only repeats the action without noting side effects, error conditions, idempotency, or permission requirements, leaving significant gaps.

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 short but includes unnecessary repetition of the parameter information already present in the schema. While not verbose, it could be more efficient by omitting the args line or adding meaningful detail.

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

Completeness2/5

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

Despite the tool's simplicity, the description omits return value details (output schema exists but unmentioned), error handling, and behavioral traits. An agent cannot fully assess consequences or expected results.

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

Parameters1/5

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

With 0% schema description coverage, the description must compensate. It merely states 'uuid: Checklist item UUID', adding no meaning beyond the raw schema. No format, constraints, or purpose beyond the identifier 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 'Uncheck a checklist item', using a specific verb ('Uncheck') and resource ('checklist item'). This directly contrasts with sibling 'complete_checklist_item', making differentiation immediate.

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 'complete_checklist_item', nor any context on prerequisites or effects. The description is purely functional without usage direction.

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

update_projectB

Update a project's fields. Only provided fields are changed.

Args: uuid: Project UUID (required). title: New title. notes: New notes. schedule: 'inbox', 'anytime', or 'someday'. area_uuid: Move the project to this area. deadline: New deadline (Unix timestamp). start_date: New start date (Unix timestamp). tags: New tag list (replaces existing tags).

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes
titleNo
notesNo
scheduleNo
area_uuidNo
deadlineNo
start_dateNo
tagsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

No annotations exist, and the description only states partial updating. It does not disclose potential side effects, permissions, or response format. Minimal transparency for a mutation tool.

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

Conciseness4/5

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

Efficiently structured with a heading and list. No fluff, but could be slightly more concise. Front-loaded purpose is good.

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?

With 8 parameters and no annotations, the description covers all fields adequately. An output schema exists (not shown) but return values are not described. Lacks disclosure of cascading effects or error scenarios.

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 description adds meaning to each parameter: e.g., schedule has allowed values, tags replaces existing, deadline is Unix timestamp. Schema has 0% description coverage, so this compensates well.

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 it updates a project's fields and lists them. It's a specific verb+resource, but does not differentiate from sibling tools like update_task.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool vs alternatives (e.g., complete_project, delete_project). The note about only provided fields being changed is a usage detail but not a guideline.

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

update_taskA

Update an existing task. Only provided fields are changed.

Args: uuid: Task UUID (required). title: New title. notes: New notes. schedule: 'inbox', 'anytime', or 'someday'. tags: New tag list (replaces existing tags). project_uuid: Move to this project. area_uuid: Assign to this area. deadline: New deadline (Unix timestamp). start_date: New start date (Unix timestamp).

ParametersJSON Schema
NameRequiredDescriptionDefault
uuidYes
titleNo
notesNo
scheduleNo
tagsNo
project_uuidNo
area_uuidNo
deadlineNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries full responsibility. It discloses key behaviors: only provided fields are changed, tags are replaced (not merged), and schedule has specific allowed values. However, it omits details like response format, error handling (e.g., what happens if uuid is invalid), or idempotency. The output schema exists but is not described, slightly reducing transparency.

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

Conciseness5/5

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

The description is extremely concise: a single introductory sentence followed by a bulleted list of parameters with short, informative labels. No redundant phrases or filler. The most critical information (partial update behavior) is front-loaded. Examples of efficiency: 'New tag list (replaces existing tags)' packs behavior into few 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 complexity (9 parameters, 0% schema coverage, no annotations) and the existence of an output schema, the description is largely complete. It explains core behavior and all parameters. However, it lacks context on prerequisites (e.g., uuid must refer to an existing task), return value details, and error handling. The output schema likely fills some gaps, but the description could enhance completeness with a brief note on what the tool returns.

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 each parameter. It does so explicitly: for schedule, it lists allowed values ('inbox', 'anytime', 'someday'); for deadline/start_date, it specifies 'Unix timestamp'; for tags, it clarifies 'replaces existing tags'. Every parameter has a meaningful description, compensating completely for the lack of schema-level descriptions.

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's purpose: 'Update an existing task. Only provided fields are changed.' It lists all parameters with explicit meanings, making it unmistakable what the tool does. The name 'update_task' aligns perfectly with the description, and it distinguishes from sibling tools that handle specific aspects (e.g., move_to_project, schedule_task) by its general update nature.

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 provide guidance on when to use this tool versus more specialized siblings like move_to_project or schedule_task. It only implies usage for general task updates, but lacks explicit conditions or exclusions. For example, it doesn't advise using schedule_task for scheduling instead of update_task. This limits the agent's ability to choose the most appropriate tool.

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. 32 tool updatesv0.3.3
    • First observedadd_checklist_item
    • First observedassign_tags
    • First observedcancel_task
    • First observedcomplete_checklist_item
    • First observedcomplete_project
    • First observedcomplete_task
    • First observedcreate_project
    • First observedcreate_tag
    • First observedcreate_task
    • First observeddelete_project
    • First observeddelete_task
    • First observedget_task
    • First observedlist_all_tasks
    • First observedlist_anytime
    • First observedlist_areas
    • First observedlist_inbox
    • First observedlist_logbook
    • First observedlist_projects
    • First observedlist_someday
    • First observedlist_tags
    • First observedlist_tasks_by_tag
    • First observedlist_today
    • First observedlist_trash
    • First observedlist_upcoming
    • First observedmove_to_project
    • First observedschedule_task
    • First observedsearch_advanced
    • First observedsearch_tasks
    • First observedtrigger_sync
    • First observeduncomplete_checklist_item
    • First observedupdate_project
    • First observedupdate_task

TDQS

B3.3/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose: create, update, delete, complete, cancel, move, list, search, sync, etc. Descriptions are detailed so no two tools are ambiguous.

Naming Consistency4/5

Most tools follow a verb_noun pattern (e.g., create_task, list_projects). Minor deviations like 'list_anytime' (verb_adverb) and 'trigger_sync' (verb) are present but not confusing.

Tool Count2/5

32 tools is excessive for a task management API. While the domain is comprehensive, this count exceeds the 'heavy' range and may overwhelm agents.

Completeness4/5

Covers almost all lifecycle operations for tasks, projects, tags, and checklist items. Missing create/update/delete for areas and headings, but most 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

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/nkootstra/things'

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