OpenHands/agent-canvas

feat: Add Azure DevOps MCP integration to the Agent Canvas marketplace

Open

#929 opened on May 29, 2026

View on GitHub
 (5 comments) (1 reaction) (0 assignees)TypeScript (26 forks)github user discovery
enhancementgood first issuemcp

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:

  • Provider type: azure_devops is already defined in src/types/settings.ts alongside github, gitlab, bitbucket, etc.
  • Icon: src/assets/branding/azure-devops-logo.svg is already present and rendered by GitProviderIcon.
  • URL parsing: src/utils/parse-git-remote-url.ts already maps dev.azure.com to the azure_devops provider and normalizes org/project/_git/repo paths.
  • Dropdown: GitProviderDropdown already formats azure_devops as "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

  1. Install the integration via the MCP marketplace in Agent Canvas.
  2. Confirm the remote SSE server connects and tools are callable (e.g., list projects, list work items).
  3. Confirm the local PAT-based stdio path works as a fallback.

Acceptance Criteria

  • An azure-devops entry 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


This issue was created by an AI agent (OpenHands) on behalf of the OpenHands team.

Contributor guide