A modular Model Context Protocol (MCP) server for Azure DevOps integration, providing tools to manage user stories and test cases
Server has 6 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-50 chars, below ideal 50-200 char range) and input schemas with types. However, parameter descriptions are minimal or missing context. Output schemas are undocumented, tools return free-text strings rather than structured JSON. Error handling is generic ('Error retrieving...') with no recovery guidance. No enum constraints on state/priority parameters despite known valid values. Tool naming is clear (verb_noun pattern), but composition issues exist: update_story accepts 10 optional parameters with no guidance on mutual exclusivity or field dependencies.
Create a new user story in Azure DevOps
Get user stories filtered by state
Get detailed information for a specific user story
Retrieve user stories from Azure DevOps
Search for user stories by title
Update a user story with new field values
Output schemas undocumented. All tools return free-text strings (e.g., 'Retrieved 50 user stories:\n[...]') instead of structured JSON. LLMs cannot parse or chain results reliably.
Parameter 'state' in get_stories_by_state and update_story accepts free-form strings with no enum constraint. Description lists examples ('New', 'Active', 'Resolved', 'Closed') but LLMs may hallucinate invalid values like 'pending' or 'in-progress'.
update_story has 10 optional parameters with no documentation of mutual exclusivity, dependencies, or validation rules. LLMs cannot determine which combinations are valid or what happens if conflicting updates are passed.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Error handling is generic and non-actionable. Errors like 'Error retrieving user stories: <exception>' provide no recovery guidance. LLMs cannot determine if the error is retryable, user-fixable, or fatal.
Tool descriptions are 40-50 characters, below the 50-200 char baseline for A+ tools. Descriptions lack context on WHEN to use each tool vs. alternatives (e.g., when to call search_stories_by_title vs. get_stories_by_state).