ai-school-mcp
It gives MCP clients (Claude Code, Claude Desktop, etc.) search-and-read access to the free AI School curriculum, with citable lessons on AI engineering, governance, security, and applied AI.
Search lesson titles across the whole curriculum and get matching titles/URLs.
List course tracks, optionally filtered by keyword.
Get a single track's full lesson list to see course structure.
Read a lesson's full text as readable markdown-ish output from its URL.
Browse catalogue metadata and all tracks via built-in resources (
aischool://catalogue,aischool://tracks).Works with no API key or account, either via
npxor the hosted HTTP endpoint.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ai-school-mcpFind me a track on AI governance."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AI School MCP server
Gives any MCP client - Claude Code, Claude Desktop, or anything else speaking the protocol - the ability to search and read the free AI School curriculum: 550+ tracks covering AI engineering, governance, security, and applied AI by profession.
The point is not "an AI that knows about AI". It is that when an assistant answers a question about, say, chunking strategy or the EU AI Act, it can point at a specific lesson you can go and read, instead of producing a fluent paragraph you have no way to check.
Install
One command, nothing to clone. Node 20+ is the only requirement: no API key, no account, no server to run.
Claude Code
claude mcp add ai-school -- npx -y ai-school-mcpClaude Desktop - add to claude_desktop_config.json:
{
"mcpServers": {
"ai-school": {
"command": "npx",
"args": ["-y", "ai-school-mcp"]
}
}
}Pin a version if you would rather not track the latest release:
claude mcp add ai-school -- npx -y ai-school-mcp@1.0.1Hosted, nothing to install. The same server also runs at
https://lillytechsystems.com/mcp over Streamable HTTP, and is listed in the
official MCP Registry as com.lillytechsystems/ai-school:
claude mcp add --transport http ai-school https://lillytechsystems.com/mcpFrom a clone
Faster to start, and the right setup for contributing or for pointing at a local copy of the site:
git clone https://github.com/Lilly-Tech-Collab/ai-school-mcp.git
cd ai-school-mcp
npm install
npm test # smoke-tests the handshake, tools and a live API callclaude mcp add ai-school -- node "$PWD/server.js"Set AI_SCHOOL_SITE to point the server at a different host; it defaults to
https://lillytechsystems.com.
The server reads the public static curriculum API at
https://lillytechsystems.com/ai-school/api/v1/, which is a set of JSON files
on the same host as the site. Nothing is authenticated and nothing is written.
Related MCP server: docrag
Tools
Tool | What it does |
| Search lesson titles across the whole curriculum. Returns titles and URLs. |
| List course tracks, optionally filtered. |
| One track with its full lesson list, so you can see a course's structure. |
| Fetch a lesson's full text as readable markdown-ish output. |
Resources
URI | Contents |
| Counts, licence terms, endpoint list. |
| Every track with lesson counts. |
Notes
read_lessononly fetcheslillytechsystems.com. A "read this URL" tool that accepts arbitrary hosts is an SSRF primitive handed to whoever wrote the prompt, so the host check is deliberate and should stay.Search is title-only and deliberately simple. The full-text index is 4 MB and belongs in the browser, not in an MCP round trip; if title matching does not find it,
list_tracksthenget_trackusually will.The catalogue is cached per process. A long-running client fetches it once. Restart the server to pick up newly published lessons.
Content licence. Lessons are free to read, link to and quote with attribution. Republishing whole lessons is not permitted. The metadata (titles, descriptions, URLs) may be used freely with attribution. See
aischool://catalogue.
Local development
npm run inspect # opens the MCP Inspector against this serverThe server writes only to stderr; stdout is the protocol channel.
Available Tools
4 toolsget_trackAInspect
Get one track with its full lesson list, so you can see the structure of a course and pick the right lesson to read.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Track slug, e.g. "rag" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the tool returns a track with its full lesson list, making the read-only nature clear. However, it lacks additional behavioral context such as error cases, permissions, or any restrictions, leaving some expectations implicit.
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?
A single, front-loaded sentence that efficiently states the action, resource, and purpose without unnecessary detail. Every word contributes to understanding the tool's function.
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?
Despite lacking an output schema, the description explains what the returned data includes (track + full lesson list) and provides a concrete reason to use the tool. This is sufficient for an agent to decide when to call it and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the single required parameter 'slug' with a clear example ('rag'). The description adds no extra parameter meaning, but since schema coverage is 100%, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves one track with its full lesson list, distinguishing it from list_tracks (listing all tracks) and read_lesson (reading a single lesson). The verb 'Get' plus the resource 'track' makes the purpose 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 a clear use case: to see the structure of a course and pick the right lesson to read. It does not explicitly mention when not to use it or name alternatives, but the context of siblings and the stated purpose imply when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tracksAInspect
List AI School course tracks, optionally filtered by a substring of the title or slug. Each track is a structured course on one subject. Use this to find the right course before drilling into its lessons.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 40) | |
| filter | No | Optional substring filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses the substring filtering behavior on title or slug, which is not fully in the schema. It also clarifies the nature of tracks (structured courses on one subject). It does not mention pagination or output format, but this is a simple read-only list operation, and the core behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose, followed by a brief explanation and a usage hint. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with no output schema and no annotations, the description provides the essential context: what the tool lists, how filtering works, what a track is, and when to use it. It does not detail return fields, but for a list endpoint that is commonly understood. The description is complete enough for effective tool selection and 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 coverage is 100%, so baseline is 3. The description adds meaning to the 'filter' parameter by specifying it matches substring of title or slug, which the schema only calls 'Optional substring filter.' This extra semantic context improves parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List...course tracks') and specifies the resource ('AI School course tracks'). It distinguishes from siblings by noting that tracks are structured courses and by positioning this as the discovery step before drilling into lessons, which separates it from get_track and read_lesson.
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 explicit usage context: 'Use this to find the right course before drilling into its lessons.' This implies when to use it relative to lesson-related tools, though it doesn't explicitly state alternatives or when not to use it. The guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_lessonAInspect
Fetch the full text of a lesson by its URL (as returned by search_lessons or get_track). Returns readable markdown-ish text with headings and code blocks.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Lesson URL on lillytechsystems.com |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior, and it does mention the return format ('readable markdown-ish text with headings and code blocks'). However, it omits error behavior, such as what happens if the URL is invalid or not found, leaving a gap in transparency.
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 main purpose, and contains no filler. Every word contributes to understanding the tool's function and output.
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 read-only tool with one parameter and no output schema, the description covers the core purpose, input, and output format. It is complete enough for an agent to use correctly, though it could briefly mention error handling for a fully comprehensive picture.
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 already describes the 'url' parameter, but the description adds that the URL must be 'as returned by search_lessons or get_track', clarifying its provenance and format. This extra context goes beyond the schema's basic field description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch the full text of a lesson') and the required input (URL from search_lessons or get_track). This distinguishes it from sibling tools that search or list tracks, making its purpose 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 implies a prerequisite: the URL must come from search_lessons or get_track. This gives clear context on how to obtain the URL, though it does not explicitly state when not to use the tool or mention alternatives for finding lessons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_lessonsAInspect
Search the AI School curriculum (500+ tracks, thousands of free lessons on AI engineering, governance, security, and applied AI by profession). Returns matching lesson titles and URLs. Use this before answering an AI-topic question when a concrete, citable lesson would help, then read_lesson to get the text.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10, max 50) | |
| query | Yes | Words to search for, e.g. "prompt injection defence" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It communicates that this is a read-only search operation by stating it returns matching lesson titles and URLs, and it scopes the corpus (500+ tracks, free lessons). It does not explicitly state 'no side effects' or edge-case behavior, but the wording implies a safe, non-mutating lookup.
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 with no wasted words. The first sentence front-loads the purpose and output; the second provides concrete usage guidance and a natural handoff to read_lesson.
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 description covers the tool's scope, return format, and when to use it, which is sufficient for a simple search tool. It does not describe result count/ordering, but the limit parameter is already in the schema and no output schema is present, so this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with query and limit already described. The description does not add extra meaning beyond the schema; it only restates that it returns matching results. This matches the baseline of 3 for high schema-description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches the AI School curriculum and returns matching lesson titles and URLs. The verb 'Search' plus the resource scope distinguishes it from sibling tools like list_tracks, get_track, and read_lesson.
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 explicitly says to use this tool before answering an AI-topic question when a concrete, citable lesson would help, and that read_lesson should follow to get the text. It lacks explicit when-not-to-use or alternative exclusions, 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v1.0.0- First observed
get_track - First observed
list_tracks - First observed
read_lesson - First observed
search_lessons
TDQS
Each tool serves a distinct purpose: search (search_lessons), list (list_tracks), detail (get_track), and content retrieval (read_lesson). Overlap is minimal and clearly resolved by descriptions.
All tool names follow a consistent verb_noun pattern in snake_case: search_lessons, list_tracks, get_track, read_lesson. No mixing of styles or ambiguous verbs.
Four tools perfectly cover the browsing and content-retrieval workflow without redundancy. The count is well-scoped for the domain.
The tool surface covers discovery (search, list), navigation (track details), and consumption (read lesson). No significant gaps for the curriculum-browsing use case.
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
Search AI capabilities across AWS Marketplace and the Official MCP Registry.
AgencyAI's public MCP for service discovery and AI-readiness assessment.
Search, browse & read 340+ Claude Code marketing & SEO skills from any MCP client.
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceTransforms documentation repositories into interactive educational content and provides standardized access to AI-generated structured courses through MCP protocol. Generates multi-complexity learning paths from docs and enables AI tutoring applications to interact with course content.-
- AlicenseNot gradedqualityDmaintenanceProvides RAG (Retrieval Augmented Generation) access to technical documentation through MCP, enabling LLMs to search and retrieve relevant documentation on-demand.4MIT
- AlicenseNot gradedqualityDmaintenanceMCP server to query Cloud Champion's training catalog. Enables AI agents to search, filter, and get statistics about Microsoft partner resources like webinars, videos, learning paths, and podcasts.MIT
- FlicenseAqualityCmaintenanceEnables MCP clients to retrieve authoritative AI Square documentation, API references, SDK examples, guides, and troubleshooting information through citation-safe hybrid search and static resources.11-
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/Lilly-Tech-Collab/ai-school-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server