npm package: @iflow-mcp/soycanopa-supathings-mcp
Description: SupaThings MCP: a Things 3 MCP server with SQLite reads, URL scheme writes, and optional AppleScript diagnostics.
Author: soycanopa
Latest version: 0.4.0

# SupaThings MCP

[![npm version](https://img.shields.io/npm/v/supathings-mcp.svg)](https://www.npmjs.com/package/supathings-mcp)
[![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
[![Node](https://img.shields.io/badge/node-%3E%3D22-brightgreen.svg)](https://nodejs.org)

SupaThings MCP is a Things 3 MCP server for macOS.

It was built to solve a practical gap: AI agents can write to Things via `things:///`, but they cannot reliably understand your real project structure from URL commands alone.

SupaThings combines SQLite-based reads with official URL-scheme writes, so agents can both understand and act safely.

## Table of Contents

- [Quick Start](#quick-start)
- [What This MCP Server Does (and Why It Exists)](#what-this-mcp-server-does-and-why-it-exists)
- [Current Scope (v0.4.0)](#current-scope-v040)
- [How It Works](#how-it-works)
- [Things-Native Philosophy](#things-native-philosophy)
- [Recommended Workflows](#recommended-workflows)
- [Available Tools](#available-tools)
- [Token and Context Efficiency](#token-and-context-efficiency)
- [Requirements](#requirements)
- [Build and Smoke Tests](#build-and-smoke-tests)
- [Packaging and Release](#packaging-and-release)
- [Project Structure](#project-structure)
- [Attribution](#attribution)
- [Support](#support)
- [License](#license)

## Quick Start

### 1) Run with npx (no install)

```bash
npx -y supathings-mcp
```

### 2) Global install from npm

```bash
npm install -g supathings-mcp
```

Alias also available:

```bash
things-mcp
```

### 3) Build from source

```bash
npm install
npm run build
node dist/index.js
```

### 4) MCP config example

```json
{
  "mcpServers": {
    "supathings": {
      "command": "npx",
      "args": ["-y", "supathings-mcp"]
    }
  }
}
```

### 5) Configure MCP in your client (copy/paste)

Codex:

```bash
codex mcp add supathings -- npx -y supathings-mcp
```

Claude Code:

```bash
claude mcp add --transport stdio supathings -- npx -y supathings-mcp
```

Gemini CLI:

```bash
gemini mcp add -s user supathings npx -y supathings-mcp
```

## What This MCP Server Does (and Why It Exists)

MCP servers expose tools over a standard protocol so AI clients can call them programmatically.

In Things, there are two realities:

- The `things:///` URL scheme is excellent for creating/updating/navigating items.
- URL commands alone do not expose full structural context (project hierarchy, headings, checklist relationships, planning summaries).

SupaThings was built to bridge that split.

Technical approach:

- Read path: query local Things SQLite data for structure and context.
- Write path: execute official `things:///` URL actions for safe interoperability.
- Planning path: add semantic tools for heading inference, validation, project summaries, and task placement.

Why this is useful in practice:

- Better decisions: agents can place tasks under the right heading.
- Lower token usage: compact structural answers instead of large raw dumps.
- Safer automation: writes stay on official Things-supported surfaces.
- More predictable workflows: clear split between data understanding and data mutation.

## Current Scope (v0.4.0)

Current release: `0.4.0`

Shipped scope today:

- Tool surface: `37` MCP tools
- Read model: local Things SQLite database (areas, projects, headings, todos, tags, checklist items)
- Write model: official `things:///` URL scheme
- Semantic layer: heading inference, heading validation, project structure summaries, task placement suggestions
- Optional AppleScript actions: runtime-gated

Current boundaries:

- macOS + local Things installation required
- recurring template rows are intentionally excluded from read queries
- headings are easiest to guarantee at project creation time
- adding missing headings to existing projects remains constrained by Things capabilities

## How It Works

Three-layer model:

- SQLite layer for rich reads of local Things data
- `things:///` layer for writes, updates, moves, and navigation
- AppleScript layer for optional lightweight app actions (`show-quick-entry`, `log-completed`, `empty-trash`)

This split is deliberate: read from local truth, write through supported Things APIs.

## Things-Native Philosophy

SupaThings is opinionated here: Things should be treated like Things.

Headings are modeled as semantic groupings (categories, work blocks, deliverables), not as a Jira-style workflow board by default.

That changes:

- how headings are inferred
- how project summaries are generated
- how task placement is suggested

## Recommended Workflows

### New project with headings

Use when the project does not exist yet:

1. `suggest-headings`
2. `create-project-with-headings`
3. optionally verify with `get-projects` or `get-project-structure`

### Existing project missing headings

Use when the project already exists but needs structure:

1. `get-headings` or `suggest-headings`
2. create missing headings manually in Things
3. `validate-headings`
4. create or move tasks into those headings

Why: creating headings is most reliable during brand-new project creation.

### Existing project with structure already in place

1. `get-project-structure`
2. `summarize-project`
3. `suggest-task-placement`
4. create or move tasks into the chosen headings

## Available Tools

Current exposed tools: `37`

| Category | Tools |
| --- | --- |
| Read and inspection | `app-status`, `version`, `get-areas`, `get-tags`, `get-projects`, `get-headings`, `get-project-structure`, `get-todos`, `get-inbox`, `get-today`, `get-upcoming`, `get-anytime`, `get-someday`, `get-logbook`, `get-trash`, `get-tagged-items`, `get-recent`, `search-todos`, `search-items`, `search-advanced` |
| Semantic planning | `suggest-headings`, `validate-headings`, `suggest-task-placement`, `summarize-project` |
| Write and navigation | `add-todo`, `add-project`, `create-project-with-headings`, `update`, `update-project`, `update-todo`, `show`, `show-item`, `search`, `json` |
| Optional AppleScript | `show-quick-entry`, `log-completed`, `empty-trash` |

If Apple Events are unavailable, these fail gracefully.

## Token and Context Efficiency

SupaThings is designed to reduce context burn in AI workflows.

Current efficiency features:

- concise text responses
- structured payloads without duplicating full JSON in text output
- `detail: "compact" | "full"` on major read/search tools
- `limit` on major list/search tools
- `get-project-structure` for lightweight structural inspection
- `summarize-project` for planning-focused summaries
- `suggest-task-placement` for semantic placement suggestions

## Requirements

- macOS
- Things 3 installed locally
- Node.js 22+
- npm 10+
- Apple Events permission only if you want optional AppleScript actions

## Build and Smoke Tests

```bash
npm run build
npm run smoke
npm run smoke:mcp
```

Smoke coverage includes:

- server startup over stdio
- tool listing
- Things app availability
- SQLite access
- project and heading inspection
- semantic tools (`suggest-headings`, `get-project-structure`, `suggest-task-placement`, `summarize-project`)

## Packaging and Release

### Create local tarball

```bash
npm pack
```

### Full release guide

See:

- `docs/PUBLISHING_GUIDE.md`

Quick release summary:

1. Validate build and smoke tests.
2. Commit and push to your GitHub repo.
3. Create and push an annotated tag (for example `v0.4.0`).
4. Create a GitHub release from that tag.
5. Publish to npm (`npm publish --access public`).
6. Verify `npx -y supathings-mcp` and client setup commands.

## Project Structure

- [src/index.ts](src/index.ts): MCP server entrypoint
- [src/views.ts](src/views.ts): compact/full serializers
- [src/headings.ts](src/headings.ts): heading semantics and inference
- [src/project-structure.ts](src/project-structure.ts): project structural analysis
- [src/task-placement.ts](src/task-placement.ts): heading placement suggestions
- [src/project-summary.ts](src/project-summary.ts): planning-oriented summaries
- [scripts/smoke-test.mjs](scripts/smoke-test.mjs): structural environment smoke test
- [scripts/mcp-smoke.mjs](scripts/mcp-smoke.mjs): MCP protocol smoke test
- [scripts/install-clients.sh](scripts/install-clients.sh): multi-client MCP installer
- [scripts/uninstall-clients.sh](scripts/uninstall-clients.sh): multi-client MCP uninstall helper
- [docs/PUBLISHING_GUIDE.md](docs/PUBLISHING_GUIDE.md): GitHub + npm publication guide

## Attribution

This project builds on prior work and ideas from:

- [jimfilippou/things-mcp](https://github.com/jimfilippou/things-mcp)
- [hald/things-mcp](https://github.com/hald/things-mcp)
- [thingsapi/things.py](https://github.com/thingsapi/things.py)

Licensing and attribution details are included in [LICENSE](LICENSE) and [NOTICE](NOTICE).

## Support

- 🐛 Bug Reports: Open an issue on GitHub ([Issues](https://github.com/jimfilippou/things-mcp/issues))
- 💡 Feature Requests: Open an issue with enhancement label ([New issue](https://github.com/jimfilippou/things-mcp/issues/new))
- 📚 Documentation: Check the Things URL scheme docs ([Things URL Scheme](https://culturedcode.com/things/support/articles/2803573/))
- 💬 Questions: Open a discussion on GitHub ([Discussions](https://github.com/jimfilippou/things-mcp/discussions))

## License

Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).