development
macOS
documentation
public
integration
What is An MCP server that provides comprehensive integration with Things3 on macOS.?
This server enables AI assistants and other MCP clients to interact with Things3 through 25 specialized tools, offering complete task management capabilities with intelligent error correction and automatic tag creation.
Documentation
Things3 MCP Server
An MCP (Model Context Protocol) server that provides comprehensive integration with Things3 on macOS. This server enables AI assistants and other MCP clients to interact with Things3 through 25 specialized tools, offering complete task management capabilities with intelligent error correction and automatic tag creation.
Features
Complete Things3 Integration: 25 tools covering all aspects of Things3
TODO Management: Create, read, update, delete, complete, and uncomplete tasks
Project & Area Management: Full project lifecycle support with area organization and deletion
Tag System: Hierarchical tag support with creation, deletion, and bulk tag operations
Bulk Operations: Efficiently move or update multiple items at once
Automatic Tag Creation: Tags are automatically created when referenced in TODO/project operations
Error Correction: Automatic fixing of common issues (date conflicts, missing titles)
Logbook Search: Search completed items with date range filtering
Performance Optimized: Connection pooling and AppleScript optimization
* Note on Checklists: When checklistItems are provided, the TODO is created using Things3's URL scheme instead of AppleScript. This approach has some limitations:
Things3 may briefly come to the foreground
The created TODO's ID cannot be directly retrieved, so the server searches for it by title
If multiple TODOs have identical titles, the wrong TODO might be returned
URL scheme support must be enabled in Things3 settings (Settings → General → Enable Things URLs)
todos_update
Update an existing TODO's properties (automatically creates tags if they don't exist).
Parameters:
id: TODO identifier (required)
All parameters from todos_create (optional)
todos_complete
Mark one or more TODOs as complete.
Parameters:
ids: Single ID or array of IDs (required)
todos_uncomplete
Mark one or more TODOs as incomplete.
Parameters:
ids: Single ID or array of IDs (required)
todos_delete
Delete one or more TODOs permanently.
Parameters:
ids: Single ID or array of IDs (required)
Project Tools (6)## projects_list
List projects with optional filtering.
Parameters:
areaId: Filter by area (optional)
includeCompleted: Include completed projects (optional, default: false)
projects_get
Get detailed project information.
Parameters:
id: Project identifier (required)
projects_create
Create a new project (automatically creates tags if they don't exist).
Parameters:
name: Project name (required)
notes: Project description (optional)
areaId: Assign to area (optional)
whenDate: Start date (optional)
deadline: Due date (optional)
tags: Array of tag names (optional)
headings: Array of section headings (optional)
projects_update
Update project properties (automatically creates tags if they don't exist).
Parameters:
id: Project identifier (required)
All parameters from projects_create except headings (optional)
projects_complete
Mark a project as complete.
Parameters:
id: Project identifier (required)
projects_delete
Delete projects completely from Things3.
Parameters:
ids: Single project ID or array of project IDs (required)
Area Tools (3)## areas_list
List all areas.
Parameters:
includeHidden: Include hidden areas (optional, default: false)
areas_create
Create a new area.
Parameters:
name: Area name (required)
areas_delete
Delete areas completely from Things3.
Parameters:
ids: Single area ID or array of area IDs (required)
Tag Tools (5)## tags_list
List all tags with hierarchy information.
Returns: Array of tags with parentTagId for nested tags
tags_create
Create a new tag.
Parameters:
name: Tag name (required)
parentTagId: Parent tag for nesting (optional)
tags_add
Add tags to items (automatically creates tags if they don't exist).
Parameters:
itemIds: Single ID or array of TODO/Project IDs (required)
tags: Array of tag names to add (required)
tags_remove
Remove tags from items.
Parameters:
itemIds: Single ID or array of TODO/Project IDs (required)
tags: Array of tag names to remove (required)
tags_delete
Delete tags completely from Things3.
Parameters:
names: Single tag name or array of tag names (required)
Bulk Tools (2)## bulk_move
Move multiple TODOs to a project or area.
Parameters:
todoIds: Array of TODO IDs (required)
projectId: Target project (optional)
areaId: Target area (optional)
bulk_updateDates
Update dates for multiple TODOs.
Parameters:
todoIds: Array of TODO IDs (required)
whenDate: New scheduled date or null to clear (optional)
deadline: New deadline or null to clear (optional)
Logbook Tool (1)## logbook_search
Search completed items in the logbook.
Parameters:
searchText: Search in titles and notes (optional)
fromDate: Start date for range (optional)
toDate: End date for range (optional)
limit: Maximum results (optional, default: 50)
System Tools (1)## system_launch
Ensure Things3 is running and ready.
Error Correction
The server automatically corrects common issues:
Date Conflicts: Swaps when/deadline if deadline is before scheduled date
Missing Titles: Generates title from notes or uses "Untitled"
Invalid References: Moves items to Inbox if project/area doesn't exist
Tag Names: Cleans special characters that Things3 doesn't support
Usage Examples# With Claude Desktop
Human: Create a new project for the website redesign with tasks for planning, design, and implementation
Claude: I'll create a website redesign project with those tasks for you.
[Creates project and tasks using the Things3 MCP tools]
npm install
# Run in development mode with watch
npm run dev
# Run tests
npm test
# Run integration tests (requires Things3)
npm run test:integration
# Lint code
npm run lint
# Type check
npm run type-check