mholzen
workflowy
Go

Powerful CLI and MCP server for WorkFlowy: reports, search/replace, backup support, and AI integration (Claude, LLMs)

Last updated Jul 5, 2026
65
Stars
4
Forks
6
Issues
+2
Stars/day
Attention Score
45
Language breakdown
No language data available.
โ–ธ Files click to expand
README

Workflowy MCP Server & CLI

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.

Go Homebrew MCP Compatible MIT License

Why This Workflowy MCP Server?

- Full-text search with regex - Bulk search & replace - Content transformation (split, clean, pipe to LLMs) - Usage reports (stale nodes, size analysis, mirrors) - Sandboxed AI access with --write-root-id - Offline mode via backup files - CLI + MCP server in one tool - Caching for performance - Homebrew installation - Basic CRUD operations - Using short IDs (Copy Internal Link)

Quick Start

Install via Homebrew

brew install mholzen/workflowy/workflowy-cli

Configure Your API Key

mkdir -p ~/.workflowy
echo "your-api-key-here" > ~/.workflowy/api.key

Get your API key at https://workflowy.com/api-key/

Run Your First Command

# 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

claude mcp add --transport=stdio workflowy -- workflowy mcp --expose=all

Remove โ€”expose=all to limit to read-only tools.

Claude Desktop

Add to your configuration file:

  • macOS: ~/Library/Application Support/Claude/claudedesktopconfig.json
  • Windows: %APPDATA%\Claude\claudedesktopconfig.json
{
  "mcpServers": {
    "workflowy": {
      "command": "workflowy",
      "args": ["mcp", "--expose=all"]
    }
  }
}

Restart Claude Desktop and start asking Claude to work with your Workflowy!

MCP Tools for AI Assistants

Read Tools (Safe)

| 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 | | workflowyreportcount | Find where most of your content lives | | workflowyreportchildren | Find nodes with many children | | workflowyreportcreated | Find oldest nodes | | workflowyreportmodified | Find stale, unmodified nodes | | workflowyreportmirrors | Find most mirrored nodes (requires backup) |

Write Tools

| 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) |

CLI Features

Search Your Entire Outline

# 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

# 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

# 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

# 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

# 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:

workflowy get --method=backup
workflowy search -i "project" --method=backup

Installation Options

Homebrew (macOS & Linux)

brew install mholzen/workflowy/workflowy-cli

Scoop (Windows)

scoop bucket add workflowy https://github.com/mholzen/scoop-workflowy
scoop install workflowy

Go Install

go install github.com/mholzen/workflowy/cmd/workflowy@latest

Download Binary

Download pre-built binaries from GitHub Releases.

Docker

docker run --rm -e WORKFLOWYAPIKEY=your-key ghcr.io/mholzen/workflowy:latest get

From Source

git clone https://github.com/mholzen/workflowy.git
cd workflowy
go build ./cmd/workflowy

Documentation

Examples

AI Assistant Workflows

Ask Claude:

  • "Search my Workflowy for all items containing 'meeting notes'"
  • "Show me nodes I haven't touched in 6 months"
  • "Replace all 'v1' with 'v2' in my Project A folder"
  • "What's taking up the most space in my outline?"
  • "Which nodes are mirrored the most?"
  • "Move this item to my inbox"

CLI Workflows

# 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"

Contributing

Contributions welcome! See the Contributing Guide.

# Development setup
git clone https://github.com/mholzen/workflowy.git
cd workflowy
go test ./...

License

MIT โ€” see LICENSE

Acknowledgments

  • Thanks to Andrew Lisy for requesting a method to sandbox write commands
  • Thanks to Craig P. Motlin for pointing out mirrors are defined in the backup files
๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท mholzen/workflowy ยท Updated daily from GitHub