Things Task Management
STDIOMCP server for interacting with Things app to manage tasks and projects.
MCP server for interacting with Things app to manage tasks and projects.
This Model Context Protocol (MCP) server lets you use Claude Desktop to interact with your task management data in Things app. You can ask Claude to create tasks, analyze projects, help manage priorities, and more.
This server leverages the Things.py library and the Things URL Scheme, with additional reliability features including:
This MCP server unlocks the power of AI for your task management:
There are multiple ways to install and use the Things MCP server:
pip install things-mcp
Or using uv (recommended):
uv pip install things-mcp
After installation, you can run the server directly:
things-mcp
Install uv if you haven't already:
curl -LsSf https://astral.sh/uv/install.sh | sh
Restart your terminal afterwards.
git clone https://github.com/hald/things-mcp cd things-mcp
uv venv uv pip install -r pyproject.toml
Run the configuration tool to set up your Things authentication token:
python configure_token.py
This will guide you through the process of configuring your Things authentication token, which is required for the MCP server to interact with your Things app.
Edit the Claude Desktop configuration file:
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
Add the Things server to the mcpServers key in the configuration file (be sure to update the path to the folder where you installed these files):
{ "mcpServers": { "things": { "command": "uv", "args": [ "--directory", "/ABSOLUTE/PATH/TO/PARENT/FOLDER/things-mcp", "run", "things_server.py" ] } } }
The Things URL scheme requires an authentication token. You can find it in Things → Settings → General.
Option 1: Set via configuration script
python configure_token.py
Option 2: Set via environment variable
export THINGS_AUTH_TOKEN="your-token-here"
Option 3: Manually create config file
mkdir -p ~/.things-mcp echo '{"things_auth_token": "your-token-here"}' > ~/.things-mcp/config.json
Restart the Claude Desktop app to apply the changes.
get-inbox
- Get todos from Inboxget-today
- Get todos due todayget-upcoming
- Get upcoming todosget-anytime
- Get todos from Anytime listget-someday
- Get todos from Someday listget-logbook
- Get completed todosget-trash
- Get trashed todosget-todos
- Get todos, optionally filtered by projectget-projects
- Get all projectsget-areas
- Get all areasget-tags
- Get all tagsget-tagged-items
- Get items with a specific tagsearch-todos
- Simple search by title/notessearch-advanced
- Advanced search with multiple filtersget-recent
- Get recently created itemsadd-todo
- Create a new todo with full parameter supportadd-project
- Create a new project with tags and todosupdate-todo
- Update an existing todoupdate-project
- Update an existing projectdelete-todo
- Delete a todo (moves to trash)delete-project
- Delete a project (moves to trash)show-item
- Show a specific item or list in Thingssearch-items
- Search for items in Thingsproject_uuid
(optional) - Filter todos by projectinclude_items
(optional, default: true) - Include checklist itemsinclude_items
(optional, default: false) - Include contained itemsstatus
- Filter by status (incomplete/completed/canceled)start_date
- Filter by start date (YYYY-MM-DD)deadline
- Filter by deadline (YYYY-MM-DD)tag
- Filter by tagarea
- Filter by area UUIDtype
- Filter by item type (to-do/project/heading)period
- Time period (e.g., '3d', '1w', '2m', '1y')title
- Title of the todonotes
(optional) - Notes for the todowhen
(optional) - When to schedule the todo (today, tomorrow, evening, anytime, someday, or YYYY-MM-DD)deadline
(optional) - Deadline for the todo (YYYY-MM-DD)tags
(optional) - Tags to apply to the todolist_title
or list_id
(optional) - Title or ID of project/area to add toheading
(optional) - Heading to add underchecklist_items
(optional) - Checklist items to addid
- ID of the todo to updatetitle
(optional) - New titlenotes
(optional) - New noteswhen
(optional) - New scheduledeadline
(optional) - New deadlinetags
(optional) - New tagscompleted
(optional) - Mark as completedcanceled
(optional) - Mark as canceledtitle
- Title of the projectnotes
(optional) - Notes for the projectwhen
(optional) - When to schedule the projectdeadline
(optional) - Deadline for the projecttags
(optional) - Tags to apply to the projectarea_title
or area_id
(optional) - Title or ID of area to add totodos
(optional) - Initial todos to create in the projectid
- ID of the project to updatetitle
(optional) - New titlenotes
(optional) - New noteswhen
(optional) - New scheduledeadline
(optional) - New deadlinetags
(optional) - New tagscompleted
(optional) - Mark as completedcanceled
(optional) - Mark as canceledid
- ID of the todo to delete (moves to trash)id
- ID of the project to delete (moves to trash)id
- ID of item to show, or one of: inbox, today, upcoming, anytime, someday, logbookquery
(optional) - Optional query to filter byfilter_tags
(optional) - Optional tags to filter byThe Things MCP server requires an authentication token to interact with the Things app. This token is used to authorize URL scheme commands.
Run the included configuration tool to set up your token:
python configure_token.py
This interactive script will prompt you for your token and save it securely in your local configuration.
This project uses pyproject.toml
to manage dependencies and build configuration. It's built using the Model Context Protocol, which allows Claude to securely access tools and data.
This project provides two different implementation approaches:
Standard MCP Server (things_server.py
) - The original implementation that uses the basic MCP server pattern.
FastMCP Server (things_fast_server.py
) - A modern implementation using the FastMCP pattern for cleaner, more maintainable code with decorator-based tool registration.
# Clone the repository git clone https://github.com/hald/things-mcp cd things-mcp # Set up a virtual environment with development dependencies uv venv uv pip install -e ".[dev]" # Install in development mode with extra dependencies
Use the MCP development server to test changes:
# Test the FastMCP implementation mcp dev things_fast_server.py # Or test the traditional implementation mcp dev things_server.py
python -m build
twine upload dist/*
Requires Python 3.12+.
get-cache-stats
tool~/.things-mcp/logs/things_mcp.log
~/.things-mcp/logs/things_mcp_structured.json
~/.things-mcp/logs/things_mcp_errors.log
The server includes error handling for:
python configure_token.py
to set up your tokenget-cache-stats
toolAll errors are logged and returned with descriptive messages. To review the MCP logs:
# Follow main logs in real-time tail -f ~/.things-mcp/logs/things_mcp.log # Check error logs tail -f ~/.things-mcp/logs/things_mcp_errors.log # View structured logs for analysis cat ~/.things-mcp/logs/things_mcp_structured.json | jq # Claude Desktop MCP logs tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
things_dlq.json
get-cache-stats
tool to check hit rateslogging_config.py