An MCP server that exposes Azure DevOps work-item operations — works with any MCP client (Claude Code, Claude Desktop, custom agents, or your own orchestrator).
POST https://<this-host>/<org>/<project>/mcp
Transport: Streamable HTTP (JSON-RPC 2.0). Protocol version: 2025-06-18.
Send an Azure DevOps Personal Access Token (PAT) as Basic auth — empty username, PAT in the password slot.
Authorization: Basic <base64(":")>
Required PAT scopes: Work Items (Read, Write & Manage), Identity (Read) for resolve_user, and Project & Team (Read) for iteration/area listing.
| Tool | Purpose |
|---|---|
list_work_items | Filter by assignee, type, state, dates. Returns minimal summary fields including changedBy. |
list_recently_updated | Items changed since a timestamp. Convenience wrapper for polling. |
list_new_work_items | Items created since a timestamp. |
get_work_item | Full detail for one item: description, repro steps, iteration, area, tags, parent, recent comments. |
list_mentions_since | Find @mentions in comments created after a timestamp. Returns oldest first for tick-by-tick processing. |
query_wiql | Run a raw WIQL SELECT. Returns matching ids + hydrated summaries (or just ids with hydrate: false). |
| Tool | Purpose |
|---|---|
create_work_item | Create a new item of the given type. Set title, description, assignee, iteration/area, tags, parent in one call. |
update_work_item | Patch arbitrary fields (title, description, assignee, iteration, area, tags, state, parent, or any custom field via fields escape hatch). |
update_state | Focused wrapper to change System.State. Allowed transitions depend on the process template. |
add_link | Add a relationship link: parent, child, related, predecessor, successor. |
add_comment | Append an HTML comment. For @mentions, use Azure DevOps's data-vss-mention markup. |
| Tool | Purpose |
|---|---|
resolve_user | Look up users by display name or email. Use the returned uniqueName in assignedTo fields. |
list_iterations | Iteration nodes (sprints) as backslash-joined paths — for setting iterationPath on create/update. |
list_areas | Area nodes as backslash-joined paths — for setting areaPath. |
curl -X POST https://<this-host>/<org>/<project>/mcp \
-H "Authorization: Basic $(printf ':%s' "$ADO_PAT" | base64)" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'