MCP server for VEX Robotics Competition data using RobotEvents API
The server defines 15 tools with explicit schemas and descriptions. All tools follow verb_noun naming conventions (search-, get-, list-, analyze-) which is strong. However, there are significant gaps: (1) output schemas are NOT documented anywhere in the source, tools lack return type specifications, making it impossible for LLMs to plan downstream calls; (2) parameter descriptions are present but often minimal (avg ~50 chars, below the 72-char baseline); (3) no error handling guidance is visible, tools do not indicate what to do on failure or which errors are retryable; (4) no tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all being READ_ONLY operations; (5) several parameter relationships are undocumented (e.g., search-teams filters are applied client-side per descriptions, but this constraint is not clearly stated); (6) no pagination details in search tools despite risk of large result sets. The schemas themselves are well-formed JSON Schema with types and enums, which is a strong point. All 15 tools have both names and descriptions, meeting baseline requirements. However, the lack of output schema documentation and error recovery guidance significantly limits agent usability.
Analyze teammates and opponents for all matches of a team at an event. Shows each team's recent award history to help understand their competitive background. Useful for pre-competition scouting and match preparation.
Get awards information for a specific VEX event including team winners, individual winners, and award details
Get detailed information about a specific VEX event by event ID or SKU code
Get a single VEX Forum post by its ID
Get a VEX Forum topic by ID, including the topic details and posts/replies
Get a VEX Forum user's profile information by username
Output schemas completely undocumented. No tools specify return types, field names, or structure. LLMs cannot plan downstream tool calls or extract required fields without calling tools and inferring structure.
No error handling guidance. Tools do not indicate what to do on failure: are errors retryable? Should the agent ask the user? Is it fatal? No recovery paths documented.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 67 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 57 | - | v1 |
Get the latest topics from the VEX Forum, optionally filtered by category
Get skills scores for VEX teams, either for a specific event or a team's skills history
Get all awards won by a specific VEX team throughout their competitive history. Shows award titles, events, and seasons.
Get detailed information about a specific VEX team by team ID or team number
Get ranking information for VEX teams, either for a specific event or a team's historical rankings
List all categories available on the VEX Forum
Search for VEX robotics events by various criteria like name, season, program, level, or date range
Search the VEX Forum (vexforum.com) for topics and posts about VEX robotics. Supports filtering by category, user, date, and sorting options.
Search for VEX teams by various criteria like team number, event participation, country, program, or grade level
No pagination details for search tools (search-teams, search-events, search-forum). Descriptions do not indicate result limits, offset/page parameters, or total counts. Risk of returning thousands of results and exhausting context window.
Tool annotations missing. All 15 tools are READ_ONLY (no side effects), but readOnlyHint is not declared in tool definitions. LLMs cannot infer safety and may treat them as potentially destructive.
Client-side filtering mentioned in descriptions (search-teams, search-events, search-forum 'filtered client-side') but not enforced by schema. This creates confusion about what the API returns vs what the tool processes. Ambiguous responsibility between server and client.
Parameter descriptions often generic or minimal. Examples: 'Team numbers to search for' lacks guidance on format validation; 'Event IDs to search for' does not explain what happens if IDs do not exist; 'Username to filter posts by' does not specify case sensitivity or partial-match behavior.