feat: Add Azure DevOps MCP integration to the Agent Canvas marketplace
#929 opened on May 29, 2026
Repository metrics
- Stars
- (43 stars)
- PR merge metrics
- (PR metrics pending)
Description
Summary
Agent Canvas does not currently have an Azure DevOps entry in the MCP integration marketplace (OpenHands/extensions integrations catalog), even though Azure DevOps is already a recognized Provider type in the codebase (icon, URL parsing, and dropdown support are all present). This issue tracks adding a first-class Azure DevOps MCP integration so users can connect their Azure DevOps organization directly from the MCP marketplace UI.
Note: Azure DevOps is already supported as a git/auth provider in OpenHands/OpenHands. This issue is specifically about surfacing an MCP server integration in Agent Canvas so agents can act on Azure DevOps resources (work items, pipelines, repos, wikis, etc.).
Investigation: Existing MCP Servers
✅ Official Microsoft MCP Server (Recommended)
microsoft/azure-devops-mcp ⭐ 1,700+
This is the official, Microsoft-maintained MCP server for Azure DevOps. It supports:
- Work items, boards, iterations, teams
- Repos, pull requests, branches
- Pipelines / builds
- Test plans
- Wikis
- Artifacts
It now offers two transport modes:
| Mode | Transport | URL / command |
|---|---|---|
| Remote (Recommended, public preview) | SSE / HTTP | https://mcp.dev.azure.com/{organization} |
| Local | stdio (npx) | npx -y @azure/mcp@latest server start |
The remote endpoint entered public preview in May 2025 and is the recommended path going forward. Authentication uses OAuth (Azure DevOps identity) for the remote server, or a Personal Access Token for the local stdio server.
Community alternatives
| Repo | Stars | Notes |
|---|---|---|
Tiberriver256/mcp-server-azure-devops |
~370 | Well-documented npm package, PAT auth |
Vortiago/mcp-azure-devops |
~80 | Python-based, Azure SDK |
The official Microsoft server is the clear recommendation.
What Already Exists in Agent Canvas
Some Azure DevOps groundwork is already in place in the codebase:
Providertype:azure_devopsis already defined insrc/types/settings.tsalongsidegithub,gitlab,bitbucket, etc.- Icon:
src/assets/branding/azure-devops-logo.svgis already present and rendered byGitProviderIcon. - URL parsing:
src/utils/parse-git-remote-url.tsalready mapsdev.azure.comto theazure_devopsprovider and normalizesorg/project/_git/repopaths. - Dropdown:
GitProviderDropdownalready formatsazure_devopsas"Azure DevOps".
What is missing is an entry in the OpenHands/extensions integrations catalog (integrations/catalog/azure-devops.json) and any associated logo/icon asset in that package.
Proposed Implementation
Step 1 — Add azure-devops.json to OpenHands/extensions
Following the same shape as integrations/catalog/github.json (stdio pattern) and integrations/catalog/atlassian.json (SSE/remote pattern), create a new catalog entry:
{
"id": "azure-devops",
"name": "Azure DevOps",
"description": "Manage work items, repos, pipelines, wikis, and more via the official Microsoft Azure DevOps MCP Server.",
"docsUrl": "https://github.com/microsoft/azure-devops-mcp",
"iconBg": "#0078D4",
"keywords": ["ado", "devops", "work items", "pipelines", "repos", "boards"],
"popularityRank": 80,
"kind": "mcp",
"defaultConnectionOptionId": "remote",
"connectionOptions": [
{
"id": "remote",
"label": "Remote (Recommended)",
"provider": "mcp",
"transport": {
"kind": "sse",
"url": "https://mcp.dev.azure.com/{organization}",
"urlFields": [
{
"key": "organization",
"label": "Organization name",
"placeholder": "my-org",
"required": true
}
]
},
"auth": {
"strategy": "oauth"
}
},
{
"id": "pat",
"label": "Local (PAT)",
"provider": "mcp",
"installHint": "Requires Node.js (npx).",
"transport": {
"kind": "stdio",
"serverName": "azure-devops",
"command": "npx",
"args": ["-y", "@azure/mcp@latest", "server", "start"],
"envFields": [
{
"key": "AZURE_DEVOPS_ORG",
"label": "Organization URL",
"placeholder": "https://dev.azure.com/my-org",
"required": true
},
{
"key": "AZURE_PERSONAL_ACCESS_TOKEN",
"label": "Personal Access Token",
"type": "password",
"placeholder": "your-pat-here",
"required": true
}
]
},
"auth": {
"strategy": "api_key"
}
}
]
}
Note: The exact schema for
urlFields(dynamic URL substitution) and OAuth strategy may need adjustment based on how the catalog's install flow handles parameterized URLs. See the Atlassian and GitHub entries for reference patterns.
Step 2 — Add the Azure DevOps logo to the extensions package
The SVG is already present in the canvas app at src/assets/branding/azure-devops-logo.svg. Copy it into the OpenHands/extensions logos directory so the marketplace tile can render the icon.
Step 3 — Verify end-to-end
- Install the integration via the MCP marketplace in Agent Canvas.
- Confirm the remote SSE server connects and tools are callable (e.g., list projects, list work items).
- Confirm the local PAT-based stdio path works as a fallback.
Acceptance Criteria
- An
azure-devopsentry appears in the Agent Canvas MCP marketplace. - Users can connect to the remote Microsoft-hosted MCP endpoint (
https://mcp.dev.azure.com/{org}) by providing their organization name and completing OAuth. - Users can alternatively configure the local PAT-based stdio server.
- The integration tile displays the Azure DevOps logo.
- Basic smoke test: an agent can list projects / work items after connecting.
References
- Official MCP server repo: https://github.com/microsoft/azure-devops-mcp
- Remote MCP Server docs: https://learn.microsoft.com/en-us/azure/devops/mcp-server/remote-mcp-server
- Public preview announcement: https://devblogs.microsoft.com/devops/azure-devops-remote-mcp-server-public-preview
- Existing
github.jsoncatalog entry (stdio pattern):integrations/catalog/github.jsoninOpenHands/extensions - Existing
atlassian.jsoncatalog entry (SSE pattern):integrations/catalog/atlassian.jsoninOpenHands/extensions
This issue was created by an AI agent (OpenHands) on behalf of the OpenHands team.