mcp-ado-browser
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-ado-browserlist my active pull requests"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-ado-browser
Azure DevOps for MCP — via your browser, not a PAT.
An MCP (stdio) server that gives read-only access to Azure DevOps using only your existing browser session — no PAT, no Azure CLI, no official ADO MCP, no credential provider. The only source of authentication is the cookie session of a real browser, driven by Playwright on an isolated, dedicated profile.
It is org-wide by default: only the organization is required, and it browses every project, repo and feed you can access.
Data is fetched via page.evaluate(() => fetch(...)) executed inside the
dev.azure.com page context (same-origin), so session cookies attach automatically
and you get JSON back — never DOM scraping for data the REST API provides. Every
request carries X-TFS-FedAuthRedirect: Suppress so a dead session returns a clean
401 instead of an HTML login page.
Why these choices (restricted-environment friendly)
Concern | Decision |
No Playwright browser download |
|
SQLite without a native build |
|
One package, one binary | The MCP server and the |
No hardcoded values | org/project/ids come from flags/env or discovery; api-versions live only in |
Related MCP server: MCP Server for Azure DevOps
How it works
┌─ you sign in once (MFA) in a visible, chromeless window ─┐
▼ │
┌───────────────────┐ cookies persisted on an ┌────────────────────────┐
│ authenticate │──▶ isolated profile on disk ─▶│ headless work session │
│ (visible browser) │ │ (reuses the cookies) │
└───────────────────┘ └───────────┬────────────┘
│ page.evaluate(fetch)
MCP client (Claude / Cursor / …) ▼ same-origin, cookies attached
│ tools/call ┌──────────────────────┐ ┌─────────────────────┐
└─────────────▶│ mcp-ado-browser │────────▶│ dev.azure.com … │ → JSON
│ (stdio MCP server) │◀────────│ (your real session)│
└──────────┬───────────┘ └─────────────────────┘
▼ SQLite cache (TTL + Rev freshness)Authentication is your browser, not a token.
authenticateopens a real, visible browser window on a dedicated, isolated profile (never your daily browser). You sign in normally (MFA included). The tool detects success by polling an authenticated endpoint, then persists the session cookies on disk. No PAT or token is ever created or stored.Work runs headless. Subsequent runs launch the same profile headless and reuse the persisted cookies — no window, no re-login until the session expires.
Data comes back as JSON, not scraped HTML. Each tool runs
fetch(...)inside thedev.azure.compage context (same-origin), so the session cookies attach automatically. Every request sendsX-TFS-FedAuthRedirect: Suppress, so an expired session returns a clean401(surfaced as a structuredAUTH_REQUIREDerror) instead of an HTML login page. Cross-host services (feeds / packages) use the same browser cookie jar.Responses are cached in a local SQLite DB (
node:sqlite) with a configurable TTL. On a stale hit, a cheap freshness check (System.Revfor work items) avoids re-downloading unchanged data.When the session dies, tools fail fast with
AUTH_REQUIRED— just re-runauthenticateand continue.
Getting started
Prerequisites: Node ≥ 22.5 and Google Chrome (or Microsoft Edge) installed. You do not need a PAT, the Azure CLI, or any admin setup.
Two ways to run it:
From npm (once published):
npx mcp-ado-browser …Straight from GitHub, no npm account needed (builds on install):
npx github:VMargan/mcp-ado-browser …
# 1) Sign in once (opens a VISIBLE, chromeless window; complete MFA).
# Persists the session on an isolated profile, then re-validates headless.
npx mcp-ado-browser authenticate --org <your-org>
# 2) Run the MCP stdio server (headless, reusing the persisted session)
npx mcp-ado-browser --org <your-org>Config can be passed as CLI flags or env vars (flags win):
npx mcp-ado-browser --org <org> [--project <project>] [--channel chrome|msedge]
# equivalently:
ADO_ORG=<org> npx mcp-ado-browserThen wire it into your MCP client (below) and ask it things like “list my active pull requests”, “show work item 1234 and its linked PR”, or “what feeds and packages are in this org?”.
Use it from an MCP client (Claude Desktop, Cursor, …)
{
"mcpServers": {
"azure-devops": {
"command": "npx",
"args": ["-y", "mcp-ado-browser", "--org", "<your-org>"]
}
}
}Run npx mcp-ado-browser authenticate --org <your-org> once in a terminal first so the
session is persisted; the server then runs headless and reuses it. Re-run
authenticate whenever the session expires (the tools return a structured
AUTH_REQUIRED error when it does).
Tools (tools/list)
Tool | What it does |
| All projects you can access (org-wide). |
| All Git repos across the org (or one project). |
| WIQL (org-wide by default) or full-text (almsearch); |
| Work item with |
| The separate comments endpoint (project derived automatically). |
| A comment plus its downloaded attachments (size, sha256). |
| PRs org-wide, by repo, or by project; filter by status/author/target. |
| Metadata, branches, reviewers, linked work items (repo by id or name). |
| Threads, distinguishing system vs human. |
| Artifacts feeds → packages → versions. |
|
|
Configuration
Flag | Env | Default | Meaning |
|
| — | Organization (required). |
|
| — | Default project scope (optional; org-wide otherwise). |
|
|
| Isolated persistent browser profile. |
|
|
|
|
|
|
| Global cache TTL. Per-resource: |
|
| discovery/defaults | Force an api-version for all areas. |
|
| app mode | Use a normal browser window for sign-in. |
|
| headless | Run work with a visible window. |
Development & verification
npm install
npm run build
npm run verify # all offline gates (browser stack, MCP, tools, cache, artifacts, no-hardcoding)
npm run verify:live # adds the live acceptance pass against real Azure DevOps
npm run scan:secrets # pre-push secret / sensitive-data scan
npm run demo:live # drive the real stdio server as an MCP client (env-driven)npm run verify prints a detailed report, gate by gate, assertion by assertion.
BLOCKED_ON_AUTH is transitory: the run is not done until the live pass is green; the
only tolerated terminal exclusion is EMPIRICALLY_BLOCKED (with evidence), for the
cross-host artifact download only.
Security & privacy
Authentication is only your real browser session on a dedicated, isolated profile — no PAT or token is ever created, stored, or transmitted by this tool.
The session lives in
~/.mcp-ado-browser/profile(machine-local, gitignored).Fixtures and reports are anonymized;
npm run scan:secretsblocks pushes that would leak personal/org data or secrets (also enforced in CI).
License
MIT © VMargan
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/VMargan/mcp-ado-browser'
If you have feedback or need assistance with the MCP directory API, please join our Discord server