Connects Claude to Workflowy's API with full CRUD operations plus some genuinely useful power tools. You get the basics like creating, updating, and completing nodes, but the real draw is bulk regex search and replace with dry run mode, content transformations that can split nodes or pipe through shell commands, and usage reports that surface stale content or show where your outline is bloated. Supports offline mode via Dropbox backups and lets you sandbox AI writes to specific subtrees. Ships as both an MCP server and standalone CLI, so you can script the same operations outside of Claude. If you keep serious data in Workflowy and want programmatic access beyond their web UI, this gives you the full toolkit.
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.
--write-root-idbrew install mholzen/workflowy/workflowy-cli
mkdir -p ~/.workflowy
echo "your-api-key-here" > ~/.workflowy/api.key
Get your API key at https://workflowy.com/api-key/
# 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.
claude mcp add --transport=stdio workflowy -- workflowy mcp --expose=all
Remove —expose=all to limit to read-only tools.
Add to your configuration file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json{
"mcpServers": {
"workflowy": {
"command": "workflowy",
"args": ["mcp", "--expose=all"]
}
}
}
Restart Claude Desktop and start asking Claude to work with your Workflowy!
| Tool | Description |
|---|---|
workflowy_get | Get a node and its descendants as a tree |
workflowy_list | List descendants as a flat list |
workflowy_search | Search nodes by text or regex |
workflowy_targets | List shortcuts and system targets (inbox, etc.) |
workflowy_id | Resolve short ID or target key to full UUID |
workflowy_report_count | Find where most of your content lives |
workflowy_report_children | Find nodes with many children |
workflowy_report_created | Find oldest nodes |
workflowy_report_modified | Find stale, unmodified nodes |
workflowy_report_mirrors | Find most mirrored nodes (requires backup) |
| Tool | Description |
|---|---|
workflowy_create | Create new nodes |
workflowy_update | Update node content |
workflowy_move | Move node to a new parent |
workflowy_delete | Delete nodes |
workflowy_complete | Mark nodes complete |
workflowy_uncomplete | Mark nodes incomplete |
workflowy_replace | Bulk find-and-replace with regex |
workflowy_transform | Transform node content (split, trim, shell commands) |
# 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
# 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'
# 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
# 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"'
# 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
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
Enable Workflowy's Dropbox backup and access your data offline:
workflowy get --method=backup
workflowy search -i "project" --method=backup
brew install mholzen/workflowy/workflowy-cli
scoop bucket add workflowy https://github.com/mholzen/scoop-workflowy
scoop install workflowy
go install github.com/mholzen/workflowy/cmd/workflowy@latest
Download pre-built binaries from GitHub Releases.
docker run --rm -e WORKFLOWY_API_KEY=your-key ghcr.io/mholzen/workflowy:latest get
git clone https://github.com/mholzen/workflowy.git
cd workflowy
go build ./cmd/workflowy
Ask Claude:
# Morning review: find stale items
workflowy report modified --top-n 20
# Weekly cleanup: find oversized nodes
workflowy report count --threshold 0.05
# Find unnecessary mirrors
workflowy report mirrors --top-n 20
# Bulk rename: update project prefix
workflowy replace "OLD-" "NEW-" --parent-id projects-folder-id
# Split pasted content into child nodes
workflowy transform <item-id> split -s "\n"
Contributions welcome! See the Contributing Guide.
# Development setup
git clone https://github.com/mholzen/workflowy.git
cd workflowy
go test ./...
MIT — see LICENSE
WORKFLOWY_API_KEY*secretYour Workflowy API key (get it from https://workflowy.com/api-key/)
com.mcparmory/google-search
io.github.pipeworx-io/brave-search
marcopesani/mcp-server-serper
brave/brave-search-mcp-server
com.mcparmory/google-search-console
acamolese/google-search-console-mcp