loading…
Search for a command to run...
loading…
An MCP server for Things 3 on macOS that enables AI assistants to create, read, update, and manage tasks, projects, and areas. It utilizes the Things URL scheme
An MCP server for Things 3 on macOS that enables AI assistants to create, read, update, and manage tasks, projects, and areas. It utilizes the Things URL scheme for write operations and AppleScript for querying data directly from the application.
An MCP (Model Context Protocol) server for Things 3 on macOS. Enables AI assistants like Claude to create, read, update, and manage your tasks directly in Things.
| Tool | Description |
|---|---|
add-todo |
Create a new to-do with title, notes, dates, tags, checklist, project/area assignment |
add-project |
Create a new project with to-dos, notes, dates, tags, area assignment |
update-todo |
Update an existing to-do (requires auth-token) |
update-project |
Update an existing project (requires auth-token) |
show |
Navigate to a list, project, area, tag, or specific to-do |
search |
Open the Things search screen |
add-json |
Create complex structures via the Things JSON command |
| Tool | Description |
|---|---|
get-todos |
Get to-dos from a list (Inbox, Today, etc.), project, area, or by tag |
get-todo-by-id |
Get a specific to-do by its ID |
get-projects |
Get all projects |
get-project-by-id |
Get a specific project by its ID |
get-areas |
Get all areas |
get-tags |
Get all tags |
search-todos |
Search to-dos by title/notes content |
get-recent-todos |
Get recently modified to-dos |
| Tool | Description |
|---|---|
reschedule-distant-todos |
Move distant-deadline to-dos out of Today. Finds items whose deadline is far away and reschedules their start date to a few days before the deadline, keeping your Today list focused on what matters now. Requires auth-token. |
Key behaviors of reschedule-distant-todos:
activationDate = today) are always preserveddaysThreshold (default: 7) controls how many days away a deadline must be to qualifybufferDays (default: 3) controls how many days before the deadline to set the new start datedryRun mode to preview changes without applying themdestructiveHint: true so MCP clients can prompt for user confirmationopen command)# Clone and build
git clone <repository-url>
cd things-app-mcp
npm install
npm run build
Or install globally:
npm install -g things-app-mcp
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"things": {
"command": "npx",
"args": ["-y", "things-app-mcp@latest"]
}
}
}
Add to your Cursor MCP settings (.cursor/mcp.json):
{
"mcpServers": {
"things": {
"command": "npx",
"args": ["-y", "things-app-mcp@latest"]
}
}
}
Add to ~/.codex/config.toml:
[mcp_servers.things]
command = "npx"
args = ["-y", "things-app-mcp@latest"]
startup_timeout_sec = 20
tool_timeout_sec = 120
Run the following command to register the MCP server:
gemini mcp add things npx -y things-app-mcp@latest
To use update-todo, update-project, and reschedule-distant-todos, you need your Things auth-token.
Option 1: Environment Variable (Recommended)
Set the THINGS_AUTH_TOKEN environment variable in your MCP client configuration. This avoids needing to pass the token with every request.
Claude Desktop:
{
"mcpServers": {
"things": {
"command": "npx",
"args": ["-y", "things-app-mcp@latest"],
"env": {
"THINGS_AUTH_TOKEN": "your-token-here"
}
}
}
}
Codex (~/.codex/config.toml):
[mcp_servers.things]
command = "npx"
args = ["-y", "things-app-mcp@latest"]
startup_timeout_sec = 20
tool_timeout_sec = 120
[mcp_servers.things.env]
THINGS_AUTH_TOKEN = "your-token-here"
Gemini CLI: Set the environment variable in your shell configuration or pass it when running:
export THINGS_AUTH_TOKEN="your-token-here"
Option 2: Parameter
If the environment variable is not set, you must pass the token as the authToken parameter when calling update tools:
authToken parameter when calling update tools"Add a to-do called 'Buy groceries' scheduled for today with tags 'Errand'"
The AI will call add-todo with:
{
"title": "Buy groceries",
"when": "today",
"tags": "Errand"
}
"Create a project called 'Launch Website' in the Work area with to-dos: Design mockups, Build frontend, Deploy"
The AI will call add-project with:
{
"title": "Launch Website",
"area": "Work",
"todos": "Design mockups\nBuild frontend\nDeploy"
}
"Create a vacation planning project with headings for Travel, Accommodation, and Activities"
The AI will call add-json with structured JSON data containing nested headings and to-dos.
"What's on my Today list?"
The AI will call get-todos with { "list": "Today" } and return the structured data.
"Mark the 'Buy groceries' todo as complete"
The AI will first search/get the to-do to find its ID, then call update-todo with the auth-token.
"My Today list is too cluttered. Move everything that isn't due soon to later."
The AI will call reschedule-distant-todos with { "dryRun": true } first to preview, then apply:
{
"daysThreshold": 7,
"bufferDays": 3,
"dryRun": false
}
Items with deadlines 7+ days away will be rescheduled to 3 days before their deadline. Items you explicitly set to today are always preserved.
"Show me which todos would be moved out of Today without actually changing anything"
The AI will call reschedule-distant-todos with { "dryRun": true } and return a list of what would change.
This MCP server implements the full Things URL Scheme v2:
| Format | Example | Description |
|---|---|---|
| Named | today, tomorrow, evening, anytime, someday |
Built-in schedule options |
| Date | 2026-03-15 |
Specific date |
| Date + Time | 2026-03-15@14:00 |
Date with reminder |
| Natural language | next friday, in 3 days |
English natural language (parsed by Things) |
show tool)inbox, today, anytime, upcoming, someday, logbook, tomorrow, deadlines, repeating, all-projects, logged-projects
| Type | Description |
|---|---|
to-do |
A task with title, notes, when, deadline, tags, checklist-items |
project |
A project with title, notes, items (to-dos and headings) |
heading |
A section heading within a project |
checklist-item |
A checklist item within a to-do |
things-app-mcp/
src/
index.ts # MCP server entry point with all tool registrations
things-url.ts # Things URL scheme builder (URL construction)
applescript.ts # AppleScript/JXA executor (read operations)
scripts/
test-client.js # Basic MCP server connectivity test
test-all-tools.js # Integration tests for all 16 tools
test-unit.js # Unit tests for logic, URL builders, and edge cases (122 tests)
dist/ # Compiled JavaScript output
package.json
tsconfig.json
things:/// URLs and open them via macOS open command. Things processes the URL and creates/updates items accordingly.osascript to query the Things database directly and return structured JSON data.# Install dependencies
npm install
# Build
npm run build
# Watch mode
npm run dev
# Run directly
npm start
See TESTING.md for full details.
# Unit tests (date utilities, URL builders, reschedule logic, edge cases)
# Runs anywhere - no macOS or Things 3 required
node scripts/test-unit.js
# Integration tests (all 16 tools via MCP protocol)
# Requires macOS + Things 3 for full coverage
npm run test:tools
# With write operations enabled
THINGS_MCP_TEST_ALLOW_WRITES=1 npm run test:tools
# Full suite with auth token
THINGS_AUTH_TOKEN=your-token \
THINGS_MCP_TEST_TODO_ID=some-id \
THINGS_MCP_TEST_PROJECT_ID=some-id \
npm run test:tools
MIT
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"things-app-mcp": {
"command": "npx",
"args": []
}
}
}Web content fetching and conversion for efficient LLM usage.
Retrieval from AWS Knowledge Base using Bedrock Agent Runtime.
Provides auto-configuration for setting up an MCP server in Spring Boot applications.
A very streamlined mcp client that supports calling and monitoring stdio/sse/streamableHttp, and can also view request responses through the /logs page. It also