Things MCP
# Things MCP
A Model Context Protocol (MCP) server for Things 3 integration. Enables Claude Desktop and Claude Code to interact with Things 3 on macOS.
## Features
- Create to-dos and projects with full metadata
- Update existing to-dos and projects
- List items from any Things list (Inbox, Today, Logbook, Trash, etc.)
- Retrieve all projects, areas, and tags
- Navigate to specific items or lists
- Search within Things
- Secure AppleScript execution
- Comprehensive error handling
## Requirements
- macOS with Things 3 installed
- Node.js 18 or later
- Things URL scheme enabled (automatic on first use)
## Installation
### Quick Start with npx (Recommended)
```bash
npx github:hildersantos/things-mcp
```
This will automatically download, build, and start the MCP server.
### Manual Installation
1. Clone this repository:
```bash
git clone https://github.com/hildersantos/things-mcp.git
cd things-mcp
```
2. Install dependencies:
```bash
npm install
```
3. Build the project:
```bash
npm run build
```
4. Start the server:
```bash
npm start
```
## Configuration
### Claude Desktop Setup
1. **Get your Things auth token** (required for update operations):
- Open Things → Settings → General
- Enable Things URLs
- Click Manage → Copy Token
2. **Configure Claude Desktop**:
Open your Claude Desktop configuration file:
```bash
~/Library/Application Support/Claude/claude_desktop_config.json
```
Add the Things MCP server to the `mcpServers` section:
```json
{
"mcpServers": {
"things-mcp": {
"command": "npx",
"args": ["github:hildersantos/things-mcp"],
"env": {
"THINGS_AUTH_TOKEN": "your-token-here"
}
}
}
}
```
Replace `your-token-here` with your actual Things auth token from step 1.
3. **Restart Claude Desktop** to apply the configuration changes.
### Alternative: Local Installation
If you prefer to install locally instead of using npx:
```json
{
"mcpServers": {
"things-mcp": {
"command": "node",
"args": ["/absolute/path/to/things-mcp/dist/index.js"],
"env": {
"THINGS_AUTH_TOKEN": "your-token-here"
}
}
}
}
```
## Usage Examples
### Create a To-Do
```
Create a task "Buy milk" for today with tag "errands" in Things
```
### Create a Simple Project
```
Create a "Website Redesign" project in Things in my Work area
```
### Create a Complex Project
```
Plan a vacation to Japan in Things with research about destinations, booking flights and hotels,
creating a packing list, and planning daily activities
```
### Another Project Example
```
Set up a new employee onboarding project in Things with IT setup tasks, HR paperwork,
training schedule, and first week activities
```
### Update a To-Do
```
Mark task ABC-123 as completed in Things
```
### Add Items to Existing Project
```
Add new tasks to my "Website Redesign" project in Things: create wireframes, design mockups, and user testing
```
### List Tasks
```
Show me all tasks in my Things inbox
```
### View Projects
```
List all my projects in Things
```
### Navigate
```
Open my Today list in Things
```
### Get Task Details
```
Get full details for task TBeaUrcGH1zKoMmS7wwHVD from Things
```
### Search
```
Search for "meeting" in Things
```
### View Completed Tasks
```
Show me my completed tasks from the Things logbook
```
## Available Tools
### Creation Tools
- `things_add_todo` - Create a to-do with all options
- `things_add_project` - Create a project with sections (headings), todos, and hierarchical organization
### Update Tools (requires auth token)
- `things_update_todo` - Update an existing to-do using JSON API for full feature support
- `things_update_project` - Update an existing project using JSON API for full feature support
- `things_add_items_to_project` - Add structured todos and headings to an existing project
### Reading Tools
- `things_get_inbox` - List inbox items
- `things_get_today` - List today's items
- `things_get_upcoming` - List scheduled items
- `things_get_anytime` - List anytime items
- `things_get_someday` - List someday items
- `things_get_logbook` - List completed items
- `things_get_trash` - List trashed items
- `things_get_projects` - List all active projects
- `things_get_areas` - List all areas
- `things_get_tags` - List all tags
- `things_get_project` - List items in a specific project (requires project_id)
- `things_get_area` - List items in a specific area (requires area_id)
- `things_get_list` - Get items from a specific list by name
- `things_get_todo_details` - Get detailed information about a specific to-do
All list tools support an optional `max_results` parameter to limit output.
### Navigation Tools
- `things_show` - Navigate to item or list
## Development
```bash
# Development mode with watch
npm run dev
# Run linter
npm run lint
# Format code
npm run format
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
```
## Troubleshooting
### "Things 3 does not appear to be running"
Make sure Things 3 is installed and has been opened at least once.
### "Authentication failed"
Check that your THINGS_AUTH_TOKEN is correctly set in the MCP configuration.
### AppleScript Permissions
On first run, macOS may ask for permission to control Things. Grant this permission for the MCP to work.
### Performance Issues
Use the `max_results` parameter when listing large collections:
```
Use things_get_projects with max_results 10
```
## License
MIT
## Credits
Built with the [Model Context Protocol SDK](https://github.com/anthropics/mcp).
Things is a trademark of Cultured Code GmbH & Co. KG.TDQS
Scored across 20 tools
Most tools have distinct purposes, but there is some overlap between 'things_get_anytime', 'things_get_someday', 'things_get_today', and 'things_get_upcoming' which could confuse an agent about which to use for time-based queries. The 'things_show' tool is also ambiguous as it navigates rather than retrieves data, potentially overlapping with get tools. However, descriptions help clarify specific contexts like inbox, logbook, or project-specific queries.
All tools follow a consistent 'things_verb_noun' pattern with snake_case throughout, such as 'things_add_todo', 'things_get_project', and 'things_update_todo'. This predictability makes it easy for an agent to parse and understand the tool set without confusion from mixed conventions.
With 20 tools, the count is slightly high but reasonable for a task management domain like Things, covering CRUD operations, queries across different contexts (e.g., inbox, projects, areas), and navigation. It feels comprehensive without being overly bloated, though it could be streamlined by merging some get tools.
The tool set provides complete coverage for the Things domain, including create (add_project, add_todo), read (get_* tools for various contexts), update (update_project, update_todo), and delete (implied via trash). It supports full lifecycle management of todos and projects, with no obvious gaps that would hinder agent workflows.