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.
Printed by @JohnMcLear (John McLear).
The recommended path installs both the etherpad-pp-cli binary and the pp-etherpad agent skill in one shot:
npx -y @mvanhorn/printing-press install etherpadFor CLI only (no skill):
npx -y @mvanhorn/printing-press install etherpad --cli-onlyThe generated install path is category-agnostic until this CLI is published. If npx is not available before publish, install Node or use the category-specific Go fallback from the public-library entry after publish.
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>.
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 --forceTell your OpenClaw agent (copy this):
Install the pp-etherpad skill from https://github.com/mvanhorn/printing-press-library/tree/main/cli-skills/pp-etherpad. The skill defines how its required CLI can be installed.
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.
Install the focused skill — it auto-installs the CLI on first invocation:
npx skills add mvanhorn/printing-press-library/cli-skills/pp-etherpad -gThen invoke /pp-etherpad <query> in Claude Code. The skill is the most efficient path — Claude Code drives the CLI directly without an MCP server in the middle.
This package ships CLI + skill only. For MCP, use ep_ai_mcp — a hand-rolled, in-process MCP plugin that mounts at /mcp on a running Etherpad instance. It exposes changeset-aware tools the HTTP API can't: per-paragraph authorship, text-provenance, smart edit_pad with find-and-replace, pad search, etc. Install with pnpm run plugins i ep_ai_core ep_ai_mcp.
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