Mindwtr

io.github.dongdongbh由 GitHub 账号 dongdongbh 发布v1.1.14更新于 Nov 5, 2026

Task automation via SQLite, desktop Local API, or Mindwtr Cloud; read-only by default.

已验证STDIO仅桌面效率与工作流文件与存储

概览

AI 生成的概览

Mindwtr MCP 服务器让助手通过 SQLite、桌面 Local API 或自建 Cloud 读取,并在启用写入后编辑 Mindwtr GTD 应用中的任务、项目、分区、领域和人员。

可以做什么
  • 按状态、项目、日期范围、今日焦点和 GTD 可用性筛选并搜索任务,也可按 ID 获取单个任务
  • 列出并获取项目、项目分区、视图分区、领域和受管人员
  • 新增、更新、完成、软删除和恢复任务(仅写入模式)
  • 新增、更新和软删除项目、分区与领域(仅写入模式)
  • 新增、更新、重命名和软删除受管人员(仅写入模式)
适用场景
适合在 Mindwtr 桌面应用中管理任务和项目、并希望助手在对话中查看、搜索或修改这些数据的场景,例如梳理今日焦点、起草新任务或重新整理项目与领域。
运行要求
以 stdio 本地进程方式运行 npm 包 mindwtr-mcp;需要 Node.js 20 以上(推荐 22 以上),SQLite 模式还需 better-sqlite3 原生模块,可能要求 C/C++ 工具链和 Python。需配置一种后端:本地 mindwtr.db 文件(通过 MINDWTR_DB_PATH 或 --db 指定路径)、运行中的桌面 Local API 及 MINDWTR_MCP_API_TOKEN,或自建 Cloud 地址及 MINDWTR_MCP_CLOUD_TOKEN。写入需加 --write 参数。
安装前请注意
默认只读;新增、更新、完成、删除和恢复工具仅在加 --write 后可用,删除为软删除。Local API 与 Cloud 模式需要 bearer 令牌(MINDWTR_MCP_API_TOKEN、MINDWTR_MCP_CLOUD_TOKEN),应通过环境变量而非命令行参数传入。已连接的 AI 客户端可读取暴露的 Mindwtr 数据,并可能将其发送给其服务商。写入超时可能已实际生效,重试前应先查看任务。SQLite 模式需批准 better-sqlite3 的安装脚本。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Mindwtr,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Mindwtr MCP Server

MCP server for Mindwtr. Connect MCP clients (Claude Desktop, etc.) to your local SQLite database, the desktop Local API, or a self-hosted Mindwtr Cloud endpoint.

By default this is a stdio server: MCP clients launch it as a subprocess and talk over JSON-RPC on stdin/stdout. It also has an opt-in HTTP transport (see Remote access (HTTP)) for self-hosters who want to expose it at a URL instead.


App Binaries vs. MCP Helper

The desktop app includes a built-in MCP server in Settings → Integrations → Local MCP server (advanced). It requires no separately installed runtime or helper. The desktop installer does not add a standalone mindwtr-mcp command to your PATH; mobile apps do not host MCP.

You do not need to run the whole app from source to use MCP. You can use the normal desktop app binary for your tasks, then run this separate MCP helper from the repository with Bun, or build the helper once and run it with Node. Point the helper at the desktop app's local mindwtr.db, or use the Local API backend below.

On desktop, find the database in the default database locations listed under Requirements. Mobile binaries do not expose a local MCP server surface.


Requirements

These requirements apply to the standalone helper, not the built-in desktop server.

  • Node.js 20+ to run the helper. Prefer Node.js 22+ for prebuilt SQLite binaries on supported platforms; Node 20 requires a native build toolchain.
  • Node-based SQLite mode uses the optional better-sqlite3 native addon. API-only installs can omit it with --omit=optional. If no prebuilt binary is available for your platform, npm needs a working C/C++ build toolchain and Python for node-gyp.
  • Bun (recommended for development in this repo)
  • A local database (mindwtr.db) for SQLite mode, a running desktop Local API and bearer token for API mode, or a self-hosted Mindwtr Cloud URL and bearer token for Cloud mode

For SQLite mode with npm 12, approve the SQLite dependency's install script; otherwise a successful install can still fail at startup with a missing native binding. For npx or global installs, allow only better-sqlite3:

bash
npx --allow-scripts=better-sqlite3 -y mindwtr-mcp --db "/path/to/mindwtr.db"npm install -g --allow-scripts=better-sqlite3 mindwtr-mcp

In MCP client configurations using npx, add "--allow-scripts=better-sqlite3" before "mindwtr-mcp" in args. For an existing project-local install, run npm install-scripts approve better-sqlite3, then npm rebuild better-sqlite3 from that project. Review the dependency before approving; do not enable all dependency scripts.

Default database locations. The installed Windows and macOS apps keep the database in a data subfolder from version 1.3.2 on; Linux and the portable builds are unchanged. The server looks in both places, so it finds the database either way.

  • Linux: ~/.local/share/mindwtr/mindwtr.db (Flatpak: ~/.var/app/tech.dongdongbh.mindwtr/data/mindwtr/mindwtr.db; Snap: ~/snap/mindwtr/current/.local/share/mindwtr/mindwtr.db)
  • macOS, 1.3.2 and later: ~/Library/Application Support/mindwtr/data/mindwtr.db
  • macOS, 1.3.1 and earlier: ~/Library/Application Support/mindwtr/mindwtr.db
  • Windows, 1.3.2 and later: %APPDATA%\mindwtr\data\mindwtr.db
  • Windows, 1.3.1 and earlier: %APPDATA%\mindwtr\mindwtr.db

Additional macOS paths for sandboxed builds:

  • 1.3.2 and later: ~/Library/Containers/tech.dongdongbh.mindwtr/Data/Library/Application Support/mindwtr/data/mindwtr.db
  • 1.3.1 and earlier: ~/Library/Containers/tech.dongdongbh.mindwtr/Data/Library/Application Support/mindwtr/mindwtr.db

A --db path pinned in an MCP client configuration keeps working across that move: if the file is not at the configured path, the server checks the matching data subfolder (or the parent folder) and reports on stderr which database it opened.

If mindwtr.db is missing but data.json exists in the same desktop data folder, the MCP server will bootstrap a fresh SQLite database from that local data snapshot on first start. The desktop data folder is the folder that holds mindwtr.db in the default locations above.

You can override local mode with:

  • --db /path/to/mindwtr.db
  • MINDWTR_DB_PATH=/path/to/mindwtr.db
  • MINDWTR_DB=/path/to/mindwtr.db

For self-hosted Cloud mode, use:

  • --cloud-url https://mindwtr.example.com or MINDWTR_MCP_CLOUD_URL
  • --cloud-token <token> or MINDWTR_MCP_CLOUD_TOKEN
  • optional --cloud-allow-insecure-http=true for trusted private HTTP deployments

Start / Stop

Run from npm

After installing the published package, run it directly:

bash
mindwtr-mcp --db "/path/to/mindwtr.db"

Or let an MCP client launch it through npx:

json
{  "mcpServers": {    "mindwtr": {      "command": "npx",      "args": [        "-y",        "mindwtr-mcp",        "--db",        "~/.local/share/mindwtr/mindwtr.db"      ]    }  }}

The npm package is read-only by default. Add --write only when you explicitly want add/update/complete/delete tools enabled.

Desktop Local API mode

Requires mindwtr-mcp 1.1.11 or later.

Enable the desktop app's Local API in Settings and copy its bearer token. Keep the app and API running. This backend uses the app's REST endpoints and never opens a database or falls back to SQLite.

For an API-only installation, omit the optional native SQLite addon:

bash
npm install -g --omit=optional mindwtr-mcp

Configure your MCP client to pass the token through its environment, rather than putting it in command-line arguments:

json
{  "command": "mindwtr-mcp",  "args": ["--api-url", "http://127.0.0.1:3456"],  "env": {    "MINDWTR_MCP_API_TOKEN": "<token from desktop settings>"  }}

Use the port shown in Settings. MINDWTR_MCP_API_URL can replace --api-url. URLs must use literal 127.0.0.1 or [::1], with no credentials, path, query or fragment; redirects are refused. Do not combine API and Cloud/--db options. Existing database-path environment variables are ignored in API mode.

Writes remain disabled unless explicitly enabled with --write. If the app is closed or the token is invalid, the helper returns an error. A timed-out write may have reached the app: inspect the task before retrying, as the helper does not retry writes automatically.

Desktop 1.3.8 adds optional protection for task creation and edits in Local API mode:

  • mindwtr_add_task accepts idempotencyKey, 1–128 visible ASCII characters without spaces. Keep the same key and identical input when retrying an uncertain create, including attachment links. The desktop retains the original result for seven days, even if that task is later edited or deleted. Different input with the same key returns idempotency_conflict. A full receipt store returns idempotency_capacity; retry later with the same key and input.
  • mindwtr_get_task, task creation, and task edits return { "task": { ... }, "version": "sha256-..." }. Pass the version unchanged as expectedVersion to mindwtr_update_task. A stale edit returns task_version_conflict; read the task again and review the changes before retrying. An edit that changes nothing preserves the version.

Both arguments are optional. Without them, writes keep their existing behavior. Protected requests use versioned desktop endpoints and fail on older desktop versions without falling back to an unprotected write. Older desktop reads can omit version. These arguments are unavailable in Cloud and direct SQLite mode; unsupported task input fields are rejected. Attachment replacement and lifecycle restrictions below still apply.

MCP capabilityDesktop Local API support
List/get tasksSupported, including rich search operators, date filters, sorting and pagination
Create tasksExplicit title and fields; quickAdd is unavailable
Update/complete/delete/restore tasksSupported through the API's corresponding endpoints; terminal status changes cannot be submitted as ordinary edits
List/get/create/update/delete projectsSupported for the API's basic project fields: title, color, status, Area and sequential behavior
List areasSupported
View section catalogue and project assignmentsUnavailable; task assignments by known ID are supported
Sections, managed people, Area writesUnavailable; these tools are hidden in API mode
GTD availability viewUnavailable because the API does not expose the required section snapshot
Replacing attachment linksUnavailable because the API does not provide conditional attachment updates

Other unsupported fields are rejected before a write. The desktop API's recurrence limitations also apply; some recurring completions must be performed in the app. This backend does not promise full SQLite/Cloud tool parity.

--api-url selects the helper's data source. --http instead selects how an MCP client connects to the helper; it can be used with any backend and has a separate authentication token.

Self-hosted Cloud mode

Use Cloud mode when you run your own Mindwtr Cloud server and want MCP tools without pointing the helper at a local SQLite database:

bash
npx -y mindwtr-mcp \  --cloud-url "https://mindwtr.example.com" \  --cloud-token "$MINDWTR_TOKEN"

Or pass the same values through environment variables:

bash
MINDWTR_MCP_CLOUD_URL="https://mindwtr.example.com" \MINDWTR_MCP_CLOUD_TOKEN="$MINDWTR_TOKEN" \npx -y mindwtr-mcp

Cloud mode uses the self-hosted Cloud API. Reads come from the current /v1/data snapshot; with --write, task/project/section/area writes go through the Cloud server's per-resource REST endpoints (POST /v1/tasks, PATCH /v1/tasks/:id, and so on), so they get the same validation and revision stamping as any other client. Without --write, write tools return read_only. Person edits and restoring deleted tasks are not available in Cloud mode yet.

This does not make Mindwtr Cloud itself a hosted MCP server. It is still the same stdio helper, backed by a Cloud URL that you operate.

For private HTTP test deployments, local/private HTTP URLs are allowed by the shared Cloud client rules. Use --cloud-allow-insecure-http=true only for a self-hosted endpoint you intentionally trust.

Remote access (HTTP)

By default mindwtr-mcp only speaks stdio. Pass --http to also (instead of stdio) serve a stateless streamable-HTTP MCP endpoint, so you can point a remote MCP client at a URL — the motivating case is Gemini Spark "custom apps", which take an MCP server URL. HTTP mode works with all three backends.

bash
mindwtr-mcp --http --http-token "$(openssl rand -hex 32)" --db "/path/to/mindwtr.db"

Flags (all have MINDWTR_MCP_HTTP* env var equivalents):

  • --http / MINDWTR_MCP_HTTP — enable HTTP mode. Also implied by setting --http-host, --http-port, or --http-token.
  • --http-token <token> / MINDWTR_MCP_HTTP_TOKEN — required whenever HTTP mode is on, at least 16 characters. Generate one with openssl rand -hex 32. The server refuses to start without it — there is no way to expose HTTP mode unauthenticated, even on loopback.
  • --http-host <host> / MINDWTR_MCP_HTTP_HOST — bind address, default 127.0.0.1.
  • --http-port <port> / MINDWTR_MCP_HTTP_PORT — bind port, default 8722.

The desktop app's built-in MCP server also uses port 8722. If it is on, pass another port with --http-port, for example --http-port 8723.

The MCP endpoint is POST /mcp and requires Authorization: Bearer <token> on every request; GET /healthz returns 200 ok without auth for reverse-proxy health checks. Requests without a valid token get 401; repeated authentication failures get 429 with a Retry-After header. Bodies over 1 MiB get 413. When HTTP mode is on, the server does not also connect a stdio transport — it stays alive as long as the HTTP server is listening, not stdin.

There is no built-in TLS termination or rate limiting for authenticated requests. If you're exposing this beyond localhost, put a reverse proxy (e.g. Caddy, nginx) in front for TLS and put the resulting https:// URL (plus your token) into the remote MCP client.

Run directly from the repo

bash
# from repo root (read-only by default)bun run mindwtr:mcp -- --db "/path/to/mindwtr.db"

Enable writes (required for add/update/complete/delete tools):

bash
bun run mindwtr:mcp -- --db "/path/to/mindwtr.db" --write

Stop:

  • Press Ctrl+C in the terminal.

Keep-alive behavior (why it sometimes exits)

The MCP server is stdio‑based. It stays alive as long as stdin is open. If your shell/client closes stdin, the process exits.

To force an immediate exit when stdin closes (no keep-alive), pass --nowait:

bash
bun run mindwtr:mcp -- --db "/path/to/mindwtr.db" --nowait

Note: When an MCP client launches the server, it keeps stdin open, so the server should remain connected.

Run without the helper script

bash
bun run --filter mindwtr-mcp dev -- --db "/path/to/mindwtr.db"

Stop:

  • Press Ctrl+C in the terminal.

Build and run the binary entry (Node)

bash
# from repo rootbun run --filter mindwtr-mcp buildnode apps/mcp-server/dist/cli.js --db "/path/to/mindwtr.db"

Stop:

  • Press Ctrl+C in the terminal.

Why mindwtr-mcp is “command not found”

mindwtr-mcp is the package binary. It exists after installing the npm package globally, after an MCP client launches it through npx, or after you build the source package and run it with Node.

Use one of these source-tree options instead:

bash
# ✅ works immediatelybun run mindwtr:mcp -- --db "/path/to/mindwtr.db"
# ✅ build then runbun run --filter mindwtr-mcp buildnode apps/mcp-server/dist/cli.js --db "/path/to/mindwtr.db"

Optional: create a global mindwtr-mcp command

If you want a real mindwtr-mcp command on your PATH, create a tiny wrapper:

bash
cat > ~/bin/mindwtr-mcp <<'EOF'#!/usr/bin/env bashset -euo pipefailcd /absolute/path/to/Mindwtrexec bun run mindwtr:mcp -- "$@"EOFchmod +x ~/bin/mindwtr-mcp

Then use:

bash
mindwtr-mcp --db "/path/to/mindwtr.db"

Desktop app toggle?

The desktop app has Settings → Integrations → Local MCP server (advanced). Access is disabled and read-only by default. Enable it and copy connection details for a client supporting authenticated Streamable HTTP. The default endpoint is http://127.0.0.1:8722/mcp; Advanced lets you choose a port from 1024 to 65535. Save the port, then update your client's connection details. The server remains bound to loopback.

Starting with v1.3.7, Allow task and project edits permits creating, editing, completing, and restoring tasks, and creating or editing projects. Advanced has separate Allow archiving and Allow deletion permissions. Each permission is independent; all start off on a new installation. Existing installations that enabled Allow changes retain their previous deletion permission, which can now be disabled separately. Archiving requires an explicit new grant. Updates that combine ordinary edits with archive/cancellation changes require both permissions. The dedicated mindwtr_archive_task tool uses the app's archive operation without completing the task or generating a recurring occurrence. Deletion remains soft deletion.

Copy for Codex provides TOML for ~/.codex/config.toml. Add or replace the mcp_servers.mindwtr entry while preserving your other configuration; Mindwtr does not edit that file. Copy connection details retains the JSON format for clients using mcpServers. Both include a private bearer token. Connected AI clients can read exposed Mindwtr data and may send it to their provider. Regenerating the token disconnects old clients.

The built-in server runs inside the desktop app and shares its task and project operations with the Local API. You do not need to enable the Local API. Closing to the tray keeps it running; disabling MCP or quitting stops it. A startup failure or occupied port is shown in Settings with Retry. This mode does not provide remote ChatGPT access, a tunnel, or hosting. The standalone helper's backend-specific capabilities and --write flag are separate from these desktop permissions.

Source builds compile the built-in server with the desktop Rust application; no separate MCP executable or runtime is bundled.


MCP Client Configuration

MCP clients run the server as a subprocess. You point them to the command and pass args/env.

Important: Do NOT use bun run mindwtr:mcp for MCP clients. The bun run wrapper outputs shell messages to stdout (e.g., $ bun run --filter...) which breaks the JSON-RPC protocol. Always run bun directly on the source file.

Example (generic MCP config)

json
{  "mcpServers": {    "mindwtr": {      "command": "bun",      "args": [        "/absolute/path/to/Mindwtr/apps/mcp-server/src/cli.ts",        "--db",        "~/.local/share/mindwtr/mindwtr.db"      ]    }  }}

Add --write to the args if you want to enable add/update/complete/delete tools.

If your client doesn't support Bun, build first and use Node:

bash
# Build oncecd /path/to/Mindwtr && bun run --filter mindwtr-mcp build
json
{  "mcpServers": {    "mindwtr": {      "command": "node",      "args": [        "/absolute/path/to/Mindwtr/apps/mcp-server/dist/cli.js",        "--db",        "~/.local/share/mindwtr/mindwtr.db"      ]    }  }}

Add --write to the args if you want to enable add/update/complete/delete tools.

Claude Desktop

Claude Desktop supports MCP (stdio). Add a server entry in its MCP configuration.

Typical config file locations:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

After editing, fully quit and relaunch Claude Desktop.

Claude Code (CLI)

Add a server via the CLI:

bash
claude mcp add mindwtr -- \  bun /path/to/Mindwtr/apps/mcp-server/src/cli.ts --db "/path/to/mindwtr.db" --write

Or edit ~/.claude.json directly:

json
{  "projects": {    "/path/to/your/project": {      "mcpServers": {        "mindwtr": {          "type": "stdio",          "command": "bun",          "args": [            "/absolute/path/to/Mindwtr/apps/mcp-server/src/cli.ts",            "--db",            "~/.local/share/mindwtr/mindwtr.db",            "--write"          ]        }      }    }  }}

Then restart the Claude Code session and run /mcp to verify it's connected.

OpenAI Codex (config.toml)

Codex stores MCP config in ~/.codex/config.toml. Add:

toml
[mcp_servers.mindwtr]command = "bun"args = ["/absolute/path/to/Mindwtr/apps/mcp-server/src/cli.ts", "--db", "/path/to/mindwtr.db", "--write"]
# Optional: pass env vars to the server[mcp_servers.mindwtr.env]MINDWTR_DB_PATH = "/path/to/mindwtr.db"

Restart Codex after saving.

Gemini CLI

Gemini CLI uses a JSON settings.json with mcpServers, either:

  • User scope: ~/.gemini/settings.json
  • Project scope: .gemini/settings.json in your repo

You can add Mindwtr MCP two ways:

1) CLI (recommended):

bash
gemini mcp add mindwtr \  bun /absolute/path/to/Mindwtr/apps/mcp-server/src/cli.ts \  --db "/path/to/mindwtr.db" --write

2) Edit settings.json manually:

json
{  "mcpServers": {    "mindwtr": {      "command": "bun",      "args": ["/absolute/path/to/Mindwtr/apps/mcp-server/src/cli.ts", "--db", "/path/to/mindwtr.db", "--write"]    }  }}

Restart the Gemini CLI session after saving.

Other MCP clients

Any MCP-compatible client can work as long as it can launch a stdio server with the command + args above.


Migration: tool rename (mindwtr.* → mindwtr_*)

Breaking change (introduced in this release): all tool names have changed from dot-notation (mindwtr.list_tasks) to underscore-notation (mindwtr_list_tasks) to comply with MCP client validation rules (e.g. Claude Desktop).

Old → new mapping:

Old nameNew name
mindwtr.list_tasksmindwtr_list_tasks
mindwtr.list_projectsmindwtr_list_projects
mindwtr.get_projectmindwtr_get_project
mindwtr.get_taskmindwtr_get_task
mindwtr.list_areasmindwtr_list_areas
mindwtr.add_taskmindwtr_add_task
mindwtr.update_taskmindwtr_update_task
mindwtr.complete_taskmindwtr_complete_task
mindwtr.delete_taskmindwtr_delete_task
mindwtr.restore_taskmindwtr_restore_task
mindwtr.add_projectmindwtr_add_project
mindwtr.update_projectmindwtr_update_project
mindwtr.delete_projectmindwtr_delete_project
mindwtr.add_areamindwtr_add_area
mindwtr.update_areamindwtr_update_area
mindwtr.delete_areamindwtr_delete_area

Upgrade action: find and replace mindwtr. with mindwtr_ in any MCP client configs, system prompts, scripts, or automations that reference these tool names. No other changes are required.


Tools

  • mindwtr_list_tasks
    • Input: { status?, projectId?, includeDeleted?, limit?, offset?, search?, dueDateFrom?, dueDateTo?, isFocusedToday?, view?, sortBy?, sortOrder? }
    • view narrows by GTD availability: available, deferred or blocked
  • mindwtr_list_projects
    • Input: {}
  • mindwtr_get_project
    • Input: { id, includeDeleted? }
  • mindwtr_list_view_sections — view section IDs, titles and order; optional view: someday, waiting, or focus (SQLite/Cloud)
  • mindwtr_list_sections
    • Input: { projectId?, includeDeleted? }
  • mindwtr_get_section
    • Input: { id, includeDeleted? }
  • mindwtr_list_areas
    • Input: {}
  • mindwtr_list_people
    • Input: { includeDeleted? }
  • mindwtr_get_person
    • Input: { id, includeDeleted? }
  • mindwtr_get_task
    • Input: { id, includeDeleted? }
  • mindwtr_add_task (requires --write)
    • Input: { title? | quickAdd?, status?, projectId?, sectionId?, viewSectionIds?, areaId?, dueDate?, startTime?, cancelledAt?, reviewAt?, recurrence?, contexts?, tags?, description?, priority?, energyLevel?, assignedTo?, timeEstimate?, taskMode?, relativeStartOffset?, showFutureRecurrence?, pushCount?, checklist?, textDirection?, location?, isFocusedToday?, timeSpentMinutes?, suppressMindwtrReminders?, reminderPolicy?, repeatReminderMinutes?, dueReminderLeadMinutes?, startReminderLeadMinutes?, attachments? }
  • mindwtr_update_task (requires --write)
    • Input: { id, title?, status?, projectId?, sectionId?, viewSectionIds?, areaId?, dueDate?, startTime?, cancelledAt?, reviewAt?, recurrence?, contexts?, tags?, description?, priority?, energyLevel?, assignedTo?, timeEstimate?, taskMode?, relativeStartOffset?, showFutureRecurrence?, pushCount?, checklist?, textDirection?, location?, isFocusedToday?, timeSpentMinutes?, suppressMindwtrReminders?, reminderPolicy?, repeatReminderMinutes?, dueReminderLeadMinutes?, startReminderLeadMinutes?, order?, boardOrder?, focusOrder?, attachments? }
    • startReminderLeadMinutes: 0 (Off), 5, 15, 30, or 60 minutes before an explicit start time. Omitted legacy values remain off; date-only starts do not schedule an alert.
    • reminderPolicy accepts inherit, send, or skip for start/due reminders. Use inherit to follow the library default; null is not accepted. Existing tasks retain their legacy reminder choice until explicitly changed.
    • recurrence accepts a recurrence object or an RFC 5545 RRULE string. Pass null to clear it.
    • attachments holds link attachments only ({ id?, title?, uri }, e.g. obsidian://, file:// or https://). The list you pass is the complete set of links: links you leave out are removed, file attachments are never touched, and null clears every link.
    • cancelledAt is an ISO timestamp with timezone. Setting it closes the task as cancelled (archived) without counting it as completed or generating its next recurrence. Moving it to an active status or completing it clears cancellation. Update every syncing client before using cancellation; older writers can discard the marker.
  • mindwtr_complete_task (requires --write)
    • Input: { id }
  • mindwtr_delete_task (requires --write)
    • Input: { id }
  • mindwtr_restore_task (requires --write)
    • Input: { id }
  • mindwtr_add_project (requires --write)
    • Input: { title, color?, status?, areaId?, isSequential?, isFocused?, viewSectionIds?, dueDate?, startDate?, cancelledAt?, reviewAt?, supportNotes?, attachments? }
  • mindwtr_update_project (requires --write)
    • Input: { id, title?, color?, status?, areaId?, isSequential?, isFocused?, viewSectionIds?, dueDate?, startDate?, cancelledAt?, reviewAt?, supportNotes?, attachments? }
    • attachments follows the same rule as mindwtr_update_task: link attachments only, the list is the complete set of links, and null clears them.
  • mindwtr_delete_project (requires --write)
    • Input: { id }
  • mindwtr_add_section (requires --write)
    • Input: { projectId, title, description?, order?, isCollapsed? }
  • mindwtr_update_section (requires --write)
    • Input: { id, title?, description?, order?, isCollapsed? }
  • mindwtr_delete_section (requires --write)
    • Input: { id }
  • mindwtr_add_area (requires --write)
    • Input: { name, color?, icon? }
  • mindwtr_update_area (requires --write)
    • Input: { id, name?, color?, icon? }
  • mindwtr_delete_area (requires --write)
    • Input: { id }
  • mindwtr_add_person (requires --write)
    • Input: { name, note?, referenceLink? }
  • mindwtr_update_person (requires --write)
    • Input: { id, name?, note?, referenceLink? }
  • mindwtr_rename_person (requires --write)
    • Input: { id, name, updateTasks? }
  • mindwtr_delete_person (requires --write)
    • Input: { id }

All tools return JSON text payloads with the resulting task, project, section, area, person, or collection payload.


Testing

Quick smoke test (CLI)

  1. Start the server (read‑only):
bash
bun run mindwtr:mcp -- --db "~/.local/share/mindwtr/mindwtr.db"
  1. Connect via your MCP client and run:
  • mindwtr_list_tasks (limit 5)

If you want to test writes, restart with --write:

bash
bun run mindwtr:mcp -- --db "~/.local/share/mindwtr/mindwtr.db" --write

Then test:

  • mindwtr_add_task (quickAdd: "Test task @home /due:tomorrow")
  • mindwtr_complete_task (use returned task id)
  • mindwtr_update_task (e.g. set status or dueDate)
  • mindwtr_delete_task (use returned task id)
  • mindwtr_get_task (use returned task id)
  • mindwtr_restore_task (after delete, restore the task)
  • mindwtr_list_projects
  • mindwtr_get_project (use returned project id)
  • mindwtr_list_areas
  • mindwtr_list_people
  • mindwtr_add_project
  • mindwtr_update_project
  • mindwtr_delete_project
  • mindwtr_add_area
  • mindwtr_update_area
  • mindwtr_delete_area
  • mindwtr_add_person
  • mindwtr_update_person
  • mindwtr_rename_person
  • mindwtr_get_person (use returned person id)
  • mindwtr_delete_person
  • mindwtr_list_tasks with dueDateFrom, dueDateTo, sortBy, sortOrder

If the list returns tasks and add/complete works, the server is healthy.

Stdio JSON-RPC E2E (transport validation)

Use any MCP client or a small script to send:

  • initialize
  • notifications/initialized
  • tools/list
  • tools/call (e.g. mindwtr_list_projects or mindwtr_list_tasks)

If these succeed, the stdio transport is working end-to-end.

Claude Code sanity check

  1. Add the server:
bash
claude mcp add mindwtr -- \  bun /path/to/Mindwtr/apps/mcp-server/src/cli.ts --db "/path/to/mindwtr.db" --write
  1. Restart Claude Code, run /mcp, and verify mindwtr is connected.
  2. Ask the model to call:
    • mindwtr_list_tasks (limit 5)
    • mindwtr_add_task (quickAdd: "Test MCP @home /due:tomorrow")
    • mindwtr_complete_task (use returned id)

Safety & Concurrency

The SQLite details below apply to direct database mode. Local API mode uses the desktop app's native handlers, and Cloud mode uses the self-hosted server.

  • The server uses SQLite WAL mode. Read-only tools can run while the desktop app is open.
  • Write tools fail fast on SQLite writer locks, then retry the whole Mindwtr write operation. Each retry reloads current data before applying the requested change, so a delayed MCP write does not keep working from a stale pre-lock snapshot.
  • Writes are disabled by default. Use --write to enable edits.
  • Write operations go through the shared @mindwtr/core store to enforce business rules (both Bun and Node).
  • SQL is reserved for read-heavy paths (list/search) where performance matters.
  • Do not point a separate container/server deployment at the same local storage or sync data while the desktop app is also writing. That creates independent writers outside the local SQLite coordination path and is unsupported.

Notes

  • This MCP server targets the SQLite database used by the desktop app, with mutations routed through @mindwtr/core.
  • Keep an eye on schema changes across app versions (update queries if needed).

View section assignments

In SQLite and Cloud mode, call mindwtr_list_view_sections (optionally with {"view":"someday"}) to resolve section IDs and titles. The result is {"viewSections":[{"view":"someday","id":"books","title":"Books","order":0}]}. These are view headings, separate from project sections returned by mindwtr_list_sections. Create or rename view headings in the Mindwtr app.

Task and project create/update tools accept viewSectionIds, for example {"someday":"books","waiting":"people"}. Assigning a heading does not change the entity's status. Updates replace the whole map: include other view assignments you want to retain. Omit the field to preserve assignments; pass {} or, on update, null to clear all assignments. To clear one view, send the map containing only the other assignments. Values must be nonempty section-ID strings; unknown view names remain supported for compatibility with newer apps.

The catalogue works in read-only mode. Assignment writes require --write. Cloud mode uses the existing data endpoint and works with Mindwtr Cloud 1.3.7. Desktop Local API mode supports task assignments by known ID, but does not expose the view section catalogue or project assignments; unsupported inputs are rejected.

来源:apps/mcp-server/README.md,提交 b7765f1

工具

28

mindwtr_list_tasks

List tasks from the configured Mindwtr backend. Filter by status, project, date range, today's focus (isFocusedToday), and GTD availability (view). `search` accepts the documented operator language (status:, context:, tag:, project:, due:<=7d, "quoted phrases", -negation) as well as plain text; note that a search always excludes deleted tasks, so includeDeleted has no effect when search is set. Supports sorting by various fields.

输入参数viewlimitoffsetsearchsortBystatusdueDateToprojectIdsortOrderdueDateFromincludeDeletedisFocusedToday

mindwtr_list_projects

List projects from the configured Mindwtr backend.

无需输入参数。

mindwtr_get_project

Get a single project by ID from the configured Mindwtr backend.

输入参数id必填includeDeleted

mindwtr_list_view_sections

List view section IDs, titles and order for Someday, Waiting or Focus. These are separate from project sections. Read-only; create or rename view sections in the app.

输入参数view

mindwtr_list_sections

List project sections from the configured Mindwtr backend. Optionally filter by projectId.

输入参数projectIdincludeDeleted

mindwtr_get_section

Get a single project section by ID from the configured Mindwtr backend.

输入参数id必填includeDeleted

mindwtr_list_areas

List areas from the configured Mindwtr backend.

无需输入参数。

mindwtr_list_people

List managed people from the configured Mindwtr backend.

输入参数includeDeleted

mindwtr_get_person

Get a single managed person by ID from the configured Mindwtr backend.

输入参数id必填includeDeleted

mindwtr_add_task

Add a task to the configured Mindwtr backend.

输入参数tagstitleareaIdstatusdueDatecontextslocationpriorityquickAddreviewAttaskModechecklist另有 22 个

mindwtr_update_task

Update a task in the configured Mindwtr backend.

输入参数id必填tagsordertitleareaIdstatusdueDatecontextslocationpriorityreviewAttaskMode另有 25 个

mindwtr_complete_task

Mark a task as done in the configured Mindwtr backend.

输入参数id必填

mindwtr_delete_task

Soft-delete a task in the configured Mindwtr backend.

输入参数id必填

mindwtr_get_task

Get a single task by ID from the configured Mindwtr backend.

输入参数id必填includeDeleted

mindwtr_restore_task

Restore a soft-deleted task in the configured Mindwtr backend.

输入参数id必填

mindwtr_add_project

Add a project to the configured Mindwtr backend.

输入参数colortitle必填areaIdstatusdueDatereviewAtisFocusedstartDateattachmentscancelledAtisSequentialsupportNotes另有 2 个

mindwtr_update_project

Update a project in the configured Mindwtr backend. Setting isSequential true makes a Per section project Sequential; perSectionFlow and section flow choices are managed by the apps and are read-only here.

输入参数id必填colortitleareaIdstatusdueDatereviewAtisFocusedstartDateattachmentscancelledAtisSequential另有 3 个

mindwtr_delete_project

Soft-delete a project in the configured Mindwtr backend.

输入参数id必填

mindwtr_add_section

Add a project-scoped section to the configured Mindwtr backend.

输入参数ordertitle必填projectId必填descriptionisCollapsed

mindwtr_update_section

Update a project section in the configured Mindwtr backend.

输入参数id必填ordertitledescriptionisCollapsed

mindwtr_delete_section

Soft-delete a project section in the configured Mindwtr backend. Tasks in the section are kept and moved to no section by core.

输入参数id必填

mindwtr_add_area

Add an area to the configured Mindwtr backend. On the local backend, a name a live area already has (any case) creates nothing: the result is that area, unchanged, with existing: true.

输入参数iconname必填color

mindwtr_update_area

Update an area in the configured Mindwtr backend.

输入参数id必填iconnamecolor

mindwtr_delete_area

Soft-delete an area in the configured Mindwtr backend.

输入参数id必填

mindwtr_add_person

Add a managed person to the configured Mindwtr backend.

输入参数name必填notereferenceLink

mindwtr_update_person

Update managed person metadata in the configured Mindwtr backend.

输入参数id必填namenotereferenceLink

mindwtr_rename_person

Rename a managed person. By default, matching task assignees are updated too.

输入参数id必填name必填updateTasks

mindwtr_delete_person

Soft-delete a managed person in the configured Mindwtr backend.

输入参数id必填

版本历史

7
  1. v1.1.14最新Nov 5, 2026
  2. v1.1.13Oct 22, 2026
  3. v1.1.12Oct 12, 2026
  4. v1.1.11Oct 5, 2026
  5. v1.1.10Sep 22, 2026
  6. v1.1.9Sep 18, 2026
  7. v1.1.8Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分