by urbanogardun
Enables AI assistants and MCP clients to manage tasks, projects, areas, and tags in Things3 on macOS via a set of 25 specialized tools, providing automatic tag creation, error correction, and bulk operations.
The server offers a full‑featured integration layer for the Things3 task‑management app on macOS. It exposes 25 tools that let MCP clients create, read, update, and delete TODOs, projects, areas, and tags, as well as perform bulk moves, date updates, and logbook searches.
npx (no installation needed) or install globally via npm install -g things3-mcp.THINGS3_AUTH_TOKEN environment variable (found in Things3 Settings → General → Enable Things URLs → Manage).mcpServers section:{
"mcpServers": {
"things3": {
"command": "npx",
"args": ["things3-mcp@latest"],
"env": { "THINGS3_AUTH_TOKEN": "<YOUR_TOKEN>" }
}
}
}
todos_create, projects_list) with the required parameters in JSON format.Q: Do I need to install the Things3 app? A: Yes, the server interacts with the native Things3 application via AppleScript and URL schemes, so the app must be installed and running.
Q: Which macOS version is required? A: Any macOS version that supports Things3 (generally macOS 10.13+).
Q: How are checklist items handled? A: Checklist creation uses Things3’s URL scheme because AppleScript lacks support. This may briefly bring Things3 to the foreground and the created TODO’s ID is resolved by searching its title.
Q: What if a tag or project referenced does not exist? A: The server automatically creates missing tags and moves items to the Inbox if a referenced project or area is unavailable.
Q: Can I recover deleted items? A: No. Deletions are permanent through the API.
Q: How do I grant AppleScript permissions? A: In System Settings → Privacy & Security → Automation, allow your terminal or IDE to control Things3.
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.
You can use the server without any installation:
{
"mcpServers": {
"things3": {
"command": "npx",
"args": ["things3-mcp@latest"],
"env": {
"THINGS3_AUTH_TOKEN": "your_auth_token_here"
}
}
}
}
npm install -g things3-mcp
Then add to your MCP client configuration:
{
"mcpServers": {
"things3": {
"command": "things3-mcp",
"env": {
"THINGS3_AUTH_TOKEN": "your_auth_token_here"
}
}
}
}
# Clone the repository
git clone https://github.com/urbanogardun/things3-mcp.git
cd things3-mcp
# Install dependencies
npm install
# Build the project
npm run build
For update operations (modify, complete, delete), you need to set your Things3 authorization token:
export THINGS3_AUTH_TOKEN="your_auth_token_here"
To find your authorization token:
You can also create a .env file (see .env.example).
Open Claude Desktop configuration:
~/Library/Application Support/Claude/claude_desktop_config.jsonAdd the Things3 MCP server using one of these methods:
Method 1: Using npx (easiest, no installation required)
{
"mcpServers": {
"things3": {
"command": "npx",
"args": ["things3-mcp@latest"],
"env": {
"THINGS3_AUTH_TOKEN": "your_auth_token_here"
}
}
}
}
Method 2: Global npm install
{
"mcpServers": {
"things3": {
"command": "things3-mcp",
"env": {
"THINGS3_AUTH_TOKEN": "your_auth_token_here"
}
}
}
Method 3: Local installation
{
"mcpServers": {
"things3": {
"command": "node",
"args": ["/absolute/path/to/things3-mcp/dist/index.js"]
}
}
}
Restart Claude Desktop
Use any of the methods above, adapting the configuration to your MCP client's format.
todos_listList TODOs with flexible filtering options.
Parameters:
filter: "inbox" | "today" | "upcoming" | "anytime" | "someday" | "logbook" (optional)searchText: Search within titles and notes (optional)Example:
{
"filter": "today",
"searchText": "meeting"
}
todos_getGet detailed information about a specific TODO.
Parameters:
id: The TODO's unique identifier (required)todos_createCreate a new TODO with full property support (automatically creates tags if they don't exist).
Parameters:
title: Task title (required)notes: Additional notes (optional)whenDate: ISO 8601 date string for scheduling (optional)deadline: ISO 8601 date string for due date (optional)tags: Array of tag names (optional)checklistItems: Array of checklist item titles (optional) *projectId: Assign to project (optional)areaId: Assign to area (optional)heading: Title of heading within project to add to (optional)Example:
{
"title": "Review Q4 Report",
"notes": "Focus on revenue metrics",
"whenDate": "2024-12-15T09:00:00Z",
"deadline": "2024-12-20T17:00:00Z",
"tags": ["work", "urgent"],
"checklistItems": ["Review revenue", "Check expenses", "Update forecast"],
"projectId": "project-id-here"
}
* Note on Checklists: When checklistItems are provided, the TODO is created using Things3's URL scheme instead of AppleScript. This approach has some limitations:
todos_updateUpdate an existing TODO's properties (automatically creates tags if they don't exist).
Parameters:
id: TODO identifier (required)todos_create (optional)todos_completeMark one or more TODOs as complete.
Parameters:
ids: Single ID or array of IDs (required)todos_uncompleteMark one or more TODOs as incomplete.
Parameters:
ids: Single ID or array of IDs (required)todos_deleteDelete one or more TODOs permanently.
Parameters:
ids: Single ID or array of IDs (required)projects_listList projects with optional filtering.
Parameters:
areaId: Filter by area (optional)includeCompleted: Include completed projects (optional, default: false)projects_getGet detailed project information.
Parameters:
id: Project identifier (required)projects_createCreate 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_updateUpdate project properties (automatically creates tags if they don't exist).
Parameters:
id: Project identifier (required)projects_create except headings (optional)projects_completeMark a project as complete.
Parameters:
id: Project identifier (required)projects_deleteDelete projects completely from Things3.
Parameters:
ids: Single project ID or array of project IDs (required)areas_listList all areas.
Parameters:
includeHidden: Include hidden areas (optional, default: false)areas_createCreate a new area.
Parameters:
name: Area name (required)areas_deleteDelete areas completely from Things3.
Parameters:
ids: Single area ID or array of area IDs (required)tags_listList all tags with hierarchy information.
Returns: Array of tags with parentTagId for nested tags
tags_createCreate a new tag.
Parameters:
name: Tag name (required)parentTagId: Parent tag for nesting (optional)tags_addAdd 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_removeRemove tags from items.
Parameters:
itemIds: Single ID or array of TODO/Project IDs (required)tags: Array of tag names to remove (required)tags_deleteDelete tags completely from Things3.
Parameters:
names: Single tag name or array of tag names (required)bulk_moveMove multiple TODOs to a project or area.
Parameters:
todoIds: Array of TODO IDs (required)projectId: Target project (optional)areaId: Target area (optional)bulk_updateDatesUpdate 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_searchSearch 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_launchEnsure Things3 is running and ready.
The server automatically corrects common issues:
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]
Create a TODO:
{
"tool": "todos_create",
"parameters": {
"title": "Prepare presentation",
"notes": "Include Q4 metrics and projections",
"whenDate": "2024-12-10T14:00:00Z",
"tags": ["work", "presentation"]
}
}
List today's tasks:
{
"tool": "todos_list",
"parameters": {
"filter": "today"
}
}
# Install dependencies
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
things3-mcp/
├── src/
│ ├── index.ts # Entry point
│ ├── server.ts # MCP server implementation
│ ├── config.ts # Configuration management
│ ├── tools/ # Tool implementations
│ │ ├── todos.ts # TODO operations
│ │ ├── projects.ts # Project operations
│ │ ├── areas.ts # Area operations
│ │ ├── tags.ts # Tag operations
│ │ ├── bulk.ts # Bulk operations
│ │ ├── logbook.ts # Logbook search
│ │ └── system.ts # System utilities
│ ├── templates/ # AppleScript templates
│ ├── utils/ # Utility functions
│ │ ├── applescript.ts # AppleScript bridge
│ │ ├── cache-manager.ts # Caching system
│ │ ├── error-correction.ts # Error correction
│ │ └── date-handler.ts # Date formatting
│ └── types/ # TypeScript definitions
├── tests/
│ ├── unit/ # Unit tests
│ └── integration/ # Integration tests
└── dist/ # Compiled JavaScript
osascript -e 'tell application "Things3" to return name of first to do'
npm run buildnode dist/index.jsContributions are welcome! Please follow conventional commit format and ensure all tests pass before submitting pull requests.
Please log in to share your review and rating for this MCP.
{
"mcpServers": {
"things3": {
"command": "npx",
"args": [
"things3-mcp@latest"
],
"env": {
"THINGS3_AUTH_TOKEN": "<YOUR_AUTH_TOKEN>"
}
}
}
}claude mcp add things3 npx things3-mcp@latestExplore related MCPs that share similar capabilities and solve comparable challenges
by activepieces
A self‑hosted, open‑source platform that provides a no‑code builder for creating, versioning, and running AI‑driven automation workflows. Pieces are TypeScript‑based plugins that become MCP servers, allowing direct consumption by large language models.
by Skyvern-AI
Automates browser‑based workflows by leveraging large language models and computer‑vision techniques, turning natural‑language prompts into fully functional web interactions without writing custom scripts.
by ahujasid
Enables Claude AI to control Blender for prompt‑assisted 3D modeling, scene creation, and manipulation via a socket‑based Model Context Protocol server.
by PipedreamHQ
Connect APIs quickly with a free, hosted integration platform that enables event‑driven automations across 1,000+ services and supports custom code in Node.js, Python, Go, or Bash.
by elie222
Organizes email inbox, drafts replies in the user's tone, tracks follow‑ups, and provides analytics to achieve inbox zero quickly.
by grab
Enables Cursor AI to read and programmatically modify Figma designs through a Model Context Protocol integration.
by CursorTouch
Enables AI agents to control the Windows operating system, performing file navigation, application launching, UI interaction, QA testing, and other automation tasks through a lightweight server.
by ahujasid
Enables Claude AI to control Ableton Live in real time, allowing AI‑driven creation, editing, and playback of tracks, clips, instruments, and effects through a socket‑based server.
by leonardsellem
Provides tools and resources to enable AI assistants to manage and execute n8n workflows via natural language commands.