MCP Servers

A collection of Model Context Protocol servers, templates, tools and more.

things-mcp

Created 2/13/2026
Updated about 9 hours ago
Repository documentation and setup instructions

Things App MCP

An MCP (Model Context Protocol) server for Things 3 on macOS. Enables AI assistants like Claude to create, read, update, and manage your tasks directly in Things.

Features

Write Operations (Things URL Scheme)

| Tool | Description | |------|-------------| | add-todo | Create a new to-do with title, notes, dates, tags, checklist, project/area assignment | | add-project | Create a new project with to-dos, notes, dates, tags, area assignment | | update-todo | Update an existing to-do (requires auth-token) | | update-project | Update an existing project (requires auth-token) | | show | Navigate to a list, project, area, tag, or specific to-do | | search | Open the Things search screen | | add-json | Create complex structures via the Things JSON command |

Read Operations (AppleScript/JXA)

| Tool | Description | |------|-------------| | get-todos | Get to-dos from a list (Inbox, Today, etc.), project, area, or by tag | | get-todo-by-id | Get a specific to-do by its ID | | get-projects | Get all projects | | get-project-by-id | Get a specific project by its ID | | get-areas | Get all areas | | get-tags | Get all tags | | search-todos | Search to-dos by title/notes content | | get-recent-todos | Get recently modified to-dos |

Requirements

  • macOS (required for AppleScript/JXA and open command)
  • Things 3 installed
  • Node.js >= 18
  • Things URL Scheme enabled (Things > Settings > General > Enable Things URLs)

Installation

# Clone and build
git clone <repository-url>
cd things-app-mcp
npm install
npm run build

Or install globally:

npm install -g things-app-mcp

Configuration

Claude Desktop

Add to your Claude Desktop configuration file:

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

{
  "mcpServers": {
    "things": {
      "command": "node",
      "args": ["/path/to/things-app-mcp/dist/index.js"]
    }
  }
}

Cursor

Add to your Cursor MCP settings (.cursor/mcp.json):

{
  "mcpServers": {
    "things": {
      "command": "node",
      "args": ["/path/to/things-app-mcp/dist/index.js"]
    }
  }
}

Gemini CLI

Run the following command to register the MCP server:

gemini mcp add things node /path/to/things-app-mcp/dist/index.js

Auth Token Configuration

To use update-todo and update-project, you need your Things auth-token.

Option 1: Environment Variable (Recommended)

Set the THINGS_AUTH_TOKEN environment variable in your MCP client configuration. This avoids needing to pass the token with every request.

Claude Desktop:

{
  "mcpServers": {
    "things": {
      "command": "node",
      "args": ["/path/to/things-app-mcp/dist/index.js"],
      "env": {
        "THINGS_AUTH_TOKEN": "your-token-here"
      }
    }
  }
}

Gemini CLI: Set the environment variable in your shell configuration or pass it when running:

export THINGS_AUTH_TOKEN="your-token-here"

Option 2: Parameter

If the environment variable is not set, you must pass the token as the authToken parameter when calling update tools:

  1. Open Things on Mac
  2. Go to Things > Settings > General > Enable Things URLs > Manage
  3. Copy your authorization token
  4. Pass it as the authToken parameter when calling update tools

Usage Examples

Adding a To-Do

"Add a to-do called 'Buy groceries' scheduled for today with tags 'Errand'"

The AI will call add-todo with:

{
  "title": "Buy groceries",
  "when": "today",
  "tags": "Errand"
}

Creating a Project with To-Dos

"Create a project called 'Launch Website' in the Work area with to-dos: Design mockups, Build frontend, Deploy"

The AI will call add-project with:

{
  "title": "Launch Website",
  "area": "Work",
  "todos": "Design mockups\nBuild frontend\nDeploy"
}

Complex Project via JSON

"Create a vacation planning project with headings for Travel, Accommodation, and Activities"

The AI will call add-json with structured JSON data containing nested headings and to-dos.

Reading To-Dos

"What's on my Today list?"

The AI will call get-todos with { "list": "Today" } and return the structured data.

Updating a To-Do

"Mark the 'Buy groceries' todo as complete"

The AI will first search/get the to-do to find its ID, then call update-todo with the auth-token.

Things URL Scheme Reference

This MCP server implements the full Things URL Scheme v2:

Date Formats

| Format | Example | Description | |--------|---------|-------------| | Named | today, tomorrow, evening, anytime, someday | Built-in schedule options | | Date | 2026-03-15 | Specific date | | Date + Time | 2026-03-15@14:00 | Date with reminder | | Natural language | next friday, in 3 days | English natural language (parsed by Things) |

Built-in List IDs (for show tool)

inbox, today, anytime, upcoming, someday, logbook, tomorrow, deadlines, repeating, all-projects, logged-projects

JSON Command Object Types

| Type | Description | |------|-------------| | to-do | A task with title, notes, when, deadline, tags, checklist-items | | project | A project with title, notes, items (to-dos and headings) | | heading | A section heading within a project | | checklist-item | A checklist item within a to-do |

Architecture

things-app-mcp/
  src/
    index.ts          # MCP server entry point with all tool registrations
    things-url.ts     # Things URL scheme builder (URL construction)
    applescript.ts    # AppleScript/JXA executor (read operations)
  dist/               # Compiled JavaScript output
  package.json
  tsconfig.json

How It Works

  • Write operations construct things:/// URLs and open them via macOS open command. Things processes the URL and creates/updates items accordingly.
  • Read operations use JXA (JavaScript for Automation) scripts executed via osascript to query the Things database directly and return structured JSON data.

Development

# Install dependencies
npm install

# Build
npm run build

# Watch mode
npm run dev

# Run directly
npm start

License

MIT

Quick Setup
Installation guide for this server

Install Package (if required)

npx @modelcontextprotocol/server-things-mcp

Cursor configuration (mcp.json)

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