things-mcp

repository·master·Indexed 18 days ago

https://github.com/hald/things-mcp

A Model Context Protocol (MCP) server that enables AI clients like Claude Desktop and Claude Code to interact with the Things 3 task management app on macOS. It provides tools to manage tasks, projects, areas, and tags through natural language, including capabilities for advanced searching, bulk updates, and scheduling using the Things URL scheme.

Tokens
5.1K
Snippets
20
Records
33
Agent score
67%

What's inside things-mcp

  1. Configure Claude Code for Things MCP

    master

    To add the Things MCP server to Claude Code, use the mcp add-json command.

    For the current project:

    claude mcp add-json things '{"command":"uvx","args":["things-mcp"]}'

    Globally (across all projects):

    claude mcp add-json -s user things '{"command":"uvx","args":["things-mcp"]}'
    claude mcp add-json things '{"command":"uvx","args":["things-mcp"]}'
  2. Install Things MCP Server

    master

    The Things MCP server allows Claude to interact with your Things 3 task data.

    Prerequisites

    • macOS: Things 3 is Mac-only.
    • Things 3 Configuration: Open Things 3, go to Settings → General, and ensure "Enable Things URLs" is turned on.
    • uv: Install the Python package manager via Homebrew: brew install uv.
    • MCP Client: Such as Claude Desktop or Claude Code.

    Installation via uvx

    You can run the server directly using uvx in any MCP client configuration:

    uvx things-mcp
    uvx things-mcp
  3. Configure Claude Desktop for Things MCP

    master

    You can install the Things MCP server in Claude Desktop using two methods:

    1. Download the latest .mcpb file from the releases page.
    2. Double-click the file to install.

    Option 2: Manual Configuration

    1. Open Claude Desktop and navigate to Claude → Settings → Developer → Edit Config.
    2. Add the following configuration to your mcpServers object:
    {
      "mcpServers": {
        "things": {
          "command": "uvx",
          "args": ["things-mcp"]
        }
      }
    }
    1. Save the file and restart Claude Desktop.
    {
      "mcpServers": {
        "things": {
          "command": "uvx",
          "args": ["things-mcp"]
        }
      }
    }
  4. Run Things MCP with HTTP Transport

    master

    By default, the server uses stdio transport. To enable remote access via HTTP, set the following environment variables:

    VariableDefaultDescription
    THINGS_MCP_TRANSPORTstdioSet to http to enable HTTP transport
    THINGS_MCP_HOST127.0.0.1HTTP server bind address
    THINGS_MCP_PORT8000HTTP server port

    Example Command

    THINGS_MCP_TRANSPORT=http THINGS_MCP_HOST=0.0.0.0 THINGS_MCP_PORT=8000 uvx things-mcp
    THINGS_MCP_TRANSPORT=http THINGS_MCP_HOST=0.0.0.0 THINGS_MCP_PORT=8000 uvx things-mcp
  5. Format Things items into readable text

    master

    The formatters.py module provides utility functions to convert raw Things item dictionaries (todos, projects, areas, headings, and tags) into human-readable string representations. These formatters are used to present structured data from the Things database in a clear, text-based format suitable for LLM consumption or logging.

    Key formatting behaviors include:

    • Timestamps: Automatically calculates and appends human-readable age (e.g., "3 days ago") for created and modified fields.
    • Hierarchy: Resolves and displays parent relationships such as Projects, Areas, and Headings.
    • Inheritance: For todos, if a task has a specific start date but its parent project is set to Someday, the formatter notes the inheritance.
    • Checklists: Formats checklist items within a todo using for completed and for incomplete items.
  6. Troubleshoot Things MCP Server

    master

    If the server is not working, check the following:

    1. Things 3 Status: Ensure Things 3 is installed and has been opened at least once to create the database.
    2. URL Scheme: Ensure "Enable Things URLs" is turned on in Things → Settings → General.
    3. uvx Path: If Claude Desktop cannot find uvx, install it via Homebrew (brew install uv) or provide the absolute path in your config (find it using which uvx).
  7. Configure Things MCP transport

    master

    The server's transport method and network settings can be configured via environment variables:

    VariableDefaultDescription
    THINGS_MCP_TRANSPORTstdioSet to stdio or http
    THINGS_MCP_HOST127.0.0.1Host address for HTTP transport
    THINGS_MCP_PORT8000Port for HTTP transport
    THINGS_AUTH_TOKENRequired for bulk updatesYour Things authentication token
  8. Available Tools in Things MCP

    master

    The server provides several categories of tools to manage your Things 3 data:

    List Views

    • get-inbox: Get todos from Inbox
    • get-today: Get todos due today
    • get-upcoming: Get upcoming todos
    • get-anytime: Get todos from Anytime list
    • get-someday: Get todos from Someday list (includes tasks in Someday projects)
    • get-logbook: Get completed todos
    • get-trash: Get trashed todos

    Basic Operations

    • get-todos: Get todos (optional project_uuid filter)
    • get-projects: Get all projects
    • get-areas: Get all areas

    Tag Operations

    • get-tags: Get all tags
    • get-tagged-items: Get items with a specific tag
    • get-tag-usage: Report tag usage/unused tags

    Search Operations

    • search-todos: Simple search by title/notes
    • search-advanced: Advanced search with multiple filters

    Time-based Operations

    • get-recent: Get recently created items

    Things URL Scheme Operations (Write/Update)

    • add-todo: Create a new todo
    • add-project: Create a new project
    • add-area: Create a new Area (via AppleScript)
    • update-area: Update an existing Area (via AppleScript)
    • update-todo: Update an existing todo
    • bulk-update-todos: Apply updates to multiple todos
    • update-project: Update an existing project
    • show-item: Show a specific item or list in Things
    • search-items: Search for items in Things
  9. Configure scheduling with 'when' keywords

    master

    When using tools like add-todo, add-project, update-todo, or update-project, the when parameter accepts several formats for scheduling:

    • Keywords: today, tomorrow, evening, anytime, someday.
    • Date: YYYY-MM-DD (e.g., 2024-01-15).
    • DateTime with reminder: YYYY-MM-DD@HH:MM (e.g., 2024-01-15@14:30).
  10. Configure search-advanced parameters

    master

    The search-advanced tool allows for complex filtering of todos. Supported parameters include:

    • status: Filter by incomplete, completed, or canceled.
    • start_date: Filter by start date (YYYY-MM-DD).
    • deadline: Filter by deadline (YYYY-MM-DD).
    • tag: Filter by tag name.
    • area: Filter by area UUID.
    • type: Filter by item type (to-do, project, or heading).
    • last: Filter by creation date using relative strings (e.g., '3d' for last 3 days, '1w' for last week).
  11. Configure update-todo checklist and tags

    master

    The update-todo tool provides granular control over a todo's tags and checklist:

    Tags

    • tags: Replace all existing tags with this list.
    • add_tags: Append new tags to the existing list.

    Checklist

    • checklist_items: Replace the entire checklist with this list.
    • prepend_checklist_items: Add these items to the top of the checklist.
    • append_checklist_items: Add these items to the bottom of the checklist.
  12. Configure bulk-update-todos

    master

    The bulk-update-todos tool applies a single change to a list of todo UUIDs. This requires the Things auth token to be enabled in Things 3 (Settings → General → Enable Things URLs → Manage).

    Required Parameter:

    • ids: A list of todo UUIDs to update.

    Available Operations:

    • list / list_id: Move all todos into a project or area (by title or UUID).
    • tags / add_tags: Replace or append tags on all todos.
    • when: Reschedule all todos (accepts keywords or YYYY-MM-DD).
    • deadline: Set a deadline on all todos (YYYY-MM-DD).
    • heading / heading_id: Move all todos under a heading (by title or UUID).
    • completed / canceled: Mark all todos as completed or canceled.