Skip to main content
Glama

Skool API and MCP server: connect Skool to ChatGPT and Claude

Yes, ChatGPT, Claude and other AI agents can work in your Skool account. That includes Cursor, Codex, OpenClaw and any MCP client, plus automations in n8n, Make and Zapier. Ask in plain words, and the AI approves membership requests, posts and comments, answers members, sets up Calendar events and reports new members, churn and MRR. It shows you what it will do first and sends nothing to other people until you say so.

As of November 2026, this repo is the missing piece: 71 Skool tools for AI assistants and scripts.

What you can ask

Show me pending membership requests and approve the ones whose answers mention a business.

Which posts from the last 7 days have no comments yet? Draft a reply for each.

Create a Calendar event for Thursday 6pm CET with the Zoom link and pin an announcement about it.

Tell me new members, churn and MRR for the last 30 days.

Related MCP server: Browser Jet Pilot

Two ways to get it

Ready to use, at Cotlet

Run it yourself, this repo

For

community owners and admins

developers

Setup

sign in to Skool once, about 5 minutes, nothing to install

Python and a terminal

Works in

ChatGPT and Claude apps, on your phone too, Cursor, Codex, OpenClaw, any MCP client, n8n, Make, Zapier, REST API

Claude Code, Claude Desktop, Cursor, Codex on your computer

Runs

24/7, your computer can be off

while your computer is on

Price

7 days free, no card

free

Cotlet is best for community owners and admins who want ChatGPT, Claude or another AI agent to work in Skool for them, with nothing to install.

Start free at cotlet.dev →

Run it yourself

A Skool API and a Skool MCP server you run on your own computer, in Python, on the session of your own Google Chrome. All 71 Skool tools we run in production at Cotlet: members, membership requests, posts, comments, polls, Classroom, video transcripts, Calendar, group settings, Skool Chat and stats.

Skool has no public API and no official MCP server. This repo gives you both:

  • MCP server for Claude Code, Claude Desktop, Cursor, Codex and any MCP client, over stdio or HTTP. Setup

  • REST API on http://127.0.0.1:8787/api/v1/skool, with OpenAPI docs at /docs. Setup

  • Python: call("list_members", group="yourgroup"), plus 16 ready scripts in examples/.

Free for your own use, your own business included (license).

Skool MCP server Python 3.11+ License: Elastic 2.0 MCP Badge

uv tool install skool-api-mcp                  # or: pip install skool-api-mcp
skool-mcp connect                                  # reads your Skool session from Chrome
skool-mcp call list_groups
claude mcp add skool -- uvx skool-api-mcp mcp

Contents

Questions from Skool users

Does Skool have an API? No. Skool has no public API and no developer docs. The only official connection is the Zapier plugin on the Pro plan, which sends new paid members and Membership Questions answers out, invites a member and unlocks a course. It cannot list all members, approve requests, post, comment, send DMs or read stats. This repo and Cotlet give you 71 Skool tools as a REST API and an MCP server.

Can I get a Skool API key? Not from Skool for your own account. With Cotlet you get your own API key that works with your Skool account, for scripts, n8n, Make, Zapier or any HTTP client. This repo needs no key: it runs on your computer, on your own Skool session.

Is there an official ChatGPT integration for Skool? No. Skool has no official ChatGPT or Claude connector. Cotlet is an unofficial one that works today, in the ChatGPT and Claude apps and in any AI agent that takes an MCP server.

How do I connect Skool to ChatGPT? Sign up at cotlet.dev, sign in to Skool once in your Cloud Browser there, and add Cotlet to ChatGPT, following the steps in your account. Then ask ChatGPT about your Skool like you would ask an assistant. ChatGPT needs a server on the internet, so this repo alone, running on your computer, does not connect to ChatGPT.

Can ChatGPT manage my Skool community? Yes, with Cotlet. It reads new posts and comments, drafts replies, approves membership requests by your rules, pins announcements and creates Calendar events. Anything posted in your group waits for your OK.

Can I get my Skool members and stats out of Skool? Yes, with Cotlet: the full member list with join dates and answers, membership requests, churn and MRR, as answers in chat or JSON.

Can I automate Skool with Zapier, Make or n8n? Skool's own Zapier plugin, on the Pro plan, only sends new paid members and membership answers out, invites a member and unlocks a course. With Cotlet, n8n, Make and Zapier can also list members, approve requests, post, comment and read stats.

Can I use it from my phone? Yes, with Cotlet: once it is set up, the ChatGPT and Claude apps on your phone can use Skool for you.

Do I need to be technical? For Cotlet, no: you sign in to Skool and add Cotlet to ChatGPT or Claude, with step-by-step instructions in your account. This repo is for people who are fine with Python and a terminal.

Is my Skool account safe? Yes. Neither Cotlet nor this repo sees or stores your Skool password. You sign in yourself, the way you always do, and the AI works on that signed-in session. Anything that reaches other people asks for your OK first: in Cotlet by default, here through your MCP client.

Is it free? This repo is free, also in your own business. Cotlet is free for 7 days with no card, then one-time credit packs from $29, no subscription. Pricing.

I manage Skool for several accounts or clients. Does that work? Yes, with Cotlet. Each Skool login gets its own connection. Write to contact@cotlet.dev and tell us how many accounts you manage.

How it works

AI agent (MCP) / script (REST, Python) ──▶ skool-mcp on your computer ──your Skool cookies──▶ skool.com
                                                  ▲
                         skool-mcp connect ───────┘ reads them once from your Chrome (DevTools Protocol)
  1. You sign in to Skool in your own Chrome, the way you always do.

  2. skool-mcp connect attaches to that Chrome through the Chrome DevTools Protocol, reads the skool.com cookies and saves them to ~/.config/skool-api-mcp/session.json, readable by your user only. It never sees or stores your password.

  3. Every tool call is a request to Skool's own web app endpoints (api2.skool.com and the page data of www.skool.com) with those cookies, sent with curl_cffi, which copies Chrome's TLS fingerprint. No headless browser runs.

Skool's session cookie lasts about a year. When Skool signs you out, the server reads the cookies from Chrome again, if Chrome is open with remote debugging on.

Requirements

  • Python 3.11 or newer.

  • Google Chrome 144 or newer, signed in to Skool. Any Chrome or Chromium works with a debugging port.

  • macOS, Linux or Windows.

  • The Skool role a tool needs: membership requests need admin or moderator, stats and group settings need admin. Reading members, posts, courses and chat works with any role in groups you belong to.

Install

From PyPI:

uv tool install skool-api-mcp       # or: pipx install skool-api-mcp, or: pip install skool-api-mcp
skool-mcp --version

MCP clients can also run it with no install: uvx skool-api-mcp mcp.

From source:

git clone https://github.com/cotletdev/skool-api-mcp-server.git
cd skool-api-mcp-server
python3 -m venv .venv
. .venv/bin/activate              # Windows: .venv\Scripts\activate
pip install -e .
skool-mcp --version

With uv: uv venv && uv pip install -e ., then uv run skool-mcp ....

Setting it up with an AI agent (Claude Code, Codex, Cursor)? Open it in this folder and ask it to set up the repo: AGENTS.md tells it every step, and it asks you only for the steps in Chrome.

To update: uv tool upgrade skool-api-mcp (or pip install -U skool-api-mcp), from source git pull && pip install -e .. We copy every change of the hosted Skool tools into this repo.

Connect your Chrome

  1. Open chrome://inspect/#remote-debugging in Chrome and switch remote debugging on. Chrome then accepts DevTools connections from programs on this computer, and asks you before each one.

  2. Make sure you are signed in at skool.com.

  3. Run:

    skool-mcp connect
  4. Chrome asks whether to allow the connection. Click Allow.

Saved 15 skool.com cookies to /Users/you/.config/skool-api-mcp/session.json
Signed in to Skool as Ana Lopez (ana-lopez-4127)

You can switch remote debugging off again afterwards. Leave it on if you want the server to pick up a new session by itself after Skool signs you out.

connect looks for Chrome's DevToolsActivePort file in the default profile folder. For Chrome Beta, Canary or a custom profile folder, pass --profile-dir "<folder>".

Option B: a Chrome with a debugging port

Chrome does not open a debugging port on your default profile, so start a separate one, sign in to Skool there once, and connect to it:

# macOS
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --remote-debugging-port=9222 --user-data-dir="$HOME/.chrome-skool"
# Linux
google-chrome --remote-debugging-port=9222 --user-data-dir="$HOME/.chrome-skool"
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --remote-debugging-port=9222 --user-data-dir="%USERPROFILE%\.chrome-skool"

skool-mcp connect --cdp http://127.0.0.1:9222

--cdp also takes a ws:// DevTools URL, for example of a Chrome on another machine reached over an SSH tunnel.

For a server with no Chrome: in Chrome open DevTools on skool.com, Application > Cookies > https://www.skool.com, copy the value of auth_token, then:

skool-mcp connect --token          # paste it, input is hidden
# or, without a session file:
export SKOOL_AUTH_TOKEN=...

A pasted token is not refreshed on its own. Paste a new one when Skool signs you out.

Check the session at any time:

skool-mcp status

MCP server

The MCP server lists every tool with its input schema, a description written for agents, and hints: read tools are marked read-only, and tools that post, message or delete are marked so your client asks before running them.

Claude Code

claude mcp add skool -- uvx skool-api-mcp mcp
# read only:
claude mcp add skool -- uvx skool-api-mcp mcp --read-only

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "skool": {
      "command": "uvx",
      "args": ["skool-api-mcp", "mcp"]
    }
  }
}

Cursor

~/.cursor/mcp.json, the same block as Claude Desktop. A ready copy is in mcp.json.

Codex

~/.codex/config.toml:

[mcp_servers.skool]
command = "uvx"
args = ["skool-api-mcp", "mcp"]

Over HTTP

skool-mcp serve also serves MCP over streamable HTTP at http://127.0.0.1:8787/mcp, for clients that take a URL:

skool-mcp serve
claude mcp add --transport http skool http://127.0.0.1:8787/mcp

Then ask your agent things like:

Show me pending membership requests and approve the ones whose answers mention a business.

Which posts from the last 7 days have no comments yet? Draft a reply for each.

Create a Calendar event for Thursday 6pm CET with the Zoom link and pin an announcement about it.

Tell me new members, churn and MRR for the last 30 days.

REST API

skool-mcp serve                    # http://127.0.0.1:8787, MCP at /mcp, docs at /docs

Each tool has its own route under /api/v1/skool, the same paths as the hosted API at cotlet.dev, so code written against one works with the other. Path parts and the query string are arguments, and a JSON body adds the rest.

curl 'http://127.0.0.1:8787/api/v1/skool/groups'
curl 'http://127.0.0.1:8787/api/v1/skool/groups/yourgroup/members?limit=30&role=admin'
curl -X POST http://127.0.0.1:8787/api/v1/skool/groups/yourgroup/posts \
  -H 'Content-Type: application/json' \
  -d '{"title": "Live call tonight", "body": "8pm CET, link in the Calendar.", "category": "Announcements"}'

Any tool by name, body as its arguments:

curl -X POST http://127.0.0.1:8787/api/v1/skool/tools/list_members -d '{"group": "yourgroup"}'
  • GET /api/v1/skool/tools: every tool with its route, input schema and an example answer.

  • GET /docs: interactive OpenAPI docs, GET /openapi.json the schema, for n8n, Postman or a generated client.

  • Answers are JSON. Lists return next_cursor; pass it back as cursor for the next page.

The server listens on 127.0.0.1 only. To reach it from another device of yours, set a token, and every request then needs Authorization: Bearer <token>:

SKOOL_MCP_TOKEN=$(openssl rand -hex 24) skool-mcp serve --host 0.0.0.0

Python and the example scripts

Straight from Python, no server needed:

from skool_api_mcp import call
from skool_api_mcp.scripting import paginate, write_rows

groups = call("list_groups")["groups"]
members = list(paginate("list_members", {"group": "yourgroup", "joined_since": "2026-10-01"}, "members"))
write_rows(members, "members.csv")
call("create_post", group="yourgroup", category="Announcements", title="Week 12", body="Ship one landing page.")

Or one tool from the shell: skool-mcp call list_posts group=yourgroup limit=10, or with a JSON object.

Ready scripts in examples/. Each prints JSON, takes --out file.csv or --out file.json where it makes sense, and --help:

Script

What it does

list_groups.py

Your groups, with your role, member count and price.

export_members.py

Members to CSV or JSON: name, role, level, points, join date, profile URL. --role, --since.

list_membership_requests.py

Pending requests with each applicant's answers.

approve_membership_requests.py

Approves all pending requests, or those whose answers match --match keywords. --dry-run first.

decline_membership_request.py

Declines one request.

welcome_new_members.py

A welcome DM with your Start Here course link to everyone who joined in the last N days.

export_posts.py

Feed posts: title, author, category, likes, comments, date. --category, --since.

get_post.py

One post with its body and the whole comment tree.

unanswered_posts.py

Posts from the last N days with no comments yet.

create_post.py

Publishes a post from --body or a Markdown file, --pin pins it.

comment_on_post.py

Comments on a post or replies under a comment.

pin_post.py

Pins or unpins a post on the feed or a Classroom page.

list_courses.py

Classroom courses with modules, unlock rule and URLs.

unread_messages.py

Unread Skool Chat conversations with the full thread.

send_message.py

A DM to one member.

group_stats.py

Total members, new joins, churn and MRR for 7, 30 or 90 days.

python examples/export_members.py --group yourgroup --out members.csv
python examples/approve_membership_requests.py --group yourgroup --match business --dry-run

On a schedule, cron on your own computer works while it is on: 0 8 * * * cd ~/skool-api-mcp-server && .venv/bin/python examples/group_stats.py --group yourgroup.

All 71 tools

group is the URL name of a community: yourgroup for skool.com/yourgroup. skool-mcp tools prints this list, skool-mcp tools --json adds the input schemas.

Tool

Access

REST route

What it does

list_groups

read

GET /groups

Skool groups of your account, with your role (or pending), member count and price.

get_group

read

GET /groups/{group}

A group's name, About text, privacy, price, counts, owner and membership questions.

get_group_stats

read

GET /groups/{group}/stats

Total, new and churned members and monthly recurring revenue for a period. Admins only.

discover_groups

read

GET /groups/discover

Search Skool's public directory of communities, with members, price and rating.

search_group

read

GET /groups/{group}/search

Search a group's posts, members or courses, as its search box does.

Posts

Tool

Access

REST route

What it does

list_posts

read

GET /groups/{group}/posts

Posts in a group's feed, pinned first, then newest, with author, category, likes and comment count.

get_post

read

GET /groups/{group}/posts/{post_id}

One post with its full text and comments, replies nested under their comment.

create_post

write

POST /groups/{group}/posts

Publish a post to the community feed in a category, as you.

update_post

write

PATCH /groups/{group}/posts/{post_id}

Change the title, text or category of a post you wrote, or any post as an admin.

delete_post

write

DELETE /groups/{group}/posts/{post_id}

Delete a post or a comment for good: yours, or anyone's as an admin.

Comments, likes, polls and moderation

Tool

Access

REST route

What it does

comment_on_post

write

POST /groups/{group}/posts/{post_id}/comments

Comment on a post, or reply to a comment, as you.

like_post

write

PUT /groups/{group}/posts/{post_id}/like

Like a post or a comment, or take the like back.

list_post_likes

read

GET /groups/{group}/posts/{post_id}/likes

Who liked a post or a comment.

follow_post

write

PUT /groups/{group}/posts/{post_id}/follow

Get notified of new comments on a post, or stop.

pin_post

write

PUT /groups/{group}/posts/{post_id}/pin

Pin a post to the top of the feed (up to 3) or to a Classroom page (up to 12). Admins only.

pin_comment

write

PUT /groups/{group}/posts/{post_id}/comments/{comment_id}/pin

Pin a comment to the top of a post's comments, or unpin it.

set_post_comments

write

PUT /groups/{group}/posts/{post_id}/commenting

Turn comments on a post off, or back on.

vote_on_poll

write

PUT /groups/{group}/posts/{post_id}/poll/vote

Vote in a post's poll, change your vote, or take it back.

get_poll_results

read

GET /groups/{group}/posts/{post_id}/poll

Answers and vote counts of a post's poll, optionally with who voted for what.

list_reported_posts

read

GET /groups/{group}/posts/reported

Posts members reported to the admins, waiting for review. Admins and moderators only.

Members

Tool

Access

REST route

What it does

list_members

read

GET /groups/{group}/members

Members of a group with role, level, points and join date, newest first; also banned or churned.

search_members

read

GET /groups/{group}/members/search

Find members of a group by name, as the @mention box does.

get_member

read

GET /groups/{group}/members/{member_id}

One member's profile in a group: name, bio, role, level, points and when they were last online.

get_leaderboard

read

GET /groups/{group}/leaderboard

The group's top 10 members by points for the last 7 days, 30 days or all time, and your rank.

invite_members

write

POST /groups/{group}/invitations

Email people an invitation that lets them straight into the group. Admins only.

remove_member

write

DELETE /groups/{group}/memberships/{membership_id}

Remove a member from the group, or lift a ban. Admins only.

ban_member

write

POST /groups/{group}/memberships/{membership_id}/ban

Ban a member from the group, optionally deleting their recent posts. Admins only.

set_member_role

write

PUT /groups/{group}/memberships/{membership_id}/role

Make a member an admin or moderator, or back to a member. Admins only.

Membership requests

Tool

Access

REST route

What it does

list_membership_requests

read

GET /groups/{group}/membership-requests

Pending requests to join, with each applicant's Membership Questions answers. Admins and moderators only.

approve_membership_request

write

POST /groups/{group}/membership-requests/{request_id}/approve

Let an applicant into the group. Your AutoDM, if set, goes out as usual.

decline_membership_request

write

POST /groups/{group}/membership-requests/{request_id}/decline

Decline an applicant's request to join.

Classroom

Tool

Access

REST route

What it does

list_courses

read

GET /groups/{group}/courses

Courses in the group's Classroom, open or locked for you, with the modules of open ones.

get_course

read

GET /groups/{group}/courses/{course_id}

One course with its lessons and folders in Classroom order; get_lesson reads a lesson.

create_course

write

POST /groups/{group}/courses

Add a course to the group's Classroom, as a draft or published. Admins only.

set_course_published

write

PUT /groups/{group}/courses/{course_id}/published

Publish a draft course to members, or turn it back into a draft. Admins only.

get_lesson

read

GET /groups/{group}/courses/{course_id}/lessons/{lesson_id}

One lesson's text and video link.

create_lesson

write

POST /groups/{group}/courses/{course_id}/lessons

Add a lesson at the end of a course, with text and a video link. Admins only.

update_lesson

write

PATCH /groups/{group}/lessons/{lesson_id}

Change a lesson's title, text or video link. Admins only.

mark_lesson_complete

write

PUT /groups/{group}/lessons/{lesson_id}/completion

Mark a lesson done in your own course progress, or undo it.

Videos

Tool

Access

REST route

What it does

list_videos

read

GET /groups/{group}/videos

Videos in the group's Classroom lessons and feed posts, uploaded or linked.

get_video_transcript

read

GET /groups/{group}/videos/{video_id}/transcript

The spoken text of a video uploaded to a lesson or post, from Skool's captions.

Calendar

Tool

Access

REST route

What it does

list_events

read

GET /groups/{group}/events

Events on a group's calendar in one month: title, time, place and who can join.

get_event

read

GET /groups/{group}/events/{event_id}

One calendar event with its full description, place and access.

create_event

write

POST /groups/{group}/events

Add an event to a group's calendar. Admins only.

update_event

write

PATCH /groups/{group}/events/{event_id}

Change a calendar event's title, time, place or access. Admins only.

delete_event

write

DELETE /groups/{group}/events/{event_id}

Delete a calendar event. Admins only.

Group settings (admins)

Tool

Access

REST route

What it does

list_categories

read

GET /groups/{group}/categories

The feed categories of a group: name, who can post, sort order, post count.

create_category

write

POST /groups/{group}/categories

Add a category to a group's feed. Admins only.

update_category

write

PATCH /groups/{group}/categories/{category_id}

Rename a category or change who can post in it and how it sorts. Admins only.

delete_category

write

DELETE /groups/{group}/categories/{category_id}

Delete a feed category and move its posts to another. Admins only.

list_group_rules

read

GET /groups/{group}/rules

The rules of a group, numbered as the group shows them.

add_group_rule

write

POST /groups/{group}/rules

Add a rule at the end of the group rules. Admins only.

update_group_rule

write

PATCH /groups/{group}/rules/{number}

Change the title or text of a group rule. Admins only.

delete_group_rule

write

DELETE /groups/{group}/rules/{number}

Delete a group rule. Admins only.

list_group_links

read

GET /groups/{group}/links

The links on a group's sidebar, numbered as the group shows them.

add_group_link

write

POST /groups/{group}/links

Add a link to the group's sidebar. Admins only.

update_group_link

write

PATCH /groups/{group}/links/{number}

Change the text or address of a sidebar link. Admins only.

delete_group_link

write

DELETE /groups/{group}/links/{number}

Remove a link from the group's sidebar. Admins only.

add_membership_question

write

POST /groups/{group}/membership-questions

Add a question people answer when they ask to join the group. Admins only.

update_membership_question

write

PATCH /groups/{group}/membership-questions/{number}

Change a membership question. Admins only.

delete_membership_question

write

DELETE /groups/{group}/membership-questions/{number}

Remove a membership question. Admins only.

list_levels

read

GET /groups/{group}/levels

The group's 9 levels with their custom titles and how many members reached each.

rename_level

write

PATCH /groups/{group}/levels/{level}

Give one of the group's 9 levels its own title. Admins only.

update_group_about

write

PUT /groups/{group}/about

Replace the text on the group's About page. Admins only.

get_auto_dm

read

GET /groups/{group}/auto-dm

The welcome message Skool sends every new member, and whether it is on. Admins only.

set_auto_dm

write

PATCH /groups/{group}/auto-dm

Change the welcome message new members get, or turn it on or off. Admins only.

Chat and notifications

Tool

Access

REST route

What it does

list_conversations

read

GET /conversations

Your Skool Chat inbox: who, unread count and last message preview.

get_conversation

read

GET /conversations/{conversation_id}

The latest messages of one Skool Chat conversation, oldest first.

send_message

write

POST /members/{member_id}/messages

Send a direct message in Skool Chat to a member, starting a conversation if needed.

list_notifications

read

GET /notifications

Your Skool notifications: new posts, comments, mentions, likes and approvals, newest first.

mark_notifications_read

write

POST /notifications/read

Mark all your notifications read, everywhere or in one group.

Never built, on purpose: your Skool sign-in, email, password, name and profile settings, and anything that moves money (plans, payments, payouts, billing). Every request passes a guard that refuses those Skool paths.

Configuration

Variable

Default

What it does

SKOOL_MCP_HOME

~/.config/skool-api-mcp

Folder of session.json.

SKOOL_AUTH_TOKEN

Skool auth_token cookie, instead of skool-mcp connect.

SKOOL_PROXY

Proxy for every request to Skool, e.g. http://user:pass@host:port.

SKOOL_MCP_READ_ONLY

1 hides and refuses every tool that changes Skool (same as --read-only).

SKOOL_MCP_TOKEN

Bearer token required by serve; needed to listen beyond 127.0.0.1.

SKOOL_MCP_HOST, SKOOL_MCP_PORT

127.0.0.1, 8787

Address of serve.

Security and your Skool account

  • Your password never reaches this code. Only cookies are read, and only those of skool.com.

  • The session file is yours. session.json is created with mode 0600. Anyone who has it can act as you on Skool, so keep it out of git and shared folders.

  • Local by default. serve binds to 127.0.0.1 and refuses another address without SKOOL_MCP_TOKEN.

  • skool.com only. Requests and redirects outside skool.com are refused.

  • Read-only mode. --read-only or SKOOL_MCP_READ_ONLY=1 exposes the 30 read tools only.

  • Actions reach real people. Posts, comments, DMs, invitations and approvals go out under your name. MCP clients ask before running them; a script does not, so try it on a test group first.

  • Do not spam. Mass DMs or invitations break Skool's rules and can get your account limited. You are responsible for what runs in your account.

Errors

The REST API answers {"error": "<code>", "message": "..."}. The MCP server returns the same code and message as a tool error.

Status

Code

What to do

401

auth_required, auth_expired

No session, or Skool signed you out. Sign in to Skool in Chrome and run skool-mcp connect.

403

app_permission_denied

Your Skool role cannot do this, e.g. stats as a member.

403

scope_denied

The server runs read-only.

403

target_blocked

Skool refused the request or showed a bot check. Open skool.com in Chrome once, then retry.

409

captcha_required

Skool asks for a CAPTCHA. Solve it in Chrome.

422

invalid_input

An argument is missing or wrong; the message names it.

429

rate_limited

Skool is limiting the account. Wait a few minutes.

502

target_error

Skool answered with an error, or changed its site. git pull for the latest tools, or open an issue.

Self-hosted or hosted

This repo

Cotlet, hosted

Tools

the same 71

the same 71

Runs

on your computer, while it is on

in the cloud, 24/7

Skool session

your Chrome, cookies in a local file

your own Cloud Browser in the EU, profile encrypted with AES-256-GCM

When Skool changes its site

git pull once we have fixed it

fixed for you, every tool tested daily

Approvals

your MCP client asks per call

posts, DMs and approvals wait for your OK, switchable per tool

Works with

MCP clients on your machine, local scripts

Claude.ai and ChatGPT connectors, n8n, Make, Zapier, any HTTP client

Who may use it

you and your own business

you, teams, businesses, agencies

Price

free

free 7-day trial with 2,000 credits, no card; then one-time packs from $29 for 5,000 credits

On the hosted version a successful call uses 10 credits for most tools, failed calls are free, and the Cloud Browser uses 50 credits a day while it has an app enabled for agents. Full pricing.

FAQ

Is there a Skool MCP server for Claude, ChatGPT or Cursor? Yes, this one runs on your machine: skool-mcp mcp for Claude Code, Claude Desktop, Cursor and Codex. ChatGPT and Claude.ai connectors need a public HTTPS URL, which the hosted Skool MCP server gives you.

Is this a Skool scraper? It does what people want a scraper for (export members, posts and courses to CSV) but does not parse HTML in a headless browser. It calls the same JSON endpoints the Skool web app calls, in your own account.

Can I export Skool members to CSV? Yes: python examples/export_members.py --group yourgroup --out members.csv. Every member with role, level, points, join date and profile URL, across all pages.

Can I export members of a community I don't own? Only of groups your account belongs to, and only what Skool shows to your role.

Do I need Skool's Pro plan or Zapier? No. A few Skool features are Pro only, for example some member roles; the tool says so when Skool refuses.

Why does it need my Chrome? To read your Skool session without your password. Chrome is used once per sign-in, not for each call.

What happens when Skool signs me out? Calls fail with auth_expired. With Chrome remote debugging on, the server reads the new cookies on the next call (click Allow when Chrome asks); otherwise run skool-mcp connect again.

Can it run on a VPS or in Docker? Technically yes, with SKOOL_AUTH_TOKEN. Skool then sees your session from a datacenter IP, which looks less like you. For an always-on setup the hosted version keeps your session in your own Cloud Browser on a fixed IP.

Will my Skool account get banned? Requests carry Chrome's fingerprint and go out one at a time, as you would click. Nobody can promise a platform never acts. Keep to your normal use and do not send bulk DMs.

Can I use it at work or for my clients? At work and in your own business, yes, free. You may not offer it to others as a hosted or managed service. For client work, use Cotlet or write to contact@cotlet.dev.

Is it open source? The source is public under the Elastic License 2.0: free to use and change, also in your own business, but not to resell as a hosted service.

A tool broke or I need another one. Open an issue with the tool name and the error message.

License

Elastic License 2.0. In short:

  • Allowed: using it for yourself and in your own business, free. Changing the code and sharing it under the same license.

  • Not allowed: offering it to others as a hosted or managed service, removing the license notices, getting around its limits.

Versions up to 1.x of this repo (the scripts for the hosted API) stay MIT.


Maintained by Cotlet (@cotletdev). Skool is a trademark of its owner. This project is unofficial and not affiliated with, endorsed or sponsored by Skool.

Available Tools

71 tools
add_group_ruleAdd group ruleAInspect

Add a rule at the end of the group rules. Admins only.

Adds a rule after the existing ones, as Settings, Rules, Add does, and returns the whole new list. Admins only. Nobody is notified and it is undone with delete_group_rule, so it runs without asking first.

Inputs: group (required), title (required), description.

add_membership_questionAdd membership questionAInspect

Add a question people answer when they ask to join the group. Admins only.

Adds a membership question, as Settings, Membership questions does; Skool asks up to 3 and only one of type email. Answers show next to each request in list_membership_requests. Returns all questions. Admins only. Runs without asking first: nobody is notified.

Inputs: group (required), question (required), type, options.

approve_membership_requestApprove membership requestA
Destructive
Inspect

Let an applicant into the group. Your AutoDM, if set, goes out as usual.

Approves one pending request, so the applicant becomes a member, as Skool's Approve button does; your AutoDM, if set, goes out as usual. Admins and moderators only. member_id is the id of the membership, the same as request_id.

Inputs: group (required), request_id (required).

ban_memberBan memberA
Destructive
Inspect

Ban a member from the group, optionally deleting their recent posts. Admins only.

Bans one member, as Membership settings, Ban does: they lose access and cannot ask to join again. delete_recent_posts also removes their recent posts and comments, which cannot be undone. A paid member's subscription is not cancelled by this. remove_member lifts a ban. Admins and moderators.

Inputs: group (required), membership_id (required), member_id, delete_recent_posts.

comment_on_postComment on postA
Destructive
Inspect

Comment on a post, or reply to a comment, as you.

Adds a comment to a post, or a reply under an existing comment when parent_comment_id is set. The comment appears under your name.

Inputs: body (required), group (required), post_id (required), parent_comment_id.

create_categoryCreate categoryAInspect

Add a category to a group's feed. Admins only.

Adds a feed category, as Settings, Categories, Add does. Skool picks its color. who_can_post admins makes an announcements-style category only admins post in. Admins only. Members see the new category at once but nobody is notified, so it runs without asking first.

Inputs: name (required), group (required), sort, who_can_post.

create_courseCreate courseAInspect

Add a course to the group's Classroom, as a draft or published. Admins only.

Creates a Classroom course, as Classroom, New course does, as a draft unless published is true. Open to all members, or only from min_level up. Paid and time-unlocked courses are set in Skool. Add lessons with create_lesson. Admins only. A draft is seen by admins only, so it runs without asking first.

Inputs: group (required), title (required), min_level, published, +1 more.

create_eventCreate eventA
Destructive
Inspect

Add an event to a group's calendar. Admins only.

Adds a one-time event to the Calendar tab, as Add event does: title, start, length, time zone, description, where (a Zoom or Meet link, an address or any URL) and who sees it. Skool reminds members before it starts. Admins only. Members see it at once.

Inputs: group (required), start (required), title (required), access, +7 more.

create_lessonCreate lessonAInspect

Add a lesson at the end of a course, with text and a video link. Admins only.

Adds a lesson page at the end of a course, as the course's Add page does: title, text and an optional video link that Skool plays above it. Uploaded videos and files are not supported. Published unless published is false; in a draft course nobody but admins sees it either way. Admins only. Runs without asking first: nobody is notified.

Inputs: group (required), title (required), course_id (required), body, +2 more.

create_postCreate postA
Destructive
Inspect

Publish a post to the community feed in a category, as you.

Publishes a post to the group's feed in one of its categories, under your name. The category is checked before the call waits for your approval: a wrong name fails at once with the group's categories in the message. poll_options adds a poll under the text. Text only; images and files are not uploaded.

Inputs: body (required), group (required), title (required), category (required), +1 more.

decline_membership_requestDecline membership requestA
Destructive
Inspect

Decline an applicant's request to join.

Declines one pending request, as Skool's Decline button does. Admins and moderators only.

Inputs: group (required), request_id (required).

delete_categoryDelete categoryA
Destructive
Inspect

Delete a feed category and move its posts to another. Admins only.

Deletes a category, as Settings, Categories, Delete does. Its posts are not deleted: Skool moves them to move_posts_to, or to the group's first other category. A group keeps at least one category. Admins only.

Inputs: group (required), category_id (required), move_posts_to.

delete_eventDelete eventA
Destructive
Inspect

Delete a calendar event. Admins only.

Deletes one event from the Calendar tab, as the event's Delete does; for a recurring event the whole series goes. It cannot be undone. Admins only.

Inputs: group (required), event_id (required).

delete_group_ruleDelete group ruleA
Destructive
Inspect

Delete a group rule. Admins only.

Deletes one rule, as Settings, Rules, Delete does; the rules after it move up a number. Returns the whole new list. Admins only.

Inputs: group (required), number (required).

delete_membership_questionDelete membership questionA
Destructive
Inspect

Remove a membership question. Admins only.

Removes one membership question; the ones after it move up a number. Returns the questions left. Admins only. Runs without asking first: nobody is notified.

Inputs: group (required), number (required).

delete_postDelete post or commentA
Destructive
Inspect

Delete a post or a comment for good: yours, or anyone's as an admin.

Deletes a post with its comments, or a single comment (pass its comment_id), as Skool's Delete does. Skool keeps no trash, so this cannot be undone. Your own posts and comments, or anyone's when you are a group admin or moderator.

Inputs: group (required), post_id (required).

discover_groupsDiscover groupsA
Read-onlyIdempotent
Inspect

Search Skool's public directory of communities, with members, price and rating.

Searches skool.com/discovery, the public list of communities, as its search box does: URL name, title, description, member count, price and review rating. 30 to a page; pass next_cursor back as cursor. Private groups that hide from discovery are not listed.

Inputs: query, cursor.

follow_postFollow postA
Idempotent
Inspect

Get notified of new comments on a post, or stop.

Follows a post so new comments land in your Skool notifications, as the post menu's Follow does; following false unfollows. You follow your own posts from the start. Changes only your own notifications, so it runs without asking first.

Inputs: group (required), post_id (required), following.

get_auto_dmGet AutoDMA
Read-onlyIdempotent
Inspect

The welcome message Skool sends every new member, and whether it is on. Admins only.

Returns the group's AutoDM: the chat message Skool sends each new member when they are approved, who it comes from and whether it is on. #NAME# and #GROUPNAME# in the text become the member's first name and the group's name. Admins only.

Inputs: group (required).

get_conversationGet conversationA
Read-onlyIdempotent
Inspect

The latest messages of one Skool Chat conversation, oldest first.

Returns up to limit latest messages of one Skool Chat conversation, oldest first. from is You for your own messages and the other member's member_id otherwise; their name is in list_conversations. Reading does not mark the conversation read.

Inputs: conversation_id (required), limit.

get_courseGet courseA
Read-onlyIdempotent
Inspect

One course with its lessons and folders in Classroom order; get_lesson reads a lesson.

Returns one Classroom course: title, description, whether it is published, and its lessons in order. Folders come as kind folder, followed by their lessons. get_lesson returns a lesson's text and video. Only courses this account can open; admins also see drafts.

Inputs: group (required), course_id (required).

get_eventGet eventA
Read-onlyIdempotent
Inspect

One calendar event with its full description, place and access.

Returns one event of the group's calendar: title, description, start and end in UTC, the event's time zone, where it happens and who can see it.

Inputs: group (required), event_id (required).

get_groupGet groupB
Read-onlyIdempotent
Inspect

A group's name, About text, privacy, price, counts, owner and membership questions.

Returns one group as its About page and Settings show it: name, the About text, whether it is private, the price, member, admin, post and course counts, and the owner. Admins also get pending_requests, reported_posts and the membership questions; for others these are 0 and empty.

Inputs: group (required).

get_group_statsGet group statsA
Read-onlyIdempotent
Inspect

Total, new and churned members and monthly recurring revenue for a period. Admins only.

Returns figures from the group's admin dashboard: members_total today, members_new in the period, members_churned as the dashboard counts it, and monthly recurring revenue in US dollars. For 7d and 30d members_new is the growth of the daily member count; for 90d it sums the last three months of the dashboard's members chart. Skool computes these in the background, so a call can take up to about 15 seconds. Admins only; other accounts get APP_PERMISSION_DENIED.

Inputs: group (required), period.

get_leaderboardGet leaderboardA
Read-onlyIdempotent
Inspect

The group's top 10 members by points for the last 7 days, 30 days or all time, and your rank.

Returns the Leaderboards tab: the top 10 members by points earned in the period (one point per like received), with your own rank and points when you are on the board. Skool recounts it every few minutes; updated_at says when.

Inputs: group (required), period.

get_lessonGet lessonA
Read-onlyIdempotent
Inspect

One lesson's text and video link.

Returns one Classroom lesson as its page shows it: the text (formatting dropped, paragraphs and list items kept) and the linked video. uploaded_video is true when the video was uploaded to Skool; get_video_transcript reads what is said in it. Attached files are not returned. Only lessons this account can open.

Inputs: group (required), course_id (required), lesson_id (required).

get_memberGet memberA
Read-onlyIdempotent
Inspect

One member's profile in a group: name, bio, role, level, points and when they were last online.

Returns the profile card Skool shows when you click a member in the group: name, bio, role in this group, level and points, whether they are online and when they last were, and their time zone. Never their email or other private details.

Inputs: group (required), member_id (required).

get_poll_resultsGet poll resultsA
Read-onlyIdempotent
Inspect

Answers and vote counts of a post's poll, optionally with who voted for what.

Returns the poll under a post: each answer with its number (what vote_on_poll takes), text and vote count, and your own vote. voters true adds up to 30 voters per answer, as the vote count opens in Skool.

Inputs: group (required), post_id (required), voters.

get_postGet postA
Read-onlyIdempotent
Inspect

One post with its full text and comments, replies nested under their comment.

Returns one post by post_id or slug: title, full text, author and up to 25 comments with their replies nested under them. Images and files attached to the post are not returned; links typed in the text are. Use comment_id as parent_comment_id of comment_on_post to reply.

Inputs: group (required), post_id (required).

get_video_transcriptGet video transcriptA
Read-onlyIdempotent
Inspect

The spoken text of a video uploaded to a lesson or post, from Skool's captions.

Returns what is said in a video uploaded to Skool, as Skool's automatic captions, in 30-second segments with their start time. Give the video_id and where it is (course_id and lesson_id, or post_id), as list_videos returns them. One call reads about 20 minutes of video; when next_start_minute is not null, call again with it as start_minute for the rest (the first segment may repeat the last one). Linked YouTube, Vimeo, Loom or Wistia videos have no transcript here. Only videos this account can watch.

Inputs: group (required), video_id (required), post_id, language, +3 more.

invite_membersInvite members by emailA
Destructive
Inspect

Email people an invitation that lets them straight into the group. Admins only.

Sends Skool's invitation email to each address, as Invite people, Invite by email does; whoever accepts joins without a membership request. Addresses already in the group are skipped by Skool. Admins only. Emails reach people outside the group.

Inputs: group (required), emails (required), course_ids.

like_postLike post or commentA
Idempotent
Inspect

Like a post or a comment, or take the like back.

Likes a post or a comment as the heart under it does; liked false takes the like back. A like gives the author a point on the leaderboard and Skool notifies them. Skool limits fast liking: too many in a row come back as rate_limited. Runs without asking first: undone with one call.

Inputs: group (required), post_id (required), liked.

list_categoriesList categoriesA
Read-onlyIdempotent
Inspect

The feed categories of a group: name, who can post, sort order, post count.

Lists the categories a group's feed is split into, in the order the group shows them. who_can_post is members or admins; sort is how the category orders its posts (default, new, top_week, top_month, top_year). create_post and update_post take the name.

Inputs: group (required).

list_conversationsList conversationsA
Read-onlyIdempotent
Inspect

Your Skool Chat inbox: who, unread count and last message preview.

Lists your Skool Chat conversations across all groups, most recent first, with the other member, unread count and the last message. Set unread_only to see only what needs an answer. Pass next_cursor back as cursor for the next page.

Inputs: limit, cursor, unread_only.

list_coursesList coursesA
Read-onlyIdempotent
Inspect

Courses in the group's Classroom, open or locked for you, with the modules of open ones.

Lists the courses of the group's Classroom in its order. unlock is open when your account can open the course and locked otherwise (a level, a purchase or a time lock; Skool does not say which here). Open courses list their modules in order with links; locked ones have none. Use the module links in welcome messages.

Inputs: group (required).

list_eventsList eventsA
Read-onlyIdempotent
Inspect

Events on a group's calendar in one month: title, time, place and who can join.

Lists the events of one month on the group's Calendar tab, as the month view shows them, recurring events once per date. start and end are UTC; timezone is the calendar's zone. get_event returns one event, create_event adds one.

Inputs: group (required), month.

list_group_rulesList group rulesA
Read-onlyIdempotent
Inspect

The rules of a group, numbered as the group shows them.

Lists the group rules members agree to, numbered from 1 in the order the group shows them. update_group_rule and delete_group_rule take the number.

Inputs: group (required).

list_groupsList groupsA
Read-onlyIdempotent
Inspect

Skool groups of your account, with your role (or pending), member count and price.

Returns up to 50 Skool groups of your account: groups you own, groups you joined and groups you asked to join. role is admin, moderator, member, or pending while your request waits for approval (a pending group shows no posts or members yet). Use group as the group parameter of the other tools. members is the count Skool shows on the group page; price is the membership price or free.

Inputs: no named parameters.

list_levelsList levelsA
Read-onlyIdempotent
Inspect

The group's 9 levels with their custom titles and how many members reached each.

Lists the 9 levels of the group's leaderboard: the level number, Skool's name for it, the title the admins gave it (empty when none) and the share of members at that level. Points come from likes; get_leaderboard ranks the members.

Inputs: group (required).

list_membersList membersA
Read-onlyIdempotent
Inspect

Members of a group with role, level, points and join date, newest first; also banned or churned.

Lists members of one group, newest approved first, 30 to a page; pass next_cursor back as cursor for the next page. status picks Skool's tab: active members (admins included), banned, churned (left the group) or cancelling (paid groups). role admin or moderator asks Skool for the admins only. joined_at is when the member was approved. level is the Skool level (1 to 9) and points the likes that count toward it. joined_since filters within the page. member_id is the person (send_message, get_member); membership_id is their place in this group (set_member_role, ban_member, remove_member).

Inputs: group (required), role, limit, cursor, +2 more.

list_membership_requestsList membership requestsA
Read-onlyIdempotent
Inspect

Pending requests to join, with each applicant's Membership Questions answers. Admins and moderators only.

Lists requests to join a private group, 30 to a page, oldest first within the page, with the answers each applicant gave to your Membership Questions. Only admins and moderators see requests; other accounts get APP_PERMISSION_DENIED. Pass request_id to approve_membership_request or decline_membership_request.

Inputs: group (required), limit, cursor.

list_notificationsList notificationsA
Read-onlyIdempotent
Inspect

Your Skool notifications: new posts, comments, mentions, likes and approvals, newest first.

Lists the bell's notifications for this account, newest first, from all groups or one: what happened (type, such as new-post, comment, mention, like), the line Skool shows, the post it is about and a link. unread_only keeps the unread ones. Reading them does not mark them read; mark_notifications_read does.

Inputs: group, limit, cursor, unread_only.

list_post_likesList post likesA
Read-onlyIdempotent
Inspect

Who liked a post or a comment.

Lists the members who liked a post or a comment, as the like count under it opens, newest first, up to 100. member_id is what send_message and get_member take.

Inputs: group (required), post_id (required), limit.

list_postsList postsA
Read-onlyIdempotent
Inspect

Posts in a group's feed, pinned first, then newest, with author, category, likes and comment count.

Lists one page of the group's feed as Skool shows it: pinned posts on top, then the newest. A page holds up to 30 posts; pass next_cursor back as cursor for older ones. category and since filter within the page, so a filtered page can come back short or empty while next_cursor still points further. preview is the first 200 characters; get_post takes post_id or slug and returns the full text with comments.

Inputs: group (required), limit, since, cursor, +1 more.

list_reported_postsList reported postsA
Read-onlyIdempotent
Inspect

Posts members reported to the admins, waiting for review. Admins and moderators only.

Lists the posts in the group's Reported queue that members flagged against the rules. delete_post removes one. Admins and moderators only.

Inputs: group (required).

list_videosList videosA
Read-onlyIdempotent
Inspect

Videos in the group's Classroom lessons and feed posts, uploaded or linked.

Lists the videos this account can watch: one per Classroom lesson with a video, in course order, and the videos in the newest feed posts (post_pages pages of 30). An uploaded video has a video_id and transcript true: pass it with its course_id and lesson_id, or post_id, to get_video_transcript. A linked one (YouTube, Vimeo, Loom, Wistia) has only video_url. Locked courses are named in locked_courses, without their videos.

Inputs: group (required), where, post_pages.

mark_lesson_completeMark lesson completeA
Idempotent
Inspect

Mark a lesson done in your own course progress, or undo it.

Ticks a lesson as done for this account, as the lesson's Mark as done does; completed false clears it. Changes only your own progress bar, so it runs without asking first.

Inputs: group (required), lesson_id (required), completed.

mark_notifications_readMark notifications readAInspect

Mark all your notifications read, everywhere or in one group.

Clears the unread count on the bell, as Mark all as read does, for every group or only the one given. Changes only this account's notifications, so it runs without asking first.

Inputs: group.

pin_commentPin commentA
Idempotent
Inspect

Pin a comment to the top of a post's comments, or unpin it.

Pins one comment above the others under a post, as the comment menu's Pin does; pinned false unpins it. Group admins and moderators only. Sends nothing to anyone and is undone with one call, so it runs without asking first.

Inputs: group (required), post_id (required), comment_id (required), pinned.

pin_postPin postA
Idempotent
Inspect

Pin a post to the top of the feed (up to 3) or to a Classroom page (up to 12). Admins only.

Pins a post to the top of the feed, where Skool allows up to 3 pinned posts, or to a Classroom page, which allows up to 12. Set pinned to false to unpin. Admins only. pin_post runs without asking first: pinning sends nothing to anyone and is undone with one call.

Inputs: group (required), post_id (required), pinned, course_page_id.

remove_memberRemove memberA
Destructive
Inspect

Remove a member from the group, or lift a ban. Admins only.

Removes one member, as Membership settings, Remove does: they lose access but may ask to join again. On a banned member it lifts the ban the same way, as Unban does. Their posts stay. Admins and moderators.

Inputs: group (required), membership_id (required).

rename_levelRename levelAInspect

Give one of the group's 9 levels its own title. Admins only.

Sets the title members see next to a level, as Settings, Gamification does; an empty title goes back to Skool's plain name. The points needed per level are Skool's and do not change. Admins only. Runs without asking first: undone with one call.

Inputs: group (required), level (required), title (required).

search_groupSearch groupA
Read-onlyIdempotent
Inspect

Search a group's posts, members or courses, as its search box does.

Runs the group's search box: posts (titles and text, with author and a preview), members (by name) or courses. Posts come 30 to a page; pass next_cursor back as cursor. Results are what this account can see.

Inputs: group (required), query (required), type, cursor.

search_membersSearch membersA
Read-onlyIdempotent
Inspect

Find members of a group by name, as the @mention box does.

Searches the group's members by name or handle, as typing @ in a post does, best matches first. member_id is what get_member and send_message take; list_members pages through everyone.

Inputs: group (required), query (required), limit.

send_messageSend messageA
Destructive
Inspect

Send a direct message in Skool Chat to a member, starting a conversation if needed.

Sends a direct message in Skool Chat to one member and starts a conversation if there is none yet. Skool opens the chat in a group you both belong to: pass group, else the first of your groups that Skool accepts is used. Skool refuses a message to yourself, and a group can limit chat by level. Messages go out under your name and cannot be deleted.

Inputs: body (required), member_id (required), group.

set_auto_dmSet AutoDMA
Destructive
Inspect

Change the welcome message new members get, or turn it on or off. Admins only.

Changes the group's AutoDM, the chat message Skool sends each new member on approval. message replaces the text; enabled turns it on or off, which Skool allows only on the Pro plan. Admins only. Every new member gets the result.

Inputs: group (required), enabled, message.

set_course_publishedPublish courseA
DestructiveIdempotent
Inspect

Publish a draft course to members, or turn it back into a draft. Admins only.

Publishes a Classroom course so members who have access see it, or turns it back into a draft only admins see, as the course's Published switch does. Members' progress is kept. Admins only. Publishing shows the course to members.

Inputs: group (required), course_id (required), published (required).

set_member_roleSet member roleA
DestructiveIdempotent
Inspect

Make a member an admin or moderator, or back to a member. Admins only.

Changes one member's role, as the member's Membership settings do: admin (full control), moderator (can remove posts and members) or member. Skool allows moderators only on the Pro plan. The group owner keeps their role. Admins only.

Inputs: role (required), group (required), membership_id (required).

set_post_commentsTurn comments on or offA
Idempotent
Inspect

Turn comments on a post off, or back on.

Turns comments off on a post, as the post menu's Turn off comments does: existing comments stay, nobody can add new ones. enabled true turns them back on. Group admins and moderators only. Runs without asking first: undone with one call.

Inputs: group (required), enabled (required), post_id (required).

update_categoryUpdate categoryAInspect

Rename a category or change who can post in it and how it sorts. Admins only.

Changes a feed category, as Settings, Categories, Edit does: fields you leave out stay. Posts already in it stay too. Admins only. Nobody is notified and it is undone with one call, so it runs without asking first.

Inputs: group (required), category_id (required), name, sort, +1 more.

update_eventUpdate eventA
Destructive
Inspect

Change a calendar event's title, time, place or access. Admins only.

Edits one event, as the event's Edit does: fields you leave out stay as they are. A new start keeps the old length unless duration_minutes is given. For a recurring event this changes the whole series. Admins only. Members see the change at once.

Inputs: group (required), event_id (required), start, title, +8 more.

update_group_aboutUpdate group About textA
DestructiveIdempotent
Inspect

Replace the text on the group's About page. Admins only.

Replaces the description on the group's About page, the one visitors read before they join, as editing it on the About page does. Images and videos on the page stay. Admins only. Everyone who opens the page sees the change.

Inputs: about (required), group (required).

update_group_ruleUpdate group ruleAInspect

Change the title or text of a group rule. Admins only.

Edits one rule, as Settings, Rules, Edit does: fields you leave out stay. Returns the whole new list. Admins only. Runs without asking first: nobody is notified.

Inputs: group (required), number (required), title, description.

update_lessonUpdate lessonAInspect

Change a lesson's title, text or video link. Admins only.

Edits one lesson page, as its Edit does: fields you leave out stay, body replaces the whole text. Members who completed it keep it completed. Admins only. Runs without asking first: nobody is notified.

Inputs: group (required), lesson_id (required), body, title, +1 more.

update_membership_questionUpdate membership questionAInspect

Change a membership question. Admins only.

Replaces one membership question with new text, type and answers. Requests already waiting keep the answers they gave. Returns all questions. Admins only. Runs without asking first: nobody is notified.

Inputs: group (required), number (required), question (required), type, +1 more.

update_postUpdate postA
Destructive
Inspect

Change the title, text or category of a post you wrote, or any post as an admin.

Edits a post in place, as Skool's Edit post does: fields you leave out stay as they are, and body replaces the whole text. Skool marks the post as edited. Your own posts, or any post when you are a group admin.

Inputs: group (required), post_id (required), body, title, +1 more.

vote_on_pollVote on pollA
Idempotent
Inspect

Vote in a post's poll, change your vote, or take it back.

Votes for one answer of the poll under a post, as clicking it does. If you already voted the vote moves to the new answer; option 0 takes it back. Returns the counts after your vote. Your vote is visible to the post's readers. Runs without asking first: undone with one call.

Inputs: group (required), option (required), post_id (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 71 tools

    Disambiguation4/5

    Tools are grouped by resource and action, with detailed cross-references that distinguish list/get/search variants (e.g., list_members vs search_members, list_posts vs search_group). The large surface still creates a few near-neighbor choices, but none are indistinguishable.

    Naming Consistency5/5

    All names use snake_case verb_noun and consistent verbs (get/list/create/update/delete/add/set/mark), with no camelCase or vague names. Minor variations like add vs create reflect resource conventions and remain predictable.

    Tool Count1/5

    71 tools far exceeds the typical 3-15 range and the 25+ 'too many' threshold. Even for a broad Skool community-management domain, this is an extreme surface that burdens selection and maintenance.

    Completeness3/5

    Most domains have full lifecycle coverage—posts, comments, categories, events, rules, links, membership requests, chat, and notifications. However, Classroom lacks update/delete_course and delete_lesson, and group settings beyond About are not editable, leaving notable admin gaps.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers