Skip to main content
Glama

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. Setup

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

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.

Skool MCP server Python 3.11+ License: PolyForm Noncommercial 1.0.0 MCP Badge

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

Contents

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)
  1. You sign in to Skool in your own Chrome, the way you always do.

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

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

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

Requirements

  • Python 3.11 or newer.

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

  • macOS, Linux or Windows.

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

Install

From PyPI:

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

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

From source:

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

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

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

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

Connect your Chrome

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

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

  3. Run:

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

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

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

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

Option B: a Chrome with a debugging port

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

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

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

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

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

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

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

Check the session at any time:

skool-mcp status

MCP server

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

Claude Code

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

Claude Desktop

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

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

Cursor

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

Codex

~/.codex/config.toml:

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

Over HTTP

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

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

Then ask your agent things like:

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

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

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

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

REST API

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

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

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

Any tool by name, body as its arguments:

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

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

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

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

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

Python and the example scripts

Straight from Python, no server needed:

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

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

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

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

Script

What it does

list_groups.py

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

export_members.py

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

list_membership_requests.py

Pending requests with each applicant's answers.

approve_membership_requests.py

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

decline_membership_request.py

Declines one request.

welcome_new_members.py

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

export_posts.py

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

get_post.py

One post with its body and the whole comment tree.

unanswered_posts.py

Posts from the last N days with no comments yet.

create_post.py

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

comment_on_post.py

Comments on a post or replies under a comment.

pin_post.py

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

list_courses.py

Classroom courses with modules, unlock rule and URLs.

unread_messages.py

Unread Skool Chat conversations with the full thread.

send_message.py

A DM to one member.

group_stats.py

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

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

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

All 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.

Tool

Access

REST route

What it does

list_groups

read

GET /groups

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

get_group

read

GET /groups/{group}

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

get_group_stats

read

GET /groups/{group}/stats

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

discover_groups

read

GET /groups/discover

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

search_group

read

GET /groups/{group}/search

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

Posts

Tool

Access

REST route

What it does

list_posts

read

GET /groups/{group}/posts

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

get_post

read

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

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

create_post

write

POST /groups/{group}/posts

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

update_post

write

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

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

delete_post

write

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

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

Comments, likes, polls and moderation

Tool

Access

REST route

What it does

comment_on_post

write

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

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

like_post

write

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

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

list_post_likes

read

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

Who liked a post or a comment.

follow_post

write

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

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

pin_post

write

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

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

pin_comment

write

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

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

set_post_comments

write

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

Turn comments on a post off, or back on.

vote_on_poll

write

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

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

get_poll_results

read

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

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

list_reported_posts

read

GET /groups/{group}/posts/reported

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

Members

Tool

Access

REST route

What it does

list_members

read

GET /groups/{group}/members

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

search_members

read

GET /groups/{group}/members/search

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

get_member

read

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

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

get_leaderboard

read

GET /groups/{group}/leaderboard

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

invite_members

write

POST /groups/{group}/invitations

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

remove_member

write

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

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

ban_member

write

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

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

set_member_role

write

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

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

Membership requests

Tool

Access

REST route

What it does

list_membership_requests

read

GET /groups/{group}/membership-requests

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

approve_membership_request

write

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

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

decline_membership_request

write

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

Decline an applicant's request to join.

Classroom

Tool

Access

REST route

What it does

list_courses

read

GET /groups/{group}/courses

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

get_course

read

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

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

create_course

write

POST /groups/{group}/courses

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

set_course_published

write

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

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

get_lesson

read

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

One lesson's text and video link.

create_lesson

write

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

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

update_lesson

write

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

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

mark_lesson_complete

write

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

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

Calendar

Tool

Access

REST route

What it does

list_events

read

GET /groups/{group}/events

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

get_event

read

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

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

create_event

write

POST /groups/{group}/events

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

update_event

write

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

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

delete_event

write

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

Delete a calendar event. Admins only.

Group settings (admins)

Tool

Access

REST route

What it does

list_categories

read

GET /groups/{group}/categories

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

create_category

write

POST /groups/{group}/categories

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

update_category

write

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

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

delete_category

write

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

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

list_group_rules

read

GET /groups/{group}/rules

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

add_group_rule

write

POST /groups/{group}/rules

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

update_group_rule

write

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

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

delete_group_rule

write

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

Delete a group rule. Admins only.

list_group_links

read

GET /groups/{group}/links

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

add_group_link

write

POST /groups/{group}/links

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

update_group_link

write

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

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

delete_group_link

write

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

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

add_membership_question

write

POST /groups/{group}/membership-questions

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

update_membership_question

write

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

Change a membership question. Admins only.

delete_membership_question

write

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

Remove a membership question. Admins only.

list_levels

read

GET /groups/{group}/levels

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

rename_level

write

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

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

update_group_about

write

PUT /groups/{group}/about

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

get_auto_dm

read

GET /groups/{group}/auto-dm

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

set_auto_dm

write

PATCH /groups/{group}/auto-dm

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

Chat and notifications

Tool

Access

REST route

What it does

list_conversations

read

GET /conversations

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

get_conversation

read

GET /conversations/{conversation_id}

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

send_message

write

POST /members/{member_id}/messages

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

list_notifications

read

GET /notifications

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

mark_notifications_read

write

POST /notifications/read

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

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

Configuration

Variable

Default

What it does

SKOOL_MCP_HOME

~/.config/skool-api-mcp

Folder of session.json.

SKOOL_AUTH_TOKEN

Skool auth_token cookie, instead of skool-mcp connect.

SKOOL_PROXY

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

SKOOL_MCP_READ_ONLY

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

SKOOL_MCP_TOKEN

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

SKOOL_MCP_HOST, SKOOL_MCP_PORT

127.0.0.1, 8787

Address of serve.

Security and your Skool account

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

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

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

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

  • Read-only mode. --read-only or SKOOL_MCP_READ_ONLY=1 exposes the 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

auth_required, auth_expired

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

403

app_permission_denied

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

403

scope_denied

The server runs read-only.

403

target_blocked

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

409

captcha_required

Skool asks for a CAPTCHA. Solve it in Chrome.

422

invalid_input

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

429

rate_limited

Skool is limiting the account. Wait a few minutes.

502

target_error

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

Self-hosted or hosted

This repo

Cotlet, hosted

Tools

the same 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

git pull once we have fixed it

fixed for you, every tool tested daily

Approvals

your MCP client asks per call

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

Works with

MCP clients on your machine, local scripts

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

Who may use it

you, 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 tools
add_group_ruleAdd group ruleAInspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
titleYesRule title, up to 30 characters.
descriptionNoWhat the rule means, shown under the title.

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
typeNotext (default), email or options (multiple choice, one answer).
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
optionsNoUp to 4 answers when type is options.
questionYesThe question, up to 150 characters.

TDQS

A4.5/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 requestA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
request_idYesrequest_id from list_membership_requests.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness2/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 memberA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
member_idNomember_id from list_members; needed with delete_recent_posts.
membership_idYesmembership_id from list_members.
delete_recent_postsNoAlso delete their recent posts and comments, as Skool offers. Default: false.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 postA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
bodyYesComment text.
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
post_idYespost_id from list_posts (not the slug).
parent_comment_idNocomment_id from get_post: reply under that comment instead of the post.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
nameYesCategory name, up to 30 characters.
sortNoHow the category orders posts. Default: default.
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
who_can_postNomembers (default) or admins only.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
titleYesCourse title, up to 50 characters.
min_levelNoUnlock only from this level up. Default: open to all members.
publishedNotrue shows it to members now; default false keeps it a draft.
descriptionNoShown on the course card, up to 500 characters.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 eventA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
startYesStart, ISO 8601. Without an offset it is read in timezone.
titleYesEvent title.
accessNoWho sees it: all members (default), members from min_level up, or a course's members.
locationNoThe Zoom or Meet link, the address or the URL.
timezoneNoIANA zone the event is shown in, e.g. America/New_York. Default: UTC.
course_idNoWith access course: course_id from list_courses.
min_levelNoWith access level.
descriptionNoWhat the event is about.
location_typeNozoom, meet, address or link (default), skool_call or skool_webinar.
duration_minutesNoLength in minutes. Default: 60.

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

NameRequiredDescriptionDefault
bodyNoLesson text. A blank line starts a new paragraph.
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
titleYesLesson title.
course_idYescourse_id from list_courses or create_course.
publishedNofalse keeps it a draft. Default: true.
video_urlNoYouTube, Vimeo, Loom or Wistia link shown above the text.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 postA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
bodyYesPost text. Links are kept as typed.
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
titleYesPost title.
categoryYesCategory name as the group shows it, any letter case.
poll_optionsNoAnswers of a poll under the post, 2 to 10. Members vote with vote_on_poll.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 requestA
Destructive
Inspect

Decline an applicant's request to join.

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
request_idYesrequest_id from list_membership_requests.

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 categoryA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
category_idYescategory_id from list_categories.
move_posts_toNocategory_id that gets the deleted category's posts. Default: the first other one.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 eventA
Destructive
Inspect

Delete a calendar event. Admins only.

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
event_idYesevent_id from list_events.

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_ruleDelete group ruleA
Destructive
Inspect

Delete a group rule. Admins only.

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
numberYesRule number from list_group_rules.

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 questionA
Destructive
Inspect

Remove a membership question. Admins only.

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
numberYesQuestion number, from add_membership_question or get_group.

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 commentA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
post_idYespost_id from list_posts, or comment_id from get_post.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 groupsA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
queryNoWords to look for. Left out: the top groups.
cursorNoNext page cursor from the previous call.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 postA
Idempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
post_idYespost_id from list_posts (not the slug).
followingNofalse stops the notifications. Default: true.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 AutoDMA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.

TDQS

A3.5/5.0
Behavior4/5

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.

Conciseness2/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 conversationA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
limitNo1 to 100. Default: 50.
conversation_idYesconversation_id from list_conversations or send_message.

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 courseA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
course_idYescourse_id from list_courses or create_course.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 eventA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
event_idYesevent_id from list_events.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 groupB
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.

TDQS

B3.4/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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 statsA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
periodNo7d, 30d or 90d. Default: 30d.

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 leaderboardA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
periodNo7d, 30d or all time. Default: 30d.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 lessonA
Read-onlyIdempotent
Inspect

One lesson's text and video link.

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
course_idYescourse_id from list_courses or create_course.
lesson_idYeslesson_id from get_course or list_courses.

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 memberA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
member_idYesmember_id from list_members, search_members or get_post.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 resultsA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
votersNoAlso list who voted for each answer, up to 30. Default: false.
post_idYespost_id or slug of the post with the poll.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 postA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
post_idYespost_id or slug from list_posts.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 emailA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
emailsYesUp to 50 addresses.
course_idsNoLong course ids to unlock for them on joining (from create_course or get_course).

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 commentA
Idempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
likedNofalse takes the like back. Default: true.
post_idYespost_id from list_posts, or comment_id from get_post.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 categoriesA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 conversationsA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
limitNo1 to 30 (Skool refuses more). Default: 20.
cursorNoNext page cursor from the previous call.
unread_onlyNoOnly conversations with unread messages.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 coursesA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 eventsA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
monthNoYYYY-MM. Default: this month.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_rulesList group rulesA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 groupsA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 levelsA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 membersA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
roleNoall, admin, moderator or member. Default: all.
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
limitNo1 to 30. Default: 30.
cursorNoNext page cursor from the previous call.
statusNoWhich members tab: active (default), banned, churned (left) or cancelling (paid groups).
joined_sinceNoOnly members who joined on or after this date.

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 requestsA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
limitNo1 to 30. Default: 30.
cursorNoNext page cursor from the previous call.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 notificationsA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupNoOnly this group's notifications, by URL name. Default: all groups.
limitNo1 to 30. Default: 30.
cursorNoNext page cursor from the previous call.
unread_onlyNoOnly unread ones. Default: false.

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 likesA
Read-onlyIdempotent
Inspect

Who liked a post or a comment.

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
limitNo1 to 100. Default: 50.
post_idYespost_id from list_posts, or comment_id from get_post.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 postsA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
limitNo1 to 30. Default: 20.
sinceNoOnly posts created after this time (ISO 8601, UTC).
cursorNoNext page cursor from the previous call.
categoryNoOnly posts whose category name contains this text.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 postsA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 completeA
Idempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
completedNofalse marks it not done. Default: true.
lesson_idYeslesson_id from get_course.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
groupNoOnly this group's, by URL name. Default: all groups.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 commentA
Idempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
pinnedNofalse unpins. Default: true.
post_idYespost_id the comment is under.
comment_idYescomment_id from get_post.

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 postA
Idempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
pinnedNofalse unpins. Default: true.
post_idYespost_id from list_posts (not the slug).
course_page_idNoPin to this Classroom page instead of the feed.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 memberA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
membership_idYesmembership_id from list_members.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
levelYesLevel number, 1 to 9.
titleYesThe title members see at that level. Empty string: back to the plain name.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 groupA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
typeNoposts (default), members or courses.
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
queryYesWords to look for.
cursorNoNext page cursor from the previous call.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 membersA
Read-onlyIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
limitNo1 to 30. Default: 10.
queryYesPart of a name or handle.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 messageA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
bodyYesMessage text.
groupNoGroup URL name you share with the member. Default: the first of your groups that works.
member_idYesmember_id from list_members, or with.member_id from list_conversations.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 AutoDMA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
enabledNoTurn the AutoDM on or off. Pro plan only.
messageNoNew welcome text. #NAME# and #GROUPNAME# are filled in by Skool.

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 courseA
DestructiveIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
course_idYescourse_id from list_courses or create_course.
publishedYestrue publishes, false turns it back into a draft.

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 roleA
DestructiveIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
roleYesadmin, moderator or member.
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
membership_idYesmembership_id from list_members.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 offA
Idempotent
Inspect

Turn comments on a post off, or back on.

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
enabledYesfalse turns comments off, true back on.
post_idYespost_id from list_posts (not the slug).

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
nameNoNew name.
sortNoHow the category orders posts.
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
category_idYescategory_id from list_categories.
who_can_postNomembers or admins.

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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 eventA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
startNoStart, ISO 8601. Without an offset it is read in timezone.
titleNoEvent title.
accessNoWho sees it: all members (default), members from min_level up, or a course's members.
event_idYesevent_id from list_events.
locationNoThe Zoom or Meet link, the address or the URL.
timezoneNoIANA zone the event is shown in, e.g. America/New_York. Default: UTC.
course_idNoWith access course: course_id from list_courses.
min_levelNoWith access level.
descriptionNoWhat the event is about.
location_typeNozoom, meet, address or link (default), skool_call or skool_webinar.
duration_minutesNoLength in minutes. Default: 60.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 textA
DestructiveIdempotent
Inspect

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

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

NameRequiredDescriptionDefault
aboutYesThe new About text, replacing the old. Plain text, line breaks kept.
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.

TDQS

A3.6/5.0
Behavior4/5

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.

Conciseness3/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_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.

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
titleNoRule title, up to 30 characters.
numberYesRule number from list_group_rules.
descriptionNoWhat the rule means, shown under the title.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

NameRequiredDescriptionDefault
bodyNoNew text, replacing the old.
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
titleNoNew title.
lesson_idYeslesson_id from get_course or create_lesson.
video_urlNoNew video link; empty string removes the video.

TDQS

A3.9/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

NameRequiredDescriptionDefault
typeNotext (default), email or options (multiple choice, one answer).
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
numberYesQuestion number, from add_membership_question or get_group.
optionsNoUp to 4 answers when type is options.
questionYesThe question, up to 150 characters.

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 postA
Destructive
Inspect

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

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

NameRequiredDescriptionDefault
bodyNoNew text, replacing the old. Left out: unchanged.
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
titleNoNew title. Left out: unchanged.
post_idYespost_id from list_posts (not the slug).
categoryNoMove the post to this category, by name.

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 pollA
Idempotent
Inspect

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

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

NameRequiredDescriptionDefault
groupYesGroup URL name, e.g. 'yourgroup' for skool.com/yourgroup.
optionYesAnswer number, 1 for the first. 0 takes your vote back.
post_idYespost_id or slug of the post with the poll.

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 69 tool updatesv0.1.0
    • First observedadd_group_link
    • First observedadd_group_rule
    • First observedadd_membership_question
    • First observedapprove_membership_request
    • First observedban_member
    • First observedcomment_on_post
    • First observedcreate_category
    • First observedcreate_course
    • First observedcreate_event
    • First observedcreate_lesson
    • First observedcreate_post
    • First observeddecline_membership_request
    • First observeddelete_category
    • First observeddelete_event
    • First observeddelete_group_link
    • First observeddelete_group_rule
    • First observeddelete_membership_question
    • First observeddelete_post
    • First observeddiscover_groups
    • First observedfollow_post
    • First observedget_auto_dm
    • First observedget_conversation
    • First observedget_course
    • First observedget_event
    • First observedget_group
    • First observedget_group_stats
    • First observedget_leaderboard
    • First observedget_lesson
    • First observedget_member
    • First observedget_poll_results
    • First observedget_post
    • First observedinvite_members
    • First observedlike_post
    • First observedlist_categories
    • First observedlist_conversations
    • First observedlist_courses
    • First observedlist_events
    • First observedlist_group_links
    • First observedlist_group_rules
    • First observedlist_groups
    • First observedlist_levels
    • First observedlist_members
    • First observedlist_membership_requests
    • First observedlist_notifications
    • First observedlist_post_likes
    • First observedlist_posts
    • First observedlist_reported_posts
    • First observedmark_lesson_complete
    • First observedmark_notifications_read
    • First observedpin_comment
    • First observedpin_post
    • First observedremove_member
    • First observedrename_level
    • First observedsearch_group
    • First observedsearch_members
    • First observedsend_message
    • First observedset_auto_dm
    • First observedset_course_published
    • First observedset_member_role
    • First observedset_post_comments
    • First observedupdate_category
    • First observedupdate_event
    • First observedupdate_group_about
    • First observedupdate_group_link
    • First observedupdate_group_rule
    • First observedupdate_lesson
    • First observedupdate_membership_question
    • First observedupdate_post
    • First observedvote_on_poll

TDQS

A3.7/5.0

Scored across 69 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count2/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers