Skip to main content
Glama

Things MCP

Find and manage Things 3 tasks from a conversation. Things MCP connects compatible MCP clients to the Things app on your Mac through its supported automation interfaces.

Create Inbox tasks, edit titles and notes, set deadlines, schedule dates, move tasks, and complete or reopen them. A separate permission enables moving individual to-dos to Trash. Your Mac runs the bridge. The local connection needs no companion app or project-operated account or server.

Documentation · Installation · Daily use · Capabilities · Full scope · Troubleshooting · Buy me a coffee

Version 0.83 is an early release. The local extension installs through its host. First-time browser setup is an advanced installation, and fresh-Mac consent and sleep/wake recovery still need wider testing. See verification coverage.

Install

For Claude Desktop on macOS:

  1. Download the .mcpb package from Releases.

  2. Open Things 3, then open the downloaded package and select Install. The desktop client supplies the runtime; no configuration editing or Terminal commands are needed.

  3. Open Settings > Extensions > Things MCP > Configure. Enable Allow changes if you want to manage tasks, then select Save. New installations start read-only.

  4. Start a new conversation and ask: Use Things MCP to check the connection without reading or changing tasks. Allow macOS Automation access to Things if prompted.

  5. With Allow changes enabled, try: Use Things MCP to create an Inbox task called “Try Things MCP”, then read it back.

For ChatGPT browser chats:

  1. Follow ChatGPT setup to connect a private tunnel on your Mac to your own account. First-time setup is currently an advanced installation.

  2. Enable Allow changes from ChatGPT in the extension settings and select Save if you want to manage tasks through the tunnel.

  3. Start a new conversation with the connection enabled and ask it to check the Things MCP connection. After setup, the background connection starts at login and does not need an open Terminal.

Other clients can use the standard local MCP transport. See other MCP clients. A model needs a client that supports tools; support for MCP alone does not guarantee compatibility with every host.

Related MCP server: Things MCP

What works

Operation

Version 0.83

Search and read to-dos, projects, areas, and tags

Available

Create an Inbox to-do

Available

Edit a to-do's title and notes

Available

Set or clear a deadline

Available

Schedule a to-do on a calendar date

Available

Complete, cancel, or reopen a to-do

Available

Create and edit projects, areas, and tags

Available

Built-in list queries and project/area filters

Available

Moves between supported lists, projects, and areas

Available

Delete an individual task to Trash

Available with Trash permission

Edit checklist steps inside a task

Not available

Edit section headings inside a project

Not available

Create or change repeating schedules

Not available

This release does not cover every Things operation. Some missing actions have public Things APIs and remain implementation work; others have no supported interface. The capability reference explains field limits, search behavior, and unavailable features. Tools return their current implementation status through things_capabilities.

Requirements

  • A Mac with Things 3 installed and running. Native checks used Things 3.23.3 and 3.23.4.

  • A client that supports the chosen connection. The packaged local route uses Claude Desktop; remote use depends on your ChatGPT account's available plugin and tunnel features.

  • macOS Automation permission to control Things when requested.

  • For remote access, the Mac must remain awake, online, and signed in.

Things and client subscriptions are separate products. This repository does not include Things, a subscription, or a vendor runtime license grant.

Your data and permissions

Task content requested in a conversation is shared with that client and its provider. The bridge does not collect Things Cloud credentials, write to the Things database, or provide a shell tool. No telemetry destination is bundled.

Writes require your local grant. Moving a task to Things’ recoverable Trash requires an additional permission so you can allow editing without allowing deletion. Every mutation checks permission, uses a durable request ID, and verifies the result in Things. Edits also require the current item revision. Uncertain writes are never automatically repeated with a new request ID. These checks reduce duplicate and stale edits; Things automation is not transactional and cannot promise automatic rollback.

Local and remote connections share the same permission store, write lock, and request journal. See Security for the trust boundary and private vulnerability reporting.

Support and contribution

  • For a bug or feature request, open an issue with versions and a synthetic example. Keep task contents and credentials out of reports.

  • To contribute, follow Contributing. Developers can run the tests without Things, provider accounts, or personal configuration.

  • Financial support is optional and does not unlock features.

If Things MCP is useful to you, buy me a coffee.

Things MCP is an independent project. Product names identify compatibility; the project is not affiliated with or endorsed by the named vendors. Released under the MIT License. You may use, modify, and redistribute the code, including commercially, provided you retain its copyright and license notice. The software is provided without warranty. Third-party notices apply to their respective dependencies.

Available Tools

10 tools
things_capabilitiesA
Read-onlyIdempotent

Read the implementation and verification status of every operation family. Unavailable features cannot be invoked.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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?

Annotations already indicate readOnlyHint, idempotentHint, and non-destructive behavior. The description adds a useful behavioral consequence: unavailable features cannot be invoked, which sets the expectation that this tool reveals callable capability status. This complements the annotations without contradicting them.

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 with no filler. The first sentence front-loads the action and scope; the second sentence adds a practical implication. Every word earns its place.

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 zero-parameter, read-only capability tool with an output schema already present, the description is complete. It tells the agent what to expect, warns that unavailable features cannot be invoked, and leaves return structure details to the output schema.

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

Parameters4/5

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

The tool has zero parameters, so the input schema places no burden on the description. The description correctly focuses on the output semantics: implementation and verification status of every operation family. This matches the 0-parameter baseline of 4.

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 ('Read') and names the exact resource ('implementation and verification status of every operation family'). It clearly differentiates this from the sibling tools by focusing on capability/availability rather than individual item operations or health checks.

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 this tool should be used before invoking operations, since unavailable features cannot be invoked. However, it does not explicitly state when to prefer this over things_health or things_request_status, nor does it name any alternatives or exclusions.

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

things_create_itemA
Idempotent

Create a to-do, project, area, or tag. Supply a unique UUID requestId. Creation of all four kinds is native verified. Local write permission is required and disabled by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
notesNo
titleYes
requestIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already mark the tool as idempotent and non-destructive; the description adds valuable behavioral context by requiring a unique UUID requestId and disclosing the local write permission requirement, including that it is disabled by default. 'Native verified' also reassures the agent that no emulation or fallback is needed.

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 short, purposeful sentences with no filler. The main action is front-loaded, followed by the key idempotency requirement and the permission prerequisite.

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?

With an output schema available and annotations covering idempotency and destructiveness, the description supplies the important operational context: supported kinds, unique requestId, and the local write permission requirement. It is sufficient for correct invocation; only minor details like how to enable the permission are omitted.

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 meaning for kind ('to-do, project, area, or tag') and requestId ('unique UUID'), but it says nothing about the required title parameter or the optional notes parameter. This is only partial compensation for the missing 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 opens with a clear verb and resource: 'Create a to-do, project, area, or tag.' It enumerates the exact object kinds the tool supports, which also distinguishes it from sibling tools like things_update_item, things_trash_item, and things_move_item.

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 makes the intended use obvious ('Create...') and adds an important prerequisite: local write permission is required and disabled by default. It does not explicitly name alternatives or state when not to use this tool, but the creation-specific wording gives clear context.

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

things_find_itemsA
Read-onlyIdempotent

Find items by type, title or notes, status, built-in list, or project/area parent. Trash is excluded unless its list is requested. Notes are omitted unless requested. Results are bounded and not a snapshot. Fetch an item before editing.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNotodo
listNo
textNo
limitNo
offsetNo
parentNo
statusNo
includeNotesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/destructive annotations, the description discloses several non-obvious behaviors: trash is excluded unless its list is explicitly requested, notes are omitted unless requested, results are bounded and not a snapshot, and a fresh fetch is needed before editing. This is strong added 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 four tight sentences with no filler. The primary purpose is front-loaded, and each subsequent sentence adds a distinct, useful caveat. Every sentence earns its place.

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 and the annotations already establish the safety profile, the description supplies the critical behavioral caveats an agent needs: filterable dimensions, trash/note handling, bounded results, and the pre-edit fetch requirement. Nothing essential for correct invocation or interpretation is missing.

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 carries the burden of explaining parameters. It effectively maps to parameters: 'type' maps to kind, 'title or notes' to text, 'status' to status, 'built-in list' to list, and 'project/area parent' to parent. It even implies includeNotes. However, it leaves limit, offset, and enum nuances partially implicit, so it is helpful but not exhaustive.

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 opens with a specific verb ('Find') and resource ('items'), and enumerates the main search dimensions: type, text, status, list, and parent. This clearly distinguishes it from sibling tools like things_get_item, things_create_item, and things_update_item, which perform different operations.

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 makes the search/filter use case obvious and adds workflow guidance with 'Fetch an item before editing,' implying this tool is for discovery rather than mutation. However, it does not explicitly name alternatives or state when not to use this tool, so it stops short of full exclusion guidance.

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

things_get_itemA
Read-onlyIdempotent

Read one Things item by kind and stable ID, including its revision for safe editing.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
kindYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safe-read behavior is covered. The description adds useful behavioral context beyond those annotations by disclosing that the response includes the revision, which is important for the editing workflow. No contradiction with 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?

One tight sentence with no filler. The core action and resource are front-loaded, and the revision detail is appended efficiently without repeating schema or annotation 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?

For a simple two-parameter read operation with strong safety annotations and an existing output schema, the description covers the essential workflow: fetch one item by kind and stable id and get its revision for editing. It is slightly short of a 5 because it does not mention not-found/error behavior, but that is a minor gap given the output schema and annotations.

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

Parameters3/5

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

Schema description coverage is 0%, so the description needs to compensate. It does name both parameters ('kind' and 'stable ID') and adds the useful note that the id is stable. However, it does not elaborate on enum values or id format, though the schema itself provides detailed constraints for those.

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 states a specific verb ('Read'), a specific resource ('one Things item'), and the lookup method ('by kind and stable ID'). The phrase 'one item' clearly separates it from sibling search/list tools like things_find_items, and the read action distinguishes it from mutation siblings like things_update_item or things_trash_item.

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 phrase 'including its revision for safe editing' gives clear context: this tool should be used when the agent needs the current revision before performing an edit. It does not explicitly name alternatives or state exclusions, so it falls just short of a 5.

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

things_healthA
Read-onlyIdempotent

Check the local Things connection, timezone, ordinary-write permission, and separate Trash permission.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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?

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description does not need to restate safety. It adds useful behavioral context by specifying exactly which health dimensions are checked, including the separate Trash permission. There is no contradiction with 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 a single sentence that front-loads the action and target, with every clause contributing a distinct check. There is no filler or duplication of schema or annotation 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?

For a zero-parameter, read-only, idempotent health check with an output schema available, the description conveys the full scope of the tool. Nothing essential is missing for an agent to understand what this tool covers.

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

Parameters4/5

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

The tool has zero parameters and the input schema is empty, so there are no parameter semantics for the description to add. The baseline for a no-parameter tool applies.

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 uses the specific verb 'Check' and enumerates a concrete set of health aspects: connection, timezone, ordinary-write permission, and Trash permission. This makes its purpose distinct from siblings like things_find_items or things_trash_item, though it does not explicitly name an alternative.

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 given on when to use this tool instead of things_capabilities or things_request_status, and no prerequisites or exclusions are mentioned. The verb 'Check' implies a diagnostic health check, but the selection logic is left entirely to the agent.

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

things_move_itemA
DestructiveIdempotent

Move a to-do to a project or area, a project to an area, detach a parent, or move a to-do to Inbox, Today, Anytime, or Someday. Projects support Today and Someday. Project Anytime and direct Logbook moves are unavailable. Moving projects can affect descendants. Requires the latest revision and write permission. Does not reorder items, address headings, or restore Trash.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
requestIdYes
destinationYes
expectedRevisionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=true, idempotentHint=true) by disclosing specific behaviors: requires the latest revision and write permission, moving projects can affect descendants, and what it does NOT do (reorder items, address headings, or restore Trash). No contradiction with annotations; it enriches them with concurrency, authorization, and side-effect detail.

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?

Four dense sentences, each earning its place: the first fronts the core action and destinations, the next two state hard constraints, and the last covers requirements and negative scope. No fluff or repetition.

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 complex tool with 4 required params, nested oneOf destinations, and zero schema descriptions, the description fully specifies the move matrix (valid and invalid), side effects, prerequisites, and exclusions. Since an output schema exists, return-value coverage is not needed.

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 schema description coverage at 0%, the description carries the burden and largely delivers: it explains the destination parameter's valid values (project, area, Inbox Today Anytime Someday, detach) and clarifies valid kind/destination combinations. It also gives expectedRevision meaning ('requires the latest revision'). Only requestId semantics are left to the schema/format, a minor 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?

States a specific verb ('Move') with the resource (to-do/project) and enumerates the valid moves: to-do to project/area/list, project to area, detaching a parent. This is concrete and semantically distinct from siblings like things_trash_item (trash), things_schedule_item (scheduling), and things_update_item (updates).

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 context through explicit constraints ('Projects support Today and Someday', 'Project Anytime and direct Logbook moves are unavailable'), which tells an agent what operations are possible. However, it never names alternative tools or states when-not-to-use this tool in favor of a sibling, leaving routing decisions to inference.

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

things_request_statusA
Read-onlyIdempotent

Check the local receipt for a mutation request ID. Pending or unknown means inspect Things before any further write; do not create a new ID as an automatic retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestIdYes

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?

The description adds value beyond the annotations by clarifying that the check is against a 'local receipt,' not a remote system, and by warning that pending/unknown results should halt further writes. This is useful operational guidance that annotations alone do not convey, though it leaves the exact status vocabulary to the output schema.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the core action and then provides the important conditional guidance. Every clause contributes meaningful information with no 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 one-parameter, read-only, idempotent status-check tool with an output schema, the description covers the essential purpose, the key semantic of the parameter, and the critical retry guidance. Nothing necessary for correct invocation is missing.

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 must compensate, and it does by explaining that requestId is a mutation request ID tied to a local receipt. This adds meaning beyond the raw UUID format in the schema, even though it does not detail where the ID comes from.

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 ('Check') and resource ('local receipt for a mutation request ID'), making the tool's purpose immediately clear. It is distinct from sibling tools because it is the only one about verifying the status of a previously issued mutation request rather than performing or querying domain operations.

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 gives clear when-to-use context: check the local receipt before further writes, especially when a request is pending or unknown. It also provides an explicit exclusion—do not automatically create a new ID as a retry—but it does not name alternative sibling tools or state 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.

things_schedule_itemA
DestructiveIdempotent

Schedule a to-do or project on an explicit calendar date in the Mac timezone. Requires its current revision and a unique UUID requestId. Does not set reminders or repeating rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYes
targetYes
requestIdYes
expectedRevisionYes

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?

Annotations already declare readOnly=false, destructiveHint=true, and idempotentHint=true; the description adds useful behavioral context by specifying Mac-timezone interpretation, the need for the current revision, and the fact that reminders and repeating rules are not set. No contradiction with annotations 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?

Three short sentences, front-loaded with the core operation, then preconditions, then behavioral limitations. Every sentence earns its place and there is no redundant or filler content.

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 nested target object, rich annotations, and an output schema, the description covers the core operation, prerequisites, timezone, and non-goals. It is sufficient for correct invocation, though explicitly naming an alternative for reminders or repeating rules would make it more complete.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by mapping all core parameters to concepts: to-do/project maps to target.kind, current revision to expectedRevision, unique UUID to requestId, and explicit calendar date to date. It adds semantic value beyond the raw schema, though it does not detail every nested field.

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?

States a specific verb and resource: 'Schedule a to-do or project on an explicit calendar date in the Mac timezone.' This clearly distinguishes the operation from siblings like move/trash, though it does not explicitly contrast it with things_update_item.

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 prerequisites ('Requires its current revision and a unique UUID requestId') and a limitation ('Does not set reminders or repeating rules'), so an agent has context for when this is appropriate. However, it does not name an alternative tool or give an explicit when-not-to-use condition for scheduling versus updating.

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

things_trash_itemA
DestructiveIdempotent

Move one to-do, including any checklist it contains, to Things Trash on the Mac. Read it and review the target first. Requires the latest revision, a unique request ID, ordinary write permission, and the separate local Trash grant. Does not permanently delete, empty Trash, or delete projects, areas or tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
requestIdYes
expectedRevisionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool as destructive, but the description adds important behavioral nuance: the item is moved to Trash rather than permanently deleted, it includes checklists, and it does not empty Trash or delete projects/areas/tags. It also discloses the separate local Trash grant requirement, going well 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 tight and front-loaded. The main action appears in the first sentence, followed by prerequisite and exclusion details—each sentence adds meaningful information 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 three required parameters, the presence of an output schema, and strong annotations, the description is fully adequate. It covers what the tool does, what it affects, its prerequisites, and its non-effects, so an agent can select and invoke it correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It does: 'latest revision' maps to expectedRevision, 'unique request ID' maps to requestId, and 'one to-do... target' maps to target. It doesn't enumerate all nested target properties, but the schema's const on kind and id pattern fill that 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 uses a specific verb and resource: 'Move one to-do... to Things Trash on the Mac.' It also clarifies scope with 'including any checklist it contains' and what it does not do ('Does not permanently delete, empty Trash, or delete projects, areas or tags'), which distinguishes it from sibling tools like things_move_item.

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 gives clear preconditions: 'Read it and review the target first' and 'Requires the latest revision, a unique request ID, ordinary write permission, and the separate local Trash grant.' It does not explicitly name alternative tools or state when not to use this one, but the context is sufficiently clear.

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

things_update_itemA
DestructiveIdempotent

Edit supported fields, or complete/cancel/reopen a to-do or project. Use the latest revision and a unique UUID requestId. Omitted fields stay unchanged; deadline null clears it. No deletion or arbitrary property editing.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYes
changesYes
requestIdYes
expectedRevisionYes

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?

With annotations already marking this as destructive and idempotent, the description adds meaningful behavioral context: partial updates semantics ('Omitted fields stay unchanged'), the special null-clear behavior for deadlines, and the explicit limitation that deletion and arbitrary property editing are not supported. This is consistent with the annotations rather than contradicting them.

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, front-loaded with the core purpose. Each sentence adds necessary information: what the tool does, how updates behave, and what it explicitly avoids. No wasted words or restatement of schema properties.

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 tool with rich annotations and an output schema, the description covers the important behavioral nuances: revision tracking, requestId uniqueness, partial updates, null clearing, and the no-deletion boundary. The main gap is the incomplete statement of target kinds (area and tag are present in the schema but omitted from the description), plus no explicit mention of behavior on a stale revision, though this is not critical for basic 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?

Schema description coverage is 0%, so the description must compensate. It explains the conceptual roles of requestId and expectedReversion ('unique UUID requestId', 'latest revision'), clarifies the changes object semantics ('Omitted fields stay unchanged; deadline null clears it'), and sets safety boundaries around target. It does not enumerate field names or value formats, but the schema provides those details.

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 identifies the tool as an update operation ('Edit supported fields, or complete/cancel/reopen a to-do or project') and distinguishes it from deletion tools by stating 'No deletion or arbitrary property editing.' However, it under-specifies the supported target kinds: the schema allows todo, project, area, and tag, while the description names only to-do or project for status changes, leaving area/tag update support ambiguous.

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 provides operational guidance ('Use the latest revision and a unique UUID requestId', 'Omitted fields stay unchanged') and a boundary ('No deletion or arbitrary property editing'), but it does not explicitly name alternatives like things_trash_item or things_move_item for other operations. Usage timing is mostly implied by the purpose rather than stated as a clear when-to-use vs alternatives rule.

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. 10 tool updatesv0.83.0
    • First observedthings_capabilities
    • First observedthings_create_item
    • First observedthings_find_items
    • First observedthings_get_item
    • First observedthings_health
    • First observedthings_move_item
    • First observedthings_request_status
    • First observedthings_schedule_item
    • First observedthings_trash_item
    • First observedthings_update_item

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct resource or operation: status/diagnostics (capabilities, health, request_status), retrieval (find_items, get_item), and mutation (create_item, update_item, move_item, trash_item, schedule_item). Even the three status tools are clearly separated by purpose, and the mutators do not overlap.

Naming Consistency4/5

All names share the things_ prefix and snake_case, and most mutators follow a verb_noun pattern (move_item, trash_item, get_item, create_item, update_item, schedule_item). The first three are noun-style status names (capabilities, health, request_status), which is a minor deviation rather than a major inconsistency.

Tool Count5/5

Ten tools is well within the ideal range and each one maps to a distinct operation family needed to drive the Things app. There is no obvious redundancy or scope creep; the count matches the server's purpose.

Completeness3/5

To-dos have a solid lifecycle (create, read, find, update, move, trash, schedule), but projects, areas, and tags that can be created cannot be deleted or trashed, and there are no operations for reminders, repeating rules, or Trash restoration. These are notable gaps an agent could hit when managing the full domain, though core task workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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/mathiswrong/Things-MCP'

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