{
  "markdown": "# azure-board-mcp\n\nMCP server for [Azure DevOps](https://azure.microsoft.com/en-us/products/devops). Work with tasks, sprints, bugs, pull requests, repositories, and pipelines directly from Claude, Cursor, or any MCP-compatible AI.\n\n---\n\n## Quick start\n\n```bash\n# 1. Configure your editors (Claude Code, Cursor, VS Code, Claude Desktop)\nnpx azure-board-mcp install\n\n# 2. Sign in once\nnpx azure-board-mcp authenticate\n\n# 3. Restart your editor — done\n```\n\nOn first use the AI will ask which Azure DevOps project to work on and remember it.\n\n---\n\n## Install & authenticate\n\n### Browser sign-in (default)\n\n```bash\nnpx azure-board-mcp authenticate\n```\n\nOpens 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.\n\n### PAT — Personal Access Token\n\nFor headless / CI environments or orgs that block third-party OAuth:\n\n```bash\nnpx azure-board-mcp authenticate --pat\n```\n\nCreate a PAT at `https://dev.azure.com/{org}/_usersSettings/tokens` with scopes: **Work Items (Read & Write)**, **Build (Read)**, **Code (Read)**.\n\n---\n\n## Editor setup\n\n### Option A — automatic (recommended)\n\n```bash\nnpx azure-board-mcp install\n```\n\nDetects and configures Claude Code, Cursor, VS Code, and Claude Desktop automatically.\n\n### Option B — manual\n\n**Claude Code** (`~/.claude/settings.json`):\n```json\n{\n  \"mcpServers\": {\n    \"azure\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"azure-board-mcp@latest\"]\n    }\n  }\n}\n```\n\n**Cursor** (`~/.cursor/mcp.json`):\n```json\n{\n  \"mcpServers\": {\n    \"azure\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"azure-board-mcp@latest\"]\n    }\n  }\n}\n```\n\n**VS Code** (User `settings.json`):\n```json\n{\n  \"mcp\": {\n    \"servers\": {\n      \"azure\": {\n        \"type\": \"stdio\",\n        \"command\": \"npx\",\n        \"args\": [\"-y\", \"azure-board-mcp@latest\"]\n      }\n    }\n  }\n}\n```\n\n**Claude Desktop** (`claude_desktop_config.json`):\n```json\n{\n  \"mcpServers\": {\n    \"azure\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"azure-board-mcp@latest\"]\n    }\n  }\n}\n```\n\n---\n\n## Claude Code skill\n\nInstall a skill so Claude automatically knows when to use this MCP:\n\n```bash\nnpx azure-board-mcp skills\n```\n\nThis 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.\n\n---\n\n## CLI reference\n\n```\nnpx azure-board-mcp <command>\n\nCOMMANDS\n  install               Auto-configure MCP in detected editors\n  skills                Install the Claude Code skill\n  authenticate          Browser OAuth sign-in\n  authenticate --pat    Personal Access Token sign-in\n  check                 Validate stored credentials\n  logout                Clear stored credentials\n  help                  Show help\n\nAUTHENTICATE FLAGS\n  --pat                 Use PAT instead of browser OAuth\n  --read-only           Request read-only OAuth scopes\n  --client-id <id>      Use your own Azure AD app\n  --tenant-id <id>      Specify tenant (single-tenant apps only)\n```\n\n---\n\n## Tools (30)\n\n> Work-item, commit, and PR lists are **paginated** — they return a compact page\n> (default 15, max 50) with a `Showing X–Y of N` header. Pass `skip` to page\n> through results instead of requesting a large `top`. List views fetch only the\n> fields they render, so they're fast and light on context.\n\n### Auth & project\n| Tool | When to use |\n|---|---|\n| `auth_status` | Diagnose auth issues, check which project is active |\n| `switch_project` | Change the active project, or list available ones |\n\n### Work items\n| Tool | When to use |\n|---|---|\n| `list_work_items` | My tasks, sprint board, filter by state/type/keyword (paginated) |\n| `get_work_item` | Full detail on a specific ticket — fields, comments, PRs |\n| `create_work_item` | Create a task, bug, user story, epic, feature |\n| `update_work_item` | Close, reassign, move sprint, update estimates |\n| `add_comment` | Post a note or status update on a ticket |\n| `link_work_items` | Set parent/child, related, or dependency links |\n| `query_wiql` | Advanced queries with custom WIQL (paginated) |\n| `get_work_item_history` | Audit trail — which fields changed, when, by whom |\n| `get_backlog` | Ordered, priority-ranked product backlog |\n\n### Boards, sprints & teams\n| Tool | When to use |\n|---|---|\n| `get_sprint` | Current sprint dates and team capacity |\n| `list_sprints` | All sprints with start/end dates |\n| `get_board` | Kanban columns, state mappings, WIP limits |\n| `list_team_members` | Who's on a team (names, emails, admin flag) |\n| `list_paths` | Valid area / iteration path values for create/update |\n\n### Repositories\n| Tool | When to use |\n|---|---|\n| `list_repos` | Discover repo names and URLs |\n| `list_files` | Browse directory structure |\n| `get_file` | Read file contents (up to 500 lines) |\n| `list_commits` | Recent commits on a branch (paginated) |\n| `list_pull_requests` | Open PRs, reviewer votes, merge status (paginated) |\n| `create_pr` | Open a PR with optional reviewers and linked work items |\n\n### Pipelines, builds & releases\n| Tool | When to use |\n|---|---|\n| `list_pipelines` | Discover pipeline definitions |\n| `list_builds` | Recent builds — status, result, branch, link |\n| `run_pipeline` | Trigger a pipeline run |\n| `get_build_timeline` | Which stage/job/task failed, with error/warning counts |\n| `get_build_logs` | Diagnose build failures (build output) |\n| `cancel_build` | Cancel an in-progress build |\n| `list_releases` | Recent releases with per-environment deploy status |\n| `create_release` | Create and trigger a release from a definition |\n\n---\n\n## Environment variables\n\nOverride stored credentials — useful for CI/Docker:\n\n```bash\nAZURE_ORG=my-org\nAZURE_PROJECT=my-project\nAZURE_PAT=my-pat        # PAT auth\nAUTH_TOKEN=my-token     # OAuth bearer token\n```\n\n---\n\n## Using your own Azure AD app\n\nBy default everyone shares the built-in app registration. If your org blocks it, or you need full control:\n\n**1. Register the app**\n\n1. [Azure Portal → App registrations → New registration](https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps)\n2. Name: anything (e.g. `azure-board-mcp`)\n3. Supported account types: **\"Any organizational directory\"** (multitenant) or **\"My organization only\"**\n4. Click **Register**\n\n**2. Configure it**\n\nIn **Authentication**:\n1. **Add a platform → Mobile and desktop applications** → check `http://localhost` → Configure\n2. **Allow public client flows → Yes → Save**\n\nIn **API permissions**:\n1. Add a permission → **APIs my organization uses** → search `Azure DevOps`\n2. Select **`user_impersonation`** (delegated) → Add\n3. Click **Grant admin consent** (optional — skips the per-user consent prompt)\n\n**3. Use it**\n\n```bash\nnpx azure-board-mcp authenticate --client-id <your-app-id>\n\n# Single-tenant:\nnpx azure-board-mcp authenticate --client-id <your-app-id> --tenant-id <your-tenant-id>\n```\n\n**For org admins** — pre-approve for everyone in your org:\n\n```\nhttps://login.microsoftonline.com/{tenant-id}/adminconsent\n  ?client_id=e2ba32e7-6d24-4919-ba7b-37199c495247\n  &redirect_uri=http://localhost\n```\n\n---\n\n## License\n\nMIT\n",
  "bytes": 7157,
  "sha": "0226dd86775146bc766bb0f055c305bf8abb027a0a7f5e7ef0b79223d74f75fd",
  "repo_slug": "broisnischal/azure-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_broisnischal_azure_mcp_15c53278/readme"
}