Skip to main content
Glama
thefactremains

Just Claude Things

Just Claude Things

An MCP server that lets Claude read and write your Things 3 tasks on macOS via AppleScript.

Requirements

  • macOS

  • Things 3 installed and running

  • Node.js 18+

  • When first used, macOS will prompt you to grant Automation permissions (System Settings → Privacy & Security → Automation)

Related MCP server: Things MCP

Quick Start

Claude Desktop

Add to your ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "things3": {
      "command": "npx",
      "args": ["-y", "things3-mcp"]
    }
  }
}

Claude Code

claude mcp add things3 -- npx -y things3-mcp

Available Tools

Read

get_todos

List todos with optional filters.

{ "status": "today" }
{ "tag": "work", "status": "anytime" }
{ "search": "meeting notes" }
{ "projectId": "ABC123" }

Parameter

Type

Description

status

string

Filter by list: inbox, today, upcoming, anytime, someday, logbook

projectId

string

Filter by project ID

areaId

string

Filter by area ID

tag

string

Filter by tag name

search

string

Search todo titles and notes

get_todo

Get a single todo by ID with full details.

{ "id": "ABC123" }

get_projects

List all projects with status, area, and tags. No parameters.

get_areas

List all areas. No parameters.

get_tags

List all tags. No parameters.

Write

create_todo

Create a new todo.

{
  "title": "Review PR #42",
  "notes": "Check the error handling changes",
  "when": "today",
  "tags": ["work"],
  "checklistItems": ["Read the diff", "Run tests locally", "Leave review"]
}

Parameter

Type

Description

title

string

Required. Title of the todo

notes

string

Notes/description

when

string

today, evening, tomorrow, someday, or date (YYYY-MM-DD)

deadline

string

Deadline date (YYYY-MM-DD)

tags

string[]

Tag names to apply

projectId

string

Project ID to add this todo to

heading

string

Heading within the project

checklistItems

string[]

Checklist items

create_project

Create a new project.

{
  "title": "Q2 Planning",
  "notes": "Quarterly goals and milestones",
  "tags": ["work"],
  "when": "2025-04-01",
  "deadline": "2025-06-30"
}

Parameter

Type

Description

title

string

Required. Title of the project

notes

string

Notes/description

areaId

string

Area ID to assign to

tags

string[]

Tag names

when

string

today, evening, tomorrow, someday, or date (YYYY-MM-DD)

deadline

string

Deadline date (YYYY-MM-DD)

update_todo

Update an existing todo by ID.

{
  "id": "ABC123",
  "when": "tomorrow",
  "tags": ["urgent"]
}

Parameter

Type

Description

id

string

Required. Todo ID

title

string

New title

notes

string

New notes (appended to existing)

when

string

today, evening, tomorrow, someday, or date (YYYY-MM-DD)

deadline

string

New deadline (YYYY-MM-DD)

tags

string[]

Tags to add

complete_todo

Mark a todo as complete.

{ "id": "ABC123" }

delete_todo

Move a todo to Trash (recoverable from Things 3 Trash).

{ "id": "ABC123" }

License

MIT

Available Tools

10 tools
things3_complete_todoComplete Things 3 TodoA
Idempotent

Mark a todo as complete in Things 3.

Args:

  • id: The unique ID of the todo to complete (required)

Returns: { success, id, name }

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe unique ID of the todo to complete

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare the tool is idempotent and not destructive, so the safety profile is clear. The description adds no extra behavioral context beyond stating the action, such as side effects or permissions.

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 for the action and one for Args, plus a Returns note. Every sentence is necessary and front-loaded with the core purpose.

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 simple action and rich annotations, the description is mostly complete. It includes the return shape {success, id, name}, which compensates for the lack of an output schema. Missing details like what 'success' indicates or the state change after completion are minor.

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

Parameters3/5

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

Schema coverage is 100%, and the description's parameter info ('The unique ID of the todo to complete (required)') largely mirrors the schema. It adds no additional meaning or context beyond what the schema already provides.

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 'Mark as complete' with clear resource 'todo in Things 3'. It clearly distinguishes from sibling tools like things3_create_todo, things3_update_todo, and things3_delete_todo.

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 use when a todo needs to be marked complete, but it does not provide explicit guidance on when not to use or suggest alternatives (e.g., using update_todo for partial completion). No prerequisites or context are mentioned.

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

things3_create_projectCreate Things 3 ProjectA

Create a new project in Things 3.

Args:

  • title: Title of the project (required)

  • notes: Markdown notes/description

  • areaId: ID of the area to assign this project to (get IDs from things3_get_areas)

  • tags: Array of tag names to apply (tags must already exist in Things 3)

  • when: Schedule — "today", "evening", "tomorrow", "someday", or YYYY-MM-DD

  • deadline: Deadline date in YYYY-MM-DD format

Returns: { id, name } of the created project

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTag names to apply
whenNoSchedule: "today", "evening", "tomorrow", "someday", or YYYY-MM-DD
notesNoNotes/description for the project
titleYesTitle of the project
areaIdNoID of the area to assign this project to
deadlineNoDeadline date in YYYY-MM-DD format

TDQS

A4.4/5.0
Behavior4/5

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

Annotations show no destructive or read-only hints. Description adds return format ({id, name}) and a key precondition (tags must already exist), enhancing transparency beyond annotations.

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

Conciseness5/5

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

Concise docstring with clear purpose, structured Args, and Returns line. No wasted words; front-loaded with the 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?

Covers all parameters, return value, and a key precondition (tags existence). No output schema, so return info is helpful. Could mention error handling but adequate for a simple creation tool.

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 100%, but description adds practical guidance: examples for 'when' values and directs user to things3_get_areas for areaId, going 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?

Description explicitly states 'Create a new project in Things 3', specifying the verb and resource. It clearly distinguishes from sibling tools like things3_create_todo, which creates a todo instead.

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?

Context is clear: this tool is for creating projects, while siblings handle todos. No explicit 'when not to use' but the grouping makes usage obvious.

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

things3_create_todoCreate Things 3 TodoA

Create a new todo in Things 3.

Supports title, notes, scheduling, deadline, tags, project assignment, heading placement, and checklist items.

Args:

  • title: Title of the todo (required)

  • notes: Markdown notes/description

  • when: Schedule — "today", "evening", "tomorrow", "someday", or a date (YYYY-MM-DD)

  • deadline: Deadline date in YYYY-MM-DD format

  • tags: Array of tag names to apply (tags must already exist in Things 3)

  • projectId: ID of the project to add this todo to (get IDs from things3_get_projects)

  • heading: Heading within the project to place this todo under (requires projectId)

  • checklistItems: Array of checklist item strings

Returns: { id, name } of the created todo

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTag names to apply
whenNoSchedule: "today", "evening", "tomorrow", "someday", or YYYY-MM-DD
notesNoNotes/description for the todo
titleYesTitle of the todo
headingNoHeading within the project to place this todo under
deadlineNoDeadline date in YYYY-MM-DD format
projectIdNoID of the project to add this todo to
checklistItemsNoChecklist items to add to the todo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false (write operation) and destructiveHint=false (not destructive), which aligns with creation. The description adds that it returns {id, name}, but does not elaborate on side effects like idempotency or notifications. Given the tool's nature, this is adequate.

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: a summary sentence, a list of arguments with brief explanations, and a return note. 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?

With 8 parameters and no output schema, the description covers all parameters, explains return type ({id, name}), and provides usage hints (e.g., 'tags must already exist'). No gaps remain for an AI agent to use it correctly.

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 100%, so baseline is 3. The description adds significant value by detailing the 'when' format (today, evening, YYYY-MM-DD), requiring tags to exist, projectId from get_projects, heading requiring projectId, and checklistItems as strings. This goes beyond the raw 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 it creates a new todo in Things 3, lists supported features (title, notes, scheduling, etc.), and distinguishes it from sibling tools like complete, delete, update. The verb 'create' and resource 'todo' are specific.

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 when to use the tool (to create a todo) and provides context via sibling tool names. However, it does not explicitly state when not to use it or compare with alternatives. It is clear enough for an AI agent given the sibling context.

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

things3_delete_todoDelete Things 3 TodoA
Destructive

Move a todo to the Trash in Things 3.

This does NOT permanently delete it — the todo can be recovered from Trash inside Things 3.

Args:

  • id: The unique ID of the todo to trash (required)

Returns: { success, id, name }

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe unique ID of the todo to delete

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, signaling mutation. The description adds value by clarifying the exact nature of the destruction (move to Trash, not permanent delete) and the return format, going beyond what annotations provide.

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

Conciseness5/5

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

The description is extremely concise: three sentences plus an args/returns list. Every sentence adds essential information, and the key behavioral note (non-permanent) is front-loaded.

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?

For a simple tool with one required parameter and no output schema, the description covers purpose, behavior, parameter details, and return format comprehensively. No additional information is needed.

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

Parameters3/5

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

Schema coverage is 100% with the 'id' parameter description matching the tool's args section. The description does not add new semantics beyond what the schema already provides, so a baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the verb 'Move to the Trash' and the resource 'a todo in Things 3'. It distinguishes from sibling tools like things3_complete_todo and things3_update_todo by specifying the action (trashing versus completing or updating).

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

Usage Guidelines4/5

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

The description explains that the todo is not permanently deleted and can be recovered from Trash, providing context for when this tool is appropriate. While it does not explicitly compare to alternatives, the intent is clear given sibling tool names.

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

things3_get_areasList Things 3 AreasA
Read-onlyIdempotent

List all areas of responsibility in Things 3.

Returns area IDs, names, and tags. Use area IDs to filter todos or assign projects to an area.

Returns: Array of { id, name, tags }

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, non-destructive. Description adds specific return fields and how IDs are used, enhancing beyond annotations. No contradictions.

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?

Three concise sentences: purpose, return fields, usage. No redundancy or fluff.

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?

Even without output schema, description fully explains return structure ('Array of { id, name, tags }') and practical usage. Complete for a list tool.

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 (0 required). Schema coverage is 100%, so description needs no additional parameter info. Baseline 4 for 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?

Clearly states 'List all areas of responsibility in Things 3' and specifies return data (IDs, names, tags). Distinguishes from sibling tools like things3_get_projects and things3_get_tags.

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?

Provides context on when to use the results ('Use area IDs to filter todos or assign projects to an area'), but does not explicitly exclude other scenarios or mention alternatives.

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

things3_get_projectsList Things 3 ProjectsA
Read-onlyIdempotent

List all projects in Things 3 with pagination.

Returns projects with their status, area, tags, and dates. Use the returned project IDs to filter todos or assign new todos to a project.

Args:

  • limit: Max results to return (default 50, max 200)

  • offset: Number of results to skip for pagination (default 0)

Returns: { items: Project[], total_available, offset, limit, has_more }

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results to return (default 50)
offsetNoNumber of results to skip for pagination

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds behavioral context such as returning fields (status, area, tags, dates) and pagination details, which are not covered by annotations. No contradictions.

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, front-loaded with the main purpose, followed by usage advice, parameter details, and return format. Every sentence adds value with no redundancy.

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

Completeness4/5

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

For a simple list tool with no output schema, the description adequately explains the return format and pagination. However, it could be more explicit about the fields within a Project object, but the given fields (status, area, tags, dates) provide sufficient 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?

Schema coverage is 100% with both parameters described. The description adds value by explaining the response structure and suggesting how to use the returned IDs, which goes beyond the schema definitions.

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 all projects in Things 3 with pagination,' specifying the verb 'List' and the resource 'projects.' It distinguishes from sibling tools like things3_get_areas and things3_get_tags by explicitly focusing on projects.

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 guidance to use returned project IDs for filtering todos or assigning new todos, but does not explicitly state when to use this tool over siblings or when not to use it. Lacks alternatives or exclusion criteria.

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

things3_get_tagsList Things 3 TagsA
Read-onlyIdempotent

List all tags defined in Things 3.

Returns tag IDs and names. Use tag names to filter todos or apply tags when creating/updating todos.

Returns: Array of { id, name }

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false; the description adds that it returns IDs and names and how tags are used, providing context beyond the annotations.

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 three concise sentences, each serving a purpose: stating the function, explaining usage, and specifying the return format. No extraneous information.

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 tool's simplicity (0 parameters, read-only list), the description fully covers the purpose, usage, and return format, meeting the needs for agent selection and invocation.

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

Parameters4/5

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

There are no parameters in the input schema, so no additional parameter info is needed. The description adds value by explaining the return format.

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 resource 'tags' within 'Things 3', distinguishing it from sibling tools like things3_get_projects or things3_get_todos.

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

Usage Guidelines4/5

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

It explains that tag names can be used to filter todos or apply tags when creating/updating todos, but does not explicitly mention when not to use this tool.

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

things3_get_todoGet Things 3 TodoA
Read-onlyIdempotent

Get a single todo by its ID from Things 3.

Returns full details including title, notes, checklist items, due date, tags, project, and area.

Args:

  • id: The unique Things 3 todo ID

Returns: Todo object with all fields

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe unique ID of the todo in Things 3

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by listing the returned fields (title, notes, checklist items, etc.), providing useful behavioral context beyond annotations.

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

Conciseness5/5

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

Extremely concise: one sentence for purpose, one for return details, one for args, one for returns. All sentences are necessary and front-loaded.

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 tool's simplicity (1 param, no nested objects, rich annotations), the description fully covers purpose, input, and output expectations. No gaps identified.

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

Parameters3/5

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

Schema coverage is 100% with the 'id' parameter already described. The description adds minimal extra detail ('The unique Things 3 todo ID'), not exceeding the schema's description.

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

Purpose5/5

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

The description clearly states 'Get a single todo by its ID', specifying the verb and resource. It distinguishes from the sibling 'things3_get_todos' which retrieves multiple todos.

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

Usage Guidelines4/5

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

Implicit usage context is clear: use when you need a specific todo by ID. No explicit when-not or alternatives, but the sibling set makes it evident.

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

things3_get_todosList Things 3 TodosA
Read-onlyIdempotent

List todos from Things 3 with optional filters and pagination.

Returns todos matching the specified criteria. Use "status" to filter by list (inbox, today, upcoming, anytime, someday, logbook). Combine with projectId, areaId, tag, or search filters to narrow results.

Args:

  • status: Filter by Things 3 list name

  • projectId: Filter by project ID (get IDs from things3_get_projects)

  • areaId: Filter by area ID (get IDs from things3_get_areas)

  • tag: Filter by tag name (get names from things3_get_tags)

  • search: Case-insensitive substring match against title and notes

  • limit: Max results to return (default 50, max 200)

  • offset: Number of results to skip for pagination (default 0)

Returns: { items: Todo[], total_available, offset, limit, has_more }

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoFilter by tag name
limitNoMax results to return (default 50)
areaIdNoFilter by area ID
offsetNoNumber of results to skip for pagination
searchNoCase-insensitive substring match against title and notes
statusNoFilter by Things 3 list
projectIdNoFilter by project ID

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds pagination behavior (default limit, max, offset, has_more) and search semantics (case-insensitive substring). No contradictions.

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?

Concise yet informative. Opens with a clear summary, then a paragraph on usage, followed by a structured list of parameters. Every sentence adds necessary detail 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?

For a tool with 7 optional parameters and no output schema, the description covers all key aspects: filtering, pagination, return format, and how to get related IDs. It fully equips an agent to use the tool.

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 100%, but description adds value by explaining how to obtain IDs from related tools (things3_get_projects, etc.) and clarifying search is case-insensitive substring. This helps an agent use parameters correctly.

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 todos from Things 3' with optional filters and pagination. It distinguishes from sibling tools like things3_get_todo (single todo) and things3_create_todo, etc.

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?

Provides clear guidance on when to use each filter and references sibling tools for getting IDs (things3_get_projects, things3_get_areas, things3_get_tags). Does not explicitly state when not to use this tool, but that is implied by sibling names.

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

things3_update_todoUpdate Things 3 TodoA
Idempotent

Update an existing todo in Things 3 by ID.

Only provided fields are updated; omitted fields are left unchanged. Note: tags specified in addTags are added to existing tags, not replaced.

Args:

  • id: The unique ID of the todo to update (required)

  • title: New title

  • notes: New notes (replaces existing notes via URL scheme — append manually if needed)

  • when: Reschedule — "today", "evening", "tomorrow", "someday", or YYYY-MM-DD

  • deadline: New deadline in YYYY-MM-DD format

  • addTags: Tag names to add to the todo

  • completed: Set to true to mark complete, false to mark incomplete

Returns: { success, id, name }

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe unique ID of the todo to update
whenNoReschedule: "today", "evening", "tomorrow", "someday", or YYYY-MM-DD
notesNoNew notes (replaces existing)
titleNoNew title
addTagsNoTag names to add to the todo
deadlineNoNew deadline in YYYY-MM-DD format
completedNoSet true to complete, false to uncomplete

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate idempotentHint=true and destructiveHint=false, which the description supports by describing partial, non-destructive updates. The description adds useful behavioral details: notes replacement behavior, tag appending, and a note about URL scheme. No contradiction.

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

Conciseness5/5

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

The description is concise, well-structured with a clear purpose sentence followed by bullet-point arguments. No unnecessary words; every sentence adds value.

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 7 parameters and no output schema, the description covers update semantics, partial update behavior, tag behavior, and return format ({ success, id, name }). It is complete for its 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?

All 7 parameters have schema descriptions (100% coverage), but the description adds extra meaning: for notes it warns about replacement, for addTags it clarifies appending behavior, and for completed it specifies boolean behavior.

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

Purpose5/5

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

The description clearly states 'Update an existing todo in Things 3 by ID,' specifying the verb (update) and resource (todo). It distinguishes from siblings like things3_create_todo and things3_complete_todo by its focus on updating existing items.

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

Usage Guidelines4/5

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

The description explains that only provided fields are updated and omitted fields are left unchanged, giving clear usage context. It also notes tag behavior. However, it does not explicitly compare to alternatives like things3_complete_todo, so it loses one point.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv1.0.0
    • First observedthings3_complete_todo
    • First observedthings3_create_project
    • First observedthings3_create_todo
    • First observedthings3_delete_todo
    • First observedthings3_get_areas
    • First observedthings3_get_projects
    • First observedthings3_get_tags
    • First observedthings3_get_todo
    • First observedthings3_get_todos
    • First observedthings3_update_todo

TDQS

A4.4/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct operation on clearly separate entities (todos, projects, areas, tags). No two tools perform the same function, and the slight overlap between complete_todo and update_todo with completed=true is mitigated by the dedicated convenience tool.

Naming Consistency5/5

All tools follow a strict `things3_<verb>_<noun>` pattern. Verbs are consistently in imperative form (create, get, update, delete, complete), and nouns are singular or plural appropriately. No mixing of styles or irregular names.

Tool Count5/5

With 10 tools covering the basic lifecycle of tasks and supporting entities, the count is well-scoped for a task management MCP server. It provides enough functionality without being bloated or too sparse.

Completeness4/5

Core CRUD for todos is complete, and project/area/tag retrieval is present. However, there is no update_project, delete_project, or get_single_project endpoint, and the update_todo lacks a projectId parameter, creating minor gaps for project management workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers