Etherpad is a real-time collaborative editor scalable to thousands of simultaneous real time users. It provides full data export capabilities, and runs on your server, under your control.
Learn more at Etherpad.
Created by @JohnMcLear (John McLear).
The recommended path installs both the etherpad-pp-cli binary and the pp-etherpad agent skill (Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, and other agents supported by the upstream skills CLI) in one shot:
npx -y @mvanhorn/printing-press-library install etherpadFor CLI only (no skill):
npx -y @mvanhorn/printing-press-library install etherpad --cli-onlyFor skill only — installs the skill into the same agents as the default command above, but skips the CLI binary (use this to update or reinstall just the skill):
npx -y @mvanhorn/printing-press-library install etherpad --skill-onlyTo constrain the skill install to one or more specific agents (repeatable — agent names match the skills CLI):
npx -y @mvanhorn/printing-press-library install etherpad --agent claude-code
npx -y @mvanhorn/printing-press-library install etherpad --agent claude-code --agent codexIf npx isn't available (no Node, offline), install the CLI directly via Go (requires Go 1.26.4 or newer):
go install github.com/mvanhorn/printing-press-library/library/productivity/etherpad/cmd/etherpad-pp-cli@latestThis installs the CLI only — no skill.
Download a pre-built binary for your platform from the latest release. On macOS, clear the Gatekeeper quarantine: xattr -d com.apple.quarantine <binary>. On Unix, mark it executable: chmod +x <binary>.
Install the CLI binary first. The installer writes binaries to a per-user managed bin directory by default: $HOME/.local/bin on macOS/Linux and %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows.
npx -y @mvanhorn/printing-press-library install etherpad --cli-onlyThen install the focused Hermes skill.
From the Hermes CLI:
hermes skills install mvanhorn/printing-press-library/cli-skills/pp-etherpad --forceInside a Hermes chat session:
/skills install mvanhorn/printing-press-library/cli-skills/pp-etherpad --forceRestart the Hermes session or gateway if the newly installed skill is not visible immediately.
Install both the CLI binary and the focused OpenClaw skill. The installer defaults binaries to a per-user bin directory ($HOME/.local/bin on macOS/Linux, %LOCALAPPDATA%\Programs\PrintingPress\bin on Windows):
npx -y @mvanhorn/printing-press-library install etherpad --agent openclawRestart the OpenClaw session or gateway if the newly installed skill is not visible immediately.
This CLI ships an MCPB bundle — Claude Desktop's standard format for one-click MCP extension installs (no JSON config required).
To install:
- Download the
.mcpbfor your platform from the latest release. - Double-click the
.mcpbfile. Claude Desktop opens and walks you through the install. - Fill in
ETHERPAD_OPENIDwhen Claude Desktop prompts you.
Requires Claude Desktop 1.0.0 or later. Pre-built bundles ship for macOS Apple Silicon (darwin-arm64) and Windows (amd64, arm64); for other platforms, use the manual config below.
Manual JSON config (advanced)
If you can't use the MCPB bundle (older Claude Desktop, unsupported platform), install the MCP binary and configure it manually.
Install the MCP binary from this CLI's published public-library entry or pre-built release.
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"etherpad": {
"command": "etherpad-pp-mcp",
"env": {
"ETHERPAD_OPENID": "<your-key>"
}
}
}
}See Install above.
Get your access token from your API provider's developer portal, then store it:
etherpad-pp-cli auth set-token YOUR_TOKEN_HEREOr set it via environment variable:
export ETHERPAD_OPENID="your-token-here"etherpad-pp-cli doctorThis checks your configuration and credentials.
etherpad-pp-cli anonymize-authorRun etherpad-pp-cli --help for the full command reference and flag list.
Manage anonymize author
etherpad-pp-cli anonymize-author using-post- anonymizes an author across all their edits
Manage append chat message
etherpad-pp-cli append-chat-message using-post- appends a chat message
Manage append text
etherpad-pp-cli append-text using-post- appends text to a pad
Manage check token
etherpad-pp-cli check-token using-post- returns ok when the current API token is valid
Manage compact pad
etherpad-pp-cli compact-pad using-post- compacts a pad's revision history, keeping recent revisions only
Manage copy pad
etherpad-pp-cli copy-pad using-post- copies a pad with full history and chat
Manage copy pad without history
etherpad-pp-cli copy-pad-without-history using-post- copies a pad without history or chat
Manage create author
etherpad-pp-cli create-author using-post- creates a new author
Manage create author if not exists for
etherpad-pp-cli create-author-if-not-exists-for using-post- this functions helps you to map your application author ids to Etherpad author ids
Manage create diff html
etherpad-pp-cli create-diff-html create-diff-htmlusing-post- returns an HTML diff between two revisions of a pad
Manage create group
etherpad-pp-cli create-group using-post- creates a new group
Manage create group if not exists for
etherpad-pp-cli create-group-if-not-exists-for using-post- this functions helps you to map your application group ids to Etherpad group ids
Manage create group pad
etherpad-pp-cli create-group-pad using-post- creates a new pad in this group
Manage create pad
etherpad-pp-cli create-pad using-post- creates a new (non-group) pad. Note that if you need to create a group Pad, you should call createGroupPad
Manage create session
etherpad-pp-cli create-session using-post- creates a new session. validUntil is an unix timestamp in seconds
Manage delete group
etherpad-pp-cli delete-group using-post- deletes a group
Manage delete pad
etherpad-pp-cli delete-pad using-post- deletes a pad
Manage delete session
etherpad-pp-cli delete-session using-post- deletes a session
Manage get attribute pool
etherpad-pp-cli get-attribute-pool using-post- returns the attribute pool of a pad
Manage get author name
etherpad-pp-cli get-author-name using-post- Returns the Author Name of the author
Manage get chat head
etherpad-pp-cli get-chat-head using-post- returns the chatHead (chat-message) of the pad
Manage get chat history
etherpad-pp-cli get-chat-history using-post- returns the chat history
Manage get html
etherpad-pp-cli get-html get-htmlusing-post- returns the text of a pad formatted as HTML
Manage get last edited
etherpad-pp-cli get-last-edited using-post- returns the timestamp of the last revision of the pad
Manage get pad id
etherpad-pp-cli get-pad-id get-pad-idusing-post- returns the read-write pad ID for a given read-only pad ID
Manage get public status
etherpad-pp-cli get-public-status using-post- return true of false
Manage get read only id
etherpad-pp-cli get-read-only-id get-read-only-idusing-post- returns the read only link of a pad
Manage get revision changeset
etherpad-pp-cli get-revision-changeset using-post- returns the changeset at a given revision of a pad
Manage get revisions count
etherpad-pp-cli get-revisions-count using-post- returns the number of revisions of this pad
Manage get saved revisions count
etherpad-pp-cli get-saved-revisions-count using-post- returns the number of saved revisions of a pad
Manage get session info
etherpad-pp-cli get-session-info using-post- returns information about a session
Manage get stats
etherpad-pp-cli get-stats using-post- returns server-wide statistics
Manage get text
etherpad-pp-cli get-text using-post- returns the text of a pad
Manage list all groups
etherpad-pp-cli list-all-groups using-post- returns the IDs of all groups on this server
Manage list all pads
etherpad-pp-cli list-all-pads using-post- list all the pads
Manage list authors of pad
etherpad-pp-cli list-authors-of-pad using-post- returns an array of authors who contributed to this pad
Manage list pads
etherpad-pp-cli list-pads using-post- returns all pads of this group
Manage list pads of author
etherpad-pp-cli list-pads-of-author using-post- returns an array of all pads this author contributed to
Manage list saved revisions
etherpad-pp-cli list-saved-revisions using-post- returns the list of saved revisions of a pad
Manage list sessions of author
etherpad-pp-cli list-sessions-of-author using-post- returns all sessions of an author
Manage list sessions of group
etherpad-pp-cli list-sessions-of-group using-post- returns all sessions of a group
Manage move pad
etherpad-pp-cli move-pad using-post- moves a pad — copy then delete the original
Manage pad users
etherpad-pp-cli pad-users using-post- returns the list of users that are currently editing this pad
Manage pad users count
etherpad-pp-cli pad-users-count using-post- returns the number of user that are currently editing this pad
Manage restore revision
etherpad-pp-cli restore-revision using-post- restores a pad to a specific revision
Manage save revision
etherpad-pp-cli save-revision using-post- saves a revision of a pad
Manage send clients message
etherpad-pp-cli send-clients-message using-post- sends a custom message of type msg to the pad
Manage set html
etherpad-pp-cli set-html set-htmlusing-post- sets the text of a pad with HTML
Manage set public status
etherpad-pp-cli set-public-status using-post- sets a boolean for the public status of a pad
Manage set text
etherpad-pp-cli set-text using-post- sets the text of a pad
# Human-readable table (default in terminal, JSON when piped)
etherpad-pp-cli anonymize-author
# JSON for scripting and agents
etherpad-pp-cli anonymize-author --json
# Filter to specific fields
etherpad-pp-cli anonymize-author --json --select id,name,status
# Dry run — show the request without sending
etherpad-pp-cli anonymize-author --dry-run
# Agent mode — JSON + compact + no prompts in one flag
etherpad-pp-cli anonymize-author --agentThis CLI is designed for AI agent consumption:
- Non-interactive - never prompts, every input is a flag
- Pipeable -
--jsonoutput to stdout, errors to stderr - Filterable -
--select id,namereturns only fields you need - Previewable -
--dry-runshows the request without sending - Explicit retries - add
--idempotentto create retries when a no-op success is acceptable - Confirmable -
--yesfor explicit confirmation of destructive actions - Piped input - write commands can accept structured input when their help lists
--stdin - Offline-friendly - sync/search commands can use the local SQLite store when available
- Agent-safe by default - no colors or formatting unless
--human-friendlyis set
Exit codes: 0 success, 2 usage error, 3 not found, 4 auth error, 5 API error, 7 rate limited, 10 config error.
etherpad-pp-cli doctorVerifies configuration, credentials, and connectivity to the API.
Config file: ~/.config/etherpad-pp-cli/config.toml
Static request headers can be configured under headers; per-command header overrides take precedence.
Environment variables:
| Name | Kind | Required | Description |
|---|---|---|---|
ETHERPAD_OPENID |
per_call | Yes | Set to your API credential. |
Authentication errors (exit code 4)
- Run
etherpad-pp-cli doctorto check credentials - Verify the environment variable is set:
echo $ETHERPAD_OPENIDNot found errors (exit code 3) - Check the resource ID is correct
- Run the
listcommand to see available items
Generated by CLI Printing Press