Three tools with basic naming and minimal descriptions. Tool names follow verb_noun pattern (dv_get_*, dv_search_*), which is good. However, descriptions are extremely brief (10-50 chars), falling below the 50-200 char LLM-optimized baseline. Input schemas are present but sparse: dv_get_courses has empty input ({}), while dv_get_course and dv_search_courses have single string parameters with descriptions. No output schemas documented. No error handling guidance. No parameter constraints (enums, ranges). Tool definitions inferred from CourseService.java rather than explicit MCP registration visible in code.
Get a single courses from Dan Vega by title
Get a list of courses from Dan Vega
Search courses containing a keyword
Descriptions critically short (10-50 chars). LLM cannot determine when/why to select tools. Baseline is 50-200 chars for optimal LLM reasoning.
No output schemas documented. LLMs cannot plan downstream calls or extract required fields (e.g., course_id for chaining).
dv_get_courses has empty input schema ({}). No pagination parameters (limit, offset, page_size). Large result sets will blow context window.
No error handling guidance. Responses do not tell LLM what to do on failure (retry, ask user, or fatal).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 37 | 2026-07-28+ | v2 |
Tool definitions inferred from CourseService.java; no explicit MCP tool registration visible in McpDemoApplication.java. ToolCallbacks.from() is a Spring AI abstraction, actual schema generation not visible.