
Connects Claude to Azure DevOps Boards via personal access token, letting you read and write work items without leaving your editor. Runs on Bun with stdio transport, so it works in Cursor, Claude Desktop, or any MCP host that supports local servers. You'll configure your Azure org, project name, and PAT either through environment variables or a dotenv file. The author ships it as azure-board-mcp on npm and provides both bunx one-liner setup and local clone options. Reach for this when you're triaging bugs or updating tasks and want to stay in the same context as your code instead of switching to the Azure web UI.
Sponsors
AZURE_ORG*Azure DevOps organization name
AZURE_PROJECT*Azure DevOps project name
AZURE_PAT*secretPersonal access token (Work Items: Read & Write)
MCP server for Azure DevOps. Work with tasks, sprints, bugs, pull requests, repositories, and pipelines directly from Claude, Cursor, or any MCP-compatible AI.
# 1. Configure your editors (Claude Code, Cursor, VS Code, Claude Desktop)
npx azure-board-mcp install
# 2. Sign in once
npx azure-board-mcp authenticate
# 3. Restart your editor — done
On first use the AI will ask which Azure DevOps project to work on and remember it.
npx azure-board-mcp authenticate
Opens your browser for Microsoft sign-in. Picks your org from a list. No Azure AD app setup required — uses a shared app registration built into the package.
For headless / CI environments or orgs that block third-party OAuth:
npx azure-board-mcp authenticate --pat
Create a PAT at https://dev.azure.com/{org}/_usersSettings/tokens with scopes: Work Items (Read & Write), Build (Read), Code (Read).
npx azure-board-mcp install
Detects and configures Claude Code, Cursor, VS Code, and Claude Desktop automatically.
Claude Code (~/.claude/settings.json):
{
"mcpServers": {
"azure": {
"command": "npx",
"args": ["-y", "azure-board-mcp@latest"]
}
}
}
Cursor (~/.cursor/mcp.json):
{
"mcpServers": {
"azure": {
"command": "npx",
"args": ["-y", "azure-board-mcp@latest"]
}
}
}
VS Code (User settings.json):
{
"mcp": {
"servers": {
"azure": {
"type": "stdio",
"command": "npx",
"args": ["-y", "azure-board-mcp@latest"]
}
}
}
}
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"azure": {
"command": "npx",
"args": ["-y", "azure-board-mcp@latest"]
}
}
}
Install a skill so Claude automatically knows when to use this MCP:
npx azure-board-mcp skills
This installs ~/.claude/skills/azure-board-mcp/SKILL.md. After restarting Claude Code, it will proactively use Azure DevOps tools whenever you ask about tasks, sprints, PRs, builds, etc.
npx azure-board-mcp <command>
COMMANDS
install Auto-configure MCP in detected editors
skills Install the Claude Code skill
authenticate Browser OAuth sign-in
authenticate --pat Personal Access Token sign-in
check Validate stored credentials
logout Clear stored credentials
help Show help
AUTHENTICATE FLAGS
--pat Use PAT instead of browser OAuth
--read-only Request read-only OAuth scopes
--client-id <id> Use your own Azure AD app
--tenant-id <id> Specify tenant (single-tenant apps only)
Work-item, commit, and PR lists are paginated — they return a compact page (default 15, max 50) with a
Showing X–Y of Nheader. Passskipto page through results instead of requesting a largetop. List views fetch only the fields they render, so they're fast and light on context.
| Tool | When to use |
|---|---|
auth_status | Diagnose auth issues, check which project is active |
switch_project | Change the active project, or list available ones |
| Tool | When to use |
|---|---|
list_work_items | My tasks, sprint board, filter by state/type/keyword (paginated) |
get_work_item | Full detail on a specific ticket: every field (custom ones like Definition of Done too), all comments, PRs. Nothing truncated |
create_work_item | Create a task, bug, user story, epic, feature |
update_work_item | Close, reassign, move sprint, update estimates |
add_comment | Post a note or status update on a ticket |
list_comments / update_comment / delete_comment | Read, edit, or delete ticket comments by ID |
list_child_work_items | Subtasks of a ticket, optionally the whole subtree |
delete_work_item | Move to Recycle Bin, or destroy permanently |
link_work_items | Set parent/child, related, or dependency links |
query_wiql | Advanced queries with custom WIQL (paginated) |
get_work_item_history | Audit trail — which fields changed, when, by whom |
get_backlog | Ordered, priority-ranked product backlog |
| Tool | When to use |
|---|---|
get_sprint | Current sprint dates and team capacity |
list_sprints | All sprints with start/end dates |
get_board | Kanban columns, state mappings, WIP limits |
list_team_members | Who's on a team (names, emails, admin flag) |
list_paths | Valid area / iteration path values for create/update |
| Tool | When to use |
|---|---|
list_repos | Discover repo names and URLs |
list_files | Browse directory structure |
get_file | Read file contents (up to 500 lines) |
list_commits | Recent commits on a branch (paginated) |
list_pull_requests | Open PRs, reviewer votes, merge status (paginated) |
list_branches | Branches with ahead/behind counts |
create_pr | Open a PR with reviewers (by email), linked work items, optional auto-complete |
get_pull_request | Full PR: description, reviewers and votes, linked work items, changed files |
list_pr_comments | Comment threads with file/line context and replies |
add_pr_comment | General comment, inline file comment, or reply to a thread |
update_pr_thread | Resolve or reopen a thread |
vote_pr | Approve, approve with suggestions, wait for author, reject, reset |
manage_pr_reviewers | Add (optionally required) or remove reviewers |
update_pr | Edit title/description/draft, complete (merge), auto-complete, abandon, reactivate |
| Tool | When to use |
|---|---|
list_pipelines | Discover pipeline definitions |
list_builds | Recent builds — status, result, branch, link |
run_pipeline | Trigger a pipeline run |
get_build_timeline | Which stage/job/task failed, with error/warning counts |
get_build_logs | Full logs and error messages of failed steps, or any step by name or log ID |
cancel_build | Cancel an in-progress build |
list_releases | Recent releases with per-environment deploy status |
create_release | Create and trigger a release from a definition |
Override stored credentials — useful for CI/Docker:
AZURE_ORG=my-org
AZURE_PROJECT=my-project
AZURE_PAT=my-pat # PAT auth
AUTH_TOKEN=my-token # OAuth bearer token
By default everyone shares the built-in app registration. If your org blocks it, or you need full control:
1. Register the app
azure-board-mcp)2. Configure it
In Authentication:
http://localhost → ConfigureIn API permissions:
Azure DevOpsuser_impersonation (delegated) → Add3. Use it
npx azure-board-mcp authenticate --client-id <your-app-id>
# Single-tenant:
npx azure-board-mcp authenticate --client-id <your-app-id> --tenant-id <your-tenant-id>
For org admins — pre-approve for everyone in your org:
https://login.microsoftonline.com/{tenant-id}/adminconsent
?client_id=e2ba32e7-6d24-4919-ba7b-37199c495247
&redirect_uri=http://localhost
MIT
azure-board-mcp