things3-mcp

things3-mcp

Connects Claude to Things 3 on macOS, allowing to add to-dos and projects, search, open lists, and read Today/Upcoming/Inbox via natural language.

Category
Visit Server

README

things3-mcp

npm version License: MIT

A Model Context Protocol (MCP) server that connects Claude to Things 3 on macOS. Ask Claude to add to-dos and projects, search, open lists, and read your Today/Upcoming/Inbox — all from a Claude conversation.

Unofficial project. Not affiliated with, endorsed by, or supported by Cultured Code. Things 3 is a trademark of Cultured Code GmbH & Co. KG.

How it works

Things 3 doesn't expose a network API, so this server uses two different mechanisms:

  • Writing (add_todo, add_project, update_todo, update_project, search, show) opens Things' URL scheme in the background via open -g things:///.... This requires Things 3 to be running.
  • Reading (list_today, list_upcoming, list_projects, list_inbox, get_todo) queries Things' local SQLite database directly, in read-only mode. The URL scheme has no way to read data back, so this is the only option.

Prerequisites

  • macOS with Things 3 installed and running
  • Node.js 18+
  • To use update_todo / update_project: enable Things URLs in Things → Settings → General → Enable Things URLs and copy the auth token shown there

This server is macOS-only and talks to a local app and a local file — it is not a remote/OAuth-capable MCP server and cannot be hosted or used from another machine.

Installation

Claude Desktop

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

{
  "mcpServers": {
    "things3": {
      "command": "npx",
      "args": ["-y", "@lcajigasm/things3-mcp"],
      "env": {
        "THINGS_AUTH_TOKEN": "your-token-here"
      }
    }
  }
}

Omit THINGS_AUTH_TOKEN if you don't need update_todo / update_project. Restart Claude Desktop afterwards.

Claude Code

claude mcp add things3 --env THINGS_AUTH_TOKEN=your-token-here -- npx -y @lcajigasm/things3-mcp

From source

git clone https://github.com/lcajigasm/things3-mcp.git
cd things3-mcp
npm install
npm run build

Then point Claude Desktop at the built file:

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

Environment variables

Variable Required Description
THINGS_AUTH_TOKEN Only for update_todo / update_project Auth token from Things → Settings → General → Enable Things URls. Never logged or echoed back by this server.
THINGS_DB_PATH No Overrides auto-detection of the database file. Things nests it under a per-install ThingsData-<id> folder, which this server locates automatically — set this only if that detection fails for you.

Available tools

Writing (via URL scheme)

Tool Description
add_todo Create a to-do: title, notes, when (today/tomorrow/evening/someday/date), deadline, tags, checklist items, destination list.
add_project Create a project: title, notes, area, tags, initial to-dos.
update_todo Update a to-do by id. Requires THINGS_AUTH_TOKEN.
update_project Update a project by id. Requires THINGS_AUTH_TOKEN.
search Open Things and search for a term.
show Open a built-in list (Today, Upcoming, Anytime, Someday, Logbook, Inbox) or a specific project/area/to-do by id.

Reading (via local database, read-only)

Tool Description
list_today To-dos scheduled for Today.
list_upcoming To-dos scheduled for a future date or with an upcoming deadline.
list_projects Open (incomplete, non-trashed) projects.
list_inbox Unclassified to-dos in the Inbox.
get_todo Full detail for one to-do by id, including its checklist.

Example prompts

  • "Add a to-do 'Renew passport' with a deadline of 2026-09-01"
  • "Create a project called 'Q3 planning' in my Work area with to-dos for budget, hiring, roadmap"
  • "What's on my plate today?"
  • "What's coming up in the next few weeks?"
  • "Show me everything sitting in my Inbox"
  • "Mark to-do abc-123 as completed"
  • "Open Things and search for 'invoice'"

Limitations

  • macOS + Things 3 only. No Windows/Linux/iOS support, no remote/hosted mode.
  • Writing is fire-and-forget: the URL scheme doesn't return the created item's id, so add_todo/add_project can't tell you the new id directly (use search or list_inbox to find it afterwards).
  • Reading queries Things' internal SQLite schema, which is undocumented and could change in future Things versions.
  • update_todo/update_project need THINGS_AUTH_TOKEN; without it those two tools return an error, everything else still works.

Troubleshooting

"things3-mcp only works on macOS" This server calls open -g things:///... and reads a macOS-only app container path — there's no way around this.

"Could not find the Things 3 database" Make sure Things 3 is installed and has been opened at least once (the database is created on first launch).

"THINGS_AUTH_TOKEN environment variable is required" Only update_todo/update_project need it. Get it from Things → Settings → General → Enable Things URLs, then add it to your MCP config's env block.

Claude doesn't see the Things 3 tools

  • Restart Claude Desktop after editing the config file
  • Validate the JSON in claude_desktop_config.json (a trailing comma will break it)
  • Run npx @lcajigasm/things3-mcp manually in a terminal to check for Node errors

Development

npm install
npm run dev    # watch mode via tsx
npm run build  # compile to dist/

License

MIT — see LICENSE. Not affiliated with Cultured Code.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured