Things 3 MCP Server (Ruby)
A (clunky) Model Context Protocol (MCP) server for Things 3, implemented in Ruby.
Features
- Access Things 3 todos, projects, areas, and tags
- Create and update todos and projects
- Search todos with advanced filters
- Access built-in lists (Inbox, Today, Upcoming, etc.)
- Complete Things URL scheme support
Prerequisites
- Things 3 must be installed on your Mac
- Ruby 3.2+ installed (required by the MCP gem dependency)
- No authentication required - the server reads from Things' local database
Note for macOS users: The system Ruby is possibly too old. Install a modern Ruby.
Installation
Option 1: Using the Released Gem (Recommended)
- Install the gem:
gem install things-mcp
- The MCP server will be available as
things_mcp_server
in your PATH.
Option 2: From Source
- Clone this repository:
git clone https://github.com/hakanensari/things-mcp-ruby.git
cd things-mcp-ruby
- Install dependencies:
bundle install
Testing the Installation
- Basic test (database + create operations):
bin/test_connection
- Full test (including update operations):
THINGS_AUTH_TOKEN=your_token_here bin/test_connection
The test script will:
- ✓ Check if Things app is running
- ✓ Test database connectivity
- ✓ Test handler functionality
- ✓ Create a test todo via URL scheme
- ✓ Verify the todo in the database
- ✓ Test update operations by completing the test todo (if auth token provided)
Running the MCP Server
If Using the Gem
things_mcp_server
If Using from Source
bundle exec ruby bin/things_mcp_server
Configuration
This MCP server implements the Model Context Protocol and can be used with any MCP-compatible AI system.
Claude Desktop
Basic Configuration (Read + Create Operations)
Add to your Claude Desktop configuration file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
Using the Released Gem (Recommended)
{
"mcpServers": {
"things": {
"command": "things_mcp_server"
}
}
}
Using from Source
{
"mcpServers": {
"things": {
"command": "ruby",
"args": ["bin/things_mcp_server"],
"cwd": "/path/to/things-mcp-ruby"
}
}
}
Full Configuration (Including Update Operations)
For update-todo
and update-project
operations, you need to provide a Things authorization token:
-
Get your authorization token from Things:
- Open Things 3
- Go to Things → Settings → General
- Click Enable Things URLs
- Click Manage
- Copy the authorization token
-
Add the token to your configuration:
Using the Released Gem
{
"mcpServers": {
"things": {
"command": "things_mcp_server",
"env": {
"THINGS_AUTH_TOKEN": "your_authorization_token_here"
}
}
}
}
Using from Source
{
"mcpServers": {
"things": {
"command": "ruby",
"args": ["bin/things_mcp_server"],
"cwd": "/path/to/things-mcp-ruby",
"env": {
"THINGS_AUTH_TOKEN": "your_authorization_token_here"
}
}
}
}
Note: Replace YOUR_USERNAME
with your actual macOS username. If you have trouble finding the exact database path, you can run find ~/Library/Group\ Containers -name "main.sqlite" 2>/dev/null | grep Things
to locate it.
⚠️ Security Note: Keep your authorization token private. It allows full access to modify your Things data.
Other MCP Clients
For other MCP-compatible clients, run the server manually and connect via stdio:
# Start the MCP server
bundle exec ruby bin/things_mcp_server
# The server communicates via JSON-RPC over stdio
# See the MCP specification for integration details:
# https://modelcontextprotocol.io/specification/
Usage
Once configured, you can use your MCP-compatible AI client to:
- "Show me my todos from today"
- "Create a new todo called 'Buy groceries' for tomorrow"
- "Search for todos containing 'meeting'"
- "Show all my projects"
Available Tools
Basic Operations
-
get-todos
- Get todos from Things, optionally filtered by project -
get-projects
- Get all projects from Things -
get-areas
- Get all areas from Things
List Views
-
get-inbox
- Get todos from Inbox -
get-today
- Get todos due today -
get-upcoming
- Get upcoming todos -
get-anytime
- Get todos from Anytime list -
get-someday
- Get todos from Someday list -
get-logbook
- Get completed todos from Logbook -
get-trash
- Get trashed todos
Tag Operations
-
get-tags
- Get all tags -
get-tagged-items
- Get items with a specific tag
Search Operations
-
search-todos
- Search todos by title or notes -
search-advanced
- Advanced todo search with multiple filters
Recent Items
-
get-recent
- Get recently created items
Modification Operations
-
add-todo
- Create a new todo in Things -
add-project
- Create a new project in Things -
update-todo
- Update an existing todo ⚠️ Requires auth token -
update-project
- Update an existing project ⚠️ Requires auth token
Note: When adding tags to existing todos/projects, the tags must already exist in Things. The URL scheme will not create new tags automatically.
-
show-item
- Show a specific item or list in Things -
search-items
- Search for items and open in Things
Development
Run connection tests:
bin/test_connection
Run linter:
bundle exec rake rubocop
License
MIT