Odel
Azure Boards MCP

Azure Boards MCP

Local
@broisnischalTypeScriptUpdated 2mo ago

Azure DevOps Boards work items over MCP (stdio). Requires Bun, org, project, and PAT.

azure-board-mcp

MCP server for Azure DevOps. Work with tasks, sprints, bugs, pull requests, repositories, and pipelines directly from Claude, Cursor, or any MCP-compatible AI.


Quick start

# 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.


Install & authenticate

Browser sign-in (default)

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.

PAT — Personal Access Token

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).


Editor setup

Option A — automatic (recommended)

npx azure-board-mcp install

Detects and configures Claude Code, Cursor, VS Code, and Claude Desktop automatically.

Option B — manual

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"]
    }
  }
}

Claude Code skill

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.


CLI reference

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)

Tools (30)

Work-item, commit, and PR lists are paginated — they return a compact page (default 15, max 50) with a Showing X–Y of N header. Pass skip to page through results instead of requesting a large top. List views fetch only the fields they render, so they're fast and light on context.

Auth & project

ToolWhen to use
auth_statusDiagnose auth issues, check which project is active
switch_projectChange the active project, or list available ones

Work items

ToolWhen to use
list_work_itemsMy tasks, sprint board, filter by state/type/keyword (paginated)
get_work_itemFull detail on a specific ticket — fields, comments, PRs
create_work_itemCreate a task, bug, user story, epic, feature
update_work_itemClose, reassign, move sprint, update estimates
add_commentPost a note or status update on a ticket
link_work_itemsSet parent/child, related, or dependency links
query_wiqlAdvanced queries with custom WIQL (paginated)
get_work_item_historyAudit trail — which fields changed, when, by whom
get_backlogOrdered, priority-ranked product backlog

Boards, sprints & teams

ToolWhen to use
get_sprintCurrent sprint dates and team capacity
list_sprintsAll sprints with start/end dates
get_boardKanban columns, state mappings, WIP limits
list_team_membersWho's on a team (names, emails, admin flag)
list_pathsValid area / iteration path values for create/update

Repositories

ToolWhen to use
list_reposDiscover repo names and URLs
list_filesBrowse directory structure
get_fileRead file contents (up to 500 lines)
list_commitsRecent commits on a branch (paginated)
list_pull_requestsOpen PRs, reviewer votes, merge status (paginated)
create_prOpen a PR with optional reviewers and linked work items

Pipelines, builds & releases

ToolWhen to use
list_pipelinesDiscover pipeline definitions
list_buildsRecent builds — status, result, branch, link
run_pipelineTrigger a pipeline run
get_build_timelineWhich stage/job/task failed, with error/warning counts
get_build_logsDiagnose build failures (build output)
cancel_buildCancel an in-progress build
list_releasesRecent releases with per-environment deploy status
create_releaseCreate and trigger a release from a definition

Environment variables

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

Using your own Azure AD app

By default everyone shares the built-in app registration. If your org blocks it, or you need full control:

1. Register the app

  1. Azure Portal → App registrations → New registration
  2. Name: anything (e.g. azure-board-mcp)
  3. Supported account types: "Any organizational directory" (multitenant) or "My organization only"
  4. Click Register

2. Configure it

In Authentication:

  1. Add a platform → Mobile and desktop applications → check http://localhost → Configure
  2. Allow public client flows → Yes → Save

In API permissions:

  1. Add a permission → APIs my organization uses → search Azure DevOps
  2. Select user_impersonation (delegated) → Add
  3. Click Grant admin consent (optional — skips the per-user consent prompt)

3. 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

License

MIT