Skip to main content
Glama

Server Details

Live Academy learning and search. OAuth adds scoped personal tools. Explicit --offline snapshot.

Ownership verified
Status
Healthy
Uptime
1.4% over 76 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
studiomeyer-io/mcp-academy
GitHub Stars
1
Server Listing
mcp-academy
ChatGPT
–
Claude
–

TDQS

C2.6/5.0

Scored across 29 tools

Disambiguation2/5

Multiple tool pairs are functionally indistinguishable except for a deprecation note: academy_lessons/academy_legacy_lessons, academy_levels/academy_legacy_levels, academy_start/academy_welcome, academy_teach/academy_tutor_context, and academy_search/search. academy_glossary, academy_concepts, and academy_glossary_term also overlap heavily, and fetch duplicates academy_lesson. The 'deprecated' labels help, but an agent still has to reason about which twin to call, and several descriptions repeat verbatim.

Naming Consistency3/5

Most tools follow a snake_case academy_* prefix with a readable singular=read / plural=list convention (academy_lesson vs academy_lessons, academy_path vs academy_paths). However, unprefixed generic names fetch and search break the namespace, and several 'read' tools drop any verb (academy_lesson, academy_module, academy_path) while others use an imperative (academy_suggest, academy_search). The 'legacy_' infix further muddies the pattern.

Tool Count2/5

29 tools is heavy for a public content-browsing academy, and roughly six of them are explicitly deprecated aliases retained for one version, inflating the surface to ~35 effective choices. The core domain (paths, modules, lessons, library, recipes, playbooks, prompts, glossary) could be covered by well under 20 tools. Duplicated pairs like start/welcome and search/academy_search add count without adding capability.

Completeness3/5

The read-only public surface is broad: paths, modules, lessons, library, recipes, playbooks, prompts, glossary, search, suggestions, and a premium catalog/preview pair. Gaps remain in learning lifecycle operations — no progress tracking, no lesson completion or exercise submission, and premiumCatalog/premiumPreview have no accompanying purchase or entitlement tool. Deprecated alias duplication also wastes surface that could serve missing operations.

Available Tools

29 tools
academy_coachingC
Read-onlyIdempotent
Inspect

Read the coaching entry point without unconfirmed prices or durations.

NameRequiredDescriptionDefault
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and closed-world, so the safety profile is covered structurally. The description adds one genuinely new behavioral fact: the response deliberately omits unconfirmed prices and durations. That is useful but thin for a tool whose content is otherwise undefined.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the verb and the key content caveat front-loaded; there is no filler. It is efficient rather than padded, though the brevity shades into under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, but the description still leaves the agent unable to tell this read apart from academy_start, academy_welcome, or academy_tutor_context. For a zero-required-parameter entry-point tool in a crowded academy namespace, that distinction is the missing piece and it is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (locale, idempotencyKey) are fully described as transport-level concerns in the schema itself. The description contributes nothing about parameters, so the baseline of 3 applies rather than anything higher.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a verb ('Read') and a nominal resource ('the coaching entry point'), so it is not a tautology of the name. However, 'coaching entry point' is ambiguous and is not distinguished from near-neighbours like academy_start, academy_welcome, academy_teach, or academy_tutor_context, leaving the agent to guess which entry point this is.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this versus the many sibling tools, no prerequisites, and no exclusions. The only implicit guidance is the hint that prices and durations are filtered out, which implies a pre-purchase context but never says so.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_conceptsC
Read-onlyIdempotent
Inspect

Browse and search public concepts.

NameRequiredDescriptionDefault
limitNo
queryNo
cursorNo
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description adds only the word 'public', with no disclosure of pagination behavior, result ordering, or what 'public' excludes — minimal added value beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single six-word sentence with no filler and the purpose front-loaded, which is structurally clean. However, the brevity crosses into under-specification given five parameters and a large sibling set.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be explained, but the description leaves the three undocumented parameters, the browse-vs-search distinction, and the tool's relationship to academy_search and academy_glossary unaddressed. For a zero-required-param listing tool with paging, this is not enough to invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%: locale and idempotencyKey are documented in the schema, but limit, query, and cursor have no description anywhere. The tool description never mentions any parameter, so it does not compensate for the gap — notably the cursor/limit pagination contract and the query syntax are entirely unspecified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb pair 'Browse and search' plus the resource 'public concepts' gives a workable gist, but 'concepts' is undefined against a crowded sibling set containing academy_glossary, academy_glossary_term, academy_search, and academy_library. Nothing in the sentence tells an agent which of those holds concept data versus glossary terms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool rather than academy_search, academy_glossary, or academy_suggest, and no indication of when to browse (cursor paging) versus search (query). The agent must infer the distinction from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_glossaryC
Read-onlyIdempotent
Inspect

Browse safe public glossary concepts.

NameRequiredDescriptionDefault
limitNo
cursorNo
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=false, so the safety profile is fully covered structurally. The description adds only the fuzzy qualifier "safe public" and says nothing about pagination behavior (limit/cursor), locale handling, or result ordering — context an agent browsing a catalog would actually need.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single efficient sentence with zero filler, which is structurally sound. But the terseness crosses into under-specification — the one sentence carries no operational detail an agent could act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. Still, for a paginated browse tool with four parameters and a locale enum, the description omits how paging works, what "public" excludes, and how it relates to academy_glossary_term — leaving the definition incomplete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: locale and idempotencyKey are documented in the schema, but limit and cursor have no descriptions anywhere. The description contributes no parameter meaning at all, so it fails to compensate for the uncovered pagination parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a verb ("Browse") and a resource ("glossary concepts"), so the basic operation is inferable. However, "safe public" is vague marketing language, and nothing distinguishes it from siblings like academy_glossary_term or academy_concepts, leaving the agent to guess which is the list vs. the detail view.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of alternatives, and no exclusions. The agent is not told to use this for listing terms versus academy_glossary_term for fetching a single one, even though both exist in the sibling set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_glossary_termB
Read-onlyIdempotent
Inspect

Read a public glossary term without internal recipe references.

NameRequiredDescriptionDefault
termYes
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds one real behavioral fact — results are the public projection, stripped of internal recipe references — but says nothing about missing-term behavior or how locale affects the lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with zero filler and the distinguishing qualifier placed immediately after the verb. It is efficient, though so terse that it borders on under-specification rather than tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values are covered, and annotations handle safety. What remains unaddressed is meaningful for a 3-parameter lookup tool: what 'public' excludes relative to the premium/recipe siblings, and whether a missing term is an error or an empty result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 67% schema coverage and clear schema descriptions for locale ('transport locale; not a service input field') and idempotencyKey, the schema does most of the work. The description adds no meaning to 'term' itself — no format, case-sensitivity, or how the pattern constraint relates to lookup.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read a public glossary term') plus a scope qualifier that separates it from internal/recipe-facing data. It does not name the closest sibling (academy_glossary, presumably the listing version), so an agent still has to infer the singular-vs-collection split.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'public glossary term without internal recipe references' implies the lookup case and hints the tool omits non-public content, but it never says when to prefer this over academy_glossary, academy_recipe, or academy_search, nor what to do if the term is unknown.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_legacy_lessonsA
Read-onlyIdempotent
Inspect

Deprecated compatibility listing of original lessons in one numbered level.

NameRequiredDescriptionDefault
levelYes
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=false, so safety behavior is covered. The description adds the genuinely useful fact that this is a deprecated compatibility shim, but says nothing about whether output matches the current lessons endpoint or what "original" excludes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact phrase with the most decision-relevant token ("Deprecated") front-loaded and no filler. It is arguably over-compressed, stacking legacy/compatibility/original/level into one clause at some cost in readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and parameters are largely documented in the schema. For a deprecated read-only listing the description covers the essentials: what it returns, its scope, and its lifecycle status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%; locale and idempotencyKey already carry their own descriptions and are explicitly marked transport-only. The description confirms the level filter ("one numbered level") but adds no detail on the 1–6 range or on how level maps to the legacy numbering. Baseline 3 fits where the schema does most of the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Deprecated compatibility listing of original lessons in one numbered level" names a concrete resource (lessons) and scope (a single numbered level), plus the key status marker "deprecated." It does not name or distinguish itself from the near-identical sibling academy_lessons, so an agent must still infer which listing to prefer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Deprecated compatibility" implies a when-not-to-use signal and hints that a current alternative exists, but the description never names that alternative (academy_lessons, academy_legacy_levels) or states under what conditions this tool is still correct to call. Usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_legacy_levelsA
Read-onlyIdempotent
Inspect

Deprecated compatibility view of original numbered content levels; use paths for current learning paths.

NameRequiredDescriptionDefault
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so safety is covered. The description adds the non-obvious fact that the data is a deprecated compatibility layer rather than the canonical source, which is real behavioral context an agent would otherwise miss.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with zero waste, front-loading the deprecation warning and following with the alternative in one clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, full annotations and complete parameter documentation, the only missing piece was deprecation status and the redirect to current paths, both of which are supplied. Nothing material is absent for a zero-required-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (locale, idempotencyKey) are transport-level fields fully documented in the schema. The description adds nothing beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific resource ('original numbered content levels') and its status as a deprecated compatibility view, which is more than a restatement of the name. It does not name a retrieval verb explicitly, but 'view' implies read access and the sibling differentiation is present.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the alternative explicitly ('use paths for current learning paths') and signals the deprecated/legacy condition that selects against this tool. The exclusions are clear, though it does not spell out any positive scenario in which this tool should still be called.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_lessonB
Read-onlyIdempotent
Inspect

Read a public lesson using its unambiguous level and slug.

NameRequiredDescriptionDefault
slugYes
levelYes
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so safety behavior is well covered. The description adds that the lesson is public and that level and slug together identify it unambiguously, but does not describe errors, access restrictions, or other behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted wording. It immediately conveys the operation and the identifier method.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has rich annotations and an output schema, so return values and safety do not need to be described. However, the description is still thin on sibling differentiation and level semantics, which an agent needs in order to select and call the tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, with slug and level lacking descriptive documentation in the schema. The description mentions both required parameters but adds little meaning beyond the schema constraints, and it does not explain what level values represent or how locale/idempotencyKey behave beyond their existing schema notes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: read a public lesson. It also identifies the key lookup method, level plus slug. It does not explicitly distinguish itself from sibling tools such as academy_lessons or academy_legacy_lessons, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies retrieval by level and slug, but gives no explicit guidance on when to use this tool instead of academy_lessons, academy_legacy_lessons, academy_search, or premium-related siblings. The word 'public' hints at scope, but the alternatives and exclusions are left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_lessonsA
Read-onlyIdempotent
Inspect

Deprecated compatibility listing of original lessons in one numbered level. (Deprecated alias for academy_legacy_lessons; retained for one version.)

NameRequiredDescriptionDefault
levelNo
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description's genuine addition is lifecycle information (deprecation, one-version retention); it says nothing about what happens when level is omitted or how results are bounded.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, deprecation status front-loaded, zero filler. The size is proportionate to a deprecated compatibility shim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the tool is a read-only listing. However, optionality of level and the normalization/validation behavior mentioned only in the schema description leave the description a step short for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: locale and idempotencyKey are documented as transport-only fields in the schema itself. The description's "one numbered level" gives the level parameter meaning, but it never addresses that level is optional (all levels? default level?) — the one semantic gap an agent would actually hit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete scope ("listing of original lessons in one numbered level") and immediately identifies itself as a deprecated alias of the sibling academy_legacy_lessons, so an agent can place it against academy_lesson/academy_levels. It stops short of a crisp verb+resource framing because "listing" is nominalized and the deprecation notice overshadows what it actually returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly signals the preferred alternative by naming academy_legacy_lessons and warning that this shim is "retained for one version," which is usable routing guidance. It does not say positively when this tool is still the right call (i.e., legacy clients pinned to the old name).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_levelsA
Read-onlyIdempotent
Inspect

Deprecated compatibility view of original numbered content levels; use paths for current learning paths. (Deprecated alias for academy_legacy_levels; retained for one version.)

NameRequiredDescriptionDefault
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly/idempotent/non-destructive, and the description adds the crucial lifecycle fact that this is deprecated and 'retained for one version'. It doesn't say what deprecation means at runtime (warnings, empty results), but the sunset horizon is the key context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly packed sentences: the deprecation status and the redirect to paths come first, with no filler. Every clause carries decision-relevant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter deprecated alias with full annotations and an output schema, the description covers everything an agent needs: what it is, that it's going away, and where to go instead.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters (locale, idempotencyKey) are documented as transport-level fields, so the description carries no burden here. It adds no meaning beyond the schema, which is the expected baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Identifies the resource ('original numbered content levels') and its status as a deprecated compatibility view, and explicitly contrasts it with 'paths for current learning paths'. It falls short of a crisp verb+resource statement (the actual operation — list vs. fetch — is only implied), but an agent can still distinguish it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit directive: don't use this, use paths for current learning paths, and names academy_legacy_levels as the canonical tool it aliases. Both the when-not and the alternative are stated outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_libraryB
Read-onlyIdempotent
Inspect

Browse public library metadata, filtered by type and access.

NameRequiredDescriptionDefault
typeNo
limitNo
accessNo
cursorNo
localeNoMCP transport locale; not a service input field.de
pathIdNo
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description adds only that the catalog is public metadata; it omits pagination/cursor behavior and the meaning of the transport-only params, which matter for a browse operation that could return a large catalog.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with zero waste, front-loading the verb and resource. It is arguably over-compressed for a 7-parameter tool, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, but for a filterable, paginated catalog browse the description leaves cursor pagination, page size defaults, and the pathId dimension entirely unexplained. Given 7 parameters and low schema coverage, this is insufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 29% across 7 parameters, so the description must compensate. It mentions only 'type' and 'access' filtering and says nothing about limit, cursor pagination, pathId, or the transport-only locale/idempotencyKey fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Browse public library metadata') plus the filtering dimensions ('type and access'), which is clear on its own. It implicitly contrasts with the many single-item siblings (academy_prompt, academy_playbook) and the search sibling, but never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Browse' versus the sibling 'academy_search' hints at enumeration-style usage, and 'public' hints at excluding the premium siblings, but neither condition is stated. No when-not guidance or prerequisite is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_moduleB
Read-onlyIdempotent
Inspect

Read an existing module and its ordered published content; technical content containers are labelled.

NameRequiredDescriptionDefault
localeNoMCP transport locale; not a service input field.de
pathIdYes
moduleIdYes
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that: content is returned in published order and technical containers are labelled. It does not discuss pagination or what happens for unpublished/missing modules.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single 12-word sentence with the primary action front-loaded and no filler. The trailing clause about labelled technical containers is slightly opaque but does carry information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be explained, and annotations cover safety. What remains thin is routing guidance among the many academy siblings and the meaning of the two required identifiers, which leaves the definition adequate but not fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: locale and idempotencyKey are self-documented, but pathId and moduleId carry no descriptions, only enums and a pattern. The description mentions no parameters at all, so it does nothing to compensate for the undocumented required inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (read) and resource (module) plus what is returned: its ordered published content. It is distinguishable from content-fetching siblings like academy_lesson or academy_path, though it stops short of clarifying the module-vs-lesson-vs-level hierarchy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no exclusion against any of the two dozen academy_* siblings. An agent must infer that this is the module-level read versus academy_lesson or academy_paths, with nothing in the description to confirm that choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_pathB
Read-onlyIdempotent
Inspect

Read the current learning path, ordered steps and explicit module mapping status.

NameRequiredDescriptionDefault
localeNoMCP transport locale; not a service input field.de
pathIdYes
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so safety is covered. The description adds that the response includes ordered steps and module mapping status, which is useful, but says nothing about errors for unknown pathIds or how locale/idempotencyKey affect behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no filler. It is efficient, though the final clause about module mapping status is dense enough to need unpacking.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. However, for a required enum-keyed parameter the description gives no guidance about which pathId to choose or how locale interacts, leaving a modest gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, with locale and idempotencyKey documented in-schema; only pathId (enum of four slugs) lacks any schema description. The description does not explain pathId options or what a 'current' path means, so it adds nothing beyond the schema, warranting the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb (read) and resource (learning path) plus the payload contents: ordered steps and module mapping status. This distinguishes it from the sibling academy_paths, which lists paths, though 'explicit module mapping status' is somewhat jargon-heavy.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'current learning path' suggests retrieving one path by its pathId, as opposed to academy_paths for listing. No explicit when-to-use, when-not, or named alternatives (academy_module, academy_levels) are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_pathsB
Read-onlyIdempotent
Inspect

List the four learning paths with confirmed original references.

NameRequiredDescriptionDefault
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds the notion of a curated set ('confirmed original references'), hinting at filtering, but never explains what that means or how many/why four.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no padding. Slight loss because the trailing qualifier is ambiguous rather than informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema handles return values and annotations handle safety, so the remaining burden is small. Still, the description leaves the agent unsure what makes a reference 'confirmed original' and how this listing relates to academy_path.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (locale, idempotencyKey) are explicit transport-level fields documented in the schema, so baseline 3 applies. The description adds nothing about parameters, which is acceptable here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('learning paths'), which distinguishes it from academy_path (singular detail) and academy_levels. The qualifier 'with confirmed original references' is unexplained jargon, but the core action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to call this versus academy_path, academy_levels, or academy_start. It implies a catalog/overview listing, but the agent must infer that from sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_playbookB
Read-onlyIdempotent
Inspect

Read an existing public playbook.

NameRequiredDescriptionDefault
idYes
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety behavior is covered. The description adds only that the playbook must exist and be public; it says nothing about authorization, not-found behavior, or response shape. A 3 is appropriate because the annotations carry most of the behavioral burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no wasted words, and the core action is front-loaded. It is appropriately terse for a simple read-by-ID tool, though it could have added the list-vs-single routing hint in the same breath.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and annotations cover safety. However, the description omits the distinction from academy_playbooks and does not clarify what the required id refers to. For a simple retrieval tool this is minimally adequate but leaves clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, with locale and idempotencyKey documented as transport fields but the required id parameter lacking a description beyond its pattern. The tool description adds no further meaning about the id format or locale selection. Baseline 3 reflects that the schema does most of the work while the primary identifier remains semantically thin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Read' an 'existing public playbook.' This distinguishes it from write operations and implies the plural sibling academy_playbooks is for listing, though the description never names that alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives no explicit guidance on when to use this tool versus academy_playbooks or academy_search. The reader can infer it retrieves a single playbook by ID, but there are no stated preconditions, exclusions, or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_playbooksB
Read-onlyIdempotent
Inspect

List existing public playbooks, optionally filtered by their actual category.

NameRequiredDescriptionDefault
limitNo
cursorNo
localeNoMCP transport locale; not a service input field.de
categoryNo
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description contributes only the "public" visibility scope; it says nothing about pagination behavior despite limit/cursor parameters, nor about locale affecting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the resource and filter stated up front and no filler. It is efficient, though its brevity comes partly at the cost of the missing pagination and locale context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. However, for a 5-parameter tool with 40% schema coverage, the description leaves pagination, the locale default of "de", and the meaning of "actual category" unexplained, which is not enough for an agent to call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 40%: only locale and idempotencyKey carry schema descriptions, while limit, cursor, and category are undocumented. The description mentions the category filter but adds no semantics for it ("actual category" is ambiguous), and it does not explain limit/cursor pagination at all, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List existing public playbooks") plus a scope qualifier (public) and an optional filter (category). The plural form implicitly separates it from the singular academy_playbook sibling, but no sibling is named, so differentiation is inference-based rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Optionally filtered by their actual category" implies a browse-or-filter usage pattern, but there is no statement of when to prefer this over academy_search, academy_playbook, or academy_paths. The agent must infer the browsing scenario from the plural resource name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_premium_catalogC
Read-onlyIdempotent
Inspect

premiumCatalog: Academy commerce operation.

NameRequiredDescriptionDefault
limitNo
cursorNo
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

C2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered structurally, but the description contributes nothing further. It does not explain pagination behavior, locale effects, or how idempotencyKey is used on a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is short, but shortness here reflects under-specification rather than conciseness. A single redundant fragment front-loads a restated name instead of the operation's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With four parameters, a paginated read shape, and an output schema, the definition should at minimum state that this returns a paginated premium catalog. Instead it offers a four-word label, leaving the agent unable to predict results or pagination.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%: limit and cursor are undocumented, while locale and idempotencyKey have schema descriptions. The description compensates for none of this gap, saying nothing about page size, cursor semantics, or locale selection.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

"premiumCatalog: Academy commerce operation" restates the tool name and adds only the vague label "commerce operation." It never says whether this lists premium products, retrieves pricing, or performs a purchase, and it does not distinguish it from siblings like academy_premium_preview or academy_library.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusion of alternatives, and no mention of the obvious sibling academy_premium_preview. The agent is left to guess the relationship between the catalog and preview tools entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_premium_previewD
Read-onlyIdempotent
Inspect

premiumPreview: Academy commerce operation.

NameRequiredDescriptionDefault
idYes
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

D1.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that — no note on what is previewed, whether it reflects live or cached commerce data, or any side effects. No contradiction, but zero added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is short with no filler, but that is under-specification rather than conciseness. The single fragment carries no actionable information an agent could front-load.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be explained, and annotations cover safety. However, for a commerce/preview operation with a required identifier and an adjacent catalog sibling, the description omits what is being previewed and how it differs from the catalog tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: locale and idempotencyKey are documented as transport fields, but the required `id` parameter has only a pattern and maxLength with no description of what entity it identifies. The description does nothing to fill that gap, leaving the most important parameter semantically opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

"premiumPreview: Academy commerce operation" restates the tool name and appends a vague domain label. There is no verb describing what happens (preview what? a price? a product? an offer?) and no differentiation from the sibling academy_premium_catalog.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to call this versus academy_premium_catalog or any other sibling. The agent is left to guess the selection criteria entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_promptA
Read-onlyIdempotent
Inspect

Read an approved public prompt by identifier.

NameRequiredDescriptionDefault
idYes
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the useful constraint that only approved public prompts are readable, but says nothing about not-found behavior, auth requirements, or rate limits beyond that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. Every word contributes: verb, resource, qualifier, and selection mechanism.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and rich annotations already present, this simple read tool does not need much more prose. The description is sufficient for correct invocation, though it could note the approved/public failure mode to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, with id constraints, a locale enum, and an idempotencyKey description already documented structurally. The description reinforces that the operation is driven by the identifier but adds no meaning about locale or retry-key semantics, so it does not materially improve parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb and resource: 'Read an approved public prompt by identifier.' This tells an agent it retrieves a single prompt, which is distinguishable from the likely list-oriented sibling academy_prompts, though it does not explicitly name or contrast that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'By identifier' implies you need a known ID and that this is a lookup rather than a discovery call, but the description never states when to prefer this over academy_prompts or academy_search, nor what to do when the prompt is not approved or public.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_promptsB
Read-onlyIdempotent
Inspect

List approved prompts; an unpopulated catalog is empty.

NameRequiredDescriptionDefault
limitNo
cursorNo
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description adds one genuinely useful behavioral fact — that an empty result is a valid state rather than an error — but says nothing about pagination behavior, default/max page size, or filtering semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the primary action front-loaded and the caveat second. No filler, no repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and all parameters are optional. But for a paginated list tool the missing pieces — how to advance with cursor, what limit defaults to, whether results can be filtered by locale, and how it differs from academy_prompt — leave real gaps for an agent that must call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: limit and cursor carry no schema descriptions, and the description adds zero meaning for either. Cursor-based pagination is exactly the concept an agent needs explained, and the description is silent on it while consuming its one clause on the empty-case note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"List approved prompts" gives a specific verb (list) and a scoped resource (approved prompts), which is clearer than a bare name restatement. However, it never distinguishes itself from the singular sibling academy_prompt or from academy_search, which an agent must choose among in a 28-tool namespace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is "an unpopulated catalog is empty," which addresses result interpretation, not tool selection. There is no statement of when to call this versus academy_prompt (single fetch) or academy_search, and no mention of prerequisites such as authentication or catalog population.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_recipeA
Read-onlyIdempotent
Inspect

Read a public recipe; private recipes remain undiscoverable.

NameRequiredDescriptionDefault
idYes
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the description does not need to repeat that. It adds a meaningful access constraint by stating that only public recipes are readable and private recipes remain undiscoverable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. The key scope constraint is stated immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and annotations cover the safety profile, so return behavior and mutation risk need not be explained. The description covers public/private access but leaves the required id semantics and sibling alternatives implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%; the transport parameters are documented, but the required 'id' parameter has no schema description. The description only implies that 'id' identifies a public recipe, adding little beyond the schema pattern.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Read a public recipe') and clarifies that private recipes are excluded. It does not explicitly distinguish this single-recipe reader from the sibling list tool academy_recipes, but the scope is otherwise clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies usage for public recipes and warns that private recipes cannot be discovered, which is useful context. However, it does not name alternatives such as academy_recipes or academy_search or explain when to choose this tool over them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_recipesB
Read-onlyIdempotent
Inspect

List public free recipes, optionally filtered by their actual phase from 1 to 16.

NameRequiredDescriptionDefault
limitNo
phaseNo
cursorNo
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds the scope constraint ('public free') and phase range, but says nothing about pagination behavior for the 'cursor'/'limit' parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler that states resource, scope, and the one filter upfront.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and annotations cover safety. However, for a paginated list tool with a cursor the description omits any pagination guidance, leaving a notable gap given sub-50% parameter coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, so the description should compensate for the undocumented 'limit', 'phase', and 'cursor' parameters. It only restates 'phase from 1 to 16', which the schema already constrains via min/max, and says nothing about pagination or result sizing via limit/cursor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a clear verb+resource ('List public free recipes') and adds scoping ('public free') plus a filter dimension. It lets an agent distinguish a list operation from the singular 'academy_recipe' sibling implicitly, though it never names the sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use/when-not guidance and no mention of the 'academy_recipe' sibling that presumably fetches a single recipe. The only hint is that filtering by phase is optional, from which usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_startB
Read-onlyIdempotent
Inspect

Read the available learning paths and public starting links.

NameRequiredDescriptionDefault
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered without the description. The description adds only the implicit notion that this returns 'public' (unauthenticated) content, and says nothing about pagination, result size, or what a 'starting link' is.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler or repetition. It is arguably under-specified rather than padded, so it earns credit for economy but not top marks for usefulness-per-word.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering safety, the description does not need to explain return values or reversibility. What remains missing is routing context: why an agent should call this instead of academy_paths, academy_welcome, or academy_library, which is the main gap for a 28-sibling namespace.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema itself explains that both parameters (locale, idempotencyKey) are transport-level rather than service inputs. The description adds no parameter detail, but with a complete and self-explaining schema the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a concrete verb+resource pair ("Read the available learning paths and public starting links"), which is far more informative than the opaque name 'academy_start'. However, it does not distinguish itself from siblings like academy_paths, academy_path, or academy_welcome, so an agent must guess whether this is the entry-point aggregate or a duplicate of academy_paths.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool, when not to, or which sibling to prefer. The word "start" suggests an entry-point role, but the description never confirms that or points to alternatives such as academy_welcome or academy_paths.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_suggestC
Read-only
Inspect

Suggest matching library items with reasons; the supplied profile is never saved.

NameRequiredDescriptionDefault
localeNoMCP transport locale; not a service input field.de
profileYes
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful non-obvious context — the supplied profile is not persisted — which an agent could not infer from the annotations. It says nothing about matching quality, result size, or latency expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact clauses, front-loaded with the action and followed by the privacy caveat; no wasted words. It is arguably too terse rather than padded, but structurally sound.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, but for a tool taking a nested profile object in a family of 28 similarly named tools the description omits too much. It gives no sense of how suggestions differ from academy_search results, nor what makes the profile well-formed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single required parameter `profile` is a nested object whose sub-fields (goals, constraints, capabilities, environment) have no schema descriptions at all, and the description adds nothing about what belongs in them. Only the transport-level params (locale, idempotencyKey) are documented in the schema, so the semantically important parameter remains undefined.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Suggest matching library items") plus a differentiator ("with reasons"). However it never distinguishes itself from sibling tools like academy_search or academy_library, so an agent cannot tell from the description alone which retrieval entry point to use.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no named alternative among the ~28 academy_* siblings. The only conditional information is a privacy constraint ("never saved"), which is not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_teachC
Read-onlyIdempotent
Inspect

Read teaching steps drawn from the actual lesson headings and exercise.

NameRequiredDescriptionDefault
slugYes
levelYes
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already establish readOnlyHint, idempotentHint, non-destructive behavior, and a closed-world scope, and the description's "Read" is consistent with that safety profile. The description adds only that the content is derived from lesson headings and exercises; it does not disclose pagination, caching, authorization requirements, or whether a missing lesson produces an error.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler, so it is structurally efficient. It is arguably too terse for a four-parameter tool, but the text itself contains no wasted statements.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although an output schema exists, the description leaves major agent needs unaddressed: when to choose this tool over academy_lesson, what slug and level mean, and what kind of teaching steps are returned. For a tool in a dense sibling namespace with partial schema coverage, this is materially incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, and the two required parameters, slug and level, have no descriptions in the schema. The description does not mention either parameter, so it does not compensate for the missing semantics around what slug identifies or how level constrains the returned teaching steps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a verb ("Read") and an approximate resource ("teaching steps drawn from the actual lesson headings and exercise"), so an agent can infer the general intent. However, it does not clarify whether this tool fetches existing lesson content, generates a teaching sequence, or returns something else, nor does it distinguish itself from close siblings such as academy_lesson or academy_tutor_context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. With many sibling tools covering lessons, levels, and tutoring, an agent has no explicit signal about when academy_teach is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_tutor_contextA
Read-onlyIdempotent
Inspect

Read teaching steps drawn from the actual lesson headings and exercise. (Deprecated alias for academy_teach; retained for one version.)

NameRequiredDescriptionDefault
slugNo
levelNo
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so safety and side-effect behavior is fully covered structurally. The description's only genuine addition is lifecycle status — deprecated, survives one version — which is useful but thin; it says nothing about validation, normalization, or failure behavior beyond what the schema description carries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the functional summary first and the deprecation caveat immediately after. Nothing could be cut without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the annotation set covers safety. However, for a tool with 4 params at 50% description coverage, the definition leaves the meaning of slug and level unresolved and does not state whether this alias behaves identically to academy_teach.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: locale and idempotencyKey are documented in the schema as transport fields, while slug and level have no description anywhere. The tool description offers no compensating detail about what slug refers to (lesson path? module?) or how level 1-6 interacts with it, leaving two core parameters unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource ('Read teaching steps drawn from the actual lesson headings and exercise') and explicitly identifies itself as a deprecated alias of academy_teach, which distinguishes it from the roughly 28 siblings. It stops short of 5 only because the underlying subject matter ('teaching steps') stays somewhat abstract without reference to the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The deprecation note ('retained for one version') strongly signals that academy_teach is the preferred tool, which functions as routing guidance. It never explicitly says 'use academy_teach instead', so the agent must infer the switch rather than being told outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

academy_welcomeA
Read-onlyIdempotent
Inspect

Read the available learning paths and public starting links. (Deprecated alias for academy_start; retained for one version.)

NameRequiredDescriptionDefault
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is fully covered structurally. The description's added value is the deprecation lifecycle note, which annotations cannot express, but it says nothing about legacy field normalization or validation behavior that the schema hints at.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The one structural weakness is that the deprecation warning — the most decision-relevant fact — sits in parentheses after the functional description rather than being front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the tool takes no required parameters beyond transport fields. The deprecation status and replacement are stated, which is the key context an agent needs; only the legacy-normalization behavior is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (locale, idempotencyKey) are documented as transport-level fields, not service inputs. The description adds no parameter meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Read') plus resources ('learning paths and public starting links'), and it explicitly identifies itself as a deprecated alias for academy_start, which disambiguates it from the many sibling academy_* tools. It stops short of 5 because 'public starting links' is vague phrasing that an agent must interpret.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the preferred alternative (academy_start) and the condition under which this tool is superseded, plus the 'retained for one version' lifetime note. It does not say whether there is any remaining case where this tool is still correct to call, which keeps it out of 5 territory.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetchC
Read-onlyIdempotent
Inspect

Fetch a public item by its exact stable identifier.

NameRequiredDescriptionDefault
idYes
localeNoMCP transport locale; not a service input field.de
idempotencyKeyNoTransport retry key, forwarded as Idempotency-Key.

Output Schema

NameRequiredDescription
errorsYes
resultYes
successYes
messagesYes
request_idYes

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds two useful behavioral facts beyond that: the item is 'public' (no authorization scoping implied) and the identifier must match exactly (no fuzzy/partial resolution). It says nothing about not-found behavior or whether results are locale-dependent despite a locale parameter existing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single twelve-word sentence with no filler, and the key constraint ('exact stable identifier') is front-loaded. It is efficient, though its brevity is part of why other dimensions are thin rather than a virtue in itself.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema and annotations relieve the description of return-value and safety disclosure, but the core ambiguity remains: among 28 siblings the agent cannot tell what kind of 'item' this fetches or what distinguishes it from 'search'. For a nominally generic 'fetch' entry point, that is a material omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, with locale and idempotencyKey self-documented as transport concerns, so the schema carries most of the load. The description only contributes the notion that 'id' is an 'exact stable identifier,' hinting at no partial matching, but it does not state format, where such IDs come from, or how locale affects the returned content. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb+resource pairing is 'Fetch a public item by its exact stable identifier,' which tells the agent it is a single-record lookup keyed by ID. However, 'item' is never resolved into a concrete resource type, and nothing distinguishes it from the sibling 'search' tool or the academy_* family. An agent knows the shape of the operation but not the domain of the data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use statement and no named alternative. The phrase 'exact stable identifier' implicitly suggests it is a precision lookup rather than a discovery tool, but the agent must infer that 'search' is the counterpart for unknown IDs. No prerequisites or failure conditions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 29 tool updates
    • Addedacademy_coaching
    • Addedacademy_concepts
    • Addedacademy_glossary
    • Addedacademy_glossary_term
    • Addedacademy_legacy_lessons
    • Addedacademy_legacy_levels
    • Changedacademy_lesson11 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / level / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / locale / default
        Added value: +"de"
      • changedInput schema / properties / locale / description
        Previous value: -"Language. de=German, en=English, es=Spanish. Default en."New value: +"MCP transport locale; not a service input field."
      • removedInput schema / properties / slug / description
        Removed value: -"Lesson slug, e.g. \"01-was-ist-ai\" (from academy_lessons)"
      • addedInput schema / properties / slug / maxLength
        Added value: +180
      • addedInput schema / properties / slug / minLength
        Added value: +1
      • addedInput schema / properties / slug / pattern
        Added value: +"^[a-z0-9][a-z0-9_.-]*$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "content": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "body": {
        +                  "type": "string"
        +                },
        +                "bodyLocale": {
        +                  "type": "string"
        +                },
        +                "bodyPending": {
        +                  "type": "boolean"
        +                },
        +                "description": {
        +                  "type": "string"
        +                },
        +                "duration": {
        +                  "type": "string"
        +                },
        +                "level": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": -9007199254740991,
        +                  "type": "integer"
        +                },
        +                "locale": {
        +                  "enum": [
        +                    "de",
        +                    "en",
        +                    "es"
        +                  ],
        +                  "type": "string"
        +                },
        +                "order": {
        +                  "type": "number"
        +                },
        +                "preview": {
        +                  "type": "boolean"
        +                },
        +                "slug": {
        +                  "type": "string"
        +                },
        +                "title": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "level",
        +                "slug",
        +                "locale",
        +                "title",
        +                "order",
        +                "body"
        +              ],
        +              "type": "object"
        +            },
        +            "content_locale": {
        +              "enum": [
        +                "de",
        +                "en",
        +                "es"
        +              ],
        +              "type": "string"
        +            },
        +            "fallback": {
        +              "type": "boolean"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "requestedLocale": {
        +              "enum": [
        +                "de",
        +                "en",
        +                "es"
        +              ],
        +              "type": "string"
        +            },
        +            "status": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "draft",
        +                    "candidate",
        +                    "active",
        +                    "deprecated"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "updated": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "version": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "requestedLocale",
        +            "content_locale",
        +            "fallback",
        +            "version",
        +            "status",
        +            "updated",
        +            "content"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
    • Changedacademy_lessons10 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +true
      • addedInput schema / description
        Added value: +"Deprecated alias: legacy fields are normalized and strictly validated by Academy."
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / level / description
        Removed value: -"Level 1-6"
      • changedInput schema / properties / level / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / locale / default
        Added value: +"de"
      • changedInput schema / properties / locale / description
        Previous value: -"Language. de=German, en=English, es=Spanish. Default en."New value: +"MCP transport locale; not a service input field."
      • changedInput schema / required
        Previous value: -[
        -  "level"
        -]New value: +[]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "lessons": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "description": {
        +                    "type": [
        +                      "string",
        +                      "null"
        +                    ]
        +                  },
        +                  "href": {
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "pattern": "^lesson:-?\\d+(?:\\.\\d+)?:[\\s\\S]{0,}$",
        +                    "type": "string"
        +                  },
        +                  "level": {
        +                    "type": "number"
        +                  },
        +                  "locale": {
        +                    "enum": [
        +                      "de",
        +                      "en",
        +                      "es"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "slug": {
        +                    "type": "string"
        +                  },
        +                  "title": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "id",
        +                  "level",
        +                  "slug",
        +                  "locale",
        +                  "title",
        +                  "description",
        +                  "href"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "required": [
        +            "lessons"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
    • Changedacademy_levels8 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +true
      • addedInput schema / description
        Added value: +"Deprecated alias: legacy fields are normalized and strictly validated by Academy."
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / locale / default
        Added value: +"de"
      • changedInput schema / properties / locale / description
        Previous value: -"Language. de=German, en=English, es=Spanish. Default en."New value: +"MCP transport locale; not a service input field."
      • addedInput schema / required
        Added value: +[]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "levels": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "href": {
        +                    "type": "string"
        +                  },
        +                  "lessonCount": {
        +                    "type": "number"
        +                  },
        +                  "level": {
        +                    "type": "number"
        +                  },
        +                  "title": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "level",
        +                  "title",
        +                  "href",
        +                  "lessonCount"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "required": [
        +            "levels"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
    • Addedacademy_library
    • Addedacademy_module
    • Addedacademy_path
    • Addedacademy_paths
    • Changedacademy_playbook9 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / id
        Added value: +{
        +  "maxLength": 240,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9][a-zA-Z0-9:_.-]*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / locale / default
        Added value: +"de"
      • changedInput schema / properties / locale / description
        Previous value: -"Language. de=German, en=English, es=Spanish. Default en."New value: +"MCP transport locale; not a service input field."
      • removedInput schema / properties / slug
        Removed value: -{
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "slug"
        -]New value: +[
        +  "id"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "content": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "body": {
        +                  "type": "string"
        +                },
        +                "bodyLocale": {
        +                  "type": "string"
        +                },
        +                "bodyPending": {
        +                  "type": "boolean"
        +                },
        +                "category": {
        +                  "type": "string"
        +                },
        +                "description": {
        +                  "type": "string"
        +                },
        +                "duration": {
        +                  "type": "string"
        +                },
        +                "locale": {
        +                  "enum": [
        +                    "de",
        +                    "en",
        +                    "es"
        +                  ],
        +                  "type": "string"
        +                },
        +                "order": {
        +                  "type": "number"
        +                },
        +                "published": {
        +                  "type": "string"
        +                },
        +                "slug": {
        +                  "type": "string"
        +                },
        +                "title": {
        +                  "type": "string"
        +                },
        +                "updated": {
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "slug",
        +                "locale",
        +                "title",
        +                "order",
        +                "body"
        +              ],
        +              "type": "object"
        +            },
        +            "content_locale": {
        +              "enum": [
        +                "de",
        +                "en",
        +                "es"
        +              ],
        +              "type": "string"
        +            },
        +            "fallback": {
        +              "type": "boolean"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "requestedLocale": {
        +              "enum": [
        +                "de",
        +                "en",
        +                "es"
        +              ],
        +              "type": "string"
        +            },
        +            "status": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "draft",
        +                    "candidate",
        +                    "active",
        +                    "deprecated"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "updated": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "version": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "requestedLocale",
        +            "content_locale",
        +            "fallback",
        +            "version",
        +            "status",
        +            "updated",
        +            "content"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
    • Changedacademy_playbooks11 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / category / description
        Removed value: -"Optional, e.g. \"build\", \"use\""
      • addedInput schema / properties / category / maxLength
        Added value: +160
      • addedInput schema / properties / category / minLength
        Added value: +1
      • addedInput schema / properties / cursor
        Added value: +{
        +  "maxLength": 2048,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / locale / default
        Added value: +"de"
      • changedInput schema / properties / locale / description
        Previous value: -"Language. de=German, en=English, es=Spanish. Default en."New value: +"MCP transport locale; not a service input field."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "items": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "access": {
        +                    "enum": [
        +                      "free",
        +                      "premium"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "categories": {
        +                    "items": {
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "contentLocale": {
        +                    "enum": [
        +                      "de",
        +                      "en",
        +                      "es"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "creditPrice": {
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "description": {
        +                    "type": "string"
        +                  },
        +                  "euroPrice": {
        +                    "type": [
        +                      "number",
        +                      "null"
        +                    ]
        +                  },
        +                  "href": {
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "type": "string"
        +                  },
        +                  "locale": {
        +                    "enum": [
        +                      "de",
        +                      "en",
        +                      "es"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "source": {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "href": {
        +                        "type": "string"
        +                      },
        +                      "kind": {
        +                        "enum": [
        +                          "playbook",
        +                          "concept"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "label": {
        +                        "type": "string"
        +                      },
        +                      "slug": {
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "kind",
        +                      "slug",
        +                      "href",
        +                      "label"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "title": {
        +                    "type": "string"
        +                  },
        +                  "translationPending": {
        +                    "type": "boolean"
        +                  },
        +                  "type": {
        +                    "enum": [
        +                      "prompt",
        +                      "playbook",
        +                      "skill",
        +                      "tool",
        +                      "agent",
        +                      "guide",
        +                      "glossary"
        +                    ],
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "id",
        +                  "type",
        +                  "title",
        +                  "description",
        +                  "href",
        +                  "access",
        +                  "creditPrice",
        +                  "euroPrice",
        +                  "categories",
        +                  "locale",
        +                  "contentLocale",
        +                  "translationPending",
        +                  "source"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "nextCursor": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "items",
        +            "nextCursor"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
    • Addedacademy_premium_catalog
    • Addedacademy_premium_preview
    • Addedacademy_prompt
    • Addedacademy_prompts
    • Changedacademy_recipe8 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / id
        Added value: +{
        +  "maxLength": 240,
        +  "minLength": 1,
        +  "pattern": "^[a-zA-Z0-9][a-zA-Z0-9:_.-]*$",
        +  "type": "string"
        +}
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / locale
        Added value: +{
        +  "default": "de",
        +  "description": "MCP transport locale; not a service input field.",
        +  "enum": [
        +    "de",
        +    "en",
        +    "es"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / slug
        Removed value: -{
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "slug"
        -]New value: +[
        +  "id"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "content": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "body": {
        +                  "type": "string"
        +                },
        +                "contentHash": {
        +                  "type": "string"
        +                },
        +                "meta": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "description": {
        +                      "type": "string"
        +                    },
        +                    "duration": {
        +                      "type": "string"
        +                    },
        +                    "order": {
        +                      "type": "number"
        +                    },
        +                    "phase": {
        +                      "maximum": 16,
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    "published": {
        +                      "type": "string"
        +                    },
        +                    "slug": {
        +                      "type": "string"
        +                    },
        +                    "tags": {
        +                      "items": {
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    },
        +                    "title": {
        +                      "type": "string"
        +                    },
        +                    "updated": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "slug",
        +                    "phase",
        +                    "order",
        +                    "title",
        +                    "description",
        +                    "duration"
        +                  ],
        +                  "type": "object"
        +                },
        +                "steps": {
        +                  "items": {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "body": {
        +                        "type": "string"
        +                      },
        +                      "index": {
        +                        "type": "number"
        +                      },
        +                      "title": {
        +                        "type": "string"
        +                      },
        +                      "validatorId": {
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "index",
        +                      "title",
        +                      "body"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "required": [
        +                "meta",
        +                "body",
        +                "steps",
        +                "contentHash"
        +              ],
        +              "type": "object"
        +            },
        +            "content_locale": {
        +              "enum": [
        +                "de",
        +                "en",
        +                "es"
        +              ],
        +              "type": "string"
        +            },
        +            "fallback": {
        +              "type": "boolean"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "requestedLocale": {
        +              "enum": [
        +                "de",
        +                "en",
        +                "es"
        +              ],
        +              "type": "string"
        +            },
        +            "status": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "draft",
        +                    "candidate",
        +                    "active",
        +                    "deprecated"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "updated": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "version": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "requestedLocale",
        +            "content_locale",
        +            "fallback",
        +            "version",
        +            "status",
        +            "updated",
        +            "content"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
    • Changedacademy_recipes11 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / cursor
        Added value: +{
        +  "maxLength": 2048,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / locale
        Added value: +{
        +  "default": "de",
        +  "description": "MCP transport locale; not a service input field.",
        +  "enum": [
        +    "de",
        +    "en",
        +    "es"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / phase / description
        Removed value: -"Optional phase number 1-16"
      • addedInput schema / properties / phase / maximum
        Added value: +16
      • addedInput schema / properties / phase / minimum
        Added value: +1
      • changedInput schema / properties / phase / type
        Previous value: -"number"New value: +"integer"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "items": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "body": {
        +                    "type": "string"
        +                  },
        +                  "contentHash": {
        +                    "type": "string"
        +                  },
        +                  "meta": {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "description": {
        +                        "type": "string"
        +                      },
        +                      "duration": {
        +                        "type": "string"
        +                      },
        +                      "order": {
        +                        "type": "number"
        +                      },
        +                      "phase": {
        +                        "maximum": 16,
        +                        "minimum": 1,
        +                        "type": "integer"
        +                      },
        +                      "published": {
        +                        "type": "string"
        +                      },
        +                      "slug": {
        +                        "type": "string"
        +                      },
        +                      "tags": {
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "title": {
        +                        "type": "string"
        +                      },
        +                      "updated": {
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "slug",
        +                      "phase",
        +                      "order",
        +                      "title",
        +                      "description",
        +                      "duration"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "steps": {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "body": {
        +                          "type": "string"
        +                        },
        +                        "index": {
        +                          "type": "number"
        +                        },
        +                        "title": {
        +                          "type": "string"
        +                        },
        +                        "validatorId": {
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "index",
        +                        "title",
        +                        "body"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  }
        +                },
        +                "required": [
        +                  "meta",
        +                  "body",
        +                  "steps",
        +                  "contentHash"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "nextCursor": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "items",
        +            "nextCursor"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
    • Changedacademy_search15 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / cursor
        Added value: +{
        +  "maxLength": 2048,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / limit / default
        Removed value: -10
      • changedInput schema / properties / limit / maximum
        Previous value: -50New value: +100
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / locale / default
        Added value: +"de"
      • changedInput schema / properties / locale / description
        Previous value: -"Language. de=German, en=English, es=Spanish. Default en."New value: +"MCP transport locale; not a service input field."
      • addedInput schema / properties / pathId
        Added value: +{
        +  "enum": [
        +    "loslegen",
        +    "ki-im-alltag",
        +    "ki-im-job",
        +    "fuer-entwickler"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / query / description
        Removed value: -"Search keywords"
      • addedInput schema / properties / query / maxLength
        Added value: +160
      • addedInput schema / properties / query / minLength
        Added value: +1
      • addedInput schema / properties / type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "prompt",
        +        "playbook",
        +        "skill",
        +        "tool",
        +        "agent",
        +        "guide",
        +        "glossary"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "const": "lesson",
        +      "type": "string"
        +    }
        +  ]
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "items": {
        +              "items": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "access": {
        +                        "enum": [
        +                          "free",
        +                          "premium"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "categories": {
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "contentLocale": {
        +                        "enum": [
        +                          "de",
        +                          "en",
        +                          "es"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "creditPrice": {
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "description": {
        +                        "type": "string"
        +                      },
        +                      "euroPrice": {
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "href": {
        +                        "type": "string"
        +                      },
        +                      "id": {
        +                        "type": "string"
        +                      },
        +                      "locale": {
        +                        "enum": [
        +                          "de",
        +                          "en",
        +                          "es"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "source": {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "href": {
        +                            "type": "string"
        +                          },
        +                          "kind": {
        +                            "enum": [
        +                              "playbook",
        +                              "concept"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "label": {
        +                            "type": "string"
        +                          },
        +                          "slug": {
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "kind",
        +                          "slug",
        +                          "href",
        +                          "label"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "title": {
        +                        "type": "string"
        +                      },
        +                      "translationPending": {
        +                        "type": "boolean"
        +                      },
        +                      "type": {
        +                        "enum": [
        +                          "prompt",
        +                          "playbook",
        +                          "skill",
        +                          "tool",
        +                          "agent",
        +                          "guide",
        +                          "glossary"
        +                        ],
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "id",
        +                      "type",
        +                      "title",
        +                      "description",
        +                      "href",
        +                      "access",
        +                      "creditPrice",
        +                      "euroPrice",
        +                      "categories",
        +                      "locale",
        +                      "contentLocale",
        +                      "translationPending",
        +                      "source"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "access": {
        +                        "enum": [
        +                          "free",
        +                          "premium"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "categories": {
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "contentLocale": {
        +                        "enum": [
        +                          "de",
        +                          "en",
        +                          "es"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "creditPrice": {
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "description": {
        +                        "type": "string"
        +                      },
        +                      "euroPrice": {
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "href": {
        +                        "type": "string"
        +                      },
        +                      "id": {
        +                        "type": "string"
        +                      },
        +                      "locale": {
        +                        "enum": [
        +                          "de",
        +                          "en",
        +                          "es"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "source": {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "href": {
        +                            "type": "string"
        +                          },
        +                          "kind": {
        +                            "const": "lesson",
        +                            "type": "string"
        +                          },
        +                          "label": {
        +                            "type": "string"
        +                          },
        +                          "level": {
        +                            "maximum": 6,
        +                            "minimum": 1,
        +                            "type": "integer"
        +                          },
        +                          "slug": {
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "kind",
        +                          "level",
        +                          "slug",
        +                          "href",
        +                          "label"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "title": {
        +                        "type": "string"
        +                      },
        +                      "translationPending": {
        +                        "type": "boolean"
        +                      },
        +                      "type": {
        +                        "const": "lesson",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "id",
        +                      "title",
        +                      "description",
        +                      "href",
        +                      "access",
        +                      "creditPrice",
        +                      "euroPrice",
        +                      "categories",
        +                      "locale",
        +                      "contentLocale",
        +                      "translationPending",
        +                      "type",
        +                      "source"
        +                    ],
        +                    "type": "object"
        +                  }
        +                ]
        +              },
        +              "type": "array"
        +            },
        +            "nextCursor": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "items",
        +            "nextCursor"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
    • Addedacademy_start
    • Addedacademy_suggest
    • Addedacademy_teach
    • Changedacademy_tutor_context12 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +true
      • addedInput schema / description
        Added value: +"Deprecated alias: legacy fields are normalized and strictly validated by Academy."
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / properties / level / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / locale / default
        Added value: +"de"
      • changedInput schema / properties / locale / description
        Previous value: -"Language. de=German, en=English, es=Spanish. Default en."New value: +"MCP transport locale; not a service input field."
      • addedInput schema / properties / slug / maxLength
        Added value: +180
      • addedInput schema / properties / slug / minLength
        Added value: +1
      • addedInput schema / properties / slug / pattern
        Added value: +"^[a-z0-9][a-z0-9_.-]*$"
      • changedInput schema / required
        Previous value: -[
        -  "level",
        -  "slug"
        -]New value: +[]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "content": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "exercise": {
        +                  "type": "string"
        +                },
        +                "lessonId": {
        +                  "pattern": "^lesson:-?\\d+(?:\\.\\d+)?:[\\s\\S]{0,}$",
        +                  "type": "string"
        +                },
        +                "objectives": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                },
        +                "steps": {
        +                  "items": {
        +                    "type": "string"
        +                  },
        +                  "type": "array"
        +                }
        +              },
        +              "required": [
        +                "lessonId",
        +                "objectives",
        +                "steps",
        +                "exercise"
        +              ],
        +              "type": "object"
        +            },
        +            "content_locale": {
        +              "enum": [
        +                "de",
        +                "en",
        +                "es"
        +              ],
        +              "type": "string"
        +            },
        +            "fallback": {
        +              "type": "boolean"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "requestedLocale": {
        +              "enum": [
        +                "de",
        +                "en",
        +                "es"
        +              ],
        +              "type": "string"
        +            },
        +            "status": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "draft",
        +                    "candidate",
        +                    "active",
        +                    "deprecated"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "updated": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "version": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "requestedLocale",
        +            "content_locale",
        +            "fallback",
        +            "version",
        +            "status",
        +            "updated",
        +            "content"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
    • Changedacademy_welcome8 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +true
      • addedInput schema / description
        Added value: +"Deprecated alias: legacy fields are normalized and strictly validated by Academy."
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / locale / default
        Added value: +"de"
      • changedInput schema / properties / locale / description
        Previous value: -"Language. de=German, en=English, es=Spanish. Default en."New value: +"MCP transport locale; not a service input field."
      • addedInput schema / required
        Added value: +[]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "links": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "href": {
        +                    "type": "string"
        +                  },
        +                  "method": {
        +                    "enum": [
        +                      "GET",
        +                      "POST",
        +                      "PATCH",
        +                      "DELETE"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "rel": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "rel",
        +                  "method",
        +                  "href"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            },
        +            "paths": {
        +              "items": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "capstone": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "bodyLocale": {
        +                            "type": "string"
        +                          },
        +                          "bodyPending": {
        +                            "type": "boolean"
        +                          },
        +                          "deepDiveOf": {
        +                            "type": [
        +                              "string",
        +                              "null"
        +                            ]
        +                          },
        +                          "description": {
        +                            "type": "string"
        +                          },
        +                          "duration": {
        +                            "type": "string"
        +                          },
        +                          "href": {
        +                            "type": "string"
        +                          },
        +                          "id": {
        +                            "type": "string"
        +                          },
        +                          "kind": {
        +                            "enum": [
        +                              "lesson",
        +                              "playbook"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "level": {
        +                            "anyOf": [
        +                              {
        +                                "maximum": 9007199254740991,
        +                                "minimum": -9007199254740991,
        +                                "type": "integer"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "locale": {
        +                            "enum": [
        +                              "de",
        +                              "en",
        +                              "es"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "moduleId": {
        +                            "type": "string"
        +                          },
        +                          "optional": {
        +                            "type": "boolean"
        +                          },
        +                          "order": {
        +                            "type": "number"
        +                          },
        +                          "originalHref": {
        +                            "type": "string"
        +                          },
        +                          "originalReference": {
        +                            "anyOf": [
        +                              {
        +                                "additionalProperties": false,
        +                                "properties": {
        +                                  "href": {
        +                                    "type": "string"
        +                                  },
        +                                  "kind": {
        +                                    "const": "lesson",
        +                                    "type": "string"
        +                                  },
        +                                  "level": {
        +                                    "type": "number"
        +                                  },
        +                                  "locale": {
        +                                    "enum": [
        +                                      "de",
        +                                      "en",
        +                                      "es"
        +                                    ],
        +                                    "type": "string"
        +                                  },
        +                                  "slug": {
        +                                    "type": "string"
        +                                  }
        +                                },
        +                                "required": [
        +                                  "kind",
        +                                  "level",
        +                                  "slug",
        +                                  "locale",
        +                                  "href"
        +                                ],
        +                                "type": "object"
        +                              },
        +                              {
        +                                "type": "null"
        +                              }
        +                            ]
        +                          },
        +                          "slug": {
        +                            "type": "string"
        +                          },
        +                          "title": {
        +                            "type": "string"
        +                          },
        +                          "type": {
        +                            "enum": [
        +                              "lesson",
        +                              "playbook",
        +                              "capstone"
        +                            ],
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "id",
        +                          "kind",
        +                          "type",
        +                          "slug",
        +                          "level",
        +                          "locale",
        +                          "title",
        +                          "moduleId",
        +                          "order",
        +                          "optional",
        +                          "deepDiveOf",
        +                          "href",
        +                          "originalHref",
        +                          "originalReference"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "description": {
        +                    "type": "string"
        +                  },
        +                  "href": {
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "enum": [
        +                      "loslegen",
        +                      "ki-im-alltag",
        +                      "ki-im-job",
        +                      "fuer-entwickler"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "locale": {
        +                    "enum": [
        +                      "de",
        +                      "en",
        +                      "es"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "mappingNote": {
        +                    "type": "string"
        +                  },
        +                  "mappingStatus": {
        +                    "enum": [
        +                      "pending",
        +                      "confirmed"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "moduleMapping": {
        +                    "enum": [
        +                      "pending",
        +                      "confirmed"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "modules": {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "description": {
        +                          "type": "string"
        +                        },
        +                        "id": {
        +                          "type": "string"
        +                        },
        +                        "isContentContainer": {
        +                          "type": "boolean"
        +                        },
        +                        "lessons": {
        +                          "items": {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "bodyLocale": {
        +                                "type": "string"
        +                              },
        +                              "bodyPending": {
        +                                "type": "boolean"
        +                              },
        +                              "description": {
        +                                "type": "string"
        +                              },
        +                              "duration": {
        +                                "type": "string"
        +                              },
        +                              "href": {
        +                                "type": "string"
        +                              },
        +                              "id": {
        +                                "type": "string"
        +                              },
        +                              "level": {
        +                                "maximum": 9007199254740991,
        +                                "minimum": -9007199254740991,
        +                                "type": "integer"
        +                              },
        +                              "locale": {
        +                                "enum": [
        +                                  "de",
        +                                  "en",
        +                                  "es"
        +                                ],
        +                                "type": "string"
        +                              },
        +                              "order": {
        +                                "type": "number"
        +                              },
        +                              "originLabel": {
        +                                "type": "string"
        +                              },
        +                              "originalReference": {
        +                                "additionalProperties": false,
        +                                "properties": {
        +                                  "href": {
        +                                    "type": "string"
        +                                  },
        +                                  "kind": {
        +                                    "const": "lesson",
        +                                    "type": "string"
        +                                  },
        +                                  "level": {
        +                                    "type": "number"
        +                                  },
        +                                  "locale": {
        +                                    "enum": [
        +                                      "de",
        +                                      "en",
        +                                      "es"
        +                                    ],
        +                                    "type": "string"
        +                                  },
        +                                  "slug": {
        +                                    "type": "string"
        +                                  }
        +                                },
        +                                "required": [
        +                                  "kind",
        +                                  "level",
        +                                  "slug",
        +                                  "locale",
        +                                  "href"
        +                                ],
        +                                "type": "object"
        +                              },
        +                              "preview": {
        +                                "type": "boolean"
        +                              },
        +                              "slug": {
        +                                "type": "string"
        +                              },
        +                              "status": {
        +                                "const": "available",
        +                                "type": "string"
        +                              },
        +                              "title": {
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "level",
        +                              "slug",
        +                              "locale",
        +                              "title",
        +                              "order",
        +                              "id",
        +                              "href",
        +                              "status",
        +                              "originLabel",
        +                              "originalReference"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "order": {
        +                          "type": "number"
        +                        },
        +                        "originalReferences": {
        +                          "items": {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "href": {
        +                                "type": "string"
        +                              },
        +                              "kind": {
        +                                "const": "lesson",
        +                                "type": "string"
        +                              },
        +                              "level": {
        +                                "type": "number"
        +                              },
        +                              "locale": {
        +                                "enum": [
        +                                  "de",
        +                                  "en",
        +                                  "es"
        +                                ],
        +                                "type": "string"
        +                              },
        +                              "slug": {
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "kind",
        +                              "level",
        +                              "slug",
        +                              "locale",
        +                              "href"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "status": {
        +                          "enum": [
        +                            "available",
        +                            "planned"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "steps": {
        +                          "items": {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "bodyLocale": {
        +                                "type": "string"
        +                              },
        +                              "bodyPending": {
        +                                "type": "boolean"
        +                              },
        +                              "deepDiveOf": {
        +                                "type": [
        +                                  "string",
        +                                  "null"
        +                                ]
        +                              },
        +                              "description": {
        +                                "type": "string"
        +                              },
        +                              "duration": {
        +                                "type": "string"
        +                              },
        +                              "href": {
        +                                "type": "string"
        +                              },
        +                              "id": {
        +                                "type": "string"
        +                              },
        +                              "kind": {
        +                                "enum": [
        +                                  "lesson",
        +                                  "playbook"
        +                                ],
        +                                "type": "string"
        +                              },
        +                              "level": {
        +                                "anyOf": [
        +                                  {
        +                                    "maximum": 9007199254740991,
        +                                    "minimum": -9007199254740991,
        +                                    "type": "integer"
        +                                  },
        +                                  {
        +                                    "type": "null"
        +                                  }
        +                                ]
        +                              },
        +                              "locale": {
        +                                "enum": [
        +                                  "de",
        +                                  "en",
        +                                  "es"
        +                                ],
        +                                "type": "string"
        +                              },
        +                              "moduleId": {
        +                                "type": "string"
        +                              },
        +                              "optional": {
        +                                "type": "boolean"
        +                              },
        +                              "order": {
        +                                "type": "number"
        +                              },
        +                              "originalHref": {
        +                                "type": "string"
        +                              },
        +                              "originalReference": {
        +                                "anyOf": [
        +                                  {
        +                                    "additionalProperties": false,
        +                                    "properties": {
        +                                      "href": {
        +                                        "type": "string"
        +                                      },
        +                                      "kind": {
        +                                        "const": "lesson",
        +                                        "type": "string"
        +                                      },
        +                                      "level": {
        +                                        "type": "number"
        +                                      },
        +                                      "locale": {
        +                                        "enum": [
        +                                          "de",
        +                                          "en",
        +                                          "es"
        +                                        ],
        +                                        "type": "string"
        +                                      },
        +                                      "slug": {
        +                                        "type": "string"
        +                                      }
        +                                    },
        +                                    "required": [
        +                                      "kind",
        +                                      "level",
        +                                      "slug",
        +                                      "locale",
        +                                      "href"
        +                                    ],
        +                                    "type": "object"
        +                                  },
        +                                  {
        +                                    "type": "null"
        +                                  }
        +                                ]
        +                              },
        +                              "slug": {
        +                                "type": "string"
        +                              },
        +                              "title": {
        +                                "type": "string"
        +                              },
        +                              "type": {
        +                                "enum": [
        +                                  "lesson",
        +                                  "playbook",
        +                                  "capstone"
        +                                ],
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "id",
        +                              "kind",
        +                              "type",
        +                              "slug",
        +                              "level",
        +                              "locale",
        +                              "title",
        +                              "moduleId",
        +                              "order",
        +                              "optional",
        +                              "deepDiveOf",
        +                              "href",
        +                              "originalHref",
        +                              "originalReference"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "title": {
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "id",
        +                        "order",
        +                        "title",
        +                        "description",
        +                        "status",
        +                        "lessons",
        +                        "originalReferences",
        +                        "steps",
        +                        "isContentContainer"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "nextPathIds": {
        +                    "items": {
        +                      "enum": [
        +                        "loslegen",
        +                        "ki-im-alltag",
        +                        "ki-im-job",
        +                        "fuer-entwickler"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "originalReferences": {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "href": {
        +                          "type": "string"
        +                        },
        +                        "kind": {
        +                          "const": "lesson",
        +                          "type": "string"
        +                        },
        +                        "level": {
        +                          "type": "number"
        +                        },
        +                        "locale": {
        +                          "enum": [
        +                            "de",
        +                            "en",
        +                            "es"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "slug": {
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "kind",
        +                        "level",
        +                        "slug",
        +                        "locale",
        +                        "href"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "recommendedEntry": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "bodyLocale": {
        +                            "type": "string"
        +                          },
        +                          "bodyPending": {
        +                            "type": "boolean"
        +                          },
        +                          "description": {
        +                            "type": "string"
        +                          },
        +                          "duration": {
        +                            "type": "string"
        +                          },
        +                          "href": {
        +                            "type": "string"
        +                          },
        +                          "id": {
        +                            "type": "string"
        +                          },
        +                          "level": {
        +                            "maximum": 9007199254740991,
        +                            "minimum": -9007199254740991,
        +                            "type": "integer"
        +                          },
        +                          "locale": {
        +                            "enum": [
        +                              "de",
        +                              "en",
        +                              "es"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "order": {
        +                            "type": "number"
        +                          },
        +                          "originLabel": {
        +                            "type": "string"
        +                          },
        +                          "originalReference": {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "href": {
        +                                "type": "string"
        +                              },
        +                              "kind": {
        +                                "const": "lesson",
        +                                "type": "string"
        +                              },
        +                              "level": {
        +                                "type": "number"
        +                              },
        +                              "locale": {
        +                                "enum": [
        +                                  "de",
        +                                  "en",
        +                                  "es"
        +                                ],
        +                                "type": "string"
        +                              },
        +                              "slug": {
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "kind",
        +                              "level",
        +                              "slug",
        +                              "locale",
        +                              "href"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          "preview": {
        +                            "type": "boolean"
        +                          },
        +                          "slug": {
        +                            "type": "string"
        +                          },
        +                          "status": {
        +                            "const": "available",
        +                            "type": "string"
        +                          },
        +                          "title": {
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "level",
        +                          "slug",
        +                          "locale",
        +                          "title",
        +                          "order",
        +                          "id",
        +                          "href",
        +                          "status",
        +                          "originLabel",
        +                          "originalReference"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ]
        +                  },
        +                  "status": {
        +                    "enum": [
        +                      "available",
        +                      "planned"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "steps": {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "bodyLocale": {
        +                          "type": "string"
        +                        },
        +                        "bodyPending": {
        +                          "type": "boolean"
        +                        },
        +                        "deepDiveOf": {
        +                          "type": [
        +                            "string",
        +                            "null"
        +                          ]
        +                        },
        +                        "description": {
        +                          "type": "string"
        +                        },
        +                        "duration": {
        +                          "type": "string"
        +                        },
        +                        "href": {
        +                          "type": "string"
        +                        },
        +                        "id": {
        +                          "type": "string"
        +                        },
        +                        "kind": {
        +                          "enum": [
        +                            "lesson",
        +                            "playbook"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "level": {
        +                          "anyOf": [
        +                            {
        +                              "maximum": 9007199254740991,
        +                              "minimum": -9007199254740991,
        +                              "type": "integer"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "locale": {
        +                          "enum": [
        +                            "de",
        +                            "en",
        +                            "es"
        +                          ],
        +                          "type": "string"
        +                        },
        +                        "moduleId": {
        +                          "type": "string"
        +                        },
        +                        "optional": {
        +                          "type": "boolean"
        +                        },
        +                        "order": {
        +                          "type": "number"
        +                        },
        +                        "originalHref": {
        +                          "type": "string"
        +                        },
        +                        "originalReference": {
        +                          "anyOf": [
        +                            {
        +                              "additionalProperties": false,
        +                              "properties": {
        +                                "href": {
        +                                  "type": "string"
        +                                },
        +                                "kind": {
        +                                  "const": "lesson",
        +                                  "type": "string"
        +                                },
        +                                "level": {
        +                                  "type": "number"
        +                                },
        +                                "locale": {
        +                                  "enum": [
        +                                    "de",
        +                                    "en",
        +                                    "es"
        +                                  ],
        +                                  "type": "string"
        +                                },
        +                                "slug": {
        +                                  "type": "string"
        +                                }
        +                              },
        +                              "required": [
        +                                "kind",
        +                                "level",
        +                                "slug",
        +                                "locale",
        +                                "href"
        +                              ],
        +                              "type": "object"
        +                            },
        +                            {
        +                              "type": "null"
        +                            }
        +                          ]
        +                        },
        +                        "slug": {
        +                          "type": "string"
        +                        },
        +                        "title": {
        +                          "type": "string"
        +                        },
        +                        "type": {
        +                          "enum": [
        +                            "lesson",
        +                            "playbook",
        +                            "capstone"
        +                          ],
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "id",
        +                        "kind",
        +                        "type",
        +                        "slug",
        +                        "level",
        +                        "locale",
        +                        "title",
        +                        "moduleId",
        +                        "order",
        +                        "optional",
        +                        "deepDiveOf",
        +                        "href",
        +                        "originalHref",
        +                        "originalReference"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  "title": {
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "id",
        +                  "locale",
        +                  "title",
        +                  "description",
        +                  "href",
        +                  "status",
        +                  "mappingStatus",
        +                  "mappingNote",
        +                  "modules",
        +                  "steps",
        +                  "capstone",
        +                  "moduleMapping",
        +                  "nextPathIds",
        +                  "recommendedEntry",
        +                  "originalReferences"
        +                ],
        +                "type": "object"
        +              },
        +              "type": "array"
        +            }
        +          },
        +          "required": [
        +            "paths",
        +            "links"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
    • Changedfetch9 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / id / description
        Removed value: -"Item id from search results"
      • addedInput schema / properties / id / maxLength
        Added value: +240
      • addedInput schema / properties / id / minLength
        Added value: +1
      • addedInput schema / properties / id / pattern
        Added value: +"^[a-zA-Z0-9][a-zA-Z0-9:_.-]*$"
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / locale
        Added value: +{
        +  "default": "de",
        +  "description": "MCP transport locale; not a service input field.",
        +  "enum": [
        +    "de",
        +    "en",
        +    "es"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "content": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "body": {
        +                      "type": "string"
        +                    },
        +                    "bodyLocale": {
        +                      "type": "string"
        +                    },
        +                    "bodyPending": {
        +                      "type": "boolean"
        +                    },
        +                    "description": {
        +                      "type": "string"
        +                    },
        +                    "duration": {
        +                      "type": "string"
        +                    },
        +                    "level": {
        +                      "maximum": 9007199254740991,
        +                      "minimum": -9007199254740991,
        +                      "type": "integer"
        +                    },
        +                    "locale": {
        +                      "enum": [
        +                        "de",
        +                        "en",
        +                        "es"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "order": {
        +                      "type": "number"
        +                    },
        +                    "preview": {
        +                      "type": "boolean"
        +                    },
        +                    "slug": {
        +                      "type": "string"
        +                    },
        +                    "title": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "level",
        +                    "slug",
        +                    "locale",
        +                    "title",
        +                    "order",
        +                    "body"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "body": {
        +                      "type": "string"
        +                    },
        +                    "bodyLocale": {
        +                      "type": "string"
        +                    },
        +                    "bodyPending": {
        +                      "type": "boolean"
        +                    },
        +                    "category": {
        +                      "type": "string"
        +                    },
        +                    "description": {
        +                      "type": "string"
        +                    },
        +                    "duration": {
        +                      "type": "string"
        +                    },
        +                    "locale": {
        +                      "enum": [
        +                        "de",
        +                        "en",
        +                        "es"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "order": {
        +                      "type": "number"
        +                    },
        +                    "published": {
        +                      "type": "string"
        +                    },
        +                    "slug": {
        +                      "type": "string"
        +                    },
        +                    "title": {
        +                      "type": "string"
        +                    },
        +                    "updated": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "slug",
        +                    "locale",
        +                    "title",
        +                    "order",
        +                    "body"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "body": {
        +                      "type": "string"
        +                    },
        +                    "contentHash": {
        +                      "type": "string"
        +                    },
        +                    "meta": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "description": {
        +                          "type": "string"
        +                        },
        +                        "duration": {
        +                          "type": "string"
        +                        },
        +                        "order": {
        +                          "type": "number"
        +                        },
        +                        "phase": {
        +                          "maximum": 16,
        +                          "minimum": 1,
        +                          "type": "integer"
        +                        },
        +                        "published": {
        +                          "type": "string"
        +                        },
        +                        "slug": {
        +                          "type": "string"
        +                        },
        +                        "tags": {
        +                          "items": {
        +                            "type": "string"
        +                          },
        +                          "type": "array"
        +                        },
        +                        "title": {
        +                          "type": "string"
        +                        },
        +                        "updated": {
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "slug",
        +                        "phase",
        +                        "order",
        +                        "title",
        +                        "description",
        +                        "duration"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "steps": {
        +                      "items": {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "body": {
        +                            "type": "string"
        +                          },
        +                          "index": {
        +                            "type": "number"
        +                          },
        +                          "title": {
        +                            "type": "string"
        +                          },
        +                          "validatorId": {
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "index",
        +                          "title",
        +                          "body"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "type": "array"
        +                    }
        +                  },
        +                  "required": [
        +                    "meta",
        +                    "body",
        +                    "steps",
        +                    "contentHash"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "body": {
        +                      "type": "string"
        +                    },
        +                    "conceptType": {
        +                      "enum": [
        +                        "config_file",
        +                        "pattern",
        +                        "tool",
        +                        "service",
        +                        "command",
        +                        "mcp_server",
        +                        "feature"
        +                      ],
        +                      "type": "string"
        +                    },
        +                    "name": {
        +                      "type": "string"
        +                    },
        +                    "slug": {
        +                      "type": "string"
        +                    },
        +                    "sourceUrl": {
        +                      "type": "string"
        +                    },
        +                    "summary": {
        +                      "type": "string"
        +                    },
        +                    "tags": {
        +                      "items": {
        +                        "type": "string"
        +                      },
        +                      "type": "array"
        +                    }
        +                  },
        +                  "required": [
        +                    "slug",
        +                    "conceptType",
        +                    "name",
        +                    "summary",
        +                    "body",
        +                    "tags"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "id": {
        +                      "type": "string"
        +                    },
        +                    "playbookId": {
        +                      "type": [
        +                        "string",
        +                        "null"
        +                      ]
        +                    },
        +                    "text": {
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "id",
        +                    "text",
        +                    "playbookId"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "content_locale": {
        +              "enum": [
        +                "de",
        +                "en",
        +                "es"
        +              ],
        +              "type": "string"
        +            },
        +            "fallback": {
        +              "type": "boolean"
        +            },
        +            "id": {
        +              "type": "string"
        +            },
        +            "requestedLocale": {
        +              "enum": [
        +                "de",
        +                "en",
        +                "es"
        +              ],
        +              "type": "string"
        +            },
        +            "status": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "draft",
        +                    "candidate",
        +                    "active",
        +                    "deprecated"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ]
        +            },
        +            "updated": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            },
        +            "version": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "requestedLocale",
        +            "content_locale",
        +            "fallback",
        +            "version",
        +            "status",
        +            "updated",
        +            "content"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch12 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / cursor
        Added value: +{
        +  "maxLength": 2048,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / idempotencyKey
        Added value: +{
        +  "description": "Transport retry key, forwarded as Idempotency-Key.",
        +  "maxLength": 200,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • addedInput schema / properties / limit
        Added value: +{
        +  "maximum": 100,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / locale
        Added value: +{
        +  "default": "de",
        +  "description": "MCP transport locale; not a service input field.",
        +  "enum": [
        +    "de",
        +    "en",
        +    "es"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / pathId
        Added value: +{
        +  "enum": [
        +    "loslegen",
        +    "ki-im-alltag",
        +    "ki-im-job",
        +    "fuer-entwickler"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / query / description
        Removed value: -"Search query"
      • addedInput schema / properties / query / maxLength
        Added value: +160
      • addedInput schema / properties / query / minLength
        Added value: +1
      • addedInput schema / properties / type
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "prompt",
        +        "playbook",
        +        "skill",
        +        "tool",
        +        "agent",
        +        "guide",
        +        "glossary"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "const": "lesson",
        +      "type": "string"
        +    }
        +  ]
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "properties": {
        +        "errors": {
        +          "maxItems": 0
        +        },
        +        "result": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "items": {
        +              "items": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "access": {
        +                        "enum": [
        +                          "free",
        +                          "premium"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "categories": {
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "contentLocale": {
        +                        "enum": [
        +                          "de",
        +                          "en",
        +                          "es"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "creditPrice": {
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "description": {
        +                        "type": "string"
        +                      },
        +                      "euroPrice": {
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "href": {
        +                        "type": "string"
        +                      },
        +                      "id": {
        +                        "type": "string"
        +                      },
        +                      "locale": {
        +                        "enum": [
        +                          "de",
        +                          "en",
        +                          "es"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "source": {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "href": {
        +                            "type": "string"
        +                          },
        +                          "kind": {
        +                            "enum": [
        +                              "playbook",
        +                              "concept"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "label": {
        +                            "type": "string"
        +                          },
        +                          "slug": {
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "kind",
        +                          "slug",
        +                          "href",
        +                          "label"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "title": {
        +                        "type": "string"
        +                      },
        +                      "translationPending": {
        +                        "type": "boolean"
        +                      },
        +                      "type": {
        +                        "enum": [
        +                          "prompt",
        +                          "playbook",
        +                          "skill",
        +                          "tool",
        +                          "agent",
        +                          "guide",
        +                          "glossary"
        +                        ],
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "id",
        +                      "type",
        +                      "title",
        +                      "description",
        +                      "href",
        +                      "access",
        +                      "creditPrice",
        +                      "euroPrice",
        +                      "categories",
        +                      "locale",
        +                      "contentLocale",
        +                      "translationPending",
        +                      "source"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "access": {
        +                        "enum": [
        +                          "free",
        +                          "premium"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "categories": {
        +                        "items": {
        +                          "type": "string"
        +                        },
        +                        "type": "array"
        +                      },
        +                      "contentLocale": {
        +                        "enum": [
        +                          "de",
        +                          "en",
        +                          "es"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "creditPrice": {
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "description": {
        +                        "type": "string"
        +                      },
        +                      "euroPrice": {
        +                        "type": [
        +                          "number",
        +                          "null"
        +                        ]
        +                      },
        +                      "href": {
        +                        "type": "string"
        +                      },
        +                      "id": {
        +                        "type": "string"
        +                      },
        +                      "locale": {
        +                        "enum": [
        +                          "de",
        +                          "en",
        +                          "es"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "source": {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "href": {
        +                            "type": "string"
        +                          },
        +                          "kind": {
        +                            "const": "lesson",
        +                            "type": "string"
        +                          },
        +                          "label": {
        +                            "type": "string"
        +                          },
        +                          "level": {
        +                            "maximum": 6,
        +                            "minimum": 1,
        +                            "type": "integer"
        +                          },
        +                          "slug": {
        +                            "type": "string"
        +                          }
        +                        },
        +                        "required": [
        +                          "kind",
        +                          "level",
        +                          "slug",
        +                          "href",
        +                          "label"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      "title": {
        +                        "type": "string"
        +                      },
        +                      "translationPending": {
        +                        "type": "boolean"
        +                      },
        +                      "type": {
        +                        "const": "lesson",
        +                        "type": "string"
        +                      }
        +                    },
        +                    "required": [
        +                      "id",
        +                      "title",
        +                      "description",
        +                      "href",
        +                      "access",
        +                      "creditPrice",
        +                      "euroPrice",
        +                      "categories",
        +                      "locale",
        +                      "contentLocale",
        +                      "translationPending",
        +                      "type",
        +                      "source"
        +                    ],
        +                    "type": "object"
        +                  }
        +                ]
        +              },
        +              "type": "array"
        +            },
        +            "nextCursor": {
        +              "type": [
        +                "string",
        +                "null"
        +              ]
        +            }
        +          },
        +          "required": [
        +            "items",
        +            "nextCursor"
        +          ],
        +          "type": "object"
        +        },
        +        "success": {
        +          "const": true
        +        }
        +      }
        +    },
        +    {
        +      "properties": {
        +        "errors": {
        +          "minItems": 1
        +        },
        +        "result": {
        +          "type": "null"
        +        },
        +        "success": {
        +          "const": false
        +        }
        +      }
        +    }
        +  ],
        +  "properties": {
        +    "errors": {
        +      "items": {
        +        "additionalProperties": true,
        +        "properties": {
        +          "code": {
        +            "type": "number"
        +          },
        +          "documentation_url": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "hint": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "message": {
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "slug": {
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "code",
        +          "slug",
        +          "message",
        +          "hint",
        +          "documentation_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "messages": {
        +      "type": "array"
        +    },
        +    "request_id": {
        +      "minLength": 1,
        +      "type": "string"
        +    },
        +    "result": {},
        +    "success": {
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "success",
        +    "result",
        +    "errors",
        +    "messages",
        +    "request_id"
        +  ],
        +  "type": "object"
        +}
  2. 12 tool updates
    • First observedacademy_lesson
    • First observedacademy_lessons
    • First observedacademy_levels
    • First observedacademy_playbook
    • First observedacademy_playbooks
    • First observedacademy_recipe
    • First observedacademy_recipes
    • First observedacademy_search
    • First observedacademy_tutor_context
    • First observedacademy_welcome
    • First observedfetch
    • First observedsearch

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables read-only, provenance-aware research over Discord by pairing an explicitly authorized Discord Desktop local-RPC/OAuth2 path for bounded live channel snapshots with message, thread, and channel search across a locally maintained archive, without writes, deletes, or session-token automation.
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables reading Gmail messages and managing drafts without sending, managing Calendar events, and searching, downloading, uploading, or updating Drive files for a personal account through local OAuth-backed tools.
    20
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables bounded, read-only code-graph search, neighbor/impact tracing, and architecture queries through a local offline gateway, while keeping source contents and mutation operations out of model-callable tools.
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.