Azure DevOps MCP Server Workshop

Duration: 90 minutes Format: Presentation + Live Demo + Hands-on Lab Audience: Developers, platform & DevOps engineers, Azure DevOps administrators Focus: Installing and using the Azure DevOps MCP Server with AI agents — and how it compares to the REST API Lab Guide: ado-mcp-LAB.md (5 hands-on exercises against a sandbox project)


Workshop Overview

The Azure DevOps MCP Server brings Azure DevOps context — work items, repositories, pull requests, pipelines, wikis, and test plans — directly to AI agents such as GitHub Copilot. Instead of writing REST calls and parsing JSON, your team can ask in natural language: "List the bugs assigned to me in the current iteration" or "Summarise the failing tests in the last build of the Payments pipeline."

This workshop takes attendees from zero to productive: what the Model Context Protocol (MCP) is, how to install both the Remote (preview, hosted) and Local (npx/stdio) servers, how authentication and access scoping work, a guided tour of the tool surface, hands-on exercises against a sandbox project, and a thorough, decision-oriented comparison of the MCP server vs. the Azure DevOps REST API.

Note: The Azure DevOps MCP Server is a thin abstraction layer over the REST APIs. It does not replace the REST API — it makes Azure DevOps data and actions conversational and agent-accessible. Understanding when to reach for each is the central skill this workshop builds.

Learning Objectives

Prerequisites

Requirement Details
Azure DevOps Organisation Connected to Microsoft Entra ID. A free org works — https://dev.azure.com
VS Code Latest stable or Insiders, with the GitHub Copilot + Copilot Chat extensions
GitHub Copilot Any paid tier (Pro, Business, or Enterprise) with Agent Mode available
Node.js 20+ Required only for the Local server (node --version)
Azure CLI Optional — enables az login authentication for the Local server
Permissions Membership in the target project(s) and access to the resources you query

Session Agenda

Section Topic Time
1 What Is MCP & Why Azure DevOps MCP 10 min
2 Setup, Installation & Authentication 15 min
3 Capability Tour — Tools by Domain 15 min
☕ Break 5 min
4 Hands-On: Driving a Test Azure DevOps Project 15 min
5 MCP vs REST API — Comprehensive Comparison 15 min
6 Governance, Security & Best Practices 10 min
7 When to Use Which & Wrap-Up 5 min

Total: 90 minutes (format: concept → demo → discussion)


1. What Is MCP & Why Azure DevOps MCP (10 min)

Key Points

Why It Matters

Without MCP With the ADO MCP Server
Switch to the portal or write a script to fetch work items Ask "What's assigned to me this sprint?" in chat
Copy/paste build logs into the agent to debug a failure Agent pulls the failing build log and reasons over it directly
Manually correlate a PR, its commits, and linked work items Agent traverses the links and summarises the change set
Context lives outside the agent — you are the integration Context flows to the agent — it becomes a teammate

The Big Picture

graph LR
    Dev["User/Developer"] -->|natural language| Agent[AI Agent<br/>Copilot in VS Code]
    Agent -->|MCP tool calls| Server[Azure DevOps<br/>MCP Server]
    Server -->|REST under the hood| ADO[(Azure DevOps<br/>Services)]
    ADO -->|JSON| Server
    Server -->|structured results| Agent
    Agent -->|answer and actions| Dev

💡 Mental model: The MCP server is the translator and concierge between your agent and Azure DevOps. You speak intent; it speaks REST.

Discussion Points


2. Setup, Installation & Authentication (15 min)

Key Points

There are two ways to run the server. Lead with the Remote server — it is the recommended path and requires no local installation. Use the Local server when you need a stdio setup, a non-Entra organisation, PAT auth, or a client that the remote preview does not yet support.

Remote MCP Server Local MCP Server
Status Public preview Generally available
Installation None — hosted by Azure DevOps Node.js 20+ and npx
Transport Streamable HTTP stdio
Authentication Microsoft Entra ID (OAuth) Entra ID or Personal Access Token
Endpoint https://mcp.dev.azure.com/{organization} npx -y @azure-devops/mcp {organization}
Clients today VS Code, Visual Studio VS Code, VS 2022, Cursor, Claude Code, Codex, others
Best for Fast start, minimal config, always current Air-gapped/PAT scenarios, other clients, tool filtering by domain

Create .vscode/mcp.json in your project:

{
  "servers": {
    "ado-remote-mcp": {
      "url": "https://mcp.dev.azure.com/{organization}",
      "type": "http"
    }
  },
  "inputs": []
}

Replace {organization} with your org name (e.g. contoso). Save the file, start the server from the MCP view in VS Code, authenticate with your Microsoft Entra account when prompted, and try: List ADO projects.

Note: You can omit the organisation from the URL (https://mcp.dev.azure.com/), but then you must provide the org name as context in each prompt.

Local Server — Installation (Alternative)

Add .vscode/mcp.json with an input prompt for the org name:

{
  "inputs": [
    {
      "id": "ado_org",
      "type": "promptString",
      "description": "Azure DevOps organization name (e.g. 'contoso')"
    }
  ],
  "servers": {
    "ado": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@azure-devops/mcp", "${input:ado_org}"]
    }
  }
}

Save, click Start, switch Copilot Chat to Agent Mode, choose Select Tools, and run List ADO projects. The first tool call opens a browser to sign in.

Note: Use the @azure-devops/mcp@next nightly tag to preview the latest tools and fixes.

Authentication & Access Model

Important: Today, only VS Code and Visual Studio support the Remote server, because other clients (Copilot CLI, Claude, Codex, Cursor) require dynamic OAuth client registration in Entra. For those clients, use the Local server.

🖥️ Demo: First Connection in Under Two Minutes

  1. Open an empty folder in VS Code and create .vscode/mcp.json for the Remote server
  2. Start the server from the MCP view; complete the Entra sign-in
  3. Open Copilot Chat in Agent Mode and run List the projects in my Azure DevOps organization
  4. Show the tool-approval prompt and the returned project list
  5. (Optional) Swap to the Local config and show the org-name input prompt

Discussion Points


3. Capability Tour — Tools by Domain (15 min)

Key Points

The server organises its tools into nine domains. With the Local server you load only the domains you need (-d core work-items repositories); with the Remote server you scope with the X-MCP-Toolsets header. Always keep core enabled so the agent can resolve projects and teams.

Domain What it covers Example prompt
Core Orgs, projects, teams, identities "List teams in the Tailspin project"
Work Iterations, team settings, capacity "Show the current iteration for the Web team"
Work Items Create/read/update/link work items, queries, backlogs, WIQL "Create a bug titled 'Login 500' in Tailspin"
Repositories Repos, branches, files, commits, pull requests, threads "Open a PR from feature/login to main"
Pipelines Build definitions, runs, logs, changes, artifacts, stages "Why did the last Payments build fail?"
Wiki List/read/create/update wiki pages "Create a wiki page /Onboarding with setup steps"
Test Plans Plans, suites, cases, results "List failing tests from build 4821"
Search Code, wiki, and work-item full-text search "Search code for 'ConnectionString'"
Advanced Security GitHub Advanced Security for ADO alerts "Show secret-scanning alerts on the api repo"

Read vs. Write Tools

Each domain mixes read tools (list, get, search) and write tools (create, update, link, run). Write tools always surface a confirmation prompt in the client before they execute — the agent cannot silently mutate your project.

💡 Toolset hygiene: Loading every tool can overwhelm the model and hit client tool limits. Scope to the domains a given repo actually needs. A docs repo might load only core, wiki, and search.

High-Value Workflows the Tools Unlock

🖥️ Demo: One Prompt Per Domain

  1. Core/Work Items: "List my active work items in <project> for the current iteration"
  2. Repositories: "List open pull requests I'm a reviewer on in <project>"
  3. Pipelines: "Show the status of the last 5 builds for the <pipeline> definition"
  4. Search: "Search the code for TODO: security across <project>"
  5. Show the Select Tools picker and how disabling a domain changes what the agent can do

Discussion Points


☕ Break (5 min)


4. Hands-On: Driving a Test Azure DevOps Project (15 min)

Key Points

This section is hands-on — attendees work through the lab against a sandbox project they provision and seed. The lab guide (ado-mcp-LAB.md) contains the full step-by-step exercises; this section frames what to practise and what "good" looks like.

What You'll Do

  1. Provision a sandbox: create a free Azure DevOps organisation (Entra-connected) and a project named mcp-sandbox
  2. Seed content: import a sample repo, create a few work items, and run a simple pipeline so there is real data to query
  3. Connect the server: drop in .vscode/mcp.json (Remote first; Local as fallback) and authenticate
  4. Read workflows: list projects, list your work items, inspect a PR, fetch a build log
  5. Write workflows (with confirmation): create a bug, add a child task, open a draft PR, create a wiki page

Effective Prompting Patterns

"env": {
  "ado_mcp_project": "mcp-sandbox",
  "ado_mcp_team": "mcp-sandbox Team"
}

Add this line to .github/copilot-instructions.md so the agent reliably reaches for the server:

This project uses Azure DevOps. Always check to see if the Azure DevOps MCP server has a tool relevant to the user's request.

Success Criteria

Discussion Points


5. MCP vs REST API — Comprehensive Comparison (15 min)

Key Points

This is the heart of the workshop. The MCP server and the REST API are complementary, not competing. The MCP server is a thin, curated, conversational layer; the REST API is the complete, deterministic, programmable surface beneath it.

Conceptual Difference

Azure DevOps MCP Server Azure DevOps REST API
Primary consumer AI agents (and the humans driving them) Code, scripts, and automation
Interface Natural language → tool calls HTTP verbs + JSON over versioned endpoints
Paradigm Conversational, intent-based Imperative, contract-based
Who handles reasoning The language model The developer who wrote the code
Output Summarised/structured for the agent Raw, complete JSON payloads

Detailed Comparison Matrix

Dimension MCP Server REST API
Setup effort 🟢 Low — drop in mcp.json, sign in 🟡 Medium — auth, client/SDK, endpoint wiring
Discoverability 🟢 High — agent lists/uses tools dynamically 🔴 Low — read docs, find routes & params
Coverage / completeness 🟡 Curated subset of common operations 🟢 Complete — every Azure DevOps capability
Determinism / repeatability 🔴 Non-deterministic (model decides) 🟢 Fully deterministic
Best in interactive use 🟢 Excellent — chat, exploration, triage 🟡 Clunky — not built for conversation
Best in automation / CI 🔴 Not designed for unattended pipelines 🟢 Purpose-built for scripts & pipelines
Latency & cost 🟡 Model round-trips + token cost 🟢 Direct call, no token cost
Error handling 🟡 Model interprets; can be fuzzy 🟢 Explicit status codes & error contracts
Versioning & stability 🟡 Preview/evolving tool surface 🟢 Stable, explicitly versioned (api-version)
Auth model 🟢 Entra OAuth as the signed-in user 🟡 PAT / OAuth / service principal wiring
Bulk / high-volume ops 🔴 Inefficient for thousands of records 🟢 Pagination & batch built for scale
Learning curve 🟢 Speak intent in plain language 🔴 Learn routes, bodies, and data model
Auditability of intent 🟡 Conversational, less precise 🟢 Exact request/response logged

Pros, Cons & Requirements

✅ MCP Server — Pros ✗ MCP Server — Cons 📋 Requirements
Natural language, zero boilerplate Non-deterministic outputs An MCP client (VS Code/VS)
Dynamic tool discovery Curated subset, not full coverage Entra-connected org (remote)
Permissions enforced as the user Token cost & added latency Agent in the loop
Great for exploration & triage Not meant for unattended automation Preview caveats for remote
Read/write with confirmation prompts Harder to audit exact intent Trust in model behaviour
✅ REST API — Pros ✗ REST API — Cons 📋 Requirements
Complete capability coverage Verbose — you write every call Auth setup (PAT/OAuth/SP)
Deterministic & repeatable Steeper learning curve Knowledge of routes & schema
Ideal for CI/CD & batch jobs No built-in natural-language layer HTTP client or SDK
Stable, explicitly versioned More upfront integration effort Error-handling code
Precise, fully auditable Not conversational Maintenance as APIs evolve

Decision Flow

graph TD
    Start[Need to interact with Azure DevOps] --> Q1{Interactive or<br/>unattended?}
    Q1 -->|Interactive in IDE| Q2{Operation exists<br/>as a tool?}
    Q1 -->|Unattended automation| REST[Use the REST API]
    Q2 -->|Yes| MCP[Use the MCP Server]
    Q2 -->|No, full control| REST
    MCP --> Hybrid{Need determinism<br/>or bulk scale?}
    Hybrid -->|Yes| REST
    Hybrid -->|No| Done[Stay in the agent]

The Hybrid Reality

Most teams use both: the MCP server for day-to-day interactive work inside the IDE (triage, review, debugging, documentation), and the REST API for scheduled jobs, governance automation, bulk operations, and anything that must be deterministic and auditable. Remember the server is built on the REST API — choosing MCP never closes the door to REST.

💡 Rule of thumb: If a human is in the loop and exploring, prefer MCP. If a machine runs it on a schedule and must not vary, prefer REST.

Discussion Points


6. Governance, Security & Best Practices (10 min)

Key Points

The server is powerful, so scope and guardrails matter. Three controls do most of the work: read-only mode, toolset/tool filtering, and least-privilege identity.

Scoping Controls

Control Remote (header) Local (arg) Purpose
Read-only mode X-MCP-Readonly: true (use read tools only) Prevent any writes to Azure DevOps
Toolsets X-MCP-Toolsets: repos,wiki,wit -d repositories wiki work-items Load only the domains you need
Individual tools X-MCP-Tools: core_list_projects,... n/a Surgical allow-list of tools
Early access X-MCP-Insiders: true @azure-devops/mcp@next Preview new tools

Example — a read-only, repos-and-wiki-only remote server:

{
  "servers": {
    "ado-remote-mcp": {
      "url": "https://mcp.dev.azure.com/{organization}",
      "type": "http",
      "headers": {
        "X-MCP-Toolsets": "repos,wiki",
        "X-MCP-Readonly": "true"
      }
    }
  },
  "inputs": []
}

Security Practices

Important: MCP does not bypass Azure DevOps permissions, branch policies, or audit logging. A write performed via an MCP tool is the same operation — subject to the same policies — as one performed in the portal or via REST.

Discussion Points


7. When to Use Which & Wrap-Up (5 min)

Key Takeaways

When to Choose

Choose the MCP Server when… Choose the REST API when…
Working interactively in the IDE Running scheduled/unattended automation
Exploring, triaging, or summarising You need deterministic, repeatable results
You want zero boilerplate You need complete capability coverage
The operation exists as a tool You're doing bulk/high-volume operations
A human reviews each action You require precise, auditable requests

Immediate Next Steps

  1. Connect the Remote server to a sandbox org and run five read prompts
  2. Add the recommended line to .github/copilot-instructions.md
  3. Decide your team's default toolset scope and whether to start read-only
  4. Identify one interactive workflow to move to MCP and one automation to keep on REST
  5. Complete the lab (ado-mcp-LAB.md) end-to-end

Discussion Points


Appendix

Workshop Materials

Material Path Purpose
Lab Guide ado-mcp-LAB.md 5 hands-on exercises against a sandbox project
Slide Deck ado-mcp.slidev.md Presentation deck (GitHub dark theme)

Key URLs

Resource URL
Azure DevOps https://dev.azure.com
ADO MCP Server (GitHub) https://github.com/microsoft/azure-devops-mcp
Remote MCP Server setup https://learn.microsoft.com/en-us/azure/devops/mcp-server/remote-mcp-server
ADO MCP Server overview https://learn.microsoft.com/en-us/azure/devops/mcp-server/mcp-server-overview
Full tool catalog (TOOLSET.md) https://github.com/microsoft/azure-devops-mcp/blob/main/docs/TOOLSET.md
ADO REST API reference https://learn.microsoft.com/en-us/rest/api/azure/devops/
Model Context Protocol https://modelcontextprotocol.io

Tool Domains Reference

Domain Local -d name Remote toolset Always on?
Core core (always available) ✅ Yes
Work work work No
Work Items work-items wit No
Repositories repositories repos No
Pipelines pipelines pipelines No
Wiki wiki wiki No
Test Plans test-plans testplan No
Search search (within domains) No
Advanced Security advanced-security (within domains) No

Glossary

Term Definition
MCP Model Context Protocol — open standard for connecting agents to tools
MCP Server A process exposing tools over MCP (here, Azure DevOps operations)
MCP Client The host that lets a model call tools (VS Code, Visual Studio, etc.)
Tool A single, focused operation with typed inputs/outputs
Toolset / Domain A named group of related tools (core, repos, wit, …)
Remote Server Hosted, no-install server at mcp.dev.azure.com (preview)
Local Server npx/stdio server run on your machine (GA)
Entra ID Microsoft Entra ID (formerly Azure Active Directory)
PAT Personal Access Token — token-based Azure DevOps auth
Spotlighting Technique that marks untrusted external content for the model
WIQL Work Item Query Language

Post-Workshop Actions


Workshop guide for the Azure DevOps MCP Server Workshop