Setup
The eight read tools need a PAT with the Work Items read scope. The four write tools need one scope more.
1. Issue your PAT
Section titled “1. Issue your PAT”The server uses your own personal access token, not an agency one, so every write is attributed to you in the work item’s history.
-
In Azure DevOps, open User settings → Personal access tokens → New Token.
-
Scope it to the organisation that holds the board.
-
Under Work Items, select Read & write — that’s the
vso.work_writescope the write tools need. Read alone works for the eight read tools; the four write tools then refuse with a message naming the scope. (Read, write, & manage also works but grants more than this server uses.) -
Set an expiry you’ll remember. Once it lapses the read tools return “rejected the PAT” and the write tools report the scope message instead — both surface as a 401, so a write can’t tell an expired PAT from a read-only one.
-
Export it in your shell, then reload:
Terminal window export DEVOPS_API_KEY="your-pat-here"Terminal window source ~/.zshrc
Then restart your coding agent — MCP headers are read at startup.
2. Config entry
Section titled “2. Config entry”/setup writes this for you. Both x-devops-org and x-devops-project are required — the
server is not scoped to one client and has no defaults:
"devops-mcp": { "type": "http", "url": "https://devops.mcp.dotcollective.com.au/mcp", "headers": { "Authorization": "Bearer ${DEVOPS_API_KEY}", "x-devops-org": "<your-azure-devops-org>", "x-devops-project": "<your-project>" }}The token goes in the Authorization header — the same shape as figma-mcp
(Bearer ${FIGMA_API_KEY}) and productive-mcp (Bearer ${PRODUCTIVE_API_KEY}). There is no
separate agency API key for this server.
Your board URL is https://dev.azure.com/<org>/<project>/_boards — the two path segments are the
values you need.
| Header | Required | Notes |
|---|---|---|
| Authorization | Yes | Bearer + your Azure DevOps PAT |
| x-devops-org | Yes | No default |
| x-devops-project | Yes | No default |
| x-devops-team | No | Defaults to <project> Team — set it only to target another team |
| x-autonomous | No | true blocks all four write tools |
OpenCode uses {env:VAR} instead of ${VAR}; Antigravity uses serverUrl instead of type + url.
See Server Stack.
3. Verify
Section titled “3. Verify”Ask your agent to pull a work item you know exists. If it returns JSON with the title and state, the PAT, org and project are all correct. Anything else is covered in Troubleshooting.