Skool MCP
Skool MCP
Claude에게 Skool 커뮤니티에 대한 접근 권한을 부여하세요. 게시물, 댓글, 멤버, 교실, 그리고 DM 받은 편지함까지.
Claude에게 "이번 주에 사람들이 뭘 올렸지?", "마지막 5개 DM에 답장 초안을 작성해줘", 또는 "내 멤버 목록을 스프레드시트로 뽑아줘" 같은 것을 물어보세요. 이 도구는 여러분의 컴퓨터에서 실행되며, 여러분 자신의 Skool 로그인을 사용합니다.
비공식 도구입니다. Skool이 만든 것이 아니며, Skool과 제휴하지 않았습니다.
이 도구로 할 수 있는 것
13개의 도구가 있습니다. 읽기 전용 도구는 안전하게 실행할 수 있습니다. 쓰기 도구는 여러분의 이름으로 공개 게시되므로, Claude가 먼저 문구를 확인받아야 합니다.
도구 | 기능 | 읽기 또는 쓰기 |
| Skool 로그인이 작동하는지 확인하고 소속된 커뮤니티 목록을 표시합니다. 문제가 생기면 가장 먼저 실행하세요. | 읽기 |
| 커뮤니티 피드의 최근 게시물을 나열합니다: 제목, 요약, 댓글 및 추천 수, 작성자. | 읽기 |
| 게시물 하나와 그 댓글을 전체 읽습니다. | 읽기 |
| 커뮤니티 피드에 새 게시물을 게시합니다. | 쓰기 |
| 게시물에 댓글을 추가합니다. | 쓰기 |
| 커뮤니티 멤버를 나열합니다: id, 이름, 이메일, 짧은 소개. | 읽기 |
| 커뮤니티의 교실 강좌를 나열합니다. | 읽기 |
| 강좌의 모듈과 레슨, 그리고 레슨 하나의 내용을 읽습니다. | 읽기 |
| DM 받은 편지함: 읽지 않은 수와 마지막 메시지 미리보기. | 읽기 |
| DM 대화 하나의 메시지를 읽습니다. | 읽기 |
| 기존 대화에 DM을 보냅니다. | 쓰기 |
| DM 대화를 읽음으로 표시합니다. | 쓰기 |
| 멤버와 새 DM을 시작합니다. | 쓰기 |
Related MCP server: kaushik-linkedin-mcp
시작하기 전에
macOS 또는 Windows. (Linux는 테스트되지 않았습니다.)
Claude Code 또는 Claude Desktop.
연결하려는 커뮤니티에 실제로 멤버로 가입된 Skool 계정.
그게 전부입니다. Python을 설치할 필요가 없습니다. 설정 과정에서 필요한 모든 것을 설치합니다.
설치
1단계: 폴더를 컴퓨터에 가져오세요. 두 방법 중 아무거나 사용하세요.
옵션 A, git이 있는 경우:
cd ~
git clone https://github.com/Solnest-AI/skool-mcp-community.git skool-mcp그러면 ~/skool-mcp에 배치되는데, 바로 원하는 위치입니다.
옵션 B, ZIP 방식:
ZIP을 다운로드하세요 (저장소 페이지에서 초록색 Code 버튼, 그다음 Download ZIP).
압축을 풉니다.
폴더 이름을
skool-mcp로 바꾸고 홈 폴더에 바로 위치하도록 이동합니다.
2단계: 올바른 위치에 넣으세요. 이건 생각보다 중요합니다.
Mac:
~/skool-mcp(즉/Users/yourname/skool-mcp)Windows:
C:\Users\yourname\skool-mcp
Documents 아님. Desktop 아님. Downloads 아님. macOS는 그 폴더들을 잠가두기 때문에, 그 폴더들을 읽으려는 백그라운드 작업은 디버깅하기 정말 짜증나는 방식으로 실패합니다. 홈 폴더, 끝.
3단계: Claude에게 폴더를 가리키고 "설정해줘"라고 말하세요.
Claude Code에서:
cd ~/skool-mcp
claude그런 다음 입력하세요: 설정해줘.
Claude가 SETUP.md를 읽고 전체 과정을 실행합니다: 도구 설치, 직접 Skool에 로그인할 수 있도록 브라우저 열기, 연결 확인, 서버 등록, 테스트. 필요할 때 멈추고 여러분에게 물어봅니다.
Claude Desktop용으로 설정하시나요? 같은 방식입니다. Claude Code에서 설정을 실행하고(또는 수동으로), 등록 단계에서 Claude Desktop에서 사용하고 싶다고 Claude에게 말하세요.
작동 방식과 알아야 할 사항
이 부분을 읽어보세요. 짧고 솔직한 버전입니다.
Skool에는 공식 API가 없습니다. 개발자 프로그램도, API 키도, 지원되는 접근 방식도 없습니다. 그래서 이 도구는 브라우저가 하는 것과 동일한 방식으로 작동합니다: 여러분 자신의 로그인 세션을 사용하여 Skool 웹사이트가 사용하는 동일한 내부 엔드포인트와 통신합니다.
여러분의 로그인은 여러분의 컴퓨터에 남아 있습니다. 설정 중에 실제 브라우저 창이 열리고 평소처럼 직접 Skool에 로그인합니다(Google 로그인과 2FA 모두 작동). 스크립트가 해당 브라우저에서 세션 쿠키를 읽어 .env라는 로컬 파일에 기록합니다. Solnest, Anthropic 또는 다른 곳으로 아무것도 전송되지 않습니다.
쿠키를 채팅에 절대 붙여넣지 마세요. Claude에게도, 저에게도, 도움을 주려는 커뮤니티의 누구에게도요. 그 쿠키는 여러분의 Skool 계정 전체입니다: 게시물, DM, 결제, 멤버. 그것을 가진 사람은 누구나 여러분으로 로그인할 수 있습니다. 설정은 쿠키가 대화에 나타날 필요가 없도록 설계되었으며, Claude는 여러분이 제공하려고 해도 거절하도록 지시받습니다.
.env는 여러분의 비밀번호 파일입니다. 정확히 그렇게 취급하세요. 화면 공유에서 열지 말고, 스크린샷을 찍지 말고, 어디에도 붙여넣지 말고, Drive나 Slack에 올리지 마세요. 번들은 이미 업로드하는 코드에서 이를 제외하도록 설정되어 있으므로, 대부분은 일부러 공유하지 않기만 하면 됩니다. 유출되었다고 생각되면 Skool에서 모든 기기 로그아웃 후 설정을 다시 실행하세요.
도구는 여러분으로서 작동합니다. skool_create_post로 생성된 게시물은 여러분의 게시물입니다. DM은 여러분에게서 온 것입니다. 직접 입력한 것과 동일하게 보이는데, 기능적으로도 동일하기 때문입니다. 아무것도 나가기 전에 Claude가 초안을 다시 읽어주게 하세요.
실제로 소속된 커뮤니티에서만 사용하세요. 이것은 여러분 자신의 자격 증명을 여러분 자신의 멤버십에 사용하는 것입니다. 얄팍하게 굴지 마세요.
Skool이 이 도구를 망가뜨릴 수 있습니다. 공식 API가 없다는 것은 안정성 보장이 없다는 뜻입니다. Skool이 사이트를 변경하면 도구가 하룻밤 사이에 작동을 멈출 수 있습니다. 문제가 생기면 먼저 doctor를 실행하세요:
cd ~/skool-mcp
uv run doctor.py어느 부분이 고장났는지, 어떻게 고치는지 정확히 알려줍니다. 쿠키는 절대 출력하지 않습니다.
세션은 결국 만료됩니다. Skool 로그인 토큰은 약 1년간 지속되므로 드문 경우입니다. 도구가 로그인 오류로 실패하기 시작하면 uv run connect_skool.py를 다시 실행하세요.
403은 다른 문제이며, 다시 로그인해도 해결되지 않습니다. Skool의 API는 방화벽(AWS WAF) 뒤에 있어서 Skool이 요청을 받기 전에 여러분의 컴퓨터를 거부할 수 있습니다. 이런 경우 로그인은 완전히 정상입니다. 두 가지 버전이 있으며, 각각 반대되는 해결책이 필요합니다:
여러분 연결의 지문. 방화벽은 연결 자체의 기술적 서명을 검사하며, 일반 Python은 브라우저처럼 보이지 않습니다. 번들은 이제 Chrome의 서명을 차용하여 자동으로 처리합니다. 네트워크를 변경해도 해결되지 않습니다.
여러분의 IP 주소. 방화벽이 여러분이 오는 주소를 거부하는데, 보통 VPN, 프록시, 또는 많은 사람들과 공유하는 주소입니다. 네트워크를 변경하는 것만이 해결책입니다.
어떤 경우인지 직접 알아낼 필요는 없습니다. 다음을 실행하세요:
cd ~/skool-mcp
uv run net_check.py로그인이 필요 없고 5초면 끝나며, 두 가지 중 어떤 것인지와 정확히 무엇을 해야 하는지 알려줍니다. Skool 로그인을 다시 연결하는 것부터 시작하지 마세요. 그건 둘 다 해결할 수 없습니다.
도움 받기
uv run doctor.py(또는 403이나 "차단됨"처럼 보이는 것에는 uv run net_check.py)를 실행한 다음 출력을 Claude에 붙여넣고 실패한 부분을 고쳐달라고 요청하세요. 출력은 공유해도 안전합니다: 확인 결과, 쿠키 길이, 만료 날짜를 출력하며 쿠키 자체는 절대 출력하지 않습니다.
여전히 막혀 있나요? doctor 출력과 함께 커뮤니티에 게시하세요. .env는 게시하지 마세요.
Available Tools
13 toolsskool_comment_on_postA
Add a comment to a post. post_id is the real post id (the id field from
skool_list_posts/skool_get_post, not the slug). Writes publicly — confirm first.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| post_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description must convey behavioral traits. It discloses that the operation is a public write ('Writes publicly') and advises confirmation, which is a meaningful caution. It also explains the correct format for `post_id` to avoid errors. This goes beyond a simple statement of the action, though it doesn't mention reversibility or other side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no unnecessary words. The purpose is front-loaded, followed by the parameter clarification and then the behavioral caution. The structure is efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two required parameters and no output schema, the description covers the purpose, the critical parameter nuance, and the public write nature. It could optionally mention response format, but that's not essential given no output schema. The description is sufficiently complete for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description must clarify parameters. It explicitly clarifies `post_id` by stating it's the real id (from `skool_list_posts`/`skool_get_post`) and not the slug, which is critical for correct invocation. `content` is not described, but it's self-evident from the name and type. The key parameter semantics are addressed well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action with a specific verb and resource: 'Add a comment to a post.' It also clarifies the ambiguous `post_id` parameter, distinguishing it from the slug, which prevents misuse. This clearly differentiates it from sibling tools like `skool_create_post` (creating a post) and `skool_send_message` (messaging).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context: it's for commenting on posts, and it warns 'Writes publicly — confirm first,' implying user consent is needed. However, it does not explicitly mention when not to use this tool or how it compares to alternatives like sending messages or creating posts. Guidance is implied but not fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_create_postA
Publish a NEW top-level post to your community feed. Writes publicly — confirm wording with the user first. Returns the new post id.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations to rely on, the description fully bears the burden and shines: it explicitly states 'Writes publicly' (a critical side effect), mandates user confirmation, and reveals the return value ('Returns the new post id'). This is exactly the kind of behavioral disclosure needed for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight, front-loaded sentences. The purpose is stated first, followed by the critical write/confirmation note, then the return. Every sentence adds value; there is zero waste. This is a model of concise, structured description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (2 params, no output schema), and the description covers the key operation, public write behavior, and return. It doesn't mention auth requirements or error conditions, but those are typically inferred for such a straightforward create-and-publish tool. Given the lack of annotations, the description is reasonably complete; a 4 is warranted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, and the description doesn't clarify what 'title' and 'content' mean beyond their obvious names. Since the parameters are self-explanatory (a post's title and body), this is acceptable, but the description adds no extra meaning or guidance about constraints or formatting. It's adequate but not more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Publish') and resource ('NEW top-level post to your community feed'), clearly distinguishing it from siblings like comment or list operations. The phrase 'top-level' explicitly separates it from comment creation, and the tool's intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides good context by specifying it writes publicly and advises confirming wording with the user, which guides when to use it (only after user approval). It doesn't explicitly mention alternatives, but the purpose clarity and sibling names make it obvious when this tool is appropriate. No exclusionary guidance is given, but the behavioral note covers the main usage caveat.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_get_conversationA
Read the messages in one DM conversation (read-only). Get the channel_id from skool_list_conversations. Returns sender, content, timestamp per message.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| channel_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the sole source of behavioral info. It discloses the read-only nature and the return shape (sender, content, timestamp). It does not mention rate limits, ordering, or the effect on read state, but 'read-only' reasonably implies no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and a direct prerequisite. Every sentence adds value, with no wasted words or redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool, the description covers the key details: how to get the required parameter and what the return contains. Missing are specifics on limit behavior, ordering, and pagination, but these are not critical for a simple read operation with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It explains how to obtain channel_id (via list_conversations) but does not describe the limit parameter at all. The meaning of 'limit' must be inferred from context or its default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Read the messages') on a specific resource ('one DM conversation'), and explicitly marks it as read-only. It also names the sibling tool to obtain the required channel_id, distinguishing it from list_conversations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a concrete usage step ('Get the channel_id from skool_list_conversations') and implies a context (reading messages, not sending or marking read). It does not explicitly exclude alternatives, but the prerequisite and read-only nature give adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_get_lessonA
Read a classroom course (read-only). course_id from skool_list_courses
returns the course's modules/lessons (id + title). Pass a lesson_id (a child
id) to also pull that lesson's content/metadata (note: many lessons are video-
only, so the text content may be empty).
| Name | Required | Description | Default |
|---|---|---|---|
| course_id | Yes | ||
| lesson_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It explicitly states the operation is 'read-only', discloses that many lessons are video-only and 'content' may be empty, and indicates what is returned with and without lesson_id. This goes beyond the name and provides essential runtime behavior, though it could mention error handling or response shape in more detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the core purpose and read-only nature. The alternative behaviors are explained compactly without fluff, and the video-only caveat is included efficiently. Excellent structure and no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description adequately describes the return behavior: modules/lessons list (id+title) without lesson_id, and lesson content/metadata with lesson_id, including a caveat about empty content. It covers the essential information for a read-only tool, though it omits potential error conditions or pagination, but these are not critical for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does so effectively: course_id is sourced from skool_list_courses and yields modules/lessons; lesson_id is a child id that triggers content/metadata retrieval. It also warns about empty content. This adds meaning beyond the bare parameter titles, though it doesn't specify formats or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's primary action ('Read a classroom course'), the resource (course/lesson), and distinguishes it from sibling tools like skool_get_post and skool_get_conversation by focusing on course/lesson content. It also specifies the scope: without lesson_id it returns modules/lessons, with lesson_id it returns lesson content/metadata, avoiding ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context by directing the agent to obtain course_id from skool_list_courses, and explains the optional lesson_id behavior. It implies a typical workflow (list courses → get lesson) but does not explicitly state when to prefer this tool over alternatives like skool_get_post. Still, the guidance is sufficient for correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_get_postA
Read one full post and (by default) its comments. post_name is the slug
from skool_list_posts (the name field, e.g. 'big-change-...'), not the id.
| Name | Required | Description | Default |
|---|---|---|---|
| post_name | Yes | ||
| with_comments | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It discloses the default behavior of including comments ('by default') and clarifies that post_name is a slug, not an id. However, it does not mention authentication requirements, error handling, or side effects (though as a read, side effects are minimal). This is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences, with the action and scope front-loaded. The parameter clarification is seamlessly integrated into the second sentence without redundant phrasing. Every word earns its place, and the structure aids quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (2 params, no output schema) and no annotations, the description covers the essential aspects: what it does, the key parameter nuance, and default behavior. It lacks details on error responses or exact return structure, but for a read tool with a clear resource, it is mostly complete. The mention of 'full post' and 'comments' gives a reasonable picture of the return content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds critical meaning to post_name by clarifying it is a slug from skool_list_posts and not an id, which is essential for correct invocation. It also indirectly explains with_comments via the 'by default' phrasing. This adds significant value beyond the bare schema, though not comprehensive for all params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Read') and the resource ('one full post' and 'its comments'). It distinguishes from siblings like skool_list_posts (listing) and skool_create_post (creation) by specifying a single post retrieval. The parameter clarification further anchors the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use this tool by stating it reads one full post, implying it is for single-post retrieval rather than listing. It also references skool_list_posts as the source of post_name, which signals a workflow of listing first then getting details. However, it does not explicitly say when not to use it or name alternatives directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_list_conversationsA
Your DM inbox (read-only): conversations with channel_id, unread count, and last-message preview. Use a channel_id with skool_get_conversation to read it.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It explicitly states 'read-only', disclosing that this operation has no side effects. It also lists the output contents (channel_id, unread count, preview), giving the agent a sense of what to expect. It does not mention pagination or rate limits, but for a list operation the key safety trait (read-only) is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The main purpose and scope are front-loaded, and the usage hint about get_conversation is placed after the primary info. Structure is clean and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one optional parameter and no output schema, the description covers what the tool returns (fields), the scope (DM inbox), safety (read-only), and the natural next step. An agent has enough to invoke it correctly without further ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has only one parameter (limit) with 0% description coverage, and the description does not mention limit at all. While 'limit' is a common parameter, the description fails to explain its effect (e.g., max number of conversations to return, default 30). Since the description is the only place to compensate for the missing schema documentation, this is a notable gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the resource ('DM inbox') and the action (list conversations), and specifies the fields returned (channel_id, unread count, last-message preview). It also distinguishes itself from sibling get_conversation by directing the reader to use it for reading a specific conversation. This is a precise, non-redundant purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to use a returned channel_id with skool_get_conversation for follow-up, which implies this tool is for browsing the inbox before drilling into a conversation. It does not explicitly state when not to use it or alternatives, but the pointer to the sibling tool provides clear context. Given the number of siblings and the clear naming, this is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_list_coursesA
List the classroom courses in your community (read-only): id, title, description. Use a course id with skool_get_lesson to read its lessons.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the key trait of being read-only, which implies no side effects or destructive actions. It also indicates what data will be returned. However, it doesn't mention any potential limitations such as pagination, rate limits, or behavior when no courses exist. For a simple list operation, this is adequate but not comprehensive, so a score of 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two concise sentences, with the primary action and scope front-loaded. The first sentence states the purpose and return fields, the second gives a clear pointer to the related lesson tool. There is zero wasted wording, and each word earns its place. This is an ideal structure for clarity and scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no output schema), the description provides all necessary information: what the tool does, the scope, the read-only nature, and the exact fields returned. It also suggests how to proceed with a course id. There is no missing information that would prevent an agent from calling the tool correctly. A slightly higher score would require more detail about return edge cases or error handling, but this is not essential for a simple list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema has 100% coverage (trivially, since there are no properties to document). The description adds no parameter explanations because none are needed. The baseline for zero-parameter tools is 4, and the description doesn't attempt to explain anything beyond the absence of parameters, which is correct. No additional semantic value is required or provided, but the baseline is met.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('List'), a specific resource ('classroom courses'), and a scope ('in your community'). It also explicitly marks the operation as 'read-only' and lists the returned fields (id, title, description), fully distinguishing it from sibling tools like list_posts or get_lesson. This is a precise, unambiguous statement of purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent when to use this tool (to list courses) and directs it to the related tool (skool_get_lesson) for further action, using a course id. While it doesn't explicitly contrast with other listing tools like skool_list_posts, the domain-specific focus and the natural next-step suggestion provide clear practical guidance. It could be more explicit about alternatives, but the intent is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_list_membersA
List members of your community (read-only): id, name, email, short bio. Use member ids with skool_start_chat to open a DM.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the read-only nature of the operation, which is a key behavioral trait. Beyond that, it does not mention pagination, how the limit parameter affects results, authentication requirements, or potential errors. With no annotations provided, the description carries the full burden but only partially covers the behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action and returned fields, followed by a useful cross-reference to skool_start_chat. Every word contributes value, with no redundancy or filler. The structure is clean and immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with only one parameter and no output schema, the description covers the main purpose, explicitly states the return fields, and offers a practical follow-up action. It is missing an explanation of the limit parameter's behavior and default, but overall it provides enough context for an agent to understand the tool's role and basic use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'limit' is not mentioned in the description at all, and schema description coverage is 0%. The agent receives no guidance on how limit influences the number of members returned or whether there is a default. The description fails to compensate for the lack of schema documentation, leaving the parameter's meaning entirely up to inference from its name and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List members of your community') and the resource, along with the specific fields returned (id, name, email, short bio). The 'read-only' qualifier distinguishes it from mutation tools, and the resource 'members' differentiates it from sibling list tools like skool_list_posts or skool_list_courses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides one concrete usage context: obtaining member ids for use with skool_start_chat to open a DM. However, it does not explicitly compare with alternative list tools or state when not to use this tool. No exclusions or alternative recommendations are given, leaving some ambiguity for an agent deciding between list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_list_postsA
List recent posts in your community feed (read-only). Returns each post's
id, name (slug), title, a content snippet, comment/upvote counts, author.
Use the name with skool_get_post to read a full post + its comments.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the read-only nature, the returned fields (id, name, title, snippet, counts, author), and the 'recent' scoping. It doesn't mention pagination or ordering details, but for a simple list tool this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no fluff. The core verb and scope are front-loaded, and the return format and cross-tool hint are placed efficiently. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter list tool with no output schema, the description provides enough: the purpose, return fields, and a pointer to the next step. The missing explanation of `limit` is the main deficiency, but the overall context is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the `limit` parameter at all. While 'limit' is a common concept, the tool fails to explain its effect, bounds, or default behavior beyond the schema's default value. This is a notable gap given the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List'), a resource ('posts in your community feed'), and explicitly notes it is read-only. It also distinguishes itself from skool_get_post by clarifying that this returns a snippet, not full posts. The purpose is unmistakable and differentiates from the main sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to use the returned `name` with skool_get_post for full posts, providing a clear routing condition. It does not address other siblings (e.g., list_members, list_courses), but given the post-specific context, the guidance is sufficient for the common case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_mark_readA
Mark a DM conversation as read. Get the channel_id from skool_list_conversations.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for disclosing behavioral traits. It only states the action itself ('Mark as read') without detailing side effects, permissions, reversibility, or any response. For a mutation tool, this is insufficient disclosure, particularly regarding what changes and what the result is.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence. The core action is front-loaded, and the only extra information (the source of the parameter) is presented immediately afterward. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is low complexity (one parameter, no output schema), but the description covers only the action and parameter source. It does not mention the response or any side effects, which might be expected for a mutation tool. Given the minimal annotations and schema richness, the description is adequate for invocation but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does add value by pointing to the source of the channel_id (skool_list_conversations), which is a helpful hint. However, it does not explain the meaning of 'channel_id' beyond the identifier itself, which is a minor gap for a single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Mark a DM conversation as read') with a specific verb and resource. It distinguishes itself from siblings by the action type (e.g., get_conversation, send_message). The phrase 'Get the channel_id from skool_list_conversations' adds context and prevents confusion with other conversation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers clear context by telling the agent how to obtain the required parameter (from skool_list_conversations). It does not explicitly contrast with alternatives, but the purpose is straightforward enough that exclusions are not critical. This meets the 'clear context, no exclusions' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_send_messageA
Send a DM into an existing conversation. Writes — confirm wording first. Get the channel_id from skool_list_conversations.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| channel_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states 'Writes', indicating a state-changing operation, and adds a caution to 'confirm wording first', suggesting irreversibility. However, it does not disclose permissions, rate limits, failure modes, or what happens to the conversation. It provides basic but not comprehensive behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action first. The warning follows logically, and the channel_id sourcing is given in a separate sentence. No fluff, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter operation with no output schema, the description covers the essential prerequisite (obtaining channel_id), the write nature, and a caution. It doesn't mention error scenarios or return values, but for this low complexity, it provides enough for an agent to invoke it correctly. Minor gaps are acceptable given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain the parameters. It gives a direct source for channel_id (from list_conversations), and content is implicitly understood as the message text from the verb 'Send'. However, it doesn't specify any constraints, formats, or expectations for content, and doesn't explicitly link content to the parameter. It adds some value but falls short of fully clarifying both parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (send a DM), the target (an existing conversation), and the write nature. It distinguishes from starting a new conversation by specifying 'existing', which is a key differentiator from the sibling 'skool_start_chat'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit instruction on how to obtain the channel_id (from skool_list_conversations), which is actionable for the agent. While it doesn't explicitly state when not to use it, the phrase 'existing conversation' implicitly guides away from starting a new chat. This is clear but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_start_chatA
Open a new DM with a member (by their user_id from skool_list_members). Returns the new conversation so you can then skool_send_message into it.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It covers the core behavior (creates a new DM) and the return value (the conversation), but does not mention side effects, permission requirements, idempotency (whether calling again errors or returns existing), or potential rate limits. It hints at a prerequisite (user_id from skool_list_members) but omits failure scenarios. This is acceptable but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly worded sentence. It front-loads the primary action and resource, then provides the parameter source, followed by the return value and next step. Every phrase earns its place—no filler, no redundancy. This is an model of concise, structured tool documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only one parameter, no output schema, and no annotations, the description is relatively complete. It states what it does, what it returns, and how to obtain the input. It also indicates the follow-up action (send_message). Missing are potential error scenarios (e.g., invalid user_id, conversation already exists) and any explicit note that authentication is assumed. These are minor gaps given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Given schema coverage is 0%, the description must add meaning to the single parameter. It does so by specifying the source ('user_id from skool_list_members'), which clarifies that it is the member's identifier from a prior call, not a free-form input. It also implies the parameter is required (which the schema confirms). While it doesn't describe format or validation, the source reference adds significant semantic value beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's action ('Open a new DM') and the resource (a member via user_id). It distinguishes from siblings like skool_send_message (sends to existing conversation) and skool_list_conversations (lists conversations) by specifying it creates a new conversation. The phrase 'so you can then skool_send_message into it' clarifies the intended downstream use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is a prerequisite for sending messages to a new member, referencing skool_send_message as the follow-up. It also points to skool_list_members as the source for user_id, giving a clear context. However, it does not explicitly state when NOT to use it (e.g., if a conversation already exists) or contrast with skool_list_conversations as an alternative for existing chats. Thus, it provides clear context but no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skool_whoamiA
Confirm the Skool cookie works and list the communities you belong to. Call this first if other tools error — it isolates auth/cookie problems.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly states the two behaviors (cookie check and community listing), implying a read-only operation. It does not mention error handling or response details, but for a whoami-style tool this is largely implied and acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The primary purpose is front-loaded, and the critical usage tip follows immediately. Ideal for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description covers the essential purpose and usage context. It could mention expected output format (e.g., list of community names/IDs) or error behavior, but those are minor gaps given the tool's simplicity and the explicit diagnostic hint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is trivially complete. Baseline for 0 params is 4, and the description adds no unnecessary parameter information since none exists. It does not need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific purpose: to confirm cookie validity and list the user's communities. It clearly identifies the tool as an auth check combined with a listing operation, and this distinguishes it from sibling tools like list_posts or list_courses.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to call this first if other tools error, framing it as a diagnostic for auth/cookie problems. This provides clear when-to-use guidance and effectively positions it against the other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool addresses a distinct resource and action: posts, comments, members, courses, conversations, and messages. The read/write tools are clearly separated (list/get vs create/send), and the whoami diagnostic is unique. No two tools appear to overlap in purpose.
All tools follow a consistent skool_<verb>_<noun> pattern (e.g., skool_list_posts, skool_get_post, skool_send_message). Even the outlier skool_whoami is a common convention for auth checks. The naming is predictable and groups resources and actions logically.
13 tools is well within the ideal 3–15 range and matches the server's breadth: community posts, comments, member directory, course content, and DM messaging. Each tool serves a clear purpose with no redundancy. The count feels appropriately scoped for a community platform.
Core workflows are covered: reading/writing posts, commenting, listing/reading conversations, sending DMs, and browsing course lessons. Minor gaps exist—there is no tool to update or delete posts/comments, and no search across posts or courses—but these are not critical for typical usage and may reflect API limitations.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
LinkedIn outreach, commenting, scheduling, and data via Claude and human approval gates.
LinkedIn outreach, commenting, scheduling, and data via Claude and human approval gates.
Give Claude only the Google Drive files you choose. Every action logged.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables Claude AI to interact with Viva Engage (Yammer) for browsing communities, searching posts, reading conversations, and posting replies.91MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude AI to interact with LinkedIn through browser automation, including profile reading, people and job search, company research, post publishing, and profile editing.MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to read and send Instagram DMs, manage threads and message requests, send media, and run autonomous conversations via the /dm skill.3MIT
- AlicenseAqualityDmaintenanceEnables posting content, sharing articles, and managing your LinkedIn profile through Claude using the official LinkedIn API with OAuth 2.0.610MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Solnest-AI/skool-mcp-community'
If you have feedback or need assistance with the MCP directory API, please join our Discord server