Create, update, complete nodes, search & replace with regex and dry run, usage reports, transforms
io.github.mholzen/workflowy — MCP Server & CLI for Workflowy
This Model Context Protocol (MCP) server and command line interface (CLI) connects an AI assistant to Workflowy data. It enables creating, updating, and completing nodes, plus searching and replacing content using regex. It also supports dry runs and usage reports, and includes transforms and offline access.
🛠️ Key Features
Create, update, complete nodes
Search and replace with regex
Bulk replace and dry run behavior
Usage reports
Transforms and offline access
🚀 Use Cases
Connect Claude or ChatGPT to Workflowy data via MCP
Run Workflowy operations from a terminal emulator or script
Perform safe (dry-run) regex-based search and bulk replace
⚡ Developer Benefits
Written in Go
CLI available alongside the MCP server
Supports transforms and offline access for local workflows
⚠️ Limitations
Description does not specify authentication, deployment method, or supported platforms beyond Go-based tooling.
A feature-rich Model Context Protocol (MCP) server and Command Line Interface (CLI) for Workflowy written in Go. Connect your AI assistant (Claude, ChatGPT, etc.) to your Workflowy data or run commands from a terminal emulator or script, including search, bulk replace, usage reports, and offline access capabilities.
# Get the top-level nodes, and nodes two levels deep
workflowy get
# Generate a report showing where most of your nodes are
workflowy report count | pbcopy # paste directly into Workflowy!
Use pbcopy on macOS, clip on Windows, wl-copy on Linux, or xclip for X11 systems.
Use with Claude Desktop or Claude Code
Claude Code
bash
claude mcp add --transport=stdio workflowy -- workflowy mcp --expose=all
# Find all TODOs (case-insensitive)
workflowy search -i "foobar"# Regex search for dates
workflowy search -E "<time.*>"# Search within a specific subtree (using Internal Link)
workflowy search "bug" --item-id https://workflowy.com/#/1bdae4aecf00
Bulk Search and Replace
bash
# Preview changes first (dry run)
workflowy replace --dry-run "foo""bar"# Interactive confirmation
workflowy replace --interactive "foo""bar"# Use regex capture groups
workflowy replace "TASK-([0-9]+)"'ISSUE-$1'
Some Common CRUD Operations
bash
# Add a task to your inbox
workflowy create "Buy groceries" --parent-id=inbox
# Change the name of an item
workflowy update xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx --name "Project Plan v2"# Move an item to a different parent
workflowy move <item-id> <new-parent-id>
# Mark a node as complete, using a short ID
workflowy complete https://workflowy.com/#/xxxxxxxxxxxx
# Resolve a short ID or target key to full UUID
workflowy id inbox
Transform Content
bash
# Split a node's content by newlines into child nodes
workflowy transform <item-id> split -s "\n"# Clean up text
workflowy transform <item-id> trim
workflowy transform <item-id> no-punctuation
# Pipe content through any shell command (e.g., an LLM)
workflowy transform <item-id> -x 'echo {} | llm "summarize this"'
Usage Reports
bash
# Where is most of my content?
workflowy report count --threshold 0.01
# Which nodes have the most children?
workflowy report children --top-n 20
# Find stale content (oldest modified)
workflowy report modified --top-n 50
# Find most mirrored nodes (requires backup)
workflowy report mirrors --top-n 20
Data Access Methods
Choose the best method for your use case:
Method
Speed
Freshness
Offline
Best For
--method=get
Medium
Real-time
No
Specific items
--method=export
Fast*
1 min worst case (due to rate limiting)
No
Full tree access
--method=backup
Fastest
Stale
Yes
Bulk operations
*Cached after first fetch
Offline Mode with Dropbox Backup
Enable Workflowy's Dropbox backup and access your data offline:
bash
workflowy get --method=backup
workflowy search -i "project" --method=backup