Quick reference (TL;DR for agents)
- What this enables: operate a Skool community from inside Cursor — “approve the pending members with a real LinkedIn”, “post this changelog to the community feed” — in plain English while you stay in your editor.
- Method: add the Apify-hosted Skool All-in-One API actor as an MCP server in
~/.cursor/mcp.json(or.cursor/mcp.jsonper project) via Apify’s MCP gateway. Cursor lists every Skool action as a tool.- Config: one
mcpServersentry runningnpx @apify/actors-mcp-server --actors=cristiantala/skool-all-in-one-api.- Auth flow:
auth:loginonce →cookiesstring cached → reuse for ~3.5 days.- Cost: Apify pay-per-event (~$0.005–$0.01 per Skool action). Cursor on your existing plan.
Why Cursor + Skool?
Skool has no official API. If Cursor is where you write code, the last thing you want is to alt-tab to the Skool web UI to approve a member or pin a post — context-switching out of your editor breaks flow.
Cursor speaks MCP natively: it reads mcp.json, discovers every tool an MCP server exposes, and lets the Agent call them with approval. The Skool All-in-One API actor plugs in as one MCP server, so all 30+ Skool admin actions become tools in your chat alongside your codebase tools.
Why this is a clean fit for Cursor specifically:
mcp.jsonis project-aware. Drop the server in.cursor/mcp.jsonand the Skool tools travel with that repo — perfect if a specific project (your community’s site, your bot) is where you manage Skool.- The Agent already plans multi-step. “Review the waitlist, approve verified LinkedIn, summarize the rest” is one sentence; Cursor calls
members:pending, screens, thenmembers:batchApprove. - Tool approval is built in. Cursor asks before each tool call by default — you see the exact args (
memberId, post content) before anything writes to Skool. Flip on auto-run later for low-stakes reads.
This page is the MCP-native path for Cursor. For the general MCP pattern (and other clients), see Skool MCP. Not in an editor? Skool + Claude Code covers the CLI.
Setup — add one MCP server (5 minutes)
1. Get your Apify API token
Sign up at apify.com — the free tier covers most communities. Grab a token from console.apify.com/account/integrations.
2. Add the Skool actor to mcp.json
Cursor reads MCP servers from two locations:
- Project:
.cursor/mcp.jsonin the repo root — Skool tools available only in that project. - Global:
~/.cursor/mcp.jsonin your home directory — Skool tools everywhere.
Create or edit the file and add the Skool actor as an MCP server:
{
"mcpServers": {
"skool": {
"command": "npx",
"args": [
"-y",
"@apify/actors-mcp-server",
"--actors=cristiantala/skool-all-in-one-api"
],
"env": {
"APIFY_TOKEN": "${env:APIFY_TOKEN}"
}
}
}
}
Cursor supports config interpolation, so ${env:APIFY_TOKEN} pulls the token from your shell environment instead of hardcoding it. Set it in your ~/.zshrc:
export APIFY_TOKEN=apify_api_...
3. Enable and verify
Open Settings (Cmd+Shift+J) → Features → Model Context Protocol. The skool server should be listed and toggled on. The Skool actions appear under Available Tools in chat. Pass your Skool cookies and groupSlug as params on the first call (or fetch cookies with auth:login — see the example below).
Tip: Use the Cursor Marketplace / cursor.directory one-click install only for servers you trust. For Skool, the JSON above is the canonical, auditable setup.
Example session — triage the waitlist without leaving your repo
You’re mid-feature in Cursor and a notification reminds you the waitlist is piling up. In the Agent panel you type:
List my pending Skool members and approve the ones with a real LinkedIn. Show me the borderline cases so I can decide.
Cursor plans and calls the tools (asking for your approval on each write):
1. skool_members_pending → fetches the approval queue
2. (Agent screens each: LinkedIn reachable? survey specific?)
3. skool_members_batch_approve → approves the clear yeses in one call
4. prints the borderline ones → you click approve/reject inline
You never left the editor. The tool-confirmation dialog shows you the exact memberId list before the batch approval fires, so there are no surprises. End-to-end this is ~30 seconds and about a cent per approved member. Full walkthrough: Review & batch-approve your waitlist.
How it works
Cursor (your editor) Apify Skool
──────────────────── ───── ─────
reads ~/.cursor/mcp.json
→ spawns @apify/actors-mcp-server (stdio)
│ Agent picks tool + params
▼
[MCP tool call ──────POST JSON───→ run-sync-get-dataset-items ──→ api.skool.com]
{ action, cookies, groupSlug, ... } (login + WAF token +
│ │ buildId handled by actor)
◄──────── { success: true, data } ◄────────────────────────┘
│
renders result in the Agent panel
Every Skool operation is one MCP tool call → one HTTP POST. The actor handles Playwright login, WAF token rotation, and Skool buildId changes. Cursor just sees a clean toolset.
What you can ask Cursor to do — full action surface
The MCP server exposes the entire Skool admin surface as tools. You ask in plain English; the Agent maps it to one of these actions. Full params for each: Actions reference.
Posts & comments
| Action | What it does |
|---|---|
posts:list / posts:filter |
List or filter posts (by date, label, unanswered) |
posts:get |
Fetch a single post |
posts:create |
Publish a post (plain text + optional label/video) |
posts:update / posts:delete |
Edit or delete a post/comment |
posts:createComment |
Comment on a post or reply to a comment |
posts:pin / posts:unpin |
Pin or unpin a post |
posts:vote |
Upvote / clear vote |
posts:getComments / posts:getCommentsFull |
Read a post’s comment tree (fast / full-scroll, no cap) |
Members
| Action | What it does |
|---|---|
members:list |
List active members |
members:pending |
List the approval queue |
members:approve / members:reject |
Approve or reject one applicant |
members:batchApprove |
Approve N applicants in one run |
members:ban |
Ban a member (destructive — confirm first) |
Events
| Action | What it does |
|---|---|
events:list / events:upcoming |
List calendar events (all / future only) |
Classroom (courses)
| Action | What it does |
|---|---|
classroom:listCourses / classroom:getTree |
List courses / read a course’s full tree |
classroom:createCourse / createFolder / createPage |
Build course structure |
classroom:setBody |
Set a lesson’s content (markdown → auto-converted to TipTap) |
classroom:updateCourse |
Edit course settings — cover, tier, privacy (read-then-write) |
classroom:updateResources |
Attach / detach downloadable files on a lesson |
classroom:deleteUnit |
Delete a course / folder / page (destructive — confirms first) |
Files & groups
| Action | What it does |
|---|---|
files:uploadImage / files:uploadFile |
Upload a cover image / a private attachment |
groups:get |
Read group metadata (incl. post categories) |
groups:setAutoDM |
Set the welcome DM new members receive |
System
| Action | What it does |
|---|---|
system:health / system:debug |
Healthcheck / SSR diagnostics |
auth:login |
Get fresh cookies (~3.5 day TTL) |
Cursor-specific gotchas
- Tools default to “ask for approval”. Cursor prompts before every MCP tool call — good for writes (you confirm the
memberIdor post content), tedious for read-heavy sessions. Enable auto-run only for read actions, or pre-list safe tools in~/.cursor/permissions.json. Keep writes manual. - Cookies live in params, not env. Unlike a custom MCP server, the Apify gateway is generic — pass
cookiesandgroupSlugas tool-call params. Have the Agent callauth:loginonce, then reuse the returnedcookiesfor ~3.5 days. Re-run onWAF_EXPIRED. - Restart after editing
mcp.json. Cursor loads MCP servers at startup. After changing the file, toggle the server off/on in Settings → Features → Model Context Protocol, or reload the window. - Debug via MCP Logs. If the
skoolserver shows no tools, open the Output panel (Cmd+Shift+U) and select “MCP Logs” — npx download failures and token errors show there. x402-payment-requiredon every call: Not a billing issue — it’s a staleUNDER_MAINTENANCEflag from Apify’s heuristic. Open the actor page in Apify Console once to reset. Details in error handling.parentIdfor comment replies: top-level comment →rootId == parentId == postId. Reply to a comment →rootId == postId,parentId == commentId. Mixing these is the most common silent bug.memberIdvsid: for approve/reject, passmemberIdfrommembers:pending, not the requestid. The wrong one gives a silent 404.
Hand this to your agent
Don’t want to touch mcp.json yet? Paste this into Cursor’s Agent (or any coding agent) and it knows the MCP setup for Skool in one shot:
To operate a Skool community from Cursor, add the Apify-hosted "Skool All-in-One API"
actor (cristiantala/skool-all-in-one-api) as an MCP server. Skool has no official API;
this actor is it.
Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
{
"mcpServers": {
"skool": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server", "--actors=cristiantala/skool-all-in-one-api"],
"env": { "APIFY_TOKEN": "${env:APIFY_TOKEN}" }
}
}
}
Then Settings (Cmd+Shift+J) → Features → Model Context Protocol → enable "skool".
The Skool actions appear as tools. Auth: call action "auth:login" with {email,password,groupSlug}
ONCE, reuse the returned `cookies` (~3.5 day TTL); re-run on errorCode "WAF_EXPIRED".
Approve/reject use params.memberId (from members:pending), NOT id.
Comment reply: parentId = the comment id, rootId = the post id; top-level = both postId.
Full action list + params: https://skool-api.cristiantala.com/for/ai-agents/
For the full agent primer (function-calling specs, idempotency table, error-recovery patterns), see Skool for AI agents.
See also
- Skool MCP — the general MCP pattern + the hosted gateway, shared by all MCP clients
- Skool + Cline — same MCP path, inside VS Code
- Skool + Windsurf — same MCP path, inside Cascade
- Skool + Claude Code — the terminal/CLI path with a drop-in Skill
- Skool for AI agents — full pattern library + function-calling specs
- Actions reference — complete list of actions and params
- All integrations →
Plug Skool into Cursor today
→ Use the Skool All-in-One API actor on Apify
- Pay-per-event (~$0.005–$0.01 per Skool action, ~$1.50/mo typical)
- Read AND write — full API surface (posts, comments, members, classroom, files, Auto DM)
- One
mcpServersentry, no integration code to maintain
No Skool community yet? Launch one in 10 minutes — 14-day free trial.