trackmcp
Back to directory
mattsafaii

things3-mcp-ruby

View on GitHub

Things 3

0 stars RubyOthers Updated Jun 24, 2025

Documentation

Things 3 MCP Server (Ruby)

A comprehensive Model Context Protocol (MCP) server for Things 3 task management on macOS. This server provides natural language task management, advanced filtering, bulk operations, analytics, and maintenance tools through AppleScript integration.

> macOS Only: This MCP server requires macOS and Things 3 (which is macOS-exclusive).

๐Ÿ—๏ธ Architecture

The codebase is organized into focused classes with clear separation of concerns:

  • `Things3MCPServer` - Main MCP server implementation
  • `AppleScriptExecutor` - Handles AppleScript execution with error handling
  • `AppleScriptGenerator` - Generates AppleScript code for Things 3 operations
  • `Things3Client` - Core Things 3 task operations (CRUD)
  • `DateParser` - Natural language date parsing using Chronic gem
  • `TaskFilter` - Advanced task filtering and search capabilities
  • `BulkOperations` - Bulk task operations (create, update, move, complete, import)
  • `ReportGenerator` - Weekly reviews, project reports, and analytics

๐Ÿš€ Features

Core Task Management

  • CRUD Operations: Create, read, update, delete tasks
  • Natural Language Dates: "tomorrow", "next Friday", "in 3 days", etc.
  • Smart Organization: Project/area assignment with automatic creation
  • Advanced Search: Multi-criteria filtering with regex support

Advanced Filtering

  • Complex Filters: Status, projects, areas, tags, dates, notes
  • Quick Filters: Pre-built filters for common scenarios
  • Saved Filters: Store and reuse complex filter combinations
  • Text Search: Name and notes content search with regex

Bulk Operations

  • Mass Creation: Create multiple tasks from lists or templates
  • Bulk Updates: Update tasks matching specific criteria
  • Tag Operations: Add, remove, standardize tags across tasks
  • Import/Export: CSV, JSON, and plain text import support

Analytics & Reports

  • Weekly Reviews: Comprehensive review generation
  • Project Health: Analyze project progress and bottlenecks
  • Productivity Insights: Completion patterns and trends
  • Planning Tools: Next week planning with energy-based scheduling

Data Maintenance

  • Duplicate Detection: Find and merge similar tasks
  • Orphaned Task Cleanup: Organize tasks without projects/areas
  • Tag Standardization: Clean up inconsistent tag naming
  • System Health: Organization scoring and health metrics

๐Ÿ“‹ Requirements

  • macOS: Required (Things 3 is macOS-only)
  • Things 3: Must be installed and running
  • Ruby: Version 3.0.0 or higher
  • Dependencies: Managed via Bundler

> Note: This MCP server only works on macOS since Things 3 is an exclusive macOS application.

๐Ÿ” macOS Permissions Setup

This MCP server uses AppleScript to communicate with Things 3, which requires specific macOS permissions:

1. Accessibility Permissions

When you first run the MCP server, macOS will prompt for accessibility permissions:

1. System Preferences โ†’ Security & Privacy โ†’ Privacy โ†’ Accessibility

2. Click the lock to make changes (enter your password)

3. Add your MCP client (e.g., Claude Desktop, Cursor, Terminal)

4. Enable the checkbox for the application

2. AppleScript Permissions

The server may also need AppleScript permissions:

1. System Preferences โ†’ Security & Privacy โ†’ Privacy โ†’ Automation

2. Find your MCP client in the list

3. Enable "Things3" under your client application

3. Terminal/Ruby Permissions (if running directly)

If running the server directly from Terminal:

1. System Preferences โ†’ Security & Privacy โ†’ Privacy โ†’ Accessibility

2. Add Terminal (or your terminal app)

3. Enable the checkbox

> ๐Ÿ’ก Tip: If you get "permission denied" errors, restart your MCP client after granting permissions.

๐Ÿ›  Installation

1. Clone the repository:

bash
git clone https://github.com/mattsafaii/things3-mcp.git
   cd things3-mcp

2. Install dependencies:

bash
bundle install

3. Run the MCP server:

bash
./things3-mcp-server

4. Configure in your MCP client - See MCP Client Configuration below

๐Ÿ”Œ MCP Client Configuration

Claude Desktop

1. Find your config file:

    2. Add the server configuration:

    json
    {
         "mcpServers": {
           "things3": {
             "command": "/absolute/path/to/things3-mcp/things3-mcp-server",
             "args": []
           }
         }
       }

    3. Restart Claude Desktop - The server will appear in your available tools

    Cursor IDE

    1. Open Cursor Settings (`Cmd + ,`)

    2. Navigate to Extensions โ†’ MCP

    3. Add server configuration:

    json
    {
         "name": "Things3",
         "command": "/absolute/path/to/things3-mcp/things3-mcp-server",
         "args": []
       }

    VS Code (with MCP Extension)

    1. Install an MCP extension from the VS Code marketplace

    2. Open VS Code Settings (`Cmd + ,`)

    3. Search for "MCP" and add server:

    json
    {
         "mcp.servers": [
           {
             "name": "things3",
             "command": "/absolute/path/to/things3-mcp/things3-mcp-server",
             "args": []
           }
         ]
       }

    Zed Editor

    1. Open Zed settings (`Cmd + ,`)

    2. Add to your `settings.json`:

    json
    {
         "language_models": {
           "mcp_servers": {
             "things3": {
               "command": "/absolute/path/to/things3-mcp/things3-mcp-server",
               "args": []
             }
           }
         }
       }

    Continue (VS Code Extension)

    1. Open Continue configuration (`.continue/config.json` in your workspace)

    2. Add MCP server:

    json
    {
         "mcpServers": {
           "things3": {
             "command": "/absolute/path/to/things3-mcp/things3-mcp-server",
             "args": []
           }
         }
       }

    Generic MCP Client

    For any MCP client that supports the standard, use:

    json
    {
      "name": "things3",
      "command": "/absolute/path/to/things3-mcp/things3-mcp-server",
      "args": [],
      "env": {
        "PATH": "/usr/local/bin:/usr/bin:/bin"
      }
    }

    Configuration Tips

    1. Use absolute paths - Relative paths may not work across different clients

    2. Check permissions - Ensure the executable has proper permissions (`chmod +x`)

    3. Test the server - Run `./things3-mcp-server` manually to verify it works

    4. Check logs - Most MCP clients provide logs for debugging connection issues

    Verifying Installation

    Once configured, you should see these tools available in your MCP client:

    • `add_task`, `list_tasks`, `complete_task` (core operations)
    • `weekly_review`, `project_status_report` (analytics)
    • `bulk_create_tasks`, `filter_tasks` (advanced features)
    • And 30+ other specialized tools

    Test with a simple command:

    code
    "Add a task called 'Test MCP integration' to my Things 3"

    If successful, you'll see the task appear in Things 3 and get a confirmation message.

    > First Run: On first use, macOS will prompt for permissions (see macOS Permissions Setup). Grant the permissions and restart your MCP client.

    ๐ŸŽฏ Available Tools

    33 comprehensive tools organized into functional categories:

    Core Task Operations

    • `add_task` - Create new tasks with full metadata
    • `list_tasks` - List tasks with filtering options
    • `list_projects` - List all projects and areas
    • `update_task` - Modify existing task properties
    • `complete_task` - Mark tasks as completed
    • `delete_task` - Remove tasks from Things 3
    • `move_task` - Move tasks between projects/areas
    • `search_tasks` - Search task names and content

    Advanced Features

    • `add_task_with_planning_notes` - Create tasks with planning metadata
    • `list_tasks_by_date_range` - Filter tasks by date ranges
    • `snooze_task` - Postpone tasks to future dates
    • `parse_date` - Test natural language date parsing
    • `filter_tasks` - Advanced multi-criteria filtering
    • `quick_filters` - Pre-built useful filters (orphaned, overdue, etc.)
    • `saved_filters` - Manage reusable filter configurations

    Analytics & Reports

    • `weekly_review` - Generate comprehensive weekly reviews
    • `project_status_report` - Analyze active projects
    • `productivity_insights` - Track productivity patterns
    • `next_week_planning` - Plan upcoming week with energy levels
    • `review_templates` - Manage consistent review formats

    Bulk Operations

    • `bulk_create_tasks` - Create multiple tasks at once
    • `bulk_update_tasks` - Update multiple matching tasks
    • `bulk_move_tasks` - Move tasks between projects
    • `bulk_tag_operations` - Mass tag management
    • `bulk_complete_tasks` - Complete multiple tasks
    • `bulk_import_tasks` - Import from external formats

    Data Cleanup & Maintenance

    • `cleanup_orphaned_tasks` - Organize unassigned tasks
    • `find_duplicate_tasks` - Detect and merge duplicates
    • `standardize_tags` - Clean up tag naming consistency
    • `cleanup_stale_tasks` - Handle old/abandoned tasks
    • `analyze_project_health` - Project health metrics
    • `fix_broken_references` - Repair data integrity issues
    • `organization_score` - Overall system health assessment

    Templates & Automation

    • `task_templates` - Manage reusable task sets

    ๐Ÿ”ง Configuration

    Saved Filters Storage

    Filters are automatically saved to: `~/.things3_mcp_filters.json`

    Debug Mode

    Enable detailed logging by setting debug flags in the class constructors or through environment variables.

    ๐Ÿ“– Usage Examples

    Basic Task Management

    bash
    # Add simple task
    add_task({"name": "Buy groceries"})
    
    # Add task with project and due date
    add_task({
      "name": "Finish quarterly report", 
      "project": "Work",
      "due_date": "next Friday",
      "tags": ["urgent", "quarterly"]
    })

    Natural Language Dates

    bash
    # Various supported formats
    add_task({"name": "Team meeting", "due_date": "tomorrow at 2pm"})
    add_task({"name": "Vacation planning", "due_date": "end of month"})
    add_task({"name": "Project review", "start_date": "next Monday", "due_date": "in 2 weeks"})

    Advanced Filtering

    bash
    # Complex filter
    filter_tasks({
      "status": ["open"],
      "project_names": ["Work", "Personal"],
      "tag_filter": {"has_tags": ["urgent"]},
      "date_filter": {"overdue": true}
    })
    
    # Quick filters
    quick_filters({"filter_type": "orphaned_tasks"})

    Weekly Review Workflow

    bash
    # Generate comprehensive review
    weekly_review({
      "review_type": "last_week",
      "include_sections": ["completed", "overdue", "upcoming", "projects", "insights"]
    })
    
    # Project health check
    project_status_report({"include_metrics": true})
    
    # Plan next week
    next_week_planning({"include_energy_levels": true})

    Bulk Operations

    bash
    # Create multiple tasks
    bulk_create_tasks({
      "tasks": [
        {"name": "Research competitors", "project": "Website"},
        {"name": "Design mockups", "project": "Website", "due_date": "Friday"},
        {"name": "Write content", "project": "Website"}
      ]
    })
    
    # Standardize tags
    standardize_tags({
      "apply": true,
      "rules": {"lowercase": true, "merge_similar": true}
    })

    ๐Ÿ›ก๏ธ Error Handling

    • Things 3 Availability: Validates Things 3 is running before operations
    • AppleScript Errors: Comprehensive error catching with descriptive messages
    • Date Parsing: Graceful handling of ambiguous dates with confidence indicators
    • Input Validation: Parameter validation with helpful error messages
    • Timeout Protection: 30-second timeout on AppleScript operations

    ๐Ÿ“ File Structure

    code
    things3-mcp/
    โ”œโ”€โ”€ things3-mcp-server            # Executable script (root level)
    โ”œโ”€โ”€ lib/
    โ”‚   โ”œโ”€โ”€ things3_mcp.rb            # Main entry point
    โ”‚   โ””โ”€โ”€ things3_mcp/
    โ”‚       โ”œโ”€โ”€ server.rb             # MCP server implementation
    โ”‚       โ”œโ”€โ”€ client.rb             # Core Things 3 operations
    โ”‚       โ”œโ”€โ”€ date_parser.rb        # Natural language date parsing
    โ”‚       โ”œโ”€โ”€ task_filter.rb        # Advanced task filtering
    โ”‚       โ”œโ”€โ”€ bulk_operations.rb    # Bulk task operations
    โ”‚       โ”œโ”€โ”€ report_generator.rb   # Analytics and reports
    โ”‚       โ””โ”€โ”€ applescript/
    โ”‚           โ”œโ”€โ”€ executor.rb       # AppleScript execution engine
    โ”‚           โ””โ”€โ”€ generator.rb      # AppleScript code generation
    โ”œโ”€โ”€ Gemfile                       # Ruby dependencies
    โ”œโ”€โ”€ Gemfile.lock                  # Locked dependency versions
    
    โ””โ”€โ”€ README.md                     # This documentation

    ๐Ÿ” Troubleshooting

    Common Issues

    Things 3 Not Running

    code
    Error: Things 3 is not available

    *Solution*: Launch Things 3 application

    AppleScript Permission Denied

    code
    Error: AppleScript execution failed - permission denied

    *Solutions*:

    • Grant Accessibility permissions: System Preferences โ†’ Security & Privacy โ†’ Privacy โ†’ Accessibility
    • Grant Automation permissions: System Preferences โ†’ Security & Privacy โ†’ Privacy โ†’ Automation
    • Add your MCP client (Claude Desktop, Cursor, etc.) to both permission lists
    • Restart your MCP client after granting permissions
    • If running directly, add Terminal to Accessibility permissions

    Date Parsing Issues

    code
    Error: Could not parse date: 'next Flursday'

    *Solution*: Use supported formats like "next Friday", "in 3 days", or "YYYY-MM-DD"

    AppleScript Timeout

    code
    Error: AppleScript execution timeout

    *Solution*: Reduce bulk operation size or check Things 3 performance

    MCP Server Not Connecting

    code
    Error: MCP server failed to start

    *Solutions*:

    • Verify the absolute path to `things3-mcp-server` is correct
    • Check that the executable has proper permissions (`chmod +x things3-mcp-server`)
    • Test the server manually: `./things3-mcp-server`
    • Check MCP client logs for detailed error messages
    • Ensure Ruby and dependencies are properly installed

    MCP Tools Not Appearing

    code
    No Things3 tools available in client

    *Solutions*:

    • Restart your MCP client after configuration changes
    • Verify the JSON configuration syntax is valid
    • Check that the server name doesn't conflict with other MCP servers
    • Look for connection errors in client logs

    Debug Mode

    Enable detailed logging by setting debug: true in class constructors for troubleshooting.

    ๐Ÿค MCP Integration

    This server implements the Model Context Protocol and can be used with any MCP-compatible client:

    • Claude Desktop - Most popular MCP client
    • Cursor IDE - AI-powered code editor with MCP support
    • VS Code - With MCP extensions
    • Zed Editor - Modern editor with built-in MCP support
    • Continue - VS Code extension for AI coding assistance
    • Custom Applications - Any tool implementing the MCP standard

    See the MCP Client Configuration section above for detailed setup instructions for each client.

    The server provides a natural language interface to comprehensive Things 3 task management through the standardized MCP protocol, making your task management available to any AI assistant or automation tool that supports MCP.

    ๐Ÿ“„ Dependencies

    • `mcp` (~> 0.1.0) - Model Context Protocol implementation
    • `chronic` (~> 0.10.2) - Natural language date parsing
    • `debug`, `rubocop` (development)

    ๐Ÿ“Š System Health

    The server includes built-in health monitoring through:

    • Organization scoring (0-100 across multiple dimensions)
    • Project health analysis
    • Duplicate detection
    • Data integrity checks
    • Productivity trend analysis

    Regular maintenance can be automated through the provided cleanup and analysis tools.

    Frequently asked questions

    What is things3-mcp-ruby?

    things3-mcp-ruby is Things 3

    How do I install things3-mcp-ruby?

    Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.

    Is things3-mcp-ruby open source?

    Yes โ€” it is hosted on GitHub at https://github.com/mattsafaii/things3-mcp-ruby.

    Related MCP tools

    Run your own MCP server? See who uses it and what to fix.

    Measure it with TrackMCP