MCP tools reference
Skool MCP tools
15 tools for Skool on the Cotlet MCP server. Your agent picks them from tools/list.
- MCP server
- https://cotlet.dev/mcp/v1
- Connects with
- Your own Skool account (admin or moderator for approvals and stats)
- Integration page
- Skool
| Endpoint | Access | Description |
|---|---|---|
| skool_list_groups | read | Skool groups you belong to, with your role and member count. |
| skool_list_members | read | Members of a group with name, role, level and join date, newest first. |
| skool_list_membership_requests | read | Pending requests to join, with each applicant's Membership Questions answers. Admins and moderators only. |
| skool_list_posts | read | Posts in the community feed, newest first, with author, category, likes and comment count. |
| skool_get_post | read | Full post with title, body, attachments and the comment tree. |
| skool_list_courses | read | Courses in the Classroom with their modules, unlock rule (open, level or paid) and URL. |
| skool_list_conversations | read | Your Skool Chat inbox: who, unread count and last message preview. |
| skool_get_conversation | read | Messages in one Skool Chat conversation, oldest first. |
| skool_get_group_stats | read | Total, new and churned members and monthly recurring revenue for a period. Admins only. |
| skool_approve_membership_request | write | Let an applicant into the group. Your AutoDM, if set, goes out as usual. |
| skool_decline_membership_request | write | Decline an applicant's request to join. |
| skool_create_post | write | Publish a post to the community feed in a category, as you. |
| skool_comment_on_post | write | Comment on a post, or reply to a comment, as you. |
| skool_send_message | write | Send a direct message in Skool Chat to a member, starting a conversation if needed. |
| skool_pin_post | write | Pin a post to the top of the feed (up to 3) or to a Classroom page (up to 12). Admins only. |
List groups
readMCP tool skool_list_groups
Returns every Skool group your account belongs to, both groups you own and groups you joined. Use the group field from each item as the group parameter of the other endpoints. Member count is the number Skool shows on the group page.
Parameters
No parameters.
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_list_groups",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"groups": [
{
"group": "yourgroup",
"name": "Landing Page Lab",
"role": "admin",
"members": 1284,
"price": "$49/month",
"url": "https://www.skool.com/yourgroup"
},
{
"group": "creator-club",
"name": "Creator Club",
"role": "member",
"members": 9310,
"price": "free",
"url": "https://www.skool.com/creator-club"
}
]
},
"isError": false
} List members
readMCP tool skool_list_members
Lists members of one group, newest first. Filter by role or by join date to find this week's new members. Level is the Skool gamification level (1 to 9) and points are the likes that count toward it. Pages hold up to 100 members; pass next_cursor back as cursor for the next page.
Parameters
| Name | Type | Description |
|---|---|---|
| group required | string | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
| joined_since | date | Only members who joined on or after this date. |
| role | enum | all, admin, moderator or member. Default: all. |
| limit | integer | 1 to 100. Default: 50. |
| cursor | string | Next page cursor from the previous call. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_list_members",
"arguments": {
"group": "yourgroup"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"members": [
{
"member_id": "m_8c41d2",
"name": "Ana Lopez",
"role": "member",
"level": 2,
"points": 14,
"joined_at": "2026-10-01T18:21:00Z",
"profile_url": "https://www.skool.com/@ana-lopez"
}
],
"next_cursor": "eyJvZmZzZXQiOjUwfQ"
},
"isError": false
} MCP tool skool_list_membership_requests
Lists pending requests to join a private group, oldest first, with the answers each applicant gave to your Membership Questions. Only admins and moderators see requests; for other roles the call fails with a permission error. Pass request_id to approve_membership_request or decline_membership_request.
Parameters
| Name | Type | Description |
|---|---|---|
| group required | string | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
| limit | integer | 1 to 100. Default: 50. |
| cursor | string | Next page cursor from the previous call. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_list_membership_requests",
"arguments": {
"group": "yourgroup"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"requests": [
{
"request_id": "r_51e0aa",
"name": "Tom Becker",
"requested_at": "2026-10-03T07:45:00Z",
"answers": [
{
"question": "What are you building?",
"answer": "A SaaS for dental clinics, launching in November."
}
]
}
],
"next_cursor": null
},
"isError": false
} List posts
readMCP tool skool_list_posts
Lists posts in the community feed, newest first, the same order as the feed with the Newest sort. Filter by category or by creation time to see what came in since your last check. Body is a short preview; get_post returns the full text and comments.
Parameters
| Name | Type | Description |
|---|---|---|
| group required | string | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
| category | string | Only posts in this category. |
| since | datetime | Only posts created after this time. |
| limit | integer | 1 to 50. Default: 20. |
| cursor | string | Next page cursor from the previous call. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_list_posts",
"arguments": {
"group": "yourgroup"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"posts": [
{
"post_id": "a3f9c2e1b7d84c06",
"title": "Week 12 challenge: ship one landing page",
"author": "You",
"category": "Announcements",
"likes": 23,
"comments": 7,
"pinned": true,
"created_at": "2026-10-03T07:00:00Z",
"preview": "Post your link below by Sunday..."
}
],
"next_cursor": "eyJvZmZzZXQiOjIwfQ"
},
"isError": false
} Get post
readMCP tool skool_get_post
Returns one post with its full body, attachments (images, files, links) and the whole comment tree, replies nested under their parent comment. Use it before replying so your agent sees the full discussion.
Parameters
| Name | Type | Description |
|---|---|---|
| group required | string | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
| post_id required | string | Post ID from list_posts. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_get_post",
"arguments": {
"group": "yourgroup",
"post_id": "post_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"post_id": "a3f9c2e1b7d84c06",
"title": "Week 12 challenge: ship one landing page",
"body": "Post your link below by Sunday. Best three get a live review on Thursday's call.",
"author": {
"member_id": "m_0001",
"name": "You"
},
"attachments": [],
"comments": [
{
"comment_id": "c_77ab",
"author": "Ana Lopez",
"body": "Here's mine: ana.dev/launch",
"likes": 3,
"replies": [
{
"comment_id": "c_77b0",
"author": "You",
"body": "Love the headline!"
}
]
}
]
},
"isError": false
} List courses
readMCP tool skool_list_courses
Lists courses in the group's Classroom with their modules in order. Unlock rule says who can open each course: open to all members, unlocked at a level, or paid. Use the module URLs in welcome messages.
Parameters
| Name | Type | Description |
|---|---|---|
| group required | string | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_list_courses",
"arguments": {
"group": "yourgroup"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"courses": [
{
"course_id": "co_12",
"title": "Start Here",
"unlock": "open",
"modules": [
{
"title": "Welcome",
"url": "https://www.skool.com/yourgroup/classroom/co_12?md=1"
},
{
"title": "Your first week",
"url": "https://www.skool.com/yourgroup/classroom/co_12?md=2"
}
]
},
{
"course_id": "co_19",
"title": "Advanced Funnels",
"unlock": "level 3",
"modules": []
}
]
},
"isError": false
} List conversations
readMCP tool skool_list_conversations
Lists your Skool Chat conversations, most recent first, with the other person, unread count and a preview of the last message. Set unread_only to see only what needs an answer.
Parameters
| Name | Type | Description |
|---|---|---|
| unread_only | boolean | Only conversations with unread messages. |
| limit | integer | 1 to 50. Default: 20. |
| cursor | string | Next page cursor from the previous call. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_list_conversations",
"arguments": {}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"conversations": [
{
"conversation_id": "cv_93f1",
"with": {
"member_id": "m_8c41d2",
"name": "Ana Lopez"
},
"unread": 2,
"last_message": "Is the Thursday call recorded?",
"updated_at": "2026-10-02T16:02:00Z"
}
],
"next_cursor": null
},
"isError": false
} Get conversation
readMCP tool skool_get_conversation
Returns the messages of one Skool Chat conversation, oldest first, so your agent reads the thread in order before answering.
Parameters
| Name | Type | Description |
|---|---|---|
| conversation_id required | string | Conversation ID from list_conversations. |
| limit | integer | 1 to 100. Default: 50. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_get_conversation",
"arguments": {
"conversation_id": "conversation_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"conversation_id": "cv_93f1",
"with": {
"member_id": "m_8c41d2",
"name": "Ana Lopez"
},
"messages": [
{
"from": "Ana Lopez",
"body": "Hi! Quick question.",
"sent_at": "2026-10-02T16:01:00Z"
},
{
"from": "Ana Lopez",
"body": "Is the Thursday call recorded?",
"sent_at": "2026-10-02T16:02:00Z"
}
]
},
"isError": false
} Get group stats
readMCP tool skool_get_group_stats
Returns membership and revenue numbers for a period, the same figures as the group's admin dashboard: total members, new joins, churned members and monthly recurring revenue. Admins only.
Parameters
| Name | Type | Description |
|---|---|---|
| group required | string | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
| period | enum | 7d, 30d or 90d. Default: 30d. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_get_group_stats",
"arguments": {
"group": "yourgroup"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"group": "yourgroup",
"period": "30d",
"members_total": 1284,
"members_new": 96,
"members_churned": 31,
"mrr": {
"amount": 41230,
"currency": "USD"
}
},
"isError": false
} MCP tool skool_approve_membership_request
Approves one pending request, so the applicant becomes a member. Your AutoDM, if you set one, goes out as usual. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| group required | string | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
| request_id required | string | Request ID from list_membership_requests. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_approve_membership_request",
"arguments": {
"group": "yourgroup",
"request_id": "r_51e0aa"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"request_id": "r_51e0aa",
"status": "approved",
"member_id": "m_9d02f7"
},
"isError": false
} MCP tool skool_decline_membership_request
Declines one pending request. The applicant is not notified with a reason. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| group required | string | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
| request_id required | string | Request ID from list_membership_requests. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_decline_membership_request",
"arguments": {
"group": "yourgroup",
"request_id": "request_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"request_id": "r_51e0aa",
"status": "declined"
},
"isError": false
} MCP tool skool_create_post
Publishes a post to the feed in a given category, under your name. Links and images go in the body as URLs. Admin-only categories need an admin account. By default you confirm each post; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| group required | string | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
| title required | string | Post title. |
| body required | string | Post text. Links and images by URL. |
| category required | string | Category name. Admin-only categories need an admin account. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_create_post",
"arguments": {
"group": "yourgroup",
"title": "Week 12 challenge: ship one landing page",
"body": "Post your link below by Sunday. Best three get a live review on Thursday's call.",
"category": "Announcements"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"post_id": "a3f9c2e1b7d84c06",
"status": "published",
"category": "Announcements",
"url": "https://www.skool.com/yourgroup/week-12-challenge-ship-one-landing-page",
"created_at": "2026-10-03T09:00:00+02:00"
},
"isError": false
} MCP tool skool_comment_on_post
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. By default you confirm each comment; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| group required | string | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
| post_id required | string | Post ID from list_posts. |
| body required | string | Comment text. |
| parent_comment_id | string | Reply under this comment instead of the post. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_comment_on_post",
"arguments": {
"group": "yourgroup",
"post_id": "a3f9c2e1b7d84c06",
"body": "Good question, Lena. Module 2 of Pricing covers exactly this: start with a fixed project fee, not hourly. What is the project scope?"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"comment_id": "c_77c4",
"post_id": "a3f9c2e1b7d84c06",
"parent_comment_id": null,
"status": "published"
},
"isError": false
} MCP tool skool_send_message
Sends a direct message in Skool Chat to one member and starts a conversation if there is none yet. Messages go out under your name; by default you confirm each one, and you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| member_id required | string | Member ID from list_members or list_conversations. |
| body required | string | Message text. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_send_message",
"arguments": {
"member_id": "m_8c41d2",
"body": "Welcome, Ana! You mentioned your first client launch. Start with the Welcome lesson here: https://www.skool.com/yourgroup/classroom/co_12?md=1"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"conversation_id": "cv_93f1",
"message_id": "msg_4410",
"status": "sent",
"sent_at": "2026-10-03T09:05:00+02:00"
},
"isError": false
} Pin post
writeMCP tool skool_pin_post
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.
Parameters
| Name | Type | Description |
|---|---|---|
| group required | string | Group URL name, e.g. 'yourgroup' for skool.com/yourgroup. |
| post_id required | string | Post ID from list_posts. |
| pinned | boolean | false unpins. Default: true. |
| course_page_id | string | Pin to this Classroom page instead of the feed. |
tools/call
JSON-RPC
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "skool_pin_post",
"arguments": {
"group": "yourgroup",
"post_id": "post_8c41d2"
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"post_id": "a3f9c2e1b7d84c06",
"pinned": true,
"location": "feed"
},
"isError": false
}