MCP server for interacting with Azure DevOps work items, backlog items, and related operations
The server defines 12 tools with visible Pydantic request models and input schemas. All tools have descriptions and basic parameter documentation. However, there are significant gaps: output schemas are not explicitly documented, many parameter descriptions are minimal or generic, error handling is crude (generic try-except returning error dicts), and there is no guidance for error recovery. Tool naming is generally clear (verb_noun pattern followed), but some tools exhibit overlapping responsibility (e.g., 8 different query tools for work items when composition could reduce cognitive load). Parameter descriptions often lack constraints, format specifications, or dependency hints. The server follows basic MCP patterns but lacks the rigor expected for production-grade tooling. Average tool score across 12 tools: 58.
Add a comment to a work item.
Create a new work item.
Get all active work items in the project using default filters.
Get backlog items for a team or project.
Get work items assigned to a specific user.
Get work items by their IDs.
Get work items using WIQL (Work Item Query Language).
Output schemas not documented. Tools return data but LLMs cannot reliably parse results without knowing the expected structure (field names, types, nested objects).
Generic error handling. All tools use try-except that returns {"error": "message"} without categorizing the error as retryable, user-fixable, or fatal. LLMs cannot determine appropriate next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Get work items filtered by state with optional additional filters.
Get work items filtered by type and optionally by state.
Get work items with various filters applied.
Update the description of a work item.
Update the title of a work item.
Overlapping tool responsibilities. Eight tools query work items (get_work_items, get_work_items_by_query, get_work_items_by_type, get_work_items_by_state, get_work_items_with_filters, get_backlog_items, get_active_work_items, get_my_work_items). LLMs waste reasoning cycles deciding which to use; tool composition should reduce this.
Minimal parameter descriptions. Most parameters lack constraints (enums, min/max, format, regex), dependency hints, or examples. LLMs cannot validate input on their own.
No pagination support. Query tools (get_work_items_by_query, get_work_items_by_state, etc.) do not accept limit or offset parameters. Large result sets will blow context windows; LLMs cannot fetch additional pages.
Destructive operations lack confirmation or dry-run. create_work_item, update_work_item_title, etc. modify state but offer no confirmation step. Agents can accidentally trigger unwanted changes.
Tool names exhibit minimal clarity in edge cases. 'get_work_items_with_filters' is too generic and overlaps with 7 other query tools. No disambiguation in naming or descriptions.
No tool annotations. Tools are not tagged with readOnlyHint, destructiveHint, or idempotentHint. Agents cannot infer safety of operations from metadata.