Things 3 GTD MCP Server
A Model Context Protocol (MCP) server for Things 3 that brings Getting Things Done (GTD) methodology to AI assistants. macOS only.
What it is
This server exposes Things 3 to AI assistants (Claude Desktop, Claude Code, Claude Mobile, ChatGPT, n8n, Cursor, OpenClaw) over MCP. The tools are organized around David Allen's five GTD stages — Capture, Clarify, Organize, Reflect, Engage — so an assistant can help you practice GTD, not just CRUD a task database.
The shift from "database wrapper" to "GTD assistant" reflects a key insight about MCP design: tools should match how agents think about problems, not how the underlying APIs are structured.
Requirements
| Requirement | Notes |
|---|---|
| macOS | Required. The server uses AppleScript and the Things URL scheme — neither work in Linux containers. |
| Things 3 | Installed, with scripting permissions enabled. |
| Python 3.12+ | Modern type hints and f-strings. |
| uv | Recommended package manager. pip works too. |
Installation
pip install things3-mcp-gtd
# or, no install:
uvx things3-mcp-gtd
For a local development install, see docs/DEVELOPERS.md.
Review the Privacy Notice and Terms of Use before running the server.
Configuration
Copy .env.example to .env and set at minimum:
THINGS_AUTH_TOKEN=<paste from Things -> Settings -> General -> Enable Things URLs>
The server reads from environment variables and the .env file via pydantic-settings. All other settings (host, port, debug, auth enforcement) have sensible defaults — see .env.example for the full list.
Alternatively, run the interactive helper:
python scripts/configure_token.py
which writes the token to ~/.things-mcp/config.json.
Quick start
Make sure Things 3 is open, then:
# If installed via pip or uvx
things3-mcp-gtd
# If running from source
uv run server
The server binds to localhost:8009 by default with a single MCP endpoint at /mcp over streamable HTTP.
Connecting an MCP client
Claude Desktop (stdio)
~/Library/Application Support/Claude/claude_desktop_config.json:
If installed via pip:
{
"mcpServers": {
"things3-gtd": {
"command": "things3-mcp-gtd"
}
}
}
If running from source:
{
"mcpServers": {
"things3-gtd": {
"command": "uv",
"args": ["run", "server"]
}
}
}
Claude Desktop / Claude Mobile / ChatGPT (remote HTTPS)
Front the server with an HTTPS tunnel (ngrok, Cloudflare Tunnel, etc.) and point your client at https://<your-tunnel>/mcp. Full walkthrough: docs/agent-access.md.
n8n / OpenClaw / Cursor
See the dedicated guides:
Compatibility deep-dives: n8n + FastMCP, ChatGPT + FastMCP.
Tools
19 GTD-native tools organized by stage:
Capture
| Tool | Purpose |
|---|---|
capture-task |
Quick-capture to Inbox without organizing. |
Clarify
| Tool | Purpose |
|---|---|
process-inbox |
Process the oldest inbox item with GTD decision guidance. |
convert-to-project |
Transform a task into a multi-step project. |
Organize
| Tool | Purpose |
|---|---|
schedule-task |
Create an organized task with context, dates, project, and tags. |
delegate-task |
Mark as Waiting For with a person and follow-up. |
defer-task |
Move to Someday/Maybe or schedule for a future date. |
plan-project |
Create a project with initial tasks atomically. |
modify-task |
Update an existing task or project. |
Reflect
| Tool | Purpose |
|---|---|
daily-review |
Today's tasks, overdue items, and inbox status. |
weekly-review |
Stalled projects, waiting-for items, someday review. |
Engage
| Tool | Purpose |
|---|---|
get-tasks |
Context-first task retrieval (replaces every per-list view tool). |
focus-mode |
Single most important task for the current context. |
complete-task |
Mark done by ID or fuzzy title match. |
Utility
| Tool | Purpose |
|---|---|
search-tasks |
Full-text and filtered search. |
get-projects |
List all projects. |
get-areas |
List all areas of responsibility. |
get-tags |
List all tags. |
show-in-app |
Open a task or project in Things 3. |
get-cache-stats |
Cache performance statistics (debugging). |
GTD context tags
For best results, use consistent GTD tags in Things 3:
Contexts: @computer, @phone, @office, @home, @errands, @anywhere
Energy: high-energy, low-energy
Time: 5min, 15min, 30min, 1hr+
Status: waiting-for
People: @person-name (for agenda items)
Optional: 24/7 remote access
If you want the server reachable from Claude Mobile, ChatGPT, or any agent off your Mac, run it as a macOS LaunchAgent fronted by an HTTPS tunnel. End-to-end walkthrough: docs/agent-access.md. Recovery procedures for the most common operational issue (a hung Apple Event subsystem): docs/runbook-recovery.md.
Development
For setup, architecture, testing, and contributing guidelines, see docs/DEVELOPERS.md.
# CI-safe tests (no Things 3 required)
uv run python -m pytest tests
# Lint and format
uv run ruff check .
uv run ruff format .
This project uses OpenSpec for spec-driven development of significant changes.
Future direction
This is an evolving experiment in GTD-native AI tooling. Potential directions:
- MCP Resources for ambient GTD state (inbox count, stalled projects)
- Smarter context detection based on time, location, and calendar
- Proactive GTD coaching during weekly reviews
- Multi-app GTD — extending the pattern beyond Things 3
Contributions and ideas welcome.
Credits
- Jonathan Lowin — FastMCP
- things.py — Things 3 Python library
- David Allen — GTD methodology
- Cultured Code — Things 3
License
MIT — see LICENSE.
Links
Metadata
Release files for things3-mcp-gtd 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| things3_mcp_gtd-1.0.1.tar.gz | 50.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| things3_mcp_gtd-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 110.2 kB
Release files / things3_mcp_gtd-1.0.1.tar.gz
| Download URL | things3_mcp_gtd-1.0.1.tar.gz |
|---|---|
| Size | 50.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
30664f0725136abaf70836af5d6a90f473b90fa9e4f055275e97c8a90d0be0c4
|
|
BLAKE2b-256 checksum How to use checksums |
b254ba87278b99d66b283917ed86736b2b1d21744ab297bc9c07aa77d4adf113
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 10, 2026.
Transparency logRelease files / things3_mcp_gtd-1.0.1-py3-none-any.whl
| Download URL | things3_mcp_gtd-1.0.1-py3-none-any.whl |
|---|---|
| Size | 59.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a532b6e32607e075d89eb0391a06941a9f451a9c325eddacbaa7dbc7ee004eb0
|
|
BLAKE2b-256 checksum How to use checksums |
304f46aa9c4091f47f421bda4fe50685e4a3ef774a016e5d7846c8043df5384b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 10, 2026.
Transparency log