Skip to main content
Glama

Things MCP Server

Trust Score

A Model Context Protocol (MCP) server that provides seamless integration with the Things productivity app. This server enables AI assistants to create, update, and manage your todos and projects in Things using its comprehensive URL scheme.

Features

  • Full Things URL Scheme Support - Complete implementation of all Things URL commands

  • Create Todos - Add single or multiple todos with rich metadata

  • Create Projects - Build projects with nested todos and organization

  • Update Items - Modify existing todos and projects

  • Smart Scheduling - Support for natural language dates and times

  • Advanced Organization - Tags, areas, headings, and checklist items

  • JSON Operations - Complex batch operations via JSON

  • Search & Navigation - Find and show specific items or lists

  • Proper URL Encoding - Handles special characters and spaces correctly

Related MCP server: Things MCP

Prerequisites

  • macOS - Required for Things app integration

  • Things 3 - The Things app must be installed and running

  • Node.js - Version 16 or higher

  • MCP Client - Such as Claude Desktop app or any MCP-compatible client

Installation

No installation required! Use directly with:

npx things-mcp

Global Installation

npm install -g things-mcp

Configuration

Claude Desktop

Add the server to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Using npx (recommended):

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

Using global installation:

{
  "mcpServers": {
    "things": {
      "command": "things-mcp"
    }
  }
}

Usage

Once configured, you can interact with Things through your MCP client using natural language. Here are some examples:

Creating Todos

"Create a todo to buy groceries for tonight"
"Add a todo 'Call dentist' with a deadline of next Friday"
"Create multiple todos: milk, bread, eggs in my Shopping project"

Creating Projects

"Create a project called 'Website Redesign' in my Work area"
"Make a project 'Vacation Planning' with todos: book flights, reserve hotel, research activities"

Updating Items

"Update my 'Call dentist' todo to be due tomorrow"
"Add notes to my website project about the new color scheme"
"Mark the groceries todo as completed"

Organization

"Show my Today list"
"Search for all todos tagged with 'urgent'"
"Open the Someday list filtered by work tags"

Available Commands

add-todo

Create a new todo with extensive customization options:

  • title/titles - Single title or multiple titles separated by newlines

  • notes - Rich text notes (max 10,000 characters)

  • when - Natural language scheduling (today, tomorrow, evening, specific dates)

  • deadline - Due dates with natural language support

  • tags - Array of tag names for organization

  • checklist-items - Subtasks within the todo

  • list/list-id - Project or area assignment

  • heading/heading-id - Specific heading within projects

  • completed/canceled - Set completion status

  • show-quick-entry - Show quick entry dialog

  • reveal - Navigate to created todo

add-project

Create a new project with full configuration:

  • title - Project name

  • notes - Project description

  • when - Scheduling options

  • deadline - Project due date

  • tags - Organization tags

  • area/area-id - Area assignment

  • to-dos - Array of todo titles to create within project

  • completed/canceled - Project status

  • reveal - Navigate to created project

update

Modify existing todos:

  • id - Todo ID (required)

  • auth-token - Authorization token (required)

  • title - New title

  • notes/prepend-notes/append-notes - Note modifications

  • when - Reschedule

  • deadline - Change due date

  • tags/add-tags - Tag management

  • checklist-items - Modify checklist

  • list/heading - Move to different location

  • completed/canceled - Status changes

  • duplicate - Create copy before updating

update-project

Modify existing projects with similar options to update command.

show

Navigate to specific items or lists:

  • id - Specific item ID or built-in list (inbox, today, anytime, etc.)

  • query - Search by name

  • filter - Filter by tags

Search across all Things data:

  • query - Search terms

json

Advanced batch operations using JSON format for complex project structures.

version

Get Things app and URL scheme version information.

Authorization

Some operations (updates) require an authorization token from Things:

  1. macOS: Things → Settings → General → Enable Things URLs → Manage

  2. iOS: Settings → General → Things URLs

Copy your unique token and use it with update operations.

Getting Item IDs

To update specific items, you need their IDs:

macOS

  • Control-click on todo/project → Share → Copy Link

  • Control-click on list in sidebar → Share → Copy Link

iOS

  • Tap todo/project → toolbar → Share → Copy Link

  • Navigate to list → top right → Share → Copy Link

Error Handling

The server includes comprehensive error handling:

  • Invalid parameters are caught by Zod validation

  • Things URL failures are reported with clear messages

  • Missing authorization tokens are detected

  • Network and system errors are handled gracefully

Examples

Basic Todo Creation

// Creates a simple todo
{
  "title": "Buy milk",
  "when": "today",
  "tags": ["groceries"]
}

Complex Project Creation

// Creates a project with multiple todos and organization
{
  "title": "Plan Birthday Party",
  "area": "Personal",
  "when": "next week",
  "to-dos": [
    "Send invitations",
    "Order cake",
    "Buy decorations",
    "Plan menu"
  ],
  "tags": ["family", "celebration"],
  "reveal": true
}

JSON Batch Operation

// Complex structure with headings and nested todos
{
  "data": JSON.stringify([
    {
      "type": "project",
      "attributes": {
        "title": "Website Redesign",
        "area": "Work",
        "items": [
          {
            "type": "heading",
            "attributes": { "title": "Design Phase" }
          },
          {
            "type": "to-do",
            "attributes": {
              "title": "Create wireframes",
              "when": "today"
            }
          }
        ]
      }
    }
  ])
}

Troubleshooting

Things Not Opening

  • Ensure Things 3 is installed and updated

  • Check that Things URLs are enabled in settings

  • Verify the MCP server is running correctly

Authorization Errors

  • Get your auth token from Things settings

  • Include auth-token parameter for update operations

  • Ensure token is copied correctly without extra spaces

Connection Issues

  • Restart Claude Desktop or your MCP client

  • Check the configuration file syntax

  • Look for errors in client logs

Contributing

Contributions are welcome! Please:

  1. Fork the repository

  2. Create a feature branch

  3. Submit a pull request

License

MIT License - see LICENSE file for details.

Support

  • 🐛 Bug Reports: Open an issue on GitHub

  • 💡 Feature Requests: Open an issue with enhancement label

  • 📚 Documentation: Check the Things URL scheme docs

  • 💬 Questions: Open a discussion on GitHub

Available Tools

8 tools
add-projectD
ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoTitle of area to add to
tagsNoArray of tag names
whenNoWhen to schedule: today, tomorrow, evening, anytime, someday, date string, or date time string
notesNoNotes for the project (max 10,000 chars)
titleYesThe title of the project
revealNoNavigate into the created project
to-dosNoArray of todo titles to create in the project
area-idNoID of area to add to (takes precedence over area)
canceledNoMark as canceled (takes priority over completed)
deadlineNoDeadline date (YYYY-MM-DD format or natural language)
completedNoMark as completed
creation-dateNoISO8601 date time string for creation date
completion-dateNoISO8601 date time string for completion date

TDQS

D1/5.0
Behavior1/5

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

Tool has no description.

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

Conciseness1/5

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

Tool has no description.

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

Completeness1/5

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

Tool has no description.

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?

Tool has no description.

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

Purpose1/5

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

Tool has no description.

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

Usage Guidelines1/5

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

Tool has no description.

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

add-todoD
ParametersJSON Schema
NameRequiredDescriptionDefault
listNoTitle of project or area to add to
tagsNoArray of tag names
whenNoWhen to schedule: today, tomorrow, evening, anytime, someday, date string, or date time string
notesNoNotes for the todo (max 10,000 chars)
titleNoThe title of the todo (ignored if titles is specified)
revealNoNavigate to and show the created todo
titlesNoMultiple todo titles separated by new lines
headingNoTitle of heading within project
list-idNoID of project or area to add to (takes precedence over list)
canceledNoMark as canceled (takes priority over completed)
deadlineNoDeadline date (YYYY-MM-DD format or natural language)
completedNoMark as completed
heading-idNoID of heading within project (takes precedence over heading)
creation-dateNoISO8601 date time string for creation date
use-clipboardNoUse clipboard content
checklist-itemsNoChecklist items to add (max 100)
completion-dateNoISO8601 date time string for completion date
show-quick-entryNoShow quick entry dialog instead of adding

TDQS

D1/5.0
Behavior1/5

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

Tool has no description.

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

Conciseness1/5

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

Tool has no description.

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

Completeness1/5

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

Tool has no description.

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?

Tool has no description.

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

Purpose1/5

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

Tool has no description.

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

Usage Guidelines1/5

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

Tool has no description.

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

jsonD
ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesJSON string containing array of todo and project objects
revealNoNavigate to and show the first created item
auth-tokenNoAuthorization token (required for update operations)

TDQS

D1/5.0
Behavior1/5

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

Tool has no description.

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

Conciseness1/5

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

Tool has no description.

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

Completeness1/5

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

Tool has no description.

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?

Tool has no description.

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

Purpose1/5

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

Tool has no description.

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

Usage Guidelines1/5

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

Tool has no description.

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

showD
ParametersJSON Schema
NameRequiredDescriptionDefault
idNoID of area, project, tag, todo, or built-in list (inbox, today, anytime, upcoming, someday, logbook, tomorrow, deadlines, repeating, all-projects, logged-projects)
queryNoName of area, project, tag, or built-in list to show
filterNoFilter by tag names

TDQS

D1/5.0
Behavior1/5

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

Tool has no description.

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

Conciseness1/5

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

Tool has no description.

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

Completeness1/5

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

Tool has no description.

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?

Tool has no description.

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

Purpose1/5

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

Tool has no description.

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

Usage Guidelines1/5

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

Tool has no description.

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

updateD
ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the todo to update (required)
listNoTitle of project/area to move to
tagsNoReplace all current tags
whenNoWhen to schedule (cannot update repeating todos)
notesNoNew notes (replaces existing, max 10,000 chars)
titleNoNew title (replaces existing)
revealNoNavigate to and show the updated todo
headingNoTitle of heading to move to
list-idNoID of project/area to move to
add-tagsNoAdd these tags to existing ones
canceledNoMark as canceled/incomplete
deadlineNoDeadline date (cannot update repeating todos)
completedNoMark as completed/incomplete
duplicateNoDuplicate before updating
auth-tokenYesThings URL scheme authorization token (required)
heading-idNoID of heading to move to
append-notesNoText to add after existing notes
creation-dateNoISO8601 date time string for creation date
prepend-notesNoText to add before existing notes
checklist-itemsNoReplace all checklist items (max 100)
completion-dateNoISO8601 date time string for completion date
append-checklist-itemsNoAdd checklist items to end
prepend-checklist-itemsNoAdd checklist items to front

TDQS

D1/5.0
Behavior1/5

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

Tool has no description.

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

Conciseness1/5

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

Tool has no description.

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

Completeness1/5

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

Tool has no description.

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?

Tool has no description.

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

Purpose1/5

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

Tool has no description.

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

Usage Guidelines1/5

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

Tool has no description.

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

update-projectD
ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe ID of the project to update (required)
areaNoTitle of area to move to
tagsNoReplace all current tags
whenNoWhen to schedule (cannot update repeating projects)
notesNoNew notes (replaces existing, max 10,000 chars)
titleNoNew title (replaces existing)
revealNoNavigate to and show the updated project
area-idNoID of area to move to
add-tagsNoAdd these tags to existing ones
canceledNoMark as canceled/incomplete
deadlineNoDeadline date (cannot update repeating projects)
completedNoMark as completed/incomplete
duplicateNoDuplicate before updating
auth-tokenYesThings URL scheme authorization token (required)
append-notesNoText to add after existing notes
creation-dateNoISO8601 date time string for creation date
prepend-notesNoText to add before existing notes
completion-dateNoISO8601 date time string for completion date

TDQS

D1/5.0
Behavior1/5

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

Tool has no description.

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

Conciseness1/5

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

Tool has no description.

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

Completeness1/5

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

Tool has no description.

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?

Tool has no description.

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

Purpose1/5

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

Tool has no description.

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

Usage Guidelines1/5

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

Tool has no description.

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

versionD
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

D1/5.0
Behavior1/5

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

Tool has no description.

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

Conciseness1/5

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

Tool has no description.

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

Completeness1/5

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

Tool has no description.

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?

Tool has no description.

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

Purpose1/5

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

Tool has no description.

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

Usage Guidelines1/5

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

Tool has no description.

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. 8 tool updatesv0.1.0
    • First observedadd-project
    • First observedadd-todo
    • First observedjson
    • First observedsearch
    • First observedshow
    • First observedupdate
    • First observedupdate-project
    • First observedversion

TDQS

D1.5/5.0
Disambiguation2/5

Several tools have ambiguous purposes: 'update' could apply to todos or projects, while 'show' and 'search' lack clear targets. 'add-todo' and 'add-project' are distinct, but the vague verbs make selection risky.

Naming Consistency2/5

Naming patterns are inconsistent: some tools follow verb_noun (add-todo, add-project, update-project), but 'update', 'show', 'search' are bare verbs, and 'version' and 'json' are nouns. This mix makes it hard to predict tool names.

Tool Count4/5

With 8 tools, the count is within a reasonable range and not overly heavy or thin. However, the inclusion of utility tools like 'version' and 'json' suggests some bloat relative to the apparent task-management domain.

Completeness2/5

The tool surface lacks essential operations such as delete or remove for todos and projects, and 'update' is too generic to cover specific update scenarios. The 'json' and 'version' tools do not contribute to domain coverage, leaving obvious gaps in lifecycle management.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

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/jimfilippou/things-mcp'

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