
Geschreven door Funs Janssen
Software Consultant
Ik ben Funs Janssen. Ik ontwikkel software en schrijf over de beslissingen die daarbij komen kijken: architectuur, ontwikkelmethoden, AI-tools en de zakelijke impact van technische keuzes. Deze blog is een verzameling praktische aantekeningen van echte projecten: wat schaalbaar is, wat misgaat en wat in blogvriendelijke voorbeelden vaak over het hoofd wordt gezien.
Picture this: a developer on your team connects GitHub Copilot to Azure DevOps, types "clean up the backlog" into agent mode, and goes to get coffee. When they come back, thirty work items have new titles, rewritten descriptions and a different priority. Nothing is technically broken. It is just not what anyone agreed to.
The Azure DevOps MCP Server makes this kind of thing a five-minute setup. Since the remote server became generally available in August 2026, you no longer install anything: you point your AI client at a Microsoft-hosted endpoint, sign in with Microsoft Entra, and the agent can read and change work items, pull requests, pipelines and wiki pages.
Most guides stop at "it connected". In this post I go one step further. I build AI tooling that works on Azure DevOps work items every day, so I will cover the setup I would hand a team, the guardrails I would switch on first, what agents are genuinely good at on your boards, and where they quietly go wrong.
What the Azure DevOps MCP Server actually does
MCP (Model Context Protocol) is the standard way AI assistants call external tools. The Azure DevOps MCP Server exposes your organization as a set of tools an agent can call: list projects, query work items, read a pull request, check a pipeline run, create or update a work item. The AI client decides which tool to call based on your prompt, then reasons over the result.
Remote vs. local: which one you should run
There are two flavors, and they now offer the same toolset:
- Remote MCP Server: hosted by Microsoft at
https://mcp.dev.azure.com/{organization}. No installation, updates are managed for you, and authentication runs through Microsoft Entra. It became generally available on August 5, 2026. - Local MCP Server: the open source microsoft/azure-devops-mcp package, run on your own machine with Node.js 20 or later. You pick the domains to load and handle updates yourself.
My default: use the remote server unless your client cannot connect to it (see the matrix below). Fewer moving parts, no Node versions to babysit, and one less thing on every developer's laptop.
What an agent can reach
The remote server groups its tools into toolsets: wit (work item tracking), work (iterations and boards), repos, pipelines, wiki, testplan, advsec (Advanced Security) and elm (Enterprise Live Migrations). By default, all of them are on. That default is the first thing I would change.
Before you connect: prerequisites and client support
Your organization must be backed by Microsoft Entra
The remote server authenticates with Microsoft Entra ID. Organizations that are standalone and use personal Microsoft accounts are not supported. If your organization is not connected to an Entra tenant yet, that is the first project, and it also lines up with Microsoft's broader push away from tokens, which I covered in the global PAT retirement post.
The client matrix nobody puts on one page
This is the part that trips people up most. Based on the remote MCP Server setup docs on Microsoft Learn:
- Works natively: Visual Studio Code with GitHub Copilot, Visual Studio 2022 and later, GitHub Copilot CLI, the GitHub Copilot app, Microsoft Copilot Studio and Microsoft Foundry.
- Works with a custom Entra app registration: Cursor and Claude Code. An admin registers an app, adds delegated permissions for the Azure DevOps MCP enterprise application, and grants consent. Each developer then configures the client ID.
- Not supported on the remote server: Claude Desktop and Codex, because they need dynamic OAuth client registration that Entra does not offer yet. Use the local server for these.
If half your team uses Cursor, budget time for the app registration before you announce anything.
Setup: the config I would give a team
The steps below use VS Code, because most teams start there. The headers work the same in any client that lets you set them.
Step 1: the basic remote connection
Create .vscode/mcp.json in your repository:
1{2 "servers": {3 "ado-remote-mcp": {4 "url": "https://mcp.dev.azure.com/your-organization",5 "type": "http"6 }7 },8 "inputs": []9}
Start the server from VS Code, sign in with your Entra account when prompted, and switch Copilot Chat to agent mode. Ask it to list your projects to confirm the connection.
Step 2: start read-only
Before anyone gets write access, turn on read-only mode with a single header:
1{2 "servers": {3 "ado-remote-mcp": {4 "url": "https://mcp.dev.azure.com/your-organization",5 "type": "http",6 "headers": {7 "X-MCP-Toolsets": "wit,work,repos,pipelines",8 "X-MCP-Readonly": "true"9 }10 }11 },12 "inputs": []13}
Read-only already covers most of the value: standup summaries, PR context, pipeline triage, sprint overviews. It also removes the entire "the agent rewrote my backlog" category of incidents.
Step 3: limit toolsets to what the role needs
X-MCP-Toolsets takes a comma-separated list. A developer usually needs wit, work, repos and pipelines. A product owner might only need wit and work. Leave out advsec, testplan and elm unless someone actually asked for them. One detail from the docs: if you restrict toolsets and still want the migration tools, you have to list elm explicitly.
For a tight, purpose-built agent you can go further with X-MCP-Tools and name individual tools, such as core_list_projects, wit_work_item. Do not combine it with X-MCP-Toolsets; pick one.
Step 4: commit the config so everyone runs the same one
Because .vscode/mcp.json lives in the repository, the guardrails travel with the code. Review changes to it in pull requests like any other config. It is a lot easier to discuss "should we drop read-only for this repo?" in a PR than to find out after the fact that three people did it locally.
The permission model: what the agent can and cannot do
OAuth scope and user permissions both have to allow it
An agent never gets more access than the person using it. Microsoft's docs are explicit: an operation succeeds only when both the OAuth scope granted to the client and the user's own Azure DevOps permissions allow it. Enabling a tool does not grant a permission. A stakeholder-level user with a write-enabled config still cannot edit what they could not edit in the browser.
That is reassuring, but notice what it means in practice: a project administrator running an agent with write access has an agent that can do everything a project administrator can do. The guardrail is your config, not the server.
When to turn on write access, and for whom
I would drop read-only only when there is a concrete, repeatable task that needs it, for example:
- Creating child tasks under a story the developer is about to start.
- Linking a pull request to its work item.
- Updating the state of a work item the developer owns.
Keep bulk operations out of agent mode entirely. And remember that the server now signals when requests approach rate limits and returns retry guidance, as noted in the Sprint 279 release notes. An agent looping over hundreds of items is exactly the traffic that hits those limits.
What works well, and what breaks
Three prompts that pay off
- Standup prep. "Get my work items in project Contoso changed since yesterday and tell me what I finished, what I am on and what is blocked." Read-only, fast, and saves a trip to the board.
- PR context from linked work items. "Get pull request 412 and its linked work items and explain what the change is for." Reviewers get the why, not just the diff.
- Pipeline failure triage. "Get the last failed run of the main pipeline and summarize the failing step." Handy for whoever is on build duty.
Two that go wrong
- Bulk backlog edits. "Clean up the backlog" gives an agent license to rewrite work items based on its own idea of good. You end up reviewing thirty diffs you did not ask for, with no single place to undo them.
- Sprint planning from vague items. Ask the agent to plan a sprint from a backlog full of titles like "fix login" and "improve performance", and it will produce a confident plan. The plan will look good and will be built on nothing.
One practical tip from the Microsoft Learn overview: agents sometimes answer from data they fetched earlier in the conversation. Adding "Do not use previously fetched data" to a prompt forces a fresh read.
Your backlog is the prompt
Why vague work items produce confident nonsense
This is the part the setup guides skip. The MCP server gives an agent access to your work items; it does not make them any better. When the agent summarizes a sprint, estimates effort, drafts tests or writes code for a story, the work item is the prompt. A story without acceptance criteria gets an implementation without acceptance criteria. A bug without reproduction steps gets a guess.
I made the same argument about AI-generated code in Guard AI Development at the Work Item, Not the PR: the cheapest place to catch bad AI output is before it starts, in the work item.
Fix the input, not just the agent
Two things help most:
- Clear titles and acceptance criteria before work starts. This is what I built ClearSpecs AI for. It runs inside Azure Boards, on the work item form, and helps write, rewrite and break down user stories, bugs and tasks. It suits the product owners and analysts who shape the backlog but will never open VS Code to configure an MCP server. Its agentic chat also queries live work items, right in the browser.
- A Definition of Ready that the board enforces. A checklist on each story ("acceptance criteria written", "dependencies identified", "test approach agreed") gives both humans and agents a clear signal that an item is ready to pick up. The free Checklist Extension can block the state change until the list is complete.
With better inputs, the MCP workflows from the previous section get noticeably better too.
Conclusion
The Azure DevOps MCP Server is the easiest way yet to give AI agents real context from your boards, repos and pipelines. The setup takes minutes. Getting it right takes a few deliberate choices:
- Use the remote server unless your client cannot connect to it.
- Start with
X-MCP-Readonlyand only the toolsets each role needs. - Commit the config to the repository so the guardrails are shared and reviewed.
- Keep bulk edits out of agent mode.
- Treat work item quality as part of your AI setup, because your backlog is the prompt.
If that last point hits home, start where the agent's input starts. Try ClearSpecs AI free from the Visual Studio Marketplace and give your next sprint's stories clear titles and acceptance criteria before any agent picks them up.
Frequently asked questions
Reacties
Nog geen reacties. Wees de eerste om te reageren.
Plaats een reactie

Geschreven door Funs Janssen
Software Consultant
Ik ben Funs Janssen. Ik ontwikkel software en schrijf over de beslissingen die daarbij komen kijken: architectuur, ontwikkelmethoden, AI-tools en de zakelijke impact van technische keuzes. Deze blog is een verzameling praktische aantekeningen van echte projecten: wat schaalbaar is, wat misgaat en wat in blogvriendelijke voorbeelden vaak over het hoofd wordt gezien.
Inhoud

AI agents act on whatever your Azure Boards work item says. Put the first guardrail upstream with blocking Definition of Ready and Done checklists.

Discover Agentic AI Chat in ClearSpecs AI for Azure DevOps. Query live work items, answer guided follow-up questions, draft test cases, split stories into tasks, and review proposed changes before applying them.