Lets you use Claude Desktop to interact with your task management data in Things app, enabling you to create tasks, analyze projects, manage priorities, and implement productivity workflows through natural language.
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.
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" ] } } }
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 itemsproject_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 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+.
The server includes error handling for:
python configure_token.py
to set up your tokenAll errors are logged and returned with descriptive messages. To review the MCP logs from Claude Desktop, run this in the Terminal:
# Follow logs in real-time tail -n 20 -f ~/Library/Logs/Claude/mcp*.log
Discover shared experiences
Shared threads will appear here, showcasing real-world applications and insights from the community. Check back soon for updates!