A teaching MCP server for AI-901 certification exam preparation. Provides tools for scoring answers, validating practice items, retrieving questions, generating new items with Claude, and grading lab submissions. Integrates with Microsoft Learn for grounding content.
Five tools with complete input schemas and descriptions. Naming is clear and verb-based (score_answer, validate_item, next_question, generate_item, grade_lab). Descriptions are substantive (100 - 200 chars), explaining WHAT, WHEN, and WHY. However, parameter descriptions lack detail on constraints, formats, and error recovery. Output schemas are not documented, LLMs cannot infer what fields to expect from responses. Error handling is minimal; no guidance on retryability or recovery paths. Tool composition is sound (each does one thing), but missing pagination hints and field-level documentation.
Author a fresh AI-901 item with Claude (optional, needs ANTHROPIC_API_KEY). This is the Anthropic-SDK showcase. When ANTHROPIC_API_KEY is set, it asks Claude to write one original, WWL-styled item as JSON. When the key is absent, it returns a clear, non-failing message so the server still runs.
Grade a lab submission against a canonical answer key. answer_key follows labs/README.md: a total_points integer and a checks list of {id, description, expected, points}. submission maps each check id to the value the learner observed. Comparison is case-insensitive and trimmed, so the grading stays transparent and easy to audit and extend.
Return the next practice item, Phase 1 only (stem and choices). Picks from the requested domain, or rotates across the bank when no domain is given. The correct answer and rationale are withheld on purpose; call score_answer after the learner commits to a choice.
Grade a chosen letter (A-D) against a bank item. Returns whether the choice is correct plus the per-choice rationale, and updates in-memory progress for the item's domain. Use this to evaluate a learner's answer after they commit to a choice.
Validate a practice item against AI-901 and WWL structural rules. Returns a STRUCTURED list of issues rather than prose, so an agentic loop can read the issues and repair the item. An empty issues list means valid. This is the structured-error pattern the repair step depends on.
Output schemas not documented. LLMs cannot infer response structure (fields, types, nesting). Forces agents to guess what data is available for downstream calls.
Parameter descriptions lack format/constraint details. 'item_id' (integer) has no range hint; 'chosen' (string A-D) lacks enum constraint; 'domain' (string) has no valid values list. Invites invalid LLM input.
No error handling guidance. Tools return success/failure but do not tell LLM what to do on error (retry? ask user? fatal?). Agents cannot recover from failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
generate_item silently degrades when ANTHROPIC_API_KEY is absent. No tool annotation (destructiveHint) on generate_item (WRITE risk). No confirmation step before item creation.
grade_lab accepts complex nested objects (answer_key, submission) with no schema validation hints. LLMs cannot infer required structure (total_points type? checks array format? check.id type?).