Skip to main content
Glama
Azure DevOps MCP Server

Azure DevOps MCP Server

by allanbrunobr

Azure DevOps MCP Server

MCP (Model Context Protocol) server for managing Azure DevOps Work Items including Epics, Features, User Stories, Tasks, Bugs, and more.

Features

  • Read Work Items: Get individual work items or list by type with filters

  • Create Work Items: Create Epics, Features, User Stories, Tasks, Bugs, etc.

  • Update Work Items: Modify any field including state, assignment, description

  • Delete Work Items: Move to recycle bin or permanently delete

  • Query Work Items: Execute custom WIQL queries

  • Link Work Items: Create parent-child and other relationships

  • Get Metadata: List work item types, iterations, and area paths

Related MCP server: Azure DevOps MCP Server

Prerequisites

  • Node.js 18 or higher

  • Azure DevOps account with a Personal Access Token (PAT)

  • PAT needs Work Items (Read & Write) scope

Installation

npm install
npm run build

Configuration

Set the following environment variables:

export AZURE_DEVOPS_ORG="your-organization"
export AZURE_DEVOPS_PROJECT="your-project"
export AZURE_DEVOPS_PAT="your-personal-access-token"

Creating a PAT

  1. Go to Azure DevOps > User Settings > Personal Access Tokens

  2. Create new token with these scopes:

    • Work Items: Read & Write

  3. Copy the token (you won't see it again!)

Usage with Claude Desktop

Add to your Claude Desktop configuration (claude_desktop_config.json):

{
  "mcpServers": {
    "azure-devops": {
      "command": "node",
      "args": ["path/to/azure-devops-mcp/dist/index.js"],
      "env": {
        "AZURE_DEVOPS_ORG": "your-organization",
        "AZURE_DEVOPS_PROJECT": "your-project",
        "AZURE_DEVOPS_PAT": "your-pat"
      }
    }
  }
}

Available Tools

get_work_item

Get a single work item by ID.

{
  "id": 123,
  "expand": "Relations"
}

list_work_items

List work items by type with optional filters.

{
  "type": "User Story",
  "state": "Active",
  "assignedTo": "user@example.com",
  "top": 10
}

create_work_item

Create a new work item.

{
  "type": "Task",
  "title": "Implement login feature",
  "description": "<p>Details here</p>",
  "assignedTo": "developer@example.com",
  "priority": 2,
  "parentId": 100
}

update_work_item

Update an existing work item.

{
  "id": 123,
  "state": "Resolved",
  "comment": "Fixed the issue"
}

delete_work_item

Delete a work item.

{
  "id": 123,
  "permanent": false
}

query_work_items

Execute a WIQL query.

{
  "query": "SELECT [System.Id] FROM WorkItems WHERE [System.State] = 'Active' AND [System.AssignedTo] = @Me"
}

get_child_work_items

Get all children of a work item.

{
  "parentId": 100
}

Link two work items.

{
  "sourceId": 100,
  "targetId": 101,
  "linkType": "System.LinkTypes.Hierarchy-Forward",
  "comment": "Added as child"
}

get_work_item_types

List available work item types.

get_iterations

List project iterations/sprints.

get_area_paths

List project area paths.

  • System.LinkTypes.Hierarchy-Forward - Parent to Child

  • System.LinkTypes.Hierarchy-Reverse - Child to Parent

  • System.LinkTypes.Related - Related work items

  • System.LinkTypes.Dependency-Forward - Successor

  • System.LinkTypes.Dependency-Reverse - Predecessor

Common Work Item Fields

  • System.Title - Title

  • System.Description - Description (HTML)

  • System.State - State (New, Active, Resolved, Closed)

  • System.AssignedTo - Assigned user

  • System.AreaPath - Area path

  • System.IterationPath - Iteration/Sprint

  • System.Tags - Tags (semicolon separated)

  • Microsoft.VSTS.Common.Priority - Priority (1-4)

  • Microsoft.VSTS.Scheduling.StoryPoints - Story points

  • Microsoft.VSTS.Scheduling.OriginalEstimate - Original estimate

  • Microsoft.VSTS.Scheduling.RemainingWork - Remaining work

  • Microsoft.VSTS.Common.AcceptanceCriteria - Acceptance criteria

License

MIT

Available Tools

45 tools
get_area_pathsC

List area paths

Inputs: no named parameters.

get_child_work_itemsD

Get child work items of a parent

Inputs: parentId (required).

get_current_configB

Get current Azure DevOps organization and project configuration

Inputs: no named parameters.

get_current_sprintB

Get the current active sprint/iteration for a team. Returns sprint name, dates, and path.

Inputs: team.

get_current_userB

Get the current authenticated user identity (useful for knowing your user ID for voting on PRs, assigning work items, etc.)

Inputs: no named parameters.

get_current_user_permissionsA

Get the permission level and group memberships of the currently authenticated user. Returns whether the user is an org admin, project admin, contributor, or reader. Useful to understand what operations are allowed before attempting them.

Inputs: no named parameters.

get_iterationsB

List iterations/sprints

Inputs: no named parameters.

get_iteration_work_itemsA

Get all work items for a specific iteration/sprint path. Faster than query_work_items for sprint planning.

Inputs: iterationPath (required), type, state, top.

get_my_roleA

Get your current role in this MCP server. Shows detected role, source (Azure DevOps groups or env var), and what level of access you have.

Inputs: no named parameters.

get_projectB

Get current project details

Inputs: no named parameters.

get_repositoryC

Get details of a specific repository

Inputs: repositoryId (required).

get_sprint_boardB

Get the current sprint/iteration board with all work items assigned to it

Inputs: team.

get_sprint_capacityC

Get team member capacity for a sprint (hours per day, days off)

Inputs: iterationId (required), team.

get_sprint_work_itemsC

Get all work items in a specific sprint iteration.

Inputs: iterationId (required), team.

get_team_membersC

List all members of a specific team.

Inputs: teamId (required).

get_teamsB

List all teams in the current project. Use team names with get_sprint_board.

Inputs: no named parameters.

get_user_profileA

Get profile information for an Azure DevOps user by their user ID or "me" for the authenticated user.

Inputs: userId (required).

get_wikiC

Get details of a specific wiki

Inputs: wikiIdentifier (required).

get_wiki_pageB

Get content of a wiki page by path

Inputs: wikiIdentifier (required), path (required), recursionLevel.

get_wiki_page_revisionsB

Get the revision/edit history of a wiki page (who changed it and when)

Inputs: wikiIdentifier (required), path (required), top.

get_wiki_page_textA

Get the raw markdown/text content of a wiki page (without metadata).

Inputs: wikiIdentifier (required), path (required).

get_work_itemB

Get a single work item by ID with all fields and relations

Inputs: id (required), expand.

get_work_item_attachmentsC

List all attachments on a work item (files, images, documents).

Inputs: workItemId (required).

get_work_item_commentsB

Get all comments/discussion history for a work item

Inputs: workItemId (required), top, order.

get_work_item_parentA

Get the parent work item of a given work item. Returns null if the work item has no parent.

Inputs: workItemId (required).

get_work_items_by_idsA

Fetch multiple work items by their IDs in a single request. More efficient than calling get_work_item repeatedly.

Inputs: ids (required), fields, expand.

get_work_item_typeB

Get detailed information about a work item type including its fields, states, and icon.

Inputs: workItemType (required).

get_work_item_typesB

List available work item types

Inputs: no named parameters.

get_work_item_type_statesB

List all workflow states for a given work item type (e.g. Bug, Task, User Story). Useful to know valid state transitions.

Inputs: workItemType (required).

get_work_item_updatesA

Get the full change history of a work item (who changed what and when)

Inputs: workItemId (required), top.

list_dashboardsC

List team dashboards. Returns dashboard names and IDs.

Inputs: team.

list_project_groupsB

List all security groups defined in the current project.

Inputs: no named parameters.

list_repositoriesB

List all Git repositories in the project

Inputs: no named parameters.

list_saved_queriesC

List saved work item queries in the project

Inputs: top.

list_tagsB

List all work item tags in the project

Inputs: no named parameters.

list_wiki_pagesB

List all pages in a wiki (table of contents)

Inputs: wikiIdentifier (required), path, recursionLevel.

list_wikisB

List all wikis in the project

Inputs: no named parameters.

list_work_item_fieldsB

List all available work item field names and their reference names (useful for custom queries)

Inputs: no named parameters.

list_work_item_relation_typesA

List all available work item relation/link types (use these values with link_work_items)

Inputs: no named parameters.

list_work_itemsC

List work items by type (Epic, Feature, User Story, Task, Bug) with filters

Inputs: type (required), state, assignedTo, areaPath, +2 more.

query_work_itemsB

Execute a WIQL query. Example: SELECT [System.Id] FROM WorkItems WHERE [System.WorkItemType] = 'Bug' AND [System.State] = 'Active'

Inputs: query (required), top.

run_saved_queryB

Execute a saved work item query and return the matching work items

Inputs: queryId (required).

search_codeB

Search for code across all repositories in the project. Returns matching files with line context.

Inputs: searchText (required), top, repository, branch.

search_work_itemsA

Search work items by text across title, description and comments. Easier than WIQL for natural language queries.

Inputs: searchText (required), top, skip.

set_projectA

Switch to a different project within the current organization. Use list_projects first to see available projects.

Inputs: project (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.1/5.0

    Scored across 45 tools

    Disambiguation4/5

    Most tools have distinct purposes with clear resource-action pairs, such as get_work_item, list_work_items, and query_work_items. However, some overlap exists, like get_sprint_work_items and get_iteration_work_items, which could cause confusion despite descriptive names. Overall, the set is well-differentiated with only minor ambiguities.

    Naming Consistency5/5

    Tool names follow a highly consistent verb_noun pattern throughout, using verbs like get, list, search, set, and run. All names use snake_case uniformly, making them predictable and easy to parse. This consistency aids agent selection and reduces cognitive load.

    Tool Count3/5

    With 45 tools, the count is high and may feel heavy for the Azure DevOps domain, potentially overwhelming agents. While the tools cover many aspects, some could be consolidated or omitted without losing functionality. It's borderline excessive but still manageable given the comprehensive scope.

    Completeness5/5

    The tool surface provides extensive coverage for Azure DevOps, including work items, repositories, wikis, sprints, queries, and user management. It supports full CRUD-like operations (e.g., get, list, query, search) across all major resources, with no obvious gaps that would hinder agent workflows in this domain.

    Related MCP Connectors

    Related MCP Servers