Just Claude Things
# Just Claude Things
An MCP server that lets Claude read and write your Things 3 tasks on macOS via AppleScript.
## Requirements
- macOS
- [Things 3](https://culturedcode.com/things/) installed and running
- Node.js 18+
- When first used, macOS will prompt you to grant Automation permissions (System Settings → Privacy & Security → Automation)
## Quick Start
### Claude Desktop
Add to your `~/Library/Application Support/Claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"things3": {
"command": "npx",
"args": ["-y", "things3-mcp"]
}
}
}
```
### Claude Code
```bash
claude mcp add things3 -- npx -y things3-mcp
```
## Available Tools
### Read
#### `get_todos`
List todos with optional filters.
```json
{ "status": "today" }
{ "tag": "work", "status": "anytime" }
{ "search": "meeting notes" }
{ "projectId": "ABC123" }
```
| Parameter | Type | Description |
| ----------- | ------ | ------------------------------------------------------------------ |
| `status` | string | Filter by list: `inbox`, `today`, `upcoming`, `anytime`, `someday`, `logbook` |
| `projectId` | string | Filter by project ID |
| `areaId` | string | Filter by area ID |
| `tag` | string | Filter by tag name |
| `search` | string | Search todo titles and notes |
#### `get_todo`
Get a single todo by ID with full details.
```json
{ "id": "ABC123" }
```
#### `get_projects`
List all projects with status, area, and tags. No parameters.
#### `get_areas`
List all areas. No parameters.
#### `get_tags`
List all tags. No parameters.
### Write
#### `create_todo`
Create a new todo.
```json
{
"title": "Review PR #42",
"notes": "Check the error handling changes",
"when": "today",
"tags": ["work"],
"checklistItems": ["Read the diff", "Run tests locally", "Leave review"]
}
```
| Parameter | Type | Description |
| ---------------- | -------- | ------------------------------------------------------------------- |
| `title` | string | **Required.** Title of the todo |
| `notes` | string | Notes/description |
| `when` | string | `today`, `evening`, `tomorrow`, `someday`, or date (`YYYY-MM-DD`) |
| `deadline` | string | Deadline date (`YYYY-MM-DD`) |
| `tags` | string[] | Tag names to apply |
| `projectId` | string | Project ID to add this todo to |
| `heading` | string | Heading within the project |
| `checklistItems` | string[] | Checklist items |
#### `create_project`
Create a new project.
```json
{
"title": "Q2 Planning",
"notes": "Quarterly goals and milestones",
"tags": ["work"],
"when": "2025-04-01",
"deadline": "2025-06-30"
}
```
| Parameter | Type | Description |
| ---------- | -------- | ----------------------------------------------------------------- |
| `title` | string | **Required.** Title of the project |
| `notes` | string | Notes/description |
| `areaId` | string | Area ID to assign to |
| `tags` | string[] | Tag names |
| `when` | string | `today`, `evening`, `tomorrow`, `someday`, or date (`YYYY-MM-DD`) |
| `deadline` | string | Deadline date (`YYYY-MM-DD`) |
#### `update_todo`
Update an existing todo by ID.
```json
{
"id": "ABC123",
"when": "tomorrow",
"tags": ["urgent"]
}
```
| Parameter | Type | Description |
| ---------- | -------- | ----------------------------------------------------------------- |
| `id` | string | **Required.** Todo ID |
| `title` | string | New title |
| `notes` | string | New notes (appended to existing) |
| `when` | string | `today`, `evening`, `tomorrow`, `someday`, or date (`YYYY-MM-DD`) |
| `deadline` | string | New deadline (`YYYY-MM-DD`) |
| `tags` | string[] | Tags to add |
#### `complete_todo`
Mark a todo as complete.
```json
{ "id": "ABC123" }
```
#### `delete_todo`
Move a todo to Trash (recoverable from Things 3 Trash).
```json
{ "id": "ABC123" }
```
## License
MIT
TDQS
Scored across 10 tools
Each tool targets a distinct operation on clearly separate entities (todos, projects, areas, tags). No two tools perform the same function, and the slight overlap between complete_todo and update_todo with completed=true is mitigated by the dedicated convenience tool.
All tools follow a strict `things3_<verb>_<noun>` pattern. Verbs are consistently in imperative form (create, get, update, delete, complete), and nouns are singular or plural appropriately. No mixing of styles or irregular names.
With 10 tools covering the basic lifecycle of tasks and supporting entities, the count is well-scoped for a task management MCP server. It provides enough functionality without being bloated or too sparse.
Core CRUD for todos is complete, and project/area/tag retrieval is present. However, there is no update_project, delete_project, or get_single_project endpoint, and the update_todo lacks a projectId parameter, creating minor gaps for project management workflows.