Skip to content

Integrating Things App with Claude Desktop via MCP

I use Things app for task management, and I wanted to integrate it with Claude Desktop using the Model Context Protocol (MCP). This lets Claude read my to-dos, create new tasks, update existing ones, and organize my workflow. Here’s how I set it up.

What things-mcp Can Do

things-mcp is an MCP server that provides Claude with tools to interact with Things app data. Once configured, Claude can:

  • List to-dos (optionally filtered by area/project)
  • Create new tasks with title, notes, when, deadline
  • Update existing tasks
  • Mark tasks as complete
  • List projects and areas
  • Search for tasks by title or notes

Prerequisites

Before starting, I made sure I had:

  • macOS (Things is Mac/iOS only)
  • Things app installed and configured
  • Claude Desktop installed
  • uv or uvx installed (Python package manager)

Step 1: Install uv

I installed uv using Homebrew:

install-uv.sh
brew install uv
# Verify installation
uv --version

Step 2: Configure Claude Desktop

I navigated to Claude Desktop’s config directory:

check-config.sh
cd ~/Library/Application\ Support/Claude/
# Create config if it doesn't exist
touch claude_desktop_config.json

Then I edited claude_desktop_config.json with this configuration:

claude_desktop_config.json
{
"mcpServers": {
"things": {
"command": "uvx",
"args": [
"--python",
"3.11",
"things-mcp"
]
}
}
}

Step 3: The Critical Permission Step

This is where I ran into issues. macOS requires explicit permission for apps to access Things data.

I tried two approaches:

Option 1: Grant Reminders Access (More Secure)

  1. Opened System Settings > Privacy & Security > Reminders
  2. Enabled access for my terminal application
  3. Restarted Terminal and Claude Desktop

Option 2: Grant Full Disk Access (Broader)

  1. Opened System Settings > Privacy & Security > Full Disk Access
  2. Added Terminal.app (or iTerm if using that)
  3. Restarted Terminal and Claude Desktop

Step 4: The Key Fix - Use uv tool install

The uvx approach worked, but I kept getting permission prompts. The solution is to use uv tool install instead:

install-things-mcp.sh
# Install permanently
uv tool install things-mcp --python 3.11

Then I updated my config to use the installed version:

claude_desktop_config.json
{
"mcpServers": {
"things": {
"command": "things-mcp",
"args": []
}
}
}

This creates a permanent installation that retains macOS permissions across Claude Desktop restarts.

Step 5: Restart and Verify

I completely quit Claude Desktop (Cmd+Q), then reopened it. To verify the setup, I asked Claude:

Can you show me my Things to-dos?

Example Usage

Here are some prompts I use regularly:

View tasks:

Show me all my to-dos in Things
What tasks do I have due today?

Create tasks:

Create a new to-do in Things: "Review pull request" with deadline tomorrow
Add a task "Buy groceries" to my Things inbox

Update tasks:

Mark "Review pull request" as complete in Things
Move "Buy groceries" to my Errands project

Search:

Find all tasks in Things containing "meeting"
Show me overdue tasks in Things

Troubleshooting

”No tasks found” or Empty Results

If I got empty results, I checked:

  1. Things app is running: open -a Things
  2. Permissions are granted in System Settings > Privacy & Security > Reminders
  3. Things Cloud sync is enabled in Things > Settings > Things Cloud

Claude Says “I don’t have access to Things”

I verified the config file syntax:

verify-config.sh
cat ~/Library/Application\ Support/Claude/claude_desktop_config.json | python -m json.tool

Then I checked if things-mcp works standalone:

check-things-mcp.sh
things-mcp --version

Permission Denied Errors

The fix was granting Full Disk Access to Terminal:

System Settings > Privacy & Security > Full Disk Access > Add Terminal.app

Slow Performance

Using uv tool install instead of uvx gave me better performance since it avoids creating ephemeral processes each time.

How It Works

The architecture is straightforward:

Claude Desktop
|
MCP Protocol
|
things-mcp server (Python)
|
Things App Data (via Apple Reminders/Things URL scheme)
|
My Tasks

Security Considerations

When granting access, Claude can read all my tasks, create new ones, and modify existing ones. I’m careful about:

  • Not creating tasks with sensitive information if I’m concerned
  • Periodically reviewing my MCP server configurations
  • Using the minimum required permissions (Reminders access vs Full Disk Access)

Summary

The setup process:

  1. Install uv (Python package manager)
  2. Configure things-mcp in claude_desktop_config.json
  3. Grant macOS permissions (Reminders or Full Disk Access)
  4. Use uv tool install to avoid repeated permission prompts
  5. Restart Claude Desktop to load the MCP server

The key insight: using uv tool install instead of uvx creates a permanent installation that retains macOS permissions across restarts. Once configured, I can naturally interact with my Things tasks through Claude, making task management part of my AI-assisted workflow.

Final Words + More Resources

My intention with this article was to help others share my knowledge and experience. If you want to contact me, you can contact by email: Email me

Here are also the most important links from this article along with some further resources that will help you in this scope:

Oh, and if you found these resources useful, don’t forget to support me by starring the repo on GitHub!

Comments