Epivo Course Catalog
Server Details
Read-only access to Epivo's live course catalogue for AI agents.
- Status
- Healthy
- Uptime
- 48.9% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 3 tools
get_catalog_stats is clearly distinct as aggregate counts. list_courses and get_course_detail both return course collections, which creates mild ambiguity, but the descriptions clarify that one is the full catalog grouped by source and the other is scoped to a single curriculum source.
All names use snake_case and a verb_noun structure, but the verb choices are slightly inconsistent: list_courses uses 'list' while get_course_detail and get_catalog_stats use 'get'. This is a minor deviation rather than a chaotic pattern.
Three tools is well-scoped for a read-only course catalog server: stats, list, and detail. Each tool has a clear purpose and none feel redundant.
The read-only catalog surface is reasonably complete with aggregate stats, a filterable course list, and per-curriculum-source detail. A possible gap is lack of a direct single-course detail lookup by course ID, but the provided tools cover the main public API use cases.
Available Tools
3 toolsget_catalog_statsAInspect
Get aggregate catalogue counts (courses, curricula, languages, knowledge components).
Returns the same shape as GET /api/v1/public/stats.
| 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 disclosure burden. It transparently states what is counted and references the exact response shape of GET /api/v1/public/stats. This is clearly a read-only query, and no hidden side effects are implied.
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 short sentences. The first sentence delivers the purpose and object types; the second adds return-shape context. There is no filler, repetition, or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, low-complexity stats tool, the description fully covers what it returns and the response shape. The sibling tools are straightforward, so an agent has enough information to select and invoke this 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?
The tool has zero parameters, so there is no parameter documentation gap. The rubric's baseline for a 0-parameter tool is 4, and the description needs to add nothing further about parameter meaning.
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 starts with a specific verb and resource: 'Get aggregate catalogue counts' and enumerates the counted items (courses, curricula, languages, knowledge components). This clearly distinguishes it from the sibling tools list_courses and get_course_detail, which focus on individual or listed 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 makes clear that this is the aggregate stats tool, not a list or detail tool. It does not explicitly name alternatives or say when not to use it, but the contrast with the sibling names and the aggregate wording gives sufficient contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_course_detailAInspect
Get the individual courses within one curriculum source.
Args:
slug: the curriculum source's slug, as returned by list_courses.
Returns the same shape as GET /api/v1/public/courses-detail/<slug>.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral disclosure burden. It explicitly reveals the return shape by referencing the exact GET endpoint, which is useful behavioral context. It does not discuss error cases or side effects, but for a simple public read-detail tool this is sufficient.
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 compact and well-structured, with clear sections for purpose, arguments, and return value. It front-loads the core purpose and contains no filler or redundant restatements of the tool name.
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 read tool, the description covers what the tool does, how to obtain the required slug, and what the response will look like via an endpoint reference. Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only defines slug as a string, giving no explanatory coverage. The description compensates by specifying that slug is the curriculum source's slug and where to obtain it, i.e., from list_courses. This fully clarifies the parameter's meaning and provenance.
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 begins with a specific verb ('Get') and a precise object ('individual courses within one curriculum source'). The reference to list_courses also situates it among siblings, making it clear this tool is not for listing sources like list_courses or computing catalog stats.
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 states that the slug comes 'as returned by list_courses', establishing a clear prerequisite and workflow ordering. It does not explicitly name when-not-to-use alternatives, but the scope is clear enough for an agent to distinguish when this detail tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_coursesAInspect
List Epivo's public course catalogue, grouped by curriculum source.
Args:
audience: optional filter, "k12" or "adult".
language: optional filter, e.g. "English", "Swedish", "Greek", "Arabic"
(display name, matching the "language" field of each result).
Returns the same shape as GET /api/v1/public/courses -- no fields are
added or removed, since this tool applies the filters to the response of
that endpoint rather than deriving its own query.
| Name | Required | Description | Default |
|---|---|---|---|
| audience | No | ||
| language | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses that results are grouped by curriculum source, that the return shape exactly matches GET /api/v1/public/courses, that no fields are added or removed, and that filters are applied to that endpoint's response rather than deriving a custom query. This gives meaningful insight into how the tool behaves, though it stops short of discussing pagination, sorting, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well organized: a one-line purpose, a concise Args list, and a short Returns paragraph. Every sentence adds information, and the most important purpose statement is front-loaded. Slightly verbose with the endpoint comparison, but the detail is relevant for understanding response behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only two optional parameters, no annotations, and no output schema, the description covers the essential information: what the tool lists, how grouping works, what filters do, and the exact response contract via the referenced endpoint. The main gap is that it does not describe the actual fields returned by GET /api/v1/public/courses, so an agent may still need to discover the shape elsewhere. Otherwise it is largely complete for a simple public list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so by explaining audience as an optional filter with values 'k12' or 'adult' and language as an optional filter matching the display name of the 'language' field, with examples. This adds real meaning beyond the bare schema (string/null + name). It could be even stronger by indicating case sensitivity or exact-match behavior, but it is already quite helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List Epivo's public course catalogue, grouped by curriculum source.' This clearly states the operation and is distinct from the sibling tools get_catalog_stats and get_course_detail, which focus on statistics and individual course details rather than the full catalogue listing.
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 when to use the tool—whenever the full public course catalogue is needed—and provides filter parameters for narrowing results. However, it never explicitly contrasts itself with get_catalog_stats or get_course_detail, nor does it state conditions such as 'use this for browsing, use get_course_detail for a single course.' Usage guidance is present but only implicit.
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.
3 tool updates
- First observed
get_catalog_stats - First observed
get_course_detail - First observed
list_courses
Related MCP Connectors
Read-only US golf course, scorecard, equipment, deal, and golf-trip data for AI agents.
Public read-only discovery of agent, model, training, task, and verification opportunities.
Read and author HiveLearn courses, events, quizzes, certificates, resources, leaderboards, tracks.
- HAVNOAuthapp.havnre
Read-only AI access to HAVN properties, leads, tasks, files, media, and analytics.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables querying a local course catalog to list available courses and retrieve detailed records by course ID.-
- FlicenseNot gradedqualityBmaintenanceEnables a study assistant to explain topics, build study plans, and generate revision checklists, with read-only access to course outline and status resources.-
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search and retrieve French job profiles, RNCP certifications, training programs, training centers, and skills comparisons in read-only mode without requiring an account.MIT
- FlicenseNot gradedqualityNot gradedmaintenanceProvides AI agents with tools to navigate, search, and manage a hierarchical knowledge base of themes, skills, and learning resources with tenant-aware JWT authentication.-
Glama MCP Gateway
Add one secure layer between your agents and this server.