A Rust MCP server that gives Claude (Code, Desktop, or web) read/write access to your Workflowy graph, plus a generic template for turning that raw access into a working second brain. There are two ways to use it: 1. Bare MCP server. Wire the binary into your MCP host and call the 26 tools directly. No templates, no opinions. 2. Second brain. Hand BOOTSTRAP.md to Claude. The assistant follows the
Add this skill
npx mdskills install dromologue/workflowymcp@dromologue? Sign in with GitHub to claim this listing.Exposes 26 well-organized Workflowy tools with robust error handling and comprehensive reliability properties
1# Workflowy MCP Server23A Rust MCP server that gives Claude (Code, Desktop, or web) read/write access4to your Workflowy graph, plus a generic template for turning that raw access5into a working second brain.67There are two ways to use it:891. **Bare MCP server.** Wire the binary into your MCP host and call the 2610 tools directly. No templates, no opinions.112. **Second brain.** Hand [`BOOTSTRAP.md`](BOOTSTRAP.md) to Claude. The12 assistant follows the script: builds the binary, wires the host, sets up13 `~/code/secondBrain/` for your specific data, and installs the wflow14 skill that drives every subsequent session.1516The methodology in option 2 is opinionated; the server itself is not. The17repo only ships generic templates — your node IDs, drafts, and session logs18live in `~/code/secondBrain/`, never in this repo.1920---2122## Quick install2324```bash25git clone https://github.com/dromologue/workflowyMCP.git ~/code/workflowy-mcp-server26cd ~/code/workflowy-mcp-server27cargo build --release28echo "WORKFLOWY_API_KEY=<your-token>" > .env29```3031Wire the resulting `target/release/workflowy-mcp-server` into your MCP host:3233- **Claude Code:** `claude mcp add workflowy -- $(pwd)/target/release/workflowy-mcp-server`34- **Claude Desktop:** edit35 `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS)36 or `%APPDATA%\Claude\claude_desktop_config.json` (Windows). See37 [BOOTSTRAP.md](BOOTSTRAP.md) for the JSON shape.3839Verify with `workflowy_status` — the host should return40`status: "ok"`, `api_reachable: true`.4142That's it for plain MCP usage.4344---4546## Set up the second brain (recommended)4748Hand [`BOOTSTRAP.md`](BOOTSTRAP.md) to Claude. The assistant runs through49six steps: build, wire the host, bootstrap `~/code/secondBrain/`, populate50your structural node IDs, install the wflow skill, and (optionally)51pre-warm the persistent name index. After bootstrap, the assistant follows52[`templates/skills/wflow/SKILL.md`](templates/skills/wflow/SKILL.md) as the53operating manual.5455The detailed long-form walkthrough — multi-surface deployment, large-tree56convergence, troubleshooting — lives in [`docs/SETUP.md`](docs/SETUP.md).5758---5960## What ships in this repo6162```63workflowyMCP/64├── BOOTSTRAP.md ← LLM-facing install script (hand to Claude)65├── README.md ← this file66├── docs/SETUP.md ← long-form bootstrap notes67├── specs/specification.md ← authoritative behavioural spec68├── templates/69│ ├── secondbrain/ ← skeleton of ~/code/secondBrain/70│ │ ├── README.md71│ │ ├── memory/workflowy_node_links.md (template; user fills in)72│ │ ├── drafts/ session-logs/ briefs/73│ └── skills/wflow/SKILL.md ← the operating manual the assistant follows74└── src/ ← Rust MCP server source75```7677User-specific data (node IDs, drafts, session logs, briefs) belongs in78`~/code/secondBrain/`. The repo content stays generic so the next person79who clones it gets a clean starting point.8081---8283## Tool reference8485The server exposes 26 tools. `node_id` accepts any of: full UUID (with or86without hyphens), 12-char URL-suffix short hash, or 8-char prefix.8788| Category | Tools |89|----------|-------|90| Search & navigate | `node_at_path`, `resolve_link`, `search_nodes`, `find_node`, `get_node`, `list_children`, `tag_search`, `get_subtree`, `find_backlinks`, `path_of`, `find_by_tag_and_path` |91| Create & edit | `create_node`, `batch_create_nodes`, `insert_content`, `smart_insert`, `convert_markdown`, `edit_node`, `move_node`, `delete_node`, `duplicate_node`, `create_from_template`, `bulk_update`, `bulk_tag`, `transaction`, `export_subtree` |92| Todos & scheduling | `list_todos`, `list_upcoming`, `list_overdue`, `daily_review`, `since` |93| Project management | `get_project_summary`, `get_recent_changes` |94| Diagnostics & ops | `workflowy_status`, `health_check`, `cancel_all`, `build_name_index`, `audit_mirrors`, `review`, `get_recent_tool_calls` |9596For large workspaces, prefer `node_at_path` (path of names → UUID, ~1 second97on any tree size) and `resolve_link` (Workflowy URL + optional parent path98→ full node info) over `search_nodes`. They cost O(depth) API calls instead99of O(tree).100101Conventions parsed from node text:102103- Tags: `#inbox`, `#review`, `#urgent`104- Assignees: `@alice`, `@bob`105- Due dates: `due:2026-03-15`, `#due-2026-03-15`, or bare `2026-03-15`106 (priority order)107108---109110## Reliability properties111112Every API-touching handler runs inside a uniform `run_handler` wrapper113that observes the server-wide cancel registry and applies a114kind-appropriate wall-clock deadline:115116| Tool kind | Budget | Examples |117|-----------|--------|----------|118| Read | 30 s | `get_node`, `list_children` |119| Write | 15 s | `create_node`, `delete_node`, `edit_node` |120| Bulk | 210 s | `insert_content`, `transaction`, `bulk_update`, `path_of`, `node_at_path` |121| Walk | 20 s (internal) | `search_nodes`, `get_subtree`, `find_node` |122123`cancel_all` interrupts any in-flight tool within ~50 ms. On budget124expiry, bulk operations return a structured partial-success payload125(`status: "partial"`, `created_count`, `last_inserted_id`, etc.) so the126caller can resume — no "no result received" without diagnostic.127128For the full list (transport-timeout retry, `authenticated`/`api_reachable`129decoupling, `null` parameter handling, etc.) see130[`specs/specification.md`](specs/specification.md). 272 lib tests pin the131contracts, including 21 wiremock-driven failure-mode tests that run in132under 2 seconds.133134---135136## CLI: `wflow-do`137138A second binary exposes the same operations as a plain shell command.139Useful as a fallback when the MCP transport drops.140141```bash142target/release/wflow-do status # liveness143target/release/wflow-do search --query "concept maps"144target/release/wflow-do --dry-run delete <uuid> # preview145target/release/wflow-do reindex --root <UUID> --root <UUID> # pre-warm index146```147148Subcommands: `status`, `get`, `children`, `create`, `move`, `delete`,149`edit`, `search`, `audit-mirrors`, `review`, `index`, `reindex`. Use150`--json` for raw output, `--dry-run` (write verbs only) to preview without151calling the API.152153---154155## Development156157```bash158cargo build # debug159cargo build --release # optimised160cargo test --lib # 272 unit tests161cargo check # type-check only162```163164Architectural overview: [CLAUDE.md](CLAUDE.md). Behavioural spec:165[specs/specification.md](specs/specification.md).166167---168169## License170171MIT172
Full transparency — inspect the skill content before installing.