Every Skool community feature, plus a local SQLite mirror, FTS, and cross-community ops no other Skool tool ships.
Pulls every post, comment, member, course, lesson, and calendar event into a local SQLite store with FTS5 so you can query historical state, compute leaderboard deltas, and surface at-risk members the native UI cannot show. One auth_token cookie, two hosts (www.skool.com reads, api2.skool.com writes), zero CloudFront friction.
Created by @quoxientzero (Zain Haseeb). Contributors: @tmchow (Trevin Chow).
The recommended path installs both the skool-pp-cli binary and the pp-skool 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 skoolFor CLI only (no skill):
npx -y @mvanhorn/printing-press-library install skool --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 skool --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 skool --agent claude-code
npx -y @mvanhorn/printing-press-library install skool --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/media-and-entertainment/skool/cmd/skool-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 skool --cli-onlyThen install the focused Hermes skill.
From the Hermes CLI:
hermes skills install mvanhorn/printing-press-library/cli-skills/pp-skool --forceInside a Hermes chat session:
/skills install mvanhorn/printing-press-library/cli-skills/pp-skool --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 skool --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).
The bundle reuses your local browser session — set it up first if you haven't:
skool-pp-cli auth login --chromeTo install:
- Download the
.mcpbfor your platform from the latest release. - Double-click the
.mcpbfile. Claude Desktop opens and walks you through the install.
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.
go install github.com/mvanhorn/printing-press-library/library/other/skool/cmd/skool-pp-mcp@latestAdd to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"skool": {
"command": "skool-pp-mcp"
}
}
}Skool has no public API. Authenticate with the auth_token JWT cookie from your logged-in browser session: skool-pp-cli auth set-token (writes ~/.config/skool-pp-cli/config.toml). Same cookie covers reads and writes; CloudFront requires a realistic User-Agent which the CLI sets automatically.
# Paste your auth_token cookie value once; lives in TOML config
skool-pp-cli auth set-token
# First-time sync of the community into the local store
skool-pp-cli sync bewarethedefault
# List recent posts with field selection
skool-pp-cli posts list --limit 10 --json --select id,name,user.name
# Current 30-day leaderboard
skool-pp-cli leaderboard --type 30d --top 25
# Transcendence: members whose engagement velocity is dropping
skool-pp-cli members at-risk --weeks 4 --json
# What's new in the last day across the community
skool-pp-cli digest since 24h
These capabilities aren't available in any other tool for this API.
-
posts top— Rank recent posts by upvotes, comments, or engagement and return them with full content.Pick this for a daily/weekly cron that surfaces the 3-5 most-engaging posts from any community — perfect for catching up without scrolling.
skool-pp-cli posts top --community earlyaidopters --since 7d --top 5 --by engagement --json
-
leaderboard— Top members by points for the community, with level and bio fields included.Pick this when an agent needs the current community leaderboard in one call without scraping the page.
skool-pp-cli leaderboard --community bewarethedefault --top 25 --json
-
digest since— Aggregate everything new across posts, comments, members, and lessons since a timestamp.Pick this when an agent needs a single brief of community activity for a daily/weekly cron.
skool-pp-cli digest since 24h --json
-
sql— Run read-only SQL across every community in your local store.Pick this when an agent needs to compose a query across multiple Skool communities you own or operate.
skool-pp-cli sql 'SELECT community, COUNT(*) FROM posts GROUP BY community'
-
calendar export— Export upcoming community events to an .ics file for Google Cal / Outlook.Pick this when a member wants community events on their personal calendar without manual entry.
skool-pp-cli calendar export --ics > community.ics
-
classroom export— Export an entire course to a markdown bundle (modules, lessons, attachments, video URLs).Pick this when an agent needs to ingest a course for offline reference, search, or LLM retrieval.
skool-pp-cli classroom export <course-slug> --out ./course/
Run skool-pp-cli --help for the full command reference and flag list.
Community calendar events
skool-pp-cli calendar list- List upcoming and recent calendar events
Classroom (courses, modules, lessons) for a community
skool-pp-cli classroom get-course- Get a single course with its modules and lessonsskool-pp-cli classroom list- List all courses in a community
Community feed, settings, and metadata
skool-pp-cli community about- About page (rules, owner, member count)skool-pp-cli community info- Get the community feed (posts, leaderboard summary, upcoming events, settings)skool-pp-cli community leaderboard-tab- Leaderboard tab (community page rendered with t=leaderboard)skool-pp-cli community members-tab- Members tab data (community page rendered with t=members)
Current authenticated user dashboard
skool-pp-cli me get- Get current user, joined communities, and dashboard state
Community members and moderation
skool-pp-cli members approve- Approve a pending member requestskool-pp-cli members ban- Ban a member from the communityskool-pp-cli members pending- List pending member join requestsskool-pp-cli members reject- Reject a pending member request
User notifications
skool-pp-cli notifications list- List notifications for the authenticated userskool-pp-cli notifications mark-read- Mark notifications as read (empty ids = mark all)
Posts (forum threads) inside a community
skool-pp-cli posts comment- Add a comment to a postskool-pp-cli posts create- Create a new post (body = TipTap JSON; use --md to convert markdown)skool-pp-cli posts delete- Delete a postskool-pp-cli posts get- Get a post detail page including comment treeskool-pp-cli posts like- Like (upvote) a postskool-pp-cli posts unlike- Unlike a postskool-pp-cli posts update- Update an existing post
# Human-readable table (default in terminal, JSON when piped)
skool-pp-cli calendar mock-value --community example-value
# JSON for scripting and agents
skool-pp-cli calendar mock-value --community example-value --json
# Filter to specific fields
skool-pp-cli calendar mock-value --community example-value --json --select id,name,status
# Dry run — show the request without sending
skool-pp-cli calendar mock-value --community example-value --dry-run
# Agent mode — JSON + compact + no prompts in one flag
skool-pp-cli calendar mock-value --community example-value --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 and--ignore-missingto delete 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.
This CLI owns bounded freshness for registered store-backed read command paths. In --data-source auto mode, covered commands check the local SQLite store before serving results; stale or missing resources trigger a bounded refresh, and refresh failures fall back to the existing local data with a warning. --data-source local never refreshes, and --data-source live reads the API without mutating the local store.
Set SKOOL_NO_AUTO_REFRESH=1 to disable the pre-read freshness hook while preserving the selected data source.
Covered command paths:
skool-pp-cli notificationsskool-pp-cli notifications listskool-pp-cli notifications mark-read
JSON outputs that use the generated provenance envelope include freshness metadata at meta.freshness. This metadata describes the freshness decision for the covered command path; it does not claim full historical backfill or API-specific enrichment.
This CLI resolves endpoint placeholders at runtime, so one installed binary can target different tenants or API versions without regeneration.
Endpoint environment variables:
SKOOL_COMMUNITYresolves{community}SKOOL_BUILDIDresolves{buildId}
Base URL: https://www.skool.com
skool-pp-cli doctorVerifies configuration, credentials, and connectivity to the API.
Config file: ~/.config/skool-pp-cli/config.toml
Authentication errors (exit code 4)
- Run
skool-pp-cli doctorto check credentials Not found errors (exit code 3) - Check the resource ID is correct
- Run the
listcommand to see available items
- 404 on read endpoints — Run
skool-pp-cli doctor; the buildId likely rotated. The CLI auto-refetches but you can forceskool-pp-cli buildid refresh. - 403 from CloudFront — Your auth_token expired or User-Agent is missing. Run
skool-pp-cli auth statusthenauth set-tokenwith a fresh cookie. - Empty leaderboard delta — Need at least two snapshots. Run
skool-pp-cli syncover multiple days, orsync --snapshot-nowto seed two points.
This CLI uses Chrome-compatible HTTP transport for browser-facing endpoints. It does not require a resident browser process for normal API calls.
This CLI was built by studying these projects and resources:
- louiewoof2026/skool-mcp — TypeScript
- cristiantala/skool-all-in-one-api — TypeScript
- FlowExtractAPI/skool-scraper-pro — TypeScript
- moon-home/scraper — Python
- aperswal/Skool_Active_Members_Chrome_Extension — JavaScript
Generated by CLI Printing Press