Skool MCP Server
You can run a local Skool MCP server/REST API/Python client that reads and manages Skool communities through your own Chrome session, within your Skool role limits.
List groups, view group details/stats, discover public groups, and search group posts, members, or courses.
Manage posts: list/get/create/update/delete, comment/reply, like, follow, pin, toggle comments, run polls, and review reported posts.
Manage members: list/search/get profiles, view leaderboards, invite, remove, ban, and set roles.
Handle membership requests: list pending applicants with answers, approve, or decline.
Manage Classroom: list/get/create courses, publish/unpublish, create/update lessons, and mark lessons complete.
Manage Calendar events: list/get/create/update/delete events with access, location, and timezone options.
Configure group settings: categories, rules, sidebar links, membership questions, levels, About text, and AutoDM.
Use Skool Chat and notifications: list conversations/messages/notifications, send DMs, and mark notifications read.
Access it through MCP clients over stdio/HTTP, the local REST API with OpenAPI docs, or Python
calland example scripts; supports pagination, read-only mode, and admin/moderator-only actions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Skool MCP Serverlist the newest members who joined my Skool community this week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Skool API and MCP server, self-hosted
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 69 Skool tools we run in production at Cotlet: members, membership requests, posts, comments, polls, Classroom, 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. SetupPython:
call("list_members", group="yourgroup"), plus 16 ready scripts inexamples/.
It is for technical people who want to run it themselves, for noncommercial use only (license). If you want it running 24/7 on a server, kept working when Skool changes its site, for a team or a business, use the hosted version at cotlet.dev.
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 mcpContents
Related MCP server: Browser Jet Pilot
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)You sign in to Skool in your own Chrome, the way you always do.
skool-mcp connectattaches 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.Every tool call is a request to Skool's own web app endpoints (
api2.skool.comand the page data ofwww.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 --versionMCP 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 --versionWith 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
Option A: your everyday Chrome (recommended)
Open
chrome://inspect/#remote-debuggingin Chrome and switch remote debugging on. Chrome then accepts DevTools connections from programs on this computer, and asks you before each one.Make sure you are signed in at skool.com.
Run:
skool-mcp connectChrome 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.
Option C: paste the cookie by hand
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 statusMCP 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-onlyClaude 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/mcpThen 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 /docsEach 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.jsonthe schema, for n8n, Postman or a generated client.Answers are JSON. Lists return
next_cursor; pass it back ascursorfor 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.0Python 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 |
Your groups, with your role, member count and price. | |
Members to CSV or JSON: name, role, level, points, join date, profile URL. | |
Pending requests with each applicant's answers. | |
Approves all pending requests, or those whose answers match | |
Declines one request. | |
A welcome DM with your Start Here course link to everyone who joined in the last N days. | |
Feed posts: title, author, category, likes, comments, date. | |
One post with its body and the whole comment tree. | |
Posts from the last N days with no comments yet. | |
Publishes a post from | |
Comments on a post or replies under a comment. | |
Pins or unpins a post on the feed or a Classroom page. | |
Classroom courses with modules, unlock rule and URLs. | |
Unread Skool Chat conversations with the full thread. | |
A DM to one member. | |
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-runOn 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 69 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.
Groups and search
Tool | Access | REST route | What it does |
| read |
| Skool groups of your account, with your role (or pending), member count and price. |
| read |
| A group's name, About text, privacy, price, counts, owner and membership questions. |
| read |
| Total, new and churned members and monthly recurring revenue for a period. Admins only. |
| read |
| Search Skool's public directory of communities, with members, price and rating. |
| read |
| Search a group's posts, members or courses, as its search box does. |
Posts
Tool | Access | REST route | What it does |
| read |
| Posts in a group's feed, pinned first, then newest, with author, category, likes and comment count. |
| read |
| One post with its full text and comments, replies nested under their comment. |
| write |
| Publish a post to the community feed in a category, as you. |
| write |
| Change the title, text or category of a post you wrote, or any post as an admin. |
| write |
| 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 |
| write |
| Comment on a post, or reply to a comment, as you. |
| write |
| Like a post or a comment, or take the like back. |
| read |
| Who liked a post or a comment. |
| write |
| Get notified of new comments on a post, or stop. |
| write |
| Pin a post to the top of the feed (up to 3) or to a Classroom page (up to 12). Admins only. |
| write |
| Pin a comment to the top of a post's comments, or unpin it. |
| write |
| Turn comments on a post off, or back on. |
| write |
| Vote in a post's poll, change your vote, or take it back. |
| read |
| Answers and vote counts of a post's poll, optionally with who voted for what. |
| read |
| Posts members reported to the admins, waiting for review. Admins and moderators only. |
Members
Tool | Access | REST route | What it does |
| read |
| Members of a group with role, level, points and join date, newest first; also banned or churned. |
| read |
| Find members of a group by name, as the @mention box does. |
| read |
| One member's profile in a group: name, bio, role, level, points and when they were last online. |
| read |
| The group's top 10 members by points for the last 7 days, 30 days or all time, and your rank. |
| write |
| Email people an invitation that lets them straight into the group. Admins only. |
| write |
| Remove a member from the group, or lift a ban. Admins only. |
| write |
| Ban a member from the group, optionally deleting their recent posts. Admins only. |
| write |
| Make a member an admin or moderator, or back to a member. Admins only. |
Membership requests
Tool | Access | REST route | What it does |
| read |
| Pending requests to join, with each applicant's Membership Questions answers. Admins and moderators only. |
| write |
| Let an applicant into the group. Your AutoDM, if set, goes out as usual. |
| write |
| Decline an applicant's request to join. |
Classroom
Tool | Access | REST route | What it does |
| read |
| Courses in the group's Classroom, open or locked for you, with the modules of open ones. |
| read |
| One course with its lessons and folders in Classroom order; get_lesson reads a lesson. |
| write |
| Add a course to the group's Classroom, as a draft or published. Admins only. |
| write |
| Publish a draft course to members, or turn it back into a draft. Admins only. |
| read |
| One lesson's text and video link. |
| write |
| Add a lesson at the end of a course, with text and a video link. Admins only. |
| write |
| Change a lesson's title, text or video link. Admins only. |
| write |
| Mark a lesson done in your own course progress, or undo it. |
Calendar
Tool | Access | REST route | What it does |
| read |
| Events on a group's calendar in one month: title, time, place and who can join. |
| read |
| One calendar event with its full description, place and access. |
| write |
| Add an event to a group's calendar. Admins only. |
| write |
| Change a calendar event's title, time, place or access. Admins only. |
| write |
| Delete a calendar event. Admins only. |
Group settings (admins)
Tool | Access | REST route | What it does |
| read |
| The feed categories of a group: name, who can post, sort order, post count. |
| write |
| Add a category to a group's feed. Admins only. |
| write |
| Rename a category or change who can post in it and how it sorts. Admins only. |
| write |
| Delete a feed category and move its posts to another. Admins only. |
| read |
| The rules of a group, numbered as the group shows them. |
| write |
| Add a rule at the end of the group rules. Admins only. |
| write |
| Change the title or text of a group rule. Admins only. |
| write |
| Delete a group rule. Admins only. |
| read |
| The links on a group's sidebar, numbered as the group shows them. |
| write |
| Add a link to the group's sidebar. Admins only. |
| write |
| Change the text or address of a sidebar link. Admins only. |
| write |
| Remove a link from the group's sidebar. Admins only. |
| write |
| Add a question people answer when they ask to join the group. Admins only. |
| write |
| Change a membership question. Admins only. |
| write |
| Remove a membership question. Admins only. |
| read |
| The group's 9 levels with their custom titles and how many members reached each. |
| write |
| Give one of the group's 9 levels its own title. Admins only. |
| write |
| Replace the text on the group's About page. Admins only. |
| read |
| The welcome message Skool sends every new member, and whether it is on. Admins only. |
| write |
| 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 |
| read |
| Your Skool Chat inbox: who, unread count and last message preview. |
| read |
| The latest messages of one Skool Chat conversation, oldest first. |
| write |
| Send a direct message in Skool Chat to a member, starting a conversation if needed. |
| read |
| Your Skool notifications: new posts, comments, mentions, likes and approvals, newest first. |
| write |
| 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 |
|
| Folder of |
| Skool | |
| Proxy for every request to Skool, e.g. | |
|
| |
| Bearer token required by | |
|
| Address of |
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.jsonis 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.
servebinds to127.0.0.1and refuses another address withoutSKOOL_MCP_TOKEN.skool.com only. Requests and redirects outside skool.com are refused.
Read-only mode.
--read-onlyorSKOOL_MCP_READ_ONLY=1exposes the 28 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 |
| No session, or Skool signed you out. Sign in to Skool in Chrome and run |
403 |
| Your Skool role cannot do this, e.g. stats as a member. |
403 |
| The server runs read-only. |
403 |
| Skool refused the request or showed a bot check. Open skool.com in Chrome once, then retry. |
409 |
| Skool asks for a CAPTCHA. Solve it in Chrome. |
422 |
| An argument is missing or wrong; the message names it. |
429 |
| Skool is limiting the account. Wait a few minutes. |
502 |
| Skool answered with an error, or changed its site. |
Self-hosted or hosted
This repo | ||
Tools | the same 69 | the same 69 |
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 |
| 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, for noncommercial use | 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 20 to 30 credits (25 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
Does Skool have an official 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. Details: cotlet.dev/integrations/skool-api-mcp-server.
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? No, the license allows noncommercial use only. For a team, a company or client work, use Cotlet or write to contact@cotlet.dev.
Is it open source? The source is public, the license is not an open source license: noncommercial use only, no business use.
A tool broke or I need another one. Open an issue with the tool name and the error message.
License
PolyForm Noncommercial License 1.0.0. In short:
Allowed: noncommercial use: you, for your own personal purposes with your own Skool account, or a charity, school, public research or government body. Changing the code, and sharing it under the same license.
Not allowed: any commercial use, your own business included; client work; selling or offering it, or a service built on it.
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
69 toolsadd_group_linkAdd group linkAInspect
Add a link to the group's sidebar. Admins only.
Adds a link after the existing ones in the group's sidebar, as Settings, Links, Add does, and returns the whole new list. Admins only. Nobody is notified and it is undone with delete_group_link, so it runs without asking first.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Where the link goes. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| label | Yes | Link text, up to 34 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses the authorization requirement, that the new link is appended rather than prepended, that nobody is notified, that the return value is the whole new list, and how to reverse it. The 'no confirmation needed' note is exactly the kind of operational guidance annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the admin gate, and every sentence carries information. However 'Admins only' is stated twice in a three-sentence description, which is a small but real redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter mutation with no output schema, the description covers auth, side effects, return shape, and reversibility. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so group, label, and url are already documented with format and length constraints. The description adds no syntax, default, or edge-case detail about any parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a link to the group's sidebar') plus the insertion position ('after the existing ones'). The verb 'add' cleanly separates it from the sibling update_group_link and delete_group_link, which the description even names for the undo path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions ('Admins only'), the equivalent manual path ('Settings, Links, Add'), and a confirmation policy ('runs without asking first') because it's undoable via delete_group_link. It stops short of naming when to prefer update_group_link over adding a new link, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| title | Yes | Rule title, up to 30 characters. | |
| description | No | What the rule means, shown under the title. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: append-only ordering, returns the full new list, no one is notified, admin authorization required, and reversibility via delete_group_rule — which justifies bypassing confirmation. This is consistent with destructiveHint=false and non-idempotent hints. The only flaw is restating 'Admins only' twice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded with the core action and placement first, then constraints. However 'Admins only' appears twice in four sentences, which is pure duplication and the one clear waste in an otherwise tight description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter mutation with no output schema, it covers authorization, effect, ordering, return value, and undo path — everything needed to call it safely. Only minor gaps remain, such as how the returned list is shaped or whether title collisions are rejected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so group, title, and description semantics are already fully documented in the schema. The description adds no per-parameter guidance (no format hints, no note on optional description beyond what the schema says), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a rule ... group rules') and pins the placement ('at the end', 'after the existing ones'). The UI analogy 'as Settings, Rules, Add does' makes it unambiguous which sibling it is versus update_group_rule, delete_group_rule, and list_group_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real preconditions: admin-only access, and it should run without a confirmation prompt because it is non-notifying and reversible. It names delete_group_rule as the undo path, which effectively routes the agent to the right counterpart. It does not explicitly contrast with update_group_rule (editing an existing rule), which is the closest ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | text (default), email or options (multiple choice, one answer). | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| options | No | Up to 4 answers when type is options. | |
| question | Yes | The question, up to 150 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: platform cap of 3 questions, only one allowed of type email, answers surface in list_membership_requests, the call returns all questions, it executes without a confirmation step, and nobody is notified. None of this conflicts with readOnlyHint=false / destructiveHint=false / idempotentHint=false / openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then constraints, then side effects; nearly every sentence carries information. The only waste is the duplicated 'Admins only,' stated once in the opening line and again near the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully says the call returns all questions and where answers later appear. Together with the permission, count-limit, and notification notes, an agent has everything needed to invoke it correctly; only the return shape detail (fields of a question) is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: a group-level cap of 3 questions and the restriction that at most one may be of type email — constraints that affect how the 'type' parameter should be set. It doesn't otherwise elaborate on the 'options' or 'question' fields, which the schema already covers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete verb+resource plus the end-user purpose: 'Add a question people answer when they ask to join the group.' This clearly separates it from update_membership_question and delete_membership_question in the sibling list, and from list_membership_requests which only reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the admin-only prerequisite and maps the action to its UI path ('Settings, Membership questions'), giving the agent a clear context for when this tool applies. It does not explicitly say when to prefer update_membership_question over adding a new one, so the alternative-routing guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
approve_membership_requestApprove membership requestADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| request_id | Yes | request_id from list_membership_requests. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds genuine behavioral context beyond the annotations: an AutoDM is triggered to the applicant as a side effect and the caller must be an admin/moderator. However it never addresses irreversibility (annotations flag destructiveHint=true), failure modes for an already-approved or stale request, or rate/bulk behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The sentence 'your AutoDM, if set, goes out as usual' appears twice nearly verbatim, and the opening 'Let an applicant into the group' is restated immediately after. Real information is buried in a duplicated, out-of-order block rather than front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation whose schema and annotations are fully populated, the description covers the essentials an agent needs: single-request scope, admin/mod requirement, and the AutoDM side effect. Missing only failure/reversibility notes, which is a modest gap given destructiveHint already signals risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, including that request_id comes from list_membership_requests. The description's only addition is the member_id/request_id equivalence note, which is mildly useful but introduces a parameter name that does not exist in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Approves one pending request, so the applicant becomes a member,' anchored to a known UI action ('as Skool's Approve button does'). The scope is limited to a single request, which implicitly separates it from bulk/list operations, but the natural counterpart decline_membership_request is never named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a real prerequisite ('Admins and moderators only') and makes clear it acts on one pending request per call, which tells the agent it must loop for multiple requests. It does not route the agent between approving vs declining or removing a member, so no explicit exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ban_memberBan memberADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| member_id | No | member_id from list_members; needed with delete_recent_posts. | |
| membership_id | Yes | membership_id from list_members. | |
| delete_recent_posts | No | Also delete their recent posts and comments, as Skool offers. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds genuinely new behavioral facts: the member loses access and cannot re-request to join, deleted posts/comments are irreversible, and a paid subscription is not cancelled as a side effect. The only blemish is the internal contradiction between "Admins only" and the trailing "Admins and moderators," which leaves the actual permission requirement ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The key facts (ban, irreversible post deletion, no subscription cancel) are front-loaded, but the second sentence is bloated and awkwardly phrased ("as Membership settings, Ban does:"), and the closing permission fragment reads like leftover text. Trimming would also have prevented the admins/moderators contradiction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers permissions, irreversibility, side effects on subscriptions, and the reverse operation, which is most of what an agent needs. It does not say what is returned or what happens on a non-admin/moderator call, leaving a small gap for a high-stakes write.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented and baseline would be 3. The description still earns a bump by explaining the consequence of delete_recent_posts (removes recent posts and comments, cannot be undone) beyond the schema's neutral "as Skool offers" wording, and by clarifying the one-member-per-call constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Ban a member from the group") and immediately adds a distinguishing scope detail (optionally deleting recent posts, one member at a time). It also explicitly distinguishes itself from the sibling remove_member, so an agent can route between the two without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context (admin action, one member per call) and names the alternative tool remove_member rather than leaving the agent to infer it. However, "remove_member lifts a ban" is a terse, easily misread statement of the reverse relationship, and the guidance closes with a permission clause that conflicts with the opening one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_on_postComment on postADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Comment text. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| post_id | Yes | post_id from list_posts (not the slug). | |
| parent_comment_id | No | comment_id from get_post: reply under that comment instead of the post. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare this as non-read-only, non-idempotent, open-world, and destructiveHint=true. The description adds useful identity context by saying the comment appears under your name, but it does not reconcile the destructiveHint=true annotation or explain visibility, moderation, or irreversibility.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is short and front-loaded. The second sentence somewhat repeats the first but earns its place by adding the parent_comment_id condition and the author-name detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple four-parameter mutation with a fully described schema and safety annotations, the description gives enough context to invoke the tool correctly. It is weaker on side effects and does not explain the return value, though no output schema exists and this is not critical for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents body, group, post_id, and parent_comment_id. The description only restates the parent_comment_id reply behavior without adding syntax, examples, or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: commenting on a post or replying to a comment. It clearly separates the top-level comment case from the reply case, which is enough to distinguish it from siblings such as create_post, like_post, and follow_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains that parent_comment_id makes the operation a reply under an existing comment rather than a top-level post comment. It does not name alternatives like create_post or set_post_comments, nor does it state exclusions, so it is clear but not fully routing-oriented.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Category name, up to 30 characters. | |
| sort | No | How the category orders posts. Default: default. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| who_can_post | No | members (default) or admins only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly=false, destructive=false, openWorld=true), and the description adds real context beyond them: admin authorization requirement, that no color parameter exists because 'Skool picks its color', that members see the category immediately, and that no one is notified so confirmation isn't needed. Remaining gaps are edge cases like duplicate names or failed validation on the 30-character cap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the permission gate, and every sentence is short. The main inefficiency is 'Admins only' stated twice in four sentences, which is redundant wording rather than harmful ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter creation tool with annotations but no output schema, the description covers permissions, side effects, notification behavior, and the key enum semantic. It never states what the call returns (e.g., the new category's identifier or slug), which is a minor gap given there is no output schema to lean on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above that by explaining the who_can_post value 'admins' as an announcements-style category only admins post in, and by clarifying that color is not settable. The sort parameter is not elaborated beyond the schema, which is the one omission.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb + resource and scope: 'Add a category to a group's feed.' The 'as Settings, Categories, Add does' anchor makes it unambiguous that this creates a new category, distinct from update_category/delete_category/list_categories. It doesn't explicitly name a sibling, but the verb makes the distinction obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: creating a brand-new category, admin-only. There is no explicit routing advice such as 'to rename or reorder an existing category use update_category' or a statement about what happens when the name already exists. The 'runs without asking first' line addresses confirmation behavior rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| title | Yes | Course title, up to 50 characters. | |
| min_level | No | Unlock only from this level up. Default: open to all members. | |
| published | No | true shows it to members now; default false keeps it a draft. | |
| description | No | Shown on the course card, up to 500 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-idempotent, non-destructive, open-world. Beyond those, the description adds admin-only authorization, the visibility consequence of draft vs published, and the fact that access can be gated by level. It does not say whether publishing notifies members or whether duplicate titles are rejected, which for a non-idempotent create tool would be valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and understandable, but it repeats 'Admins only' twice and restates the draft/published rule in three places, plus an opaque 'as Classroom, New course does' UI reference that adds no machine-actionable meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description doesn't say what comes back (a course id?) — a real gap since create_lesson presumably needs that id to chain. Otherwise complete for a 5-param create tool: authorization, defaults, visibility, and follow-up step are all covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already explains all five parameters including defaults for published and min_level. The description adds context around the published flag (draft visibility) but no new syntax, constraints, or interaction rules beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Add a course to the group's Classroom') and immediately scopes it to draft vs published. It also signposts the adjacent tool ('Add lessons with create_lesson'), which helps separate this from lesson-level siblings. Minor redundancy ('as a draft or published' then 'as a draft unless published is true') keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real selection guidance: use it for a draft when you don't want to ask first ('A draft is seen by admins only, so it runs without asking first'), and directs lesson creation to create_lesson. It also notes paid and time-unlocked courses are configured in Skool, i.e. not here. No explicit statement of when NOT to use it (e.g., for editing an existing course), so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_eventCreate eventADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| start | Yes | Start, ISO 8601. Without an offset it is read in timezone. | |
| title | Yes | Event title. | |
| access | No | Who sees it: all members (default), members from min_level up, or a course's members. | |
| location | No | The Zoom or Meet link, the address or the URL. | |
| timezone | No | IANA zone the event is shown in, e.g. America/New_York. Default: UTC. | |
| course_id | No | With access course: course_id from list_courses. | |
| min_level | No | With access level. | |
| description | No | What the event is about. | |
| location_type | No | zoom, meet, address or link (default), skool_call or skool_webinar. | |
| duration_minutes | No | Length in minutes. Default: 60. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantive behavior beyond the annotations: admin-only authorization, immediate member visibility ("Members see it at once"), and the reminder side effect ("Skool reminds members before it starts"). It does not spell out that repeated calls create duplicate events, which matters given idempotentHint=false, but the surrounding context is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
"Admins only" appears twice in a four-sentence description, and the duplicated clause about member visibility versus the UI reference could be merged. The core content is front-loaded and there is no padding beyond that repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter mutation with no output schema, the description covers the essentials an agent needs: permission gate, resulting visibility, notification side effect, and the field set. Remaining gaps (duplicate-on-retry behavior, what the response contains) are minor against a fully documented schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented, and the description largely re-lists the same fields. The one added gloss is mapping "who sees it" to the access options and clarifying that location can be a link, address, or URL — marginal gain over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Add an event to a group's calendar" is a specific verb+resource and the following sentence enumerates what gets created (title, start, length, time zone, location, visibility), so an agent knows exactly what this produces. It never names update_event, delete_event, or list_events, so sibling routing is left to the verb alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description anchors usage in a familiar UI action ("as Add event does") and states an admin-only prerequisite, which is real context. It gives no explicit when-not guidance or alternative — e.g. that editing an existing event requires update_event rather than a second create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Lesson text. A blank line starts a new paragraph. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| title | Yes | Lesson title. | |
| course_id | Yes | course_id from list_courses or create_course. | |
| published | No | false keeps it a draft. Default: true. | |
| video_url | No | YouTube, Vimeo, Loom or Wistia link shown above the text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), and the description adds real value beyond them: admin-only authorization, draft-vs-published visibility, that no one is notified, and that the call executes without confirmation. It stops short of describing the return value, and the 'runs without asking first' phrasing is useful but somewhat buried after a repeated 'Admins only'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main behavior is front-loaded and no sentence is filler, but the definition is repetitive: 'Admins only' appears twice explicitly and a third time implicitly via the draft-course visibility clause, and the opening sentence is restated almost verbatim in the second. Trimming the duplication would make it tighter without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six parameters, no output schema, and annotations present, the description covers the essentials an agent needs: authorization, visibility defaults, side-effect (no notification), content constraints, and the requirement for a course_id. The only gap is that it never says what the call returns (e.g. a lesson id), which would matter when chaining into update_lesson.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter is already documented, including the default for published and the accepted video providers. The description adds only marginal semantics (the video plays above the text; blank lines create paragraphs is in the schema, not the description), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (create a lesson), its placement (at the end of a course), and the payload it accepts (title, text, optional video link). It is clearly distinguishable from the sibling update_lesson and from create_course, and it names what is not supported (uploaded videos and files).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions and exclusions: admins only, no uploaded video/file uploads, and the effect of published=false. It does not explicitly name an alternative sibling (e.g. use update_lesson to change an existing lesson), so routing is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_postCreate postADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Post text. Links are kept as typed. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| title | Yes | Post title. | |
| category | Yes | Category name as the group shows it, any letter case. | |
| poll_options | No | Answers of a poll under the post, 2 to 10. Members vote with vote_on_poll. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, destructive, open-world, non-idempotent, so the safety bar is lower. The description still adds real value beyond them: category validation happens before the approval wait and fails fast with the group's categories in the error message, and poll_options nests a poll under the text. It doesn't explain the approval flow outcome or what is returned after publishing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Lead sentence carries the core action, with constraints and failure behavior following in a tight four-sentence block. The second sentence restates much of the first (feed, category, authorship), costing a small amount of redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers what is created, authorship, category validation and its error behavior, poll attachment, and the media limitation. Nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented including poll_options' 2–10 range. The description adds only the framing that poll_options places the poll "under the text" and that category matching is case-insensitive via the group's own naming, which is marginal over the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Publish a post to the community feed in a category, as you") plus scope and authorship semantics. An agent can immediately tell this apart from update_post, comment_on_post, or create_category among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context for use (new post in a group category, authored by the caller) and an explicit exclusion constraint: "Text only; images and files are not uploaded." It does not explicitly name update_post as the alternative for editing existing posts, so routing guidance is present but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decline_membership_requestDecline membership requestADestructiveInspect
Decline an applicant's request to join.
Declines one pending request, as Skool's Decline button does. Admins and moderators only.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| request_id | Yes | request_id from list_membership_requests. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool destructive, non-read-only, non-idempotent, and open-world. The description usefully adds the admin/moderator permission constraint and clarifies that it acts on exactly one pending request, though it does not explain downstream effects such as applicant notification.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the action. The second sentence slightly restates the first by repeating 'Decline,' but it also adds useful scope and permission information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, admin-only mutation with no output schema, the description covers the core action and permissions. It still leaves out what a successful decline does to the applicant or request beyond the destructive annotation, so it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description adds little parameter-level meaning beyond indicating that request_id refers to a single pending request, which is consistent with the schema's reference to list_membership_requests.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: declining an applicant's request to join. It is clearly distinct from sibling approve_membership_request and list_membership_requests by operation, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies that the tool declines one pending request and is limited to admins and moderators. However, it does not explicitly compare usage against approve_membership_request, remove_member, or ban_member, so the when-to-use guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_categoryDelete categoryADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| category_id | Yes | category_id from list_categories. | |
| move_posts_to | No | category_id that gets the deleted category's posts. Default: the first other one. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructiveHint=true, idempotentHint=false) by disclosing what actually happens to dependent data: posts are not deleted but reassigned to move_posts_to or the first other category. It also names the privilege requirement and the minimum-one-category guard, which is exactly the behavioral context an agent needs before a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its consequence in the first sentence, and the Settings/Categories/Delete analogy is compact. 'Admins only' is repeated verbatim in both the first and last sentence, which is the only wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive three-parameter tool with no output schema but rich annotations, the description covers privilege, data-preservation behavior, fallback logic, and the blocking invariant. Nothing an agent needs in order to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description adds the causal link between move_posts_to and the reassignment of posts, reinforcing why the parameter exists. It stops short of adding format detail beyond the schema's 'category_id from list_categories' hint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a feed category') plus the scope-affecting side effect ('move its posts to another'), which separates it cleanly from update_category, create_category, and delete_post in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operating conditions: 'Admins only' and the invariant 'A group keeps at least one category', which tells the agent when this call will fail. It does not explicitly contrast with update_category or rename_level, so routing is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_eventDelete eventADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| event_id | Yes | event_id from list_events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety bar is lower. The description still earns credit by adding that the action cannot be undone, that a recurring event's entire series is removed, and that admin privileges are required — all behavior not encoded in the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The destructive scope and irreversibility are front-loaded, which is good. However, 'Admins only' appears twice (opening line and closing line), wasting a sentence in an otherwise very short description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with full schema coverage, complete annotations, and no output schema, the description covers the essentials an agent needs: permissions, irreversibility, and recurring-series blast radius. Only the single-occurrence case and post-delete response are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters fully documented (group URL name, event_id from list_events), so baseline 3 applies. The description adds only the notion of targeting a single event and says nothing about resolving recurring instances or what event_id format is expected beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a calendar event') with an access constraint, which separates it cleanly from the many other delete_* siblings (delete_post, delete_group_link, delete_category). It never explicitly contrasts with update_event or list_events, but the destructive action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds useful context that it is equivalent to the event's Delete button in the Calendar tab, and that admins are the only permitted callers. It does not say when to prefer update_event or how to handle the recurring-series case if only one occurrence should go, so the agent must infer guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_group_linkDelete group linkADestructiveInspect
Remove a link from the group's sidebar. Admins only.
Removes one sidebar link, as Settings, Links, Delete does; the links after it move up a number. Returns the whole new list. Admins only.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| number | Yes | Link number from list_group_links. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description explains two important behaviors: subsequent links move up a number, and the operation returns the whole new list. It does not discuss failure modes or whether removal can be undone, but it meaningfully supplements the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core action, but 'Admins only' is repeated in both sentences without adding new information. The second sentence is otherwise efficient and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers the action, admin restriction, numbering side effect, and return value. Remaining gaps around error handling or reversibility are minor given the annotations and fully documented parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the parameter descriptions already carry most meaning. The description still adds useful context by explaining that deleting one link shifts the numbering of links after it, which clarifies the significance of the 'number' parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Remove a link from the group's sidebar.' It is immediately distinguishable from sibling tools like add_group_link, update_group_link, and list_group_links, and it clarifies that exactly one sidebar link is removed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives the key prerequisite, 'Admins only,' and grounds the action in the familiar UI path 'Settings, Links, Delete.' It does not explicitly name alternatives such as update_group_link or list_group_links, but the intended use is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_group_ruleDelete group ruleADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| number | Yes | Rule number from list_group_rules. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=true annotation, the description discloses the key side effect that later rules renumber upward and that the full new list is returned, plus the admin permission requirement. For a destructive mutation with no output schema, that is meaningful added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded with the action and the admin restriction. The only waste is the duplicated 'Admins only' at the end, which adds no new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers permission, side effects, and return shape, which is most of what an agent needs for a destructive two-parameter tool. It doesn't mention irreversibility or error behavior for an out-of-range number, but annotations already signal destruction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, including that the number comes from list_group_rules. The description's note that later rules shift up implicitly warns that stored numbers change, which is a modest value-add but not a substitute for anything missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a group rule') and adds scope ('Deletes one rule'), which cleanly separates it from add_group_rule, update_group_rule, and list_group_rules among siblings. An agent can tell exactly what it removes without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Admins only' gives an explicit prerequisite, and the Settings > Rules > Delete analogy makes the intended editorial context clear. It doesn't name a sibling as an alternative (e.g., list_group_rules for finding the number), but the schema parameter covers that link.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_membership_questionDelete membership questionADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| number | Yes | Question number, from add_membership_question or get_group. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds genuinely new behavioral facts: subsequent questions shift up a number, the remaining questions are returned, and the call executes without confirmation or notification. That is real side-effect disclosure beyond the annotation block.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, which is good, but 'Admins only' appears twice and 'Remove a membership question' is restated as 'Removes one membership question' — roughly a third of the text is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully states that the remaining questions are returned, so an agent knows what comes back. Combined with the destructive/renumbering warnings, the definition covers what an agent needs to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters carry descriptive text (including the 'from add_membership_question or get_group' provenance hint). The description adds only the implication that 'number' is a positional index affected by renumbering, so it does not exceed the schema meaningfully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove a membership question'), which distinguishes it cleanly from add_membership_question and update_membership_question in the sibling list. It doesn't name those siblings explicitly, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Admins only' gives the key prerequisite, but there is no guidance on when to delete versus update a question, or what to do if the number is out of range. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_postDelete post or commentADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| post_id | Yes | post_id from list_posts, or comment_id from get_post. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the bar is lower, yet the description adds real value: it discloses the cascade (deleting a post also destroys its comments), that there is no trash and the action is irreversible, and the authorization model required. That is exactly the 'what gets destroyed' context the annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the destructive action and the cascade consequence. Minor filler in the aside 'as Skool's Delete does' that does not help an agent decide or call, but nothing is buried or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter, fully documented, non-idempotent destructive tool with rich annotations and no output schema, the description covers everything an agent needs: what it removes, what goes with it, who may do it, and that it cannot be undone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself already explains that post_id may be either a post_id from list_posts or a comment_id from get_post. The description restates this ('pass its comment_id') but adds no syntax, format, or edge-case detail beyond the structured field text, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a post or a comment') and immediately scopes the two modes of operation: a whole post with its comments, or a single comment passed via comment_id. The resource type alone separates it from the other delete_* siblings (delete_event, delete_category, delete_group_link).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear permission-based guidance: your own content always, anyone's content only when you are a group admin or moderator. It does not name alternative tools or say when to prefer update_post / set_post_comments instead of deleting, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_groupsDiscover groupsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Words to look for. Left out: the top groups. | |
| cursor | No | Next page cursor from the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, open-world, idempotent, and non-destructive behavior, so the description does not need to cover safety basics. It adds useful behavior beyond annotations: 30 results per page, passing next_cursor back as cursor, the fields returned, and the exclusion of private hidden groups.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then adds the most useful operational details: result fields, pagination, cursor reuse, and scope limitations. There is a small amount of repetition around 'public directory/list of communities,' but every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description appropriately lists the directory fields returned and explains pagination. Combined with annotations covering safety and open-world behavior, it gives an agent enough context to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains query and cursor semantics, including that an omitted query returns top groups. The description adds page size and cursor passback guidance, but this is only a modest supplement over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: searching Skool's public directory of communities. The emphasis on the public discovery directory, plus the note that hidden private groups are excluded, distinguishes it from sibling tools like list_groups and search_group that operate on known/private groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: this is the public community discovery search, equivalent to skool.com/discovery's search box, and hidden private groups will not appear. It does not explicitly name sibling alternatives such as list_groups or search_group, so it stops short of fully explicit when-to-use-vs-alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
follow_postFollow postAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| post_id | Yes | post_id from list_posts (not the slug). | |
| following | No | false stops the notifications. Default: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond annotations: scope is limited to the caller's own notifications, the effect is reversible via following=false, and it is safe to run without confirmation. That directly supplements destructiveHint=false and idempotentHint=true rather than repeating them. It does not cover failure modes (e.g. following a post in a group you cannot access).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the outcome, then mechanics, then the safety note. Every sentence carries information an agent would otherwise have to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter toggle with a full schema and no output schema, everything needed to call correctly is present: what changes, what the boolean does, the default, the own-post caveat, and that no approval is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds meaning by spelling out that 'following false unfollows' and by clarifying the own-post edge case that no parameter expresses. The mapping of post_id to list_posts stays in the schema, which is fine.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and outcome ('Get notified of new comments on a post, or stop') and names the exact resource (post). It distinguishes the tool from adjacent post operations like comment_on_post or set_post_comments by framing it as a notification subscription toggle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use it (wanting new-comment notifications) and how to undo (following false). It also pre-empts a common mistake by noting you already follow your own posts from the start. It stops short of naming a sibling alternative for notification management (e.g. list_notifications), so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_auto_dmGet AutoDMARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds real context beyond that: the admins-only auth requirement and the placeholder substitution rule (#NAME# becomes the member's first name, #GROUPNAME# the group's name). It doesn't discuss errors for non-admin callers, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is materially redundant: the opening line restates the 'welcome message ... whether it is on' summary that the second paragraph repeats in full, and 'Admins only' appears twice. The useful details are present but buried in duplicated phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with no output schema, the description covers what is returned (message text, sender, enabled state), the auth restriction, and placeholder behavior. Details of the exact return shape are the only omission, and those are low risk here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single `group` parameter is documented with a concrete example format in the schema. The description adds nothing about the parameter, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: returns the group's AutoDM welcome chat message, its sender, and whether it is enabled. An agent can tell this is the read side of a settings pair. It does not explicitly name set_auto_dm as the mutation counterpart, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Admins only' establishes the authorization prerequisite and implies the read-versus-write split with set_auto_dm, but that alternative is never named. There is no explicit when-to-use or when-not-to-use guidance beyond the admin restriction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_conversationGet conversationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1 to 100. Default: 50. | |
| conversation_id | Yes | conversation_id from list_conversations or send_message. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, yet the description adds real value: the ordering guarantee, the limit-capping behavior, and notably that reading does not mark the conversation read. That last point is a genuine side-effect disclosure not derivable from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence and the following sentence convey the same fact ('latest messages ... oldest first') almost verbatim, which is redundant. The ordering does confirm the response-value note, but the duplication costs space without adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully explains the 'from' field semantics and where member names come from, plus the non-marking-read behavior. It is complete enough to call correctly, though it does not describe pagination or what happens when fewer than limit messages exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with limit's 1-100 range and default already documented. The description adds marginal clarification ('up to limit latest messages') but no syntax or edge-case handling beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: reads the latest messages of one Skool Chat conversation, ordered oldest first. It is distinguishable from list_conversations, though it stops short of explicitly contrasting the two. The purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies when to use by pointing at list_conversations and send_message as the source of conversation_id, but never states when this tool is preferred over alternatives or any prerequisites. Usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_courseGet courseARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| course_id | Yes | course_id from list_courses or create_course. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/no-destructive, so the bar is lower, and the description adds real behavioral detail beyond them: ordering guarantees ('in Classroom order'), folder kind markers interleaved with their lessons, and a visibility scoping rule for drafts vs admins. It does not cover pagination or size limits, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core identity and the sibling disambiguation, then a detail sentence. There is some redundancy: the opening fragment 'One course with its lessons and folders in Classroom order' is restated by 'Returns one Classroom course...', costing a little tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return shape, and it does so (fields listed, folders tagged by kind, lessons ordered). Minor gaps remain around nesting depth and missing-course behavior, but an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both group and course_id documented (including that course_id comes from list_courses or create_course). The description adds no further parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Returns one Classroom course') and enumerates returned fields (title, description, published, lessons in order). It explicitly distinguishes itself from get_lesson, which reads a single lesson's text and video, so an agent can pick between the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear routing context: use get_lesson for a lesson, and this tool for the course with its lessons/folders in order. It also states an access condition ('Only courses this account can open; admins also see drafts'), which tells the caller when results may be missing. No explicit exclusion versus list_courses, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventGet eventARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| event_id | Yes | event_id from list_events. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds real value by describing the returned payload (UTC-normalized times, explicit time zone, visibility scope), which matters because there is no output schema. It omits failure behavior (e.g., nonexistent event_id or access-restricted event).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the return summary front-loaded. The first sentence ('full description, place and access') is largely restated by the second, a small redundancy, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description adequately conveys what comes back and in what form (UTC, time zone, visibility). It lacks only edge-case behavior such as not-found or permission-denied handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: 'group' is explained with the URL-name convention and 'event_id' is tied to list_events. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Returns one event of the group's calendar') and enumerates the fields surfaced (title, description, times in UTC, time zone, location, visibility). It is clearly a single-item fetch distinct from list_events, though the description never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'One calendar event' suggests fetching details for a known event, and the schema's event_id note ('from list_events') supplies the discovery path. No exclusions or explicit when-to-use versus list_events/update_event appears in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_groupGet groupBRead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds genuinely new context: output is admin-dependent, with pending_requests, reported_posts and membership questions returned as 0/empty for non-admins. It doesn't cover behavior for a nonexistent or inaccessible group, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead fragment 'A group's name, About text, privacy, price, counts, owner and membership questions.' is immediately restated in more detail by the following sentence, so the opening line does not fully earn its place. The remainder is front-loaded and dense with no further waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing return values, and it does so thoroughly, including the conditional admin-only fields. What remains missing is edge-case behavior (invalid group name, permission errors), which an agent would need to handle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already explains the 'group' parameter with a URL-name example ('yourgroup' for skool.com/yourgroup). The description adds nothing about the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource and enumerates exactly what is returned ('name, the About text, whether it is private, the price, member, admin, post and course counts, and the owner'), and 'Returns one group' distinguishes it from the list_groups/search_group siblings. It stops short of explicitly contrasting with get_group_stats, which is the closest ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no alternatives are named, even though get_group_stats, search_group and list_groups overlap heavily in this domain. The only usage-relevant signal is implicit: the role-dependent field set, which is behavioral rather than routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_group_statsGet group statsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| period | No | 7d, 30d or 90d. Default: 30d. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses a real latency profile ('up to about 15 seconds' because computation is backgrounded) and the exact failure mode for non-admins (APP_PERMISSION_DENIED). It also explains how each metric is derived, which tells the agent these numbers are dashboard-sourced and may not match a manual count.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the payload and the admin gate, followed by metric definitions and latency. Nearly every sentence carries new information, though 'Admins only' is stated twice and could be consolidated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description itemizes the returned fields and their units (MRR in US dollars), states the period semantics, the latency, and the auth failure. Nothing material is missing for an agent to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline would be 3, but the description adds genuine meaning: it defines what 7d/30d mean (growth of the daily member count) versus 90d (sum of three months of the members chart). The `group` parameter adds nothing beyond the schema, keeping it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names the exact metrics returned (total/new/churned members plus MRR) and the period scope, which is far more specific than the title's 'Get group stats'. It doesn't distinguish itself from nearby siblings like get_group or get_leaderboard, but the resource and output are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: it returns dashboard analytics for a group you administer, and the admin restriction is stated. However, with ~70 siblings including get_group, get_leaderboard and search_members, the description never says when to prefer this tool over those, so the agent must infer the boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leaderboardGet leaderboardARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| period | No | 7d, 30d or all time. Default: 30d. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses the scoring rule (one point per like received), the refresh cadence ('Skool recounts it every few minutes'), and the presence of an updated_at freshness field. That is meaningful behavioral context; only the absence of pagination/size limits or failure behavior keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, the scope and periods front-loaded, then the return shape and freshness note. No filler and nothing repeated from the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return contract itself: top 10, points, your rank when on the board, updated_at. Combined with 100% schema coverage and read-only annotations, an agent has everything needed to call it and read the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented there, including the 30d default and the enum values, which the description merely restates. The description adds no format or edge-case guidance for the parameters, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (the group leaderboard), its exact scope (top 10 members by points), the supported periods, and the inclusion of the caller's own rank. That is precise enough to separate it from list_members or get_group_stats without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Returns the Leaderboards tab' implies when it applies, and the period options imply the choice within the tool. But it never states when to prefer this over sibling reads like list_members or get_group_stats, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lessonGet lessonARead-onlyIdempotentInspect
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; that video and attached files are not returned. Only lessons this account can open.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| course_id | Yes | course_id from list_courses or create_course. | |
| lesson_id | Yes | lesson_id from get_course or list_courses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already establish that this is a safe, idempotent read operation, the description adds substantial behavioral context beyond them: formatting is dropped but paragraph/list structure is preserved, uploaded Skool videos and attached files are omitted, uploaded_video indicates upload status, and only accessible lessons are returned. These are exactly the omissions and caveats an agent needs to avoid misinterpreting the result.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the essential outcome — one lesson's text and video link — and every following sentence adds useful detail about return format, omissions, or access. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lesson retrieval tool with complete parameter documentation and no output schema, the description provides sufficient completeness: it explains what is returned, what is excluded, and the access boundary. An agent can call it correctly without needing additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all three required parameters, so the schema already explains group, course_id, and lesson_id. The description does not add parameter-specific meaning beyond what the schema provides, which makes the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns one Classroom lesson, specifically its text and linked video. This clearly distinguishes it from lesson-mutating siblings like create_lesson, update_lesson, and mark_lesson_complete, as well as from course-level tools like get_course.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the description: an agent would use this to fetch a single lesson's content after identifying its course and lesson IDs. However, the description does not explicitly say when to use this instead of get_course, list_courses, or other lesson-related siblings, nor does it name prerequisites or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_memberGet memberARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| member_id | Yes | member_id from list_members, search_members or get_post. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a read-only, idempotent, non-destructive operation, so the safety profile is covered. The description adds meaningful context beyond annotations: exactly which fields are exposed (online status, time zone) and an explicit privacy guarantee ('Never their email or other private details').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and generally tight, but the two sentences restate the same field list (name, bio, role, level, points) almost verbatim, so one sentence could be trimmed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned profile fields and privacy boundaries, which is the main thing an agent needs. Minor gaps remain around error behavior for a missing member, but the core is complete for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are fully documented in the schema, including the member_id provenance. The description adds no syntax or format detail beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('One member's profile in a group') and enumerates the fields returned, so an agent can distinguish it from list_members/search_members at a glance. Scope is precise: a single member within a named group.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the 'profile card when you click a member' framing, but the description gives no explicit when-to-use guidance or alternatives. It never says to call list_members/search_members first to obtain the member_id, leaving that routing to the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_poll_resultsGet poll resultsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| voters | No | Also list who voted for each answer, up to 30. Default: false. | |
| post_id | Yes | post_id or slug of the post with the poll. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, so safety is covered. The description adds genuinely non-obvious behavior: voters=true caps at 30 per answer, mirroring how vote counts render in the Skool UI, which sets expectations about truncation. It doesn't discuss rate limits or omission cases, keeping it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly packed sentences, front-loaded with the primary return content and followed by the optional expansion. No filler; every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully carries the return-shape burden: per-answer number, text, vote count, and the caller's own vote, plus the voters cap. Nothing an agent needs to call and interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3; the description still adds meaning by explaining that the returned answer 'number' is the identifier vote_on_poll consumes, and by restating the 30-voter cap on the voters flag. That is real semantic value beyond the schema's terse boolean description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: answers and vote counts of a post's poll, with an explicit optional expansion (who voted for what). It also differentiates itself from the sibling mutation tool by naming vote_on_poll and explaining the link between answer numbers and that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear on when to enable the voters expansion and what it yields, and implicitly routes voting actions to vote_on_poll via the answer-number parenthetical. It stops short of an explicit 'use X instead when...' statement, so it's strong context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_postGet postARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| post_id | Yes | post_id or slug from list_posts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing real behavioral traits: attachments and files are omitted while in-text links survive, and comments are capped at 25 with replies nested. The 25-comment cap is exactly the kind of truncation limit an agent needs to know to avoid misreporting completeness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead line front-loads the essential scope and the remaining two sentences add return shape and a workflow link, all of which earn their place. There is mild redundancy between the headline sentence and 'Returns one post by post_id or slug', but nothing wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of describing return values and does so completely: fields returned, comment cap, nesting, and what is excluded. An agent has everything needed to call it and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, including that post_id accepts a slug. The description restates 'post_id or slug' but adds no new format, validation, or default information, and says nothing about the 'group' parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('One post with its full text and comments') and defines the returned shape precisely, including nested replies. An agent can tell this apart from list_posts or get_conversation without opening the schema, since it is explicitly the single-post-by-identifier retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes the selection condition clear: retrieve one post by post_id or slug, with the identifier coming from list_posts (schema) and a follow-on path to comment_on_post using comment_id. It never explicitly says when NOT to use it (e.g., to browse many posts use list_posts), so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
invite_membersInvite members by emailADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| emails | Yes | Up to 50 addresses. | |
| course_ids | No | Long course ids to unlock for them on joining (from create_course or get_course). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, openWorldHint=true, and idempotentHint=false, so the safety burden is partly covered; the description adds real context the annotations cannot, namely that an invitation email is actually sent externally, that existing group members are silently skipped, and that acceptance bypasses approval. It never explains why this is 'destructive' (are invites revocable? does it consume seats?) nor any rate limits, which matters for a 50-address batch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
'Admins only' appears twice, wasting a sentence, and the phrase 'as Invite people, Invite by email does' is garbled and costs the reader a pass to parse. The useful scope statement (no membership request, external recipients) is present but not front-loaded ahead of the duplication.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should say what a batch call returns — per-address success, skipped-existing, or invalid — which is important when up to 50 emails are submitted at once. Permissions and side effects are covered adequately, but the outcome shape is left entirely to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so group, emails, and course_ids are already documented in the schema, including the 50-address cap and the course-id hint. The description adds no format or semantic detail beyond what the schema states, which is the expected baseline behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (email an invitation to members) and pins down the distinguishing effect: recipients join directly without a membership request, which separates it from approve_membership_request. It also clarifies that the emails go to people outside the group, distinguishing it from send_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Admins only' sets a clear precondition, and 'whoever accepts joins without a membership request' tells the agent this is a pre-emptive path rather than a request-handling one. It never explicitly names a sibling tool as the alternative, so the routing is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
like_postLike post or commentAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| liked | No | false takes the like back. Default: true. | |
| post_id | Yes | post_id from list_posts, or comment_id from get_post. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag it as a non-read-only, idempotent, non-destructive open-world mutation, and the description adds real context beyond that: the author gets a leaderboard point, Skool sends them a notification, rapid liking returns rate_limited, and the action is undone with one call. These are exactly the side effects and failure modes an agent needs before mutating state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each doing distinct work: purpose, inverse semantics, social side effects, rate limits, and reversibility. The purpose and the liked=false mechanic are front-loaded ahead of the caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the mutation's side effects, its rate-limit failure mode, and reversibility for a 3-parameter tool with no output schema and solid annotation coverage. It does not say what a successful response contains or how an already-liked target behaves, though idempotentHint partially covers the latter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description restates the same facts the schema already carries ('liked false takes the like back', post_id doubling as comment_id) without adding syntax or format detail. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (like/unlike) and resource (post or comment), and the 'take the like back' phrasing covers the inverse operation explicitly. It is clearly separable from siblings like follow_post and vote_on_poll.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for the inverse path ('liked false takes the like back') and states it 'runs without asking first', so the agent knows no confirmation is needed. It never names alternatives such as follow_post or vote_on_poll, so the routing guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_categoriesList categoriesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, open-world profile for this listing tool. The description adds real value beyond them: the returned fields (name, who can post, sort order, post count), the ordering guarantee, and the exact value domains for who_can_post (members/admins) and sort (default, new, top_week, top_month, top_year).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short blocks, front-loaded with the returned fields, then the enumeration meanings. No filler sentences; every clause carries information the schema does not.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the response and does so adequately, including the sort field's value set and ordering. Minor gaps: no mention of auth/permission requirements or behavior for a nonexistent/invalid group.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter, and schema description coverage is 100% with an example ('yourgroup' for skool.com/yourgroup). The description adds nothing about the group argument itself, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Lists the categories a group's feed is split into, in the order the group shows them.' Clear enough to distinguish from create_category/update_category/delete_category by verb alone, and it names the returned fields. It does not explicitly route to those mutation siblings, so it stops short of the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit 'use this when...' statement or named alternative. Usage is only implied by the note that 'create_post and update_post take the name,' which hints that this is a prerequisite lookup for creating or updating posts, but the agent must infer that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_conversationsList conversationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 1 to 30 (Skool refuses more). Default: 20. | |
| cursor | No | Next page cursor from the previous call. | |
| unread_only | No | Only conversations with unread messages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuinely non-structured behavior: results span all groups, sort order is most-recent-first, and the pagination contract ('pass next_cursor back as cursor') is spelled out so the agent knows how to continue.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero padding, front-loaded with the inbox framing and immediately followed by scope, sort order, the filter hint, and pagination. Every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by naming the returned fields and ordering, and it closes the pagination loop. Minor gaps remain (empty-inbox behavior, whether the total count is exposed), but an agent can call this correctly from what is given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; each parameter is already documented, including the 1–30 limit cap. The description only restates the cursor round-trip and the unread_only purpose, adding little meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource — 'Lists your Skool Chat conversations across all groups' — plus ordering ('most recent first') and returned fields (other member, unread count, last message). This clearly separates it from the singular get_conversation sibling, though that sibling is never named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only usage steer is 'Set unread_only to see only what needs an answer,' which implies an inbox-triage workflow. There is no explicit statement of when to use this versus get_conversation, list_notifications, or search_members, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_coursesList coursesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description's extra context is the real value: result ordering, the open/locked 'unlock' semantics, the honest caveat that Skool doesn't reveal the lock reason, and the fact that locked courses list no modules. It doesn't mention auth requirements or behavior for an invalid group name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the title sentence, followed by concrete details about ordering, lock status, and module links. The closing 'Use the module links in welcome messages' is slightly tangential but short enough not to bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description has to describe what comes back, and for that it does well: courses in order, unlock status, modules with links for open courses only. It falls short of fully complete by omitting any error/invalid-group behavior, but the shape of the result is clear enough to call the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema coverage, the schema already documents 'group' with an example. The description only implies the group scoping through 'the group's Classroom' and adds no format or edge-case detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A specific verb and resource: it lists the courses of a group's Classroom, and it states the scope (open and locked courses, modules only for open ones). It doesn't explicitly name a sibling such as get_course or create_course, but the plural-list semantics separate it well enough in practice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: you use it to see a Classroom's courses. The one directive, 'Use the module links in welcome messages', tells the agent what to do with the output rather than when to pick this tool over get_course or list_lessons-style siblings. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsList eventsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| month | No | YYYY-MM. Default: this month. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds real behavioral value the annotations lack: recurring events appear once per date, month view semantics, and timezone handling. Only minor ambiguity is that 'start and end are UTC' appears to describe returned fields rather than the schema's two params, which is not a contradiction but slightly unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with scope and output summary, then the sibling routing. Two tight sentences plus an informative clause; the 'title, time, place and who can join' list earns its place by previewing the return shape absent an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully summarizes the returned fields and discloses recurring-event deduplication and timezone semantics. Nothing essential is missing for a simple two-param read tool, though pagination/limits and the exact meaning of the UTC note could be tighter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both 'group' and 'month' are documented with format and default — so the schema carries the parameter burden. The description reinforces month scoping ('in one month') but adds no format or syntax detail beyond the schema, matching the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Events on a group's calendar') plus scope ('in one month') and even previews the returned fields. It explicitly distinguishes itself from get_event and create_event, so an agent can pick it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the two relevant alternatives and what each does ('get_event returns one event, create_event adds one'), which effectively routes the agent. It doesn't spell out exclusions (e.g., multi-month ranges, non-calendar event sources), so it stops short of a full when/when-not rubric.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_group_linksList group linksARead-onlyIdempotentInspect
The links on a group's sidebar, numbered as the group shows them.
Lists the links the group shows in its sidebar under the description, numbered from 1. update_group_link and delete_group_link take the number.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), so the bar is lower; the description adds the non-obvious behavioral fact that entries are 1-based and ordered as the sidebar displays them, which is essential for downstream calls. It omits ordering stability and behavior when the group has no links, so it isn't exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the resource statement first and the numbering-consumer note second. The opening noun-phrase fragment is slightly clipped but still front-loads the key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, read-only list tool with no output schema, the description supplies what an agent needs: what is listed, how it's ordered/numbered, and who consumes the number. Missing only minor details like empty-list behavior and whether numbering shifts as links change.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'group' parameter is documented with a concrete URL-name example, so the schema carries the load. The description only implies the group scoping via 'a group's sidebar' and adds no format or edge-case guidance beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Lists the links the group shows in its sidebar under the description') rather than restating the title. It also clarifies that results are numbered from 1, which is the distinguishing characteristic versus other list_* tools. It stops short of 5 because it doesn't explicitly contrast with the nearest reading siblings (list_group_rules, list_categories).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The closing sentence 'update_group_link and delete_group_link take the number' tells the agent exactly when this tool matters: as the prerequisite lookup for link-index-based mutations. That's clear workflow context, though it doesn't spell out 'call this before updating/deleting' or any exclusions explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_group_rulesList group rulesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. The description adds a genuinely non-obvious behavioral fact: numbering starts at 1 and follows the group's display order, tying it directly to the sibling mutation tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is short and front-loaded, but the opening fragment ('The rules of a group, numbered as the group shows them') is fully subsumed by the sentence that follows, so the numbering point is stated twice. One sentence plus the sibling linkage would have been tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read tool with rich annotations and no output schema, the description supplies the crucial piece an agent cannot get elsewhere: the meaning and 1-based ordering of the returned rule numbers. It does not describe the returned fields, but the low complexity keeps that minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter and schema description coverage is 100%, so the schema fully documents 'group' with an example. The description never mentions the parameter or its format, so it adds nothing beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the group rules') and names the scope ('members agree to'). It also distinguishes itself from the mutating siblings by explaining that update_group_rule and delete_group_rule consume the numbers it returns, though the opening fragment largely restates the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes the usage context clear: call this to obtain rule numbers that update_group_rule and delete_group_rule then take, which is exactly the lookup-then-mutate workflow an agent needs. It stops short of explicit when-not guidance or naming a distinct alternative for the same data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_groupsList groupsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, so the bar is lower; the description still adds real context: a hard cap of 50 results, the role vocabulary (admin/moderator/member/pending), and the caveat that a pending group shows no posts or members yet. It stops short of saying what happens past 50 groups (no cursor/offset described).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what is returned and the cap, then field semantics, then the downstream usage hint. Slight redundancy between the lead fragment 'Skool groups of your account' and 'Returns up to 50 Skool groups of your account', but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description does document the meaningful returned fields (role, members count origin, price, pending state). The gap is that it tells the agent to pass 'group' to other tools without describing that identifier's form, which matters for chaining.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline of 4 applies; there is nothing parameter-level for the description to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: returns up to 50 Skool groups tied to the account, scoped to owned/joined/pending. It delineates scope well but never names the obvious siblings (get_group for one group, discover_groups for finding new ones), so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one concrete downstream instruction: 'Use group as the group parameter of the other tools,' which is genuinely useful routing. However there is no explicit when-to-use-this-vs-alternative guidance against discover_groups or get_group, so the choice is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_levelsList levelsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds useful context beyond that: the level set is fixed at 9, titles can be empty, and a per-level member share is returned — genuine added value without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded summary sentence followed by a field-by-field elaboration; every clause carries information. Slight redundancy between the lead line and the enumeration keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by enumerating exactly what each returned level entry contains (number, Skool's name, admin title or empty, member share). An agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, with the schema itself explaining the group URL name format. The description adds no further parameter guidance, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the 9 levels of the group's leaderboard') plus the exact fields returned, so an agent can distinguish it from get_leaderboard and rename_level without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the sibling alternative explicitly ('get_leaderboard ranks the members') and clarifies where points originate, which effectively routes ranking questions elsewhere. It stops short of an explicit 'use this when / not when' statement, so it lands just below the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_membersList membersARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | all, admin, moderator or member. Default: all. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| limit | No | 1 to 30. Default: 30. | |
| cursor | No | Next page cursor from the previous call. | |
| status | No | Which members tab: active (default), banned, churned (left) or cancelling (paid groups). | |
| joined_since | No | Only members who joined on or after this date. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the readOnly/idempotent annotations: fixed page size of 30, newest-approved-first ordering, cursor round-trip protocol, the per-tab semantics of status including that admins count as active, and the non-obvious caveat that joined_since filters only within the fetched page rather than the whole group. That last point is exactly the kind of trap disclosure that prevents wrong conclusions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and ordering, then the paging protocol, then per-parameter semantics — a sensible priority order. Dense but nearly every clause carries information; the one cost is a somewhat run-on middle section where the three sentences blend paging, status and role together.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description carries the needed burden: it enumerates returned attributes, states page size and ordering, explains the pagination handshake, and covers both enum parameters and the page-scoped filter. An agent could call this correctly and interpret the results without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description genuinely adds meaning: it clarifies that role=admin/moderator is applied server-side ('asks Skool for the admins only') and warns that joined_since is page-scoped, neither of which appears in the schema. It also disambiguates member_id (person-level, used by send_message/get_member) from membership_id (group-level, used by set_member_role/ban_member/remove_member), which are return identifiers rather than inputs but still resolve real ambiguity for follow-up calls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Lists members of one group, newest approved first.' The return fields (role, level, points, join date) and the tab variants (banned, churned, cancelling) make the capability concrete. It never names the nearby sibling search_members, so an agent can't fully rule out the alternative without opening both schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Operational guidance is strong — pass next_cursor back as cursor, status selects the tab, role=admin/moderator restricts to admins — but that is how-to-use, not when-to-use-this-vs-something-else. No exclusion or routing against search_members or list_membership_requests, which are the obvious confusable siblings in a roster-listing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_membership_requestsList membership requestsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| limit | No | 1 to 30. Default: 30. | |
| cursor | No | Next page cursor from the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description adds important behavioral details: only admins and moderators can see requests, unauthorized access returns APP_PERMISSION_DENIED, results are paginated 30 per page and ordered oldest first within the page, and applicant answers are included. These details materially help the agent understand permissions, failure behavior, and result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and includes useful operational details without excessive length. There is minor redundancy around 'Admins and moderators only' and 'Only admins and moderators see requests', but the structure remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no output schema, the description explains the returned data, pagination behavior, permission requirements, failure behavior, and the follow-up action for request IDs. An agent has enough information to call the tool correctly and interpret the results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so group, limit, and cursor are already documented in the schema. The description adds useful pagination context with '30 to a page' and 'oldest first', but it does not add parameter-level meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: pending requests to join a private group, including applicants' Membership Questions answers. It clearly distinguishes this from sibling tools like list_members, approve_membership_request, and decline_membership_request by focusing on pending join requests and admin/mod visibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: admins and moderators should use it, other accounts receive APP_PERMISSION_DENIED, and returned request_id values are meant for approve_membership_request or decline_membership_request. It does not explicitly contrast with every alternative listing tool, but the intended workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notificationsList notificationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Only this group's notifications, by URL name. Default: all groups. | |
| limit | No | 1 to 30. Default: 30. | |
| cursor | No | Next page cursor from the previous call. | |
| unread_only | No | Only unread ones. Default: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, but the description still adds real value: ordering (newest first), scope (all groups or one), the returned fields (type, line, post, link), and the crucial side-effect disclosure that reading does not mark notifications read. It stops short of describing pagination behavior or what happens when the cursor is exhausted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource and ordering before the mechanics, and the second sentence carries the scope, return contents, and alternative routing. Slightly dense and repetitive ('newest first' appears twice), but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully sketches the returned shape (type, display line, related post, link). Pagination details are left to the cursor parameter in the schema, so an agent knows enough to call and page correctly, though the response envelope itself remains implied.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters including group, limit, cursor, and unread_only. The description reinforces group ('all groups or one') and unread_only semantics but adds no format or syntax detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (lists) and resource (notifications) with scope spelled out: this account's bell, newest first, all groups or one. It also enumerates the notification kinds returned, so an agent can tell it apart from siblings like list_posts or list_conversations without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use unread_only to narrow to unread, and use mark_notifications_read to actually mark them read, with the clarifying note that this tool does not. The alternative is named along with the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_post_likesList post likesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| limit | No | 1 to 100. Default: 50. | |
| post_id | Yes | post_id from list_posts, or comment_id from get_post. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive semantics, so the description need not restate them. It adds real behavioral context beyond the annotations: ordering (newest first), a hard cap (up to 100), and the fact that the returned member_id plugs into other tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the purpose. The phrase 'as the like count under it opens' is slightly awkward UI-flavored prose but still earns its place by conveying invocation context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the essentials: result ordering, result cap, and the key of the returned records. It does not mention pagination or what happens past 100 likes, which is a minor gap for a capped list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so group, limit, and post_id are already documented. The description only reinforces that post_id may be a comment id or a post id, which the schema also states, so it adds marginal meaning beyond structured data. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (lists members) and resource (who liked a post or comment), with scope details: newest first, capped at 100. This clearly separates it from the write-side sibling like_post, though it never names the alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes the retrieval context ('as the like count under it opens') and gives downstream chaining guidance ('member_id is what send_message and get_member take'), which tells the agent what to do with the result. It lacks explicit when-not-to-use conditions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_postsList postsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| limit | No | 1 to 30. Default: 20. | |
| since | No | Only posts created after this time (ISO 8601, UTC). | |
| cursor | No | Next page cursor from the previous call. | |
| category | No | Only posts whose category name contains this text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, non-destructive profile, so this description wisely adds behavior they don't: page size cap of 30, the pinned-then-newest ordering, the non-obvious pagination-plus-filter interaction, and that preview is truncated to 200 characters. That last detail prevents an agent from assuming it got the full post body.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states purpose and ordering, the second pagination and the filter caveat, the third the preview/get_post split. Front-loaded with the core purpose, no redundant restatement of the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so — author, category, likes, comment count, and truncated preview. Combined with the pagination caveat, an agent has everything needed to call this correctly and interpret a short page.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: the relationship between next_cursor and the cursor parameter, and the crucial caveat that category/since apply only within the current page rather than across the feed. Slightly short of 5 only because limit's default and range are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists one page of the group's feed') plus the exact ordering semantics: pinned first, then newest. It also names the complementary tool (get_post) and what it returns, so the agent can distinguish this listing tool from full-post retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to pass next_cursor back as cursor for older posts, warns that category/since filter within the page so results can be short or empty while next_cursor still points further, and routes to get_post for full text. Conditions and alternatives are spelled out rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reported_postsList reported postsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish read-only, idempotent, non-destructive behavior, while the description adds meaningful context: the posts are member-reported and awaiting review, and access is restricted to admins and moderators. It does not cover pagination or return shape, but it adds authorization and queue-state context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the reported-queue purpose, with the delete_post alternative included efficiently. It repeats the admin/moderator restriction twice, which is minor redundancy but not harmful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only listing tool with full schema coverage and clear annotations, the description supplies the essential queue, authorization, and removal-alternative context. It does not describe return values or pagination, but no output schema exists and the core behavior is adequately specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the single group parameter is fully documented in the schema. The description does not add parameter-specific meaning beyond that, which is acceptable given the complete schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it lists posts in the group's Reported queue that members flagged. It also distinguishes the tool from delete_post by noting that delete_post removes one, so an agent can route removal actions elsewhere.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the queue context and that the tool is for admins and moderators only, and it points to delete_post for removal. It does not explicitly say when not to use it versus list_posts, but the reported-queue scope makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_lesson_completeMark lesson completeAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| completed | No | false marks it not done. Default: true. | |
| lesson_id | Yes | lesson_id from get_course. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety bar is lower. The description adds real value on top: it states the blast radius is limited to the caller's own progress bar and that no confirmation prompt is needed, which is exactly the risk information an agent needs before auto-invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler. The action, the undo path, and the safety rationale each appear once and in priority order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the tool returns a simple progress change, so the description needn't explain return values. It covers scope, undo, and safety; only minor gaps remain, such as whether the account must be a group member for the call to succeed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – all three parameters are documented, including that `completed: false` marks it not done and defaults to true. The description restates the `completed` semantics but adds nothing about `group` or `lesson_id` sourcing beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Mark a lesson done') plus an explicit scope qualifier ('in your own course progress, or undo it'). The 'your own progress' framing distinguishes it from lesson-authoring siblings like update_lesson or create_lesson without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions for both directions of use ('Mark as done' equivalent, and `completed false` clears it) and reassures the agent it can run unattended. It stops short of naming a sibling alternative or stating exclusions (e.g. when to use update_lesson instead), so it isn't a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | No | Only this group's, by URL name. Default: all groups. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real information beyond the annotations: the blast radius is limited to 'this account's notifications' and the call needs no user confirmation, which explains the destructive/readOnly posture in practical terms. It also describes the observable effect ('clears the unread count on the bell'), though it does not address whether a missing group name errors or silently no-ops.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope, then the effect and safety note. Nothing is redundant with the title and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter mutation with annotations and no output schema, the description covers scope, effect, and confirmation behavior adequately. Only the failure mode for an unknown group name is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the group parameter as 'URL name' with a default of all groups. The description restates the same all-vs-one choice without adding format or edge-case detail, so the schema is doing the heavy lifting — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (mark read) applied to a specific resource (your notifications) with an explicit scope choice: 'everywhere or in one group.' The verb alone separates it from list_notifications and the many group/post management siblings, so the agent can route without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional guidance on the only real decision point — whole-account versus single-group scope — and notes it 'runs without asking first,' which tells the agent not to request confirmation. It stops short of naming an alternative tool or a when-not-to-use condition, so it is clear but not fully complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_commentPin commentAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| pinned | No | false unpins. Default: true. | |
| post_id | Yes | post_id the comment is under. | |
| comment_id | Yes | comment_id from get_post. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) with facts the annotation block cannot express: the permission requirement (admins/moderators), that it sends no notification to anyone, and that it is undone with one call. It even resolves the practical question of whether to prompt the user for confirmation, which is exactly the kind of context an agent needs for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and its inverse, with the permission and safety notes following. There is mild redundancy between 'Pin a comment to the top' and 'Pins one comment above the others', but no filler otherwise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter toggle with full schema coverage and annotations, the description covers the essentials: what it does, the inverse operation, who may call it, side effects, and reversibility. It never indicates what the call returns, which is a minor gap given there is no output schema, but nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including the pinned-false-unpins semantics. The description restates the unpin behavior but adds no format, default, or sourcing detail beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Pin a comment to the top of a post's comments, or unpin it') and the second sentence clarifies the scope as one comment above the others under a post. This is clearly distinct from the sibling pin_post, which operates on posts rather than comments.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear condition for invocation (group admins and moderators only) and an explicit operational directive that it 'runs without asking first' because it is silent and reversible. It does not name an alternative sibling or state when not to use it, but the toggle semantics ('pinned false unpins it') make the when-to-use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_postPin postAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| pinned | No | false unpins. Default: true. | |
| post_id | Yes | post_id from list_posts (not the slug). | |
| course_page_id | No | Pin to this Classroom page instead of the feed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so the bar is lower, yet the description adds real context: admin-only authorization, the 3/12 capacity ceilings, and the one-call undo path. The 'sends nothing to anyone' and no-confirmation note is useful beyond what the annotations convey, though capacity-exceeded behavior is still unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The second paragraph is largely a restatement of the first sentence, repeating the 3/12 limits and 'Admins only' verbatim. The key facts are front-loaded, but redundancy costs it points.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a full schema and annotations but no output schema, the description covers authorization, capacity, undo, and unpin semantics. Only failure behavior at the pin cap is missing, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all four parameters are already documented in structured fields including pinned=false and course_page_id. The description reinforces the unpin flag and the feed-vs-classroom-page choice but adds no syntax or edge-case detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource and adds scope: pinning to the feed (max 3) versus a Classroom page (max 12). The agent can distinguish this from pin_comment and update_post without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the two destinations, that pinned=false unpins, and that admins only may call it, which is clear usage context. It stops short of naming sibling alternatives (e.g. pin_comment for comments, update_post for edits), leaving that routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_memberRemove memberADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| membership_id | Yes | membership_id from list_members. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds real value on top: the admin-only authorization requirement, the reversibility property (member may rejoin), and the explicit non-effect ("Their posts stay"). For a destructive operation, telling the agent what survives is exactly the context annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence is front-loaded with the two use cases and the permission gate, which is the right ordering. Phrasing like "as Membership settings, Remove does" and "the same way, as Unban does" is slightly verbose UI-referencing filler that could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive admin tool with no output schema, the description covers what an agent needs before calling: permissions, blast radius (one member), reversibility, and side-effect boundaries (posts retained). Return-value behavior is the only untold piece and is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both `group` and `membership_id` documented including where membership_id comes from (list_members). The description adds no parameter-level detail beyond the singular scope ("one member"), so this is the baseline-3 case where the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb + resource ("Remove a member from the group") and immediately covers the second use case (lifting a ban), which is the one place an agent could misroute to ban_member. The verb+resource+scope combination makes the tool distinguishable from its siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: admins only, one member at a time, and the outcome that distinguishes it from a ban (they lose access but may ask to join again). It stops short of saying "use ban_member instead if you want to prevent rejoining," so the alternative is implied rather than named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| level | Yes | Level number, 1 to 9. | |
| title | Yes | The title members see at that level. Empty string: back to the plain name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: the change is applied without a confirmation prompt ('Runs without asking first') and is reversible in one call, and the per-level point thresholds are explicitly unaffected. That said, it never mentions rate limits or side effects such as member notifications, and the claim of one-call reversibility sits slightly awkwardly against idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the auth constraint, and the 'what changes / what does not change' split is useful. Minor waste: 'Admins only' appears twice, and the 'as Settings, Gamification does' clause is confusing rather than clarifying.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no output schema, the description covers who may call it, what is modified, what is preserved, and how to undo it. Only the return value and any downstream effects on members are unstated, which are minor omissions here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so group, level and title are already fully documented, including the empty-string reset behavior. The description restates the level range and empty-title semantics rather than adding new syntax or format guidance, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Give one of the group's 9 levels its own title.' An agent can immediately tell this apart from the read-only siblings list_levels and get_leaderboard, and knows the target object is a level title, not a level threshold.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear operating context: admin-only, it modifies what members see next to a level, and an empty title reverts to the plain name. It never names an alternative call or states an exclusion, but for a single-purpose setter the applicability conditions are effectively covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_groupSearch groupARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | posts (default), members or courses. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| query | Yes | Words to look for. | |
| cursor | No | Next page cursor from the previous call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive and open-world, so safety is covered. The description adds genuinely useful behavior: pagination at 30 posts per page with next_cursor passed back as cursor, result content for posts (titles, text, author, preview), and visibility scoping ('what this account can see'). Rate limits and result ordering are still unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what the tool does and followed by pagination and visibility details. Minor redundancy between 'as its search box does' and 'Runs the group's search box', but no wasted sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description covers the key return-shape facts (post fields, pagination, account-scoped visibility) that an agent needs to page and interpret results. A search tool could still say more about match behavior or result ordering, but nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by explaining cursor round-tripping and the 30-per-page page size for posts, plus what members-by-name and post results actually contain. That is real value over the enum and cursor descriptions in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource scope (a group's posts, members or courses) with the useful framing 'as its search box does', which scopes it to group-internal search. It does not name or explicitly distinguish itself from siblings like search_members, list_posts or list_courses, so the differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The search-box framing implies when to use it (mimicking the group UI search), but there is no explicit when/when-not guidance and no mention of the obvious alternative search_members. An agent must infer that this is the in-group search path rather than the platform-wide or listing alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_membersSearch membersARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| limit | No | 1 to 30. Default: 10. | |
| query | Yes | Part of a name or handle. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile is covered. The description adds real behavioral detail beyond that: results are rank-ordered 'best matches first' and matching is on name or handle (substring, per the schema). It does not mention pagination limits or empty-result behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and sized appropriately for a read-only search tool. The '@mention box' analogy is stated twice in nearly identical wording ('as the @mention box does' / 'as typing @ in a post does'), which is one sentence of redundancy in an otherwise tight definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter read-only search with no output schema, the description covers purpose, ranking, matching fields, and the shape of the useful return value (member_id). Only minor gaps remain: the existence of other returned fields (name, handle) and result-limit behavior are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and the description must earn more. It does so by clarifying the matching semantics of `query` (name or handle) and, critically, by identifying `member_id` as the returned key that get_member and send_message consume — bridging input to downstream usage in the absence of an output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('find members of a group by name') plus a concrete analogy ('as the @mention box does') that pins down the exact search semantics. Immediately distinguishable from list_members (paging everyone) and get_member (lookup by id), both named in the text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent among siblings: use this for name/handle search, get_member and send_message when you already hold a member_id, and list_members to page through everyone. That is a complete when-to-use-this-vs-alternatives map with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageSend messageADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Message text. | |
| group | No | Group URL name you share with the member. Default: the first of your groups that works. | |
| member_id | Yes | member_id from list_members, or with.member_id from list_conversations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is a non-readonly, open-world, non-idempotent, destructive operation. The description adds valuable behavioral context: it starts conversations, uses a shared group or a default, refuses self-messages, may be limited by level, sends under the user's name, and cannot be deleted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and appropriately sized, but the first sentence and the beginning of the second sentence overlap substantially. The redundancy is minor and does not obscure the key behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a send-message mutation with annotations and no output schema, the description covers the important caller-facing behavior: conversation creation, group selection, self-message refusal, level restrictions, attribution, and non-deletability. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents member_id, body, and group. The description adds meaning beyond the schema by explaining that the group must be shared and that Skool will fall back to the first accepted group.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: send a direct message in Skool Chat to one member. It also states that it starts a conversation if needed, which distinguishes it from read-only siblings such as get_conversation and list_conversations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains the use case and several constraints: a group must be shared, self-messaging is refused, and group chat may be level-limited. It does not explicitly name alternatives among siblings, but the context is strong enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_auto_dmSet AutoDMADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| enabled | No | Turn the AutoDM on or off. Pro plan only. | |
| message | No | New welcome text. #NAME# and #GROUPNAME# are filled in by Skool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=false; the description justifies the destructive flag by stating 'message replaces the text' (existing text is overwritten) and clarifies the toggle semantics of 'enabled'. It also adds the Pro-plan gating and admin-only auth requirement, which annotations do not cover. Minor gap: no statement of what happens to the message when only 'enabled' is passed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence is good and front-loaded, but the body repeats itself: 'Admins only' appears twice and 'Changes the group's AutoDM' restates the title. Roughly a third of the text is redundant, though nothing is actively confusing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description does not need one since the effect is described ('every new member gets the result'). For a three-parameter mutation with annotations present, it covers auth, plan gating, and overwrite behavior adequately. Only the partial-update semantics (supplying 'enabled' alone) are left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented, including the #NAME#/#GROUPNAME# placeholders and the Pro-plan note. The description's 'message replaces the text' and 'enabled turns it on or off' essentially restate the schema. Baseline 3 for a fully documented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a concrete verb+resource: change the group's AutoDM welcome message or toggle it on/off. It is clearly a write counterpart to the get_auto_dm sibling, though it never names that sibling explicitly. An agent can tell what it does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies useful preconditions — admins only, and 'enabled' requires the Pro plan — and explains the downstream effect (every new member gets the result). But it never states when to prefer this over get_auto_dm for reading current state, nor what to do if the group is not on Pro. Usage is implied rather than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_course_publishedPublish courseADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| course_id | Yes | course_id from list_courses or create_course. | |
| published | Yes | true publishes, false turns it back into a draft. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=false... here destructiveHint=true and idempotentHint=true, so the description's added value is the reassurance that members' progress is kept and that the operation is reversible by flipping the switch back. That is meaningful context beyond the annotations and correctly softens the destructive flag, though it doesn't state whether members are notified on publish.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core intent is front-loaded, but the text is padded: 'Admins only' appears twice, and 'Publishing shows the course to members' restates the opening sentence and the 'as the course's Published switch does' analogy. Roughly a third of the words could be cut without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter toggle with full schema coverage and rich annotations, the description covers authorization, visibility effects, and data preservation. Only member notification behavior on publish/unpublish is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented, and the description's mapping of the boolean to publish/unpublish merely restates the schema's own wording ('true publishes, false turns it back into a draft'). Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus its dual direction: publish a draft course or revert it to a draft. No sibling tool overlaps (create_course, update_lesson, etc. handle different resources), so an agent can select it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The admin-only prerequisite is stated (twice), which is real usage guidance, and the draft/publish condition is implied. However, it never contrasts with alternatives such as create_course's initial publish state or says when unpublishing is appropriate rather than deleting a course.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_member_roleSet member roleADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | admin, moderator or member. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| membership_id | Yes | membership_id from list_members. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, so the mutation profile is known. The description adds genuinely non-obvious context: admin-level authorization is required, moderator assignment is plan-gated to Pro, and the owner's role is immutable — none of which appear in the annotations. It doesn't spell out the demotion consequence or the return value, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The lead sentence front-loads the action and the permitted transitions, and the supporting sentences each carry distinct constraints. The closing 'Admins only.' duplicates the opening one, a small redundancy that keeps it off a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-required-param mutation with full schema coverage and no output schema, the description covers the actions, authorization level, plan gating, and an important immutability edge case. An agent has enough to invoke it correctly and predict the permission outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 baseline applies, but the description goes further by explaining what each enum value actually grants ('admin (full control), moderator (can remove posts and members)'), which the schema only lists as bare values. It adds nothing on group or membership_id beyond what the schema documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb ('Make a member an admin or moderator, or back to a member') on a specific resource, and names all three target states. The body clarifies scoping ('Changes one member's role'), which separates it from group-wide or bulk sibling tools like remove_member or ban_member.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear precondition ('Admins only') and an external constraint ('Skool allows moderators only on the Pro plan'), plus an exclusion ('The group owner keeps their role'). It does not name alternatives such as remove_member or ban_member for an agent weighing role-change vs. removal, so it stops short of explicit when-not/alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_post_commentsTurn comments on or offAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| enabled | Yes | false turns comments off, true back on. | |
| post_id | Yes | post_id from list_posts (not the slug). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: readOnlyHint=false and destructiveHint=false are already declared, but the description explains WHY it is non-destructive (existing comments are preserved, only new additions are blocked), states the permission requirement, and notes reversibility ('undone with one call'), reinforcing idempotentHint=true with a concrete recovery path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then the semantics, permission and reversibility. The opening sentence and the following sentence restate the same purpose, which is mild redundancy, but each remaining clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter boolean toggle with no output schema, the description covers purpose, state effects, authorization, idempotency and reversibility — everything an agent needs to invoke it correctly. The 'as the post menu's Turn off comments does' anchor removes the remaining ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (group, post_id, enabled) are already documented, including 'false turns comments off, true back on'. The description restates the enabled semantics but adds nothing about group or post_id, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('turn comments on a post off, or back on') and immediately defines what 'off' means: existing comments stay, nobody can add new ones. That definition implicitly separates it from comment_on_post, delete_post and pin_comment, which an agent can tell apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition ('Group admins and moderators only') and the exact state semantics for enabled true/false, plus a confirmation policy ('runs without asking first'). It stops short of explicitly naming when to prefer this over sibling tools such as update_post, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New name. | |
| sort | No | How the category orders posts. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| category_id | Yes | category_id from list_categories. | |
| who_can_post | No | members or admins. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description discloses real behavior: partial-update semantics, that existing posts are unaffected, that no one is notified, and that the change is reversible in one call — which is consistent with destructiveHint=false and explains why the agent can act without confirmation. This is exactly the kind of context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The action and constraining scope are front-loaded, but 'Admins only' appears twice and the 'as Settings, Categories, Edit does' clause largely restates the first sentence. Two sentences of the four are doing little work.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter, 2-required mutation tool with no output schema, the description covers mutation semantics, permission gating, side effects on existing posts, notifications, and reversibility — everything an agent needs to decide and act. Only failure modes (e.g. invalid category_id, insufficient role response) are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: the 'fields you leave out stay' partial-update contract tells the agent it need only send what changes, and the enumeration of rename / who_can_post / sorting maps to three of the five parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb+resource (rename / change who can post / change sorting on a category) and grounds it in a familiar UI path ('Settings, Categories, Edit'). It doesn't explicitly contrast with create_category, delete_category, or list_categories by name, so sibling differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Admins only' is stated twice, making the permission precondition unmissable, and 'fields you leave out stay' clarifies this is for editing an existing category rather than creating one. It stops short of naming alternatives (e.g. create_category for new categories, list_categories to find category_id).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_eventUpdate eventADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| start | No | Start, ISO 8601. Without an offset it is read in timezone. | |
| title | No | Event title. | |
| access | No | Who sees it: all members (default), members from min_level up, or a course's members. | |
| event_id | Yes | event_id from list_events. | |
| location | No | The Zoom or Meet link, the address or the URL. | |
| timezone | No | IANA zone the event is shown in, e.g. America/New_York. Default: UTC. | |
| course_id | No | With access course: course_id from list_courses. | |
| min_level | No | With access level. | |
| description | No | What the event is about. | |
| location_type | No | zoom, meet, address or link (default), skool_call or skool_webinar. | |
| duration_minutes | No | Length in minutes. Default: 60. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=false), it discloses that omitted fields stay unchanged, that a new start preserves old duration unless duration_minutes is given, that a recurring event's whole series changes, and that members see changes immediately. That is rich, non-obvious behavioral context an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with purpose and then behavior, and every sentence carries useful information. The only waste is the redundant repetition of 'Admins only' in both paragraphs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 12 parameters, full schema coverage, no output schema and annotations covering safety, the description supplies the remaining essentials — partial-update behavior, recurring-series scope, duration defaults and the admin requirement — so an agent has what it needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter and the baseline would be 3. The description adds cross-parameter meaning the schema cannot express — the start/duration interaction and the partial-update semantics — pushing it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'Change a calendar event's title, time, place or access' — and frames it as editing one existing event, which clearly separates it from create_event, delete_event, get_event and list_events in the sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete usage context: 'Admins only' (stated twice) and 'Edits one event, as the event's Edit does,' which tells the agent this is a partial-update operation. It doesn't explicitly name a when-not condition or point to an alternative tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_group_aboutUpdate group About textADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| about | Yes | The new About text, replacing the old. Plain text, line breaks kept. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, but the description adds meaningful context beyond them: that the edit requires admin rights, that images and videos on the page persist (bounding the destructive scope), and that the change is immediately public to all page visitors. It does not state whether the old text is recoverable or what the response looks like, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded, but the text is padded: the second sentence restates the first ('Replaces the description... as editing it on the About page does') and 'Admins only' appears twice within four sentences. It could be nearly half the length without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter mutation tool with full schema coverage, annotations, and no output schema, this covers the essentials: permission requirement, mutation scope, and public visibility. The main omission is any statement about reversibility or whether a previous About text can be restored.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema, including the plain-text/line-break behavior of 'about' and the URL-name format of 'group'. The description adds no syntax, length limits, or formatting constraints beyond that, so the baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Replace the text on the group's About page.' An agent can distinguish this from update_post, update_group_link, or update_group_rule by resource alone. It stops short of naming or contrasting any sibling explicitly, which keeps it out of the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Admins only' prerequisite is stated twice, which is useful gate information, and the equivalence to 'editing it on the About page' gives context. However, there is no explicit when-to-use vs when-not guidance and no routing to alternatives such as update_group_link or update_group_rule, so usage must be inferred from the resource.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_group_linkUpdate group linkAInspect
Change the text or address of a sidebar link. Admins only.
Edits one sidebar link, as Settings, Links, Edit does: fields you leave out stay. Returns the whole new list. Admins only. Runs without asking first: nobody is notified.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Where the link goes. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| label | No | Link text, up to 34 characters. | |
| number | Yes | Link number from list_group_links. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description discloses the admin-only requirement, partial-update semantics ('fields you leave out stay'), return behavior ('Returns the whole new list'), and notification behavior ('nobody is notified'). This is meaningful operational context for a non-idempotent mutation with openWorldHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded, with the core edit action stated first. It loses a small amount of efficiency by repeating 'Admins only' twice, but otherwise every sentence carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation with no output schema, the description covers the essential behavioral context: permissions, partial update behavior, return shape, and notification side effects. An agent has enough information to invoke it correctly without opening additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the required baseline is 3. The description adds useful semantics beyond the schema by clarifying that omitted optional fields are preserved, which is important for interpreting label and url updates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: change the text or address of a sidebar link. It also scopes the operation to exactly one link and explains the patch-style behavior, making it distinguishable from add_group_link, delete_group_link, and list_group_links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly establishes that this is for editing an existing sidebar link and that the caller must be an admin. It does not explicitly contrast with add/delete/list siblings, but the edit-only context and the reference to list_group_links in the schema make the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| title | No | Rule title, up to 30 characters. | |
| number | Yes | Rule number from list_group_rules. | |
| description | No | What the rule means, shown under the title. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond the annotations: patch semantics ("fields you leave out stay"), a return-value note ("Returns the whole new list" — important since there is no output schema), and that it "Runs without asking first: nobody is notified," which confirms no confirmation prompt and no fan-out. The only weakness is the unexplained tension between partial-update semantics and idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded, leading with what changes and who may do it. The redundant repetition of "Admins only" in a four-sentence description is wasted space but not enough to break readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the permission requirement, the mutation semantics, the response shape, and the absence of notifications or confirmation prompts. An agent has everything needed to call it correctly and predict the effect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning about omitted fields ("fields you leave out stay"), explaining the optional title/description behavior that the schema alone does not state. It also names the two editable fields, tying them to the patch model.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Change the title or text of a group rule") and grounds it in a concrete UI analogue ("as Settings, Rules, Edit does"), so an agent knows exactly what is modified. It does not explicitly distinguish itself from siblings like add_group_rule or delete_group_rule, though the verb makes the separation obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Admins only" gives a clear prerequisite and "Edits one rule" bounds the scope to a single rule, both of which gate correct invocation. No alternatives or when-not conditions (e.g., use add_group_rule to create) are named, leaving routing to inference from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | New text, replacing the old. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| title | No | New title. | |
| lesson_id | Yes | lesson_id from get_course or create_lesson. | |
| video_url | No | New video link; empty string removes the video. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds rich behavioral context beyond annotations: partial updates (fields left out stay), body replacement semantics, that members who completed the lesson keep their completion status, admin-only access, and that the operation runs without confirmation and notifies nobody. This far exceeds the minimal hints from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Mostly front-loaded and efficient, but redundantly states 'Admins only' twice and uses slightly awkward phrasing ('as its Edit does'). Every sentence carries information, but the duplication is minor waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with full schema coverage and no output schema, the description is complete: it covers authorization, partial update semantics, side effects on completions, and the lack of confirmation/notification. An agent has all needed context to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, baseline is 3, but the description adds meaningful detail: it clarifies that omitted fields remain unchanged and that body replaces the entire text, which is not fully captured by the schema descriptions. It also groups the three editable fields (title, text, video link) in the opening sentence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Change) and resource (lesson's title, text or video link), and clarifies it edits one lesson page. However, it does not differentiate from siblings like update_post or create_lesson, leaving the agent to infer that this is the lesson-specific update tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides some usage context (Admins only, edits one lesson page) but gives no explicit guidance on when to use this tool versus alternatives such as get_lesson or create_lesson. No when-not or alternative tool is mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | text (default), email or options (multiple choice, one answer). | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| number | Yes | Question number, from add_membership_question or get_group. | |
| options | No | Up to 4 answers when type is options. | |
| question | Yes | The question, up to 150 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial detail beyond the annotations: existing pending requests keep the answers they already gave, the call returns all questions, and it executes without a confirmation prompt and notifies nobody. Those are exactly the mutation-side effects an agent cannot infer from readOnlyHint/destructiveHint/idempotentHint flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the replacement semantics, and every sentence carries information about effects or permissions. The one flaw is the duplicated 'Admins only,' which appears twice in a short description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by stating the return ('all questions') plus notification and pending-answer behavior. Only minor gaps remain, such as error behavior for an out-of-range question number.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so field meaning is fully documented in the schema. The description's 'new text, type and answers' loosely maps to question/type/options but adds no format or constraint detail beyond what the schema already states (150-char limit, 4 options, enum). Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change a membership question') and immediately clarifies the semantics: it replaces one existing question with new text, type and answers. This distinguishes it from add_membership_question and delete_membership_question in the sibling list without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Replaces one membership question' framing plus 'Admins only' tells the agent when this applies rather than adding or deleting, and who may call it. It stops short of explicitly naming the add/delete siblings as alternatives, so it is clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_postUpdate postADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | New text, replacing the old. Left out: unchanged. | |
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| title | No | New title. Left out: unchanged. | |
| post_id | Yes | post_id from list_posts (not the slug). | |
| category | No | Move the post to this category, by name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (destructiveHint=true, idempotentHint=false), and the description adds real context beyond them: patch semantics (omitted fields stay unchanged), that body replaces the entire text, and that Skool marks the post as edited. Permission requirements are also stated. It omits failure modes (invalid post_id, non-admin attempt) and any response/return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its scope in the first sentence, followed by behavior and permissions. The closing clause about own posts/admin restates the first sentence, so one sentence is partly redundant, but overall there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with full schema coverage, annotations, and no output schema, the description covers permission, partial-update semantics, and the visible side effect of being marked edited. Only rare edge cases and any return value remain undocumented, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each of the 5 parameters is documented in the schema, so the baseline is 3. The description reinforces the patch contract ('fields you leave out stay as they are', 'body replaces the whole text') but adds little syntax or format detail beyond what the parameter descriptions already say.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (change title, text or category of a post) plus the scope of who may do it, and clearly separates it from siblings like create_post, delete_post, pin_post and update_event. The 'as Skool's Edit post does' anchor makes the intent unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the precondition that selects this tool (your own posts, or any post as a group admin) and indirectly points at list_posts for post_id via the schema. It does not explicitly name alternatives (e.g. use delete_post to remove, create_post to add), so it stops short of a full when/when-not routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vote_on_pollVote on pollAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. | |
| option | Yes | Answer number, 1 for the first. 0 takes your vote back. | |
| post_id | Yes | post_id or slug of the post with the poll. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a non-read-only but non-destructive, idempotent, open-world action. The description adds useful behavior beyond that: the vote is publicly visible, the response includes counts after voting, option 0 is a retraction, and the effect can be undone with one call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded, compact, and each sentence adds relevant information: action scope, vote replacement/retraction, return behavior, visibility, and reversibility. There is no unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation tool with fully documented parameters and no output schema, the description is complete enough to call correctly. It covers the action, edge cases like duplicate voting and retraction, visibility, return behavior, and reversibility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are fully documented in the input schema. The description reinforces the meaning of option 0 and vote replacement, but it does not add syntax or semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource (vote on a post's poll) and covers the related actions of changing or retracting a vote. It is clear, but it does not distinguish itself from siblings such as get_poll_results, which could be the right tool when the user only wants to read poll results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: use it to vote, change a vote, or take a vote back. However, it does not explicitly name alternatives or state when not to use this tool, such as using get_poll_results for read-only viewing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
69 tool updates
v0.1.0- First observed
add_group_link - First observed
add_group_rule - First observed
add_membership_question - First observed
approve_membership_request - First observed
ban_member - First observed
comment_on_post - First observed
create_category - First observed
create_course - First observed
create_event - First observed
create_lesson - First observed
create_post - First observed
decline_membership_request - First observed
delete_category - First observed
delete_event - First observed
delete_group_link - First observed
delete_group_rule - First observed
delete_membership_question - First observed
delete_post - First observed
discover_groups - First observed
follow_post - First observed
get_auto_dm - First observed
get_conversation - First observed
get_course - First observed
get_event - First observed
get_group - First observed
get_group_stats - First observed
get_leaderboard - First observed
get_lesson - First observed
get_member - First observed
get_poll_results - First observed
get_post - First observed
invite_members - First observed
like_post - First observed
list_categories - First observed
list_conversations - First observed
list_courses - First observed
list_events - First observed
list_group_links - First observed
list_group_rules - First observed
list_groups - First observed
list_levels - First observed
list_members - First observed
list_membership_requests - First observed
list_notifications - First observed
list_post_likes - First observed
list_posts - First observed
list_reported_posts - First observed
mark_lesson_complete - First observed
mark_notifications_read - First observed
pin_comment - First observed
pin_post - First observed
remove_member - First observed
rename_level - First observed
search_group - First observed
search_members - First observed
send_message - First observed
set_auto_dm - First observed
set_course_published - First observed
set_member_role - First observed
set_post_comments - First observed
update_category - First observed
update_event - First observed
update_group_about - First observed
update_group_link - First observed
update_group_rule - First observed
update_lesson - First observed
update_membership_question - First observed
update_post - First observed
vote_on_poll
TDQS
Scored across 69 tools
Despite 69 tools, most target a clearly distinct resource+action (create_event vs update_event vs delete_event, list_group_rules vs update_group_rule), and descriptions proactively disambiguate near-pairs like ban_member vs remove_member and search_members vs list_members. A few boundaries still blur: ban_member/remove_member overlap semantically (one tool both unbanning and removing), and list_members vs list_membership_requests vs list_reported_posts all surface member-ish data that an agent could pick wrongly.
Nearly every name is snake_case verb_noun with a predictable verb set (list_, get_, create_, update_, delete_, set_, mark_, pin_, add_). The main deviation is create_/add_ used interchangeably for creation (create_category/create_course vs add_group_link/add_group_rule/add_membership_question), plus set_course_published standing in for an update operation, but the pattern stays readable.
69 tools is far past a well-scoped surface and exposes every granular settings toggle (links, rules, categories, questions, levels, AutoDM, notifications) as its own tool. Substantial consolidation is feasible — e.g. one links tool with an action parameter, or merging the ten-plus membership-admin tools — so the count is heavy relative to the domain's core workflows.
Coverage is unusually broad: full CRUD-ish lifecycles for posts, comments, categories, events, sidebar links, rules, membership questions and members, plus Classroom, chat, notifications and discovery reads. The notable gaps are course and lesson deletion (create/get/list/update/publish exist but no delete), no conversation-level read-marking or message deletion, and no group creation, all of which agents can mostly work around.
Maintenance
Related MCP Connectors
Hosted X (Twitter) MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Managed LinkedIn MCP server for AI agents: search, connect, message and enrich on accounts you own.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- FlicenseAqualityDmaintenanceMCP server for interacting with Skool.com communities, enabling community management, post operations, member management, and course access through natural language.1452-
- AlicenseAqualityFmaintenanceSelf-hosted MCP server for AI browser automation. Connects to your own Chromium instance via CDP, providing tools for browser control, navigation, interaction, and content extraction.191MIT
- FlicenseAqualityDmaintenanceMCP server for Skool.com communities. Enables listing/approving members, posting, commenting, and managing courses.14-
- AlicenseNot gradedqualityBmaintenanceMCP server to read and operate your Skool community (calendar, feed, posts, members) and publish posts/comments with confirmation, using your own authenticated session.1MIT