Skip to content

feat(integrations): add Azure DevOps MCP catalog entry#384

Draft
jpelletier1 wants to merge 1 commit into
mainfrom
openhands/add-azure-devops-mcp
Draft

feat(integrations): add Azure DevOps MCP catalog entry#384
jpelletier1 wants to merge 1 commit into
mainfrom
openhands/add-azure-devops-mcp

Conversation

@jpelletier1

Copy link
Copy Markdown
Contributor
  • A human has tested these changes.

Why

Agent Canvas had no Azure DevOps entry in the MCP integration marketplace, even though azure_devops is already a recognized git/auth provider in the OpenHands codebase (icon, URL parsing, dropdown support). This surfaces the official Microsoft Azure DevOps MCP Server so agents can act on Azure DevOps resources (work items, repos, pipelines, wikis, test plans) directly from the Agent Canvas MCP UI.

Summary

  • Adds integrations/catalog/azure-devops.json with two connection options:
    • Remote (recommended, public preview): Azure DevOps-hosted streamable HTTP endpoint at https://mcp.dev.azure.com/{organization}, Microsoft Entra ID (OAuth) auth, editable URL so users fill in their organization name.
    • Local (PAT): stdio via npx -y @azure-devops/mcp --authentication pat, with the organization passed as a CLI argument and the PAT supplied through the documented PERSONAL_ACCESS_TOKEN env var (base64-encoded :PAT).
  • Adds the Azure DevOps logo asset under integrations/icons/azure-devops.svg and points logoUrl at it.
  • Regenerates integrations/catalog-index.js.
  • Adds test_azure_devops_entry_contract to tests/test_catalogs.py locking in the entry's contract (remote OAuth + local PAT options, logo, env/arg fields); the existing schema/in-sync tests parametrize over the new entry automatically.

Issue Number

Closes OpenHands/agent-canvas#929

How to Test

pip install -e .
pip install jsonschema pytest
pytest tests/test_catalogs.py tests/test_catalog_schema.py tests/test_integration_catalog_in_sync.py
node --input-type=module -e "import { getIntegrationCatalogEntry } from './integrations/index.js'; console.log(getIntegrationCatalogEntry('azure-devops').connectionOptions.map(o=>o.id))"

The azure-devops entry should appear in listIntegrationCatalog({ mcp: true }) and listIntegrationCatalog({ oauth: true }). Once consumed by Agent Canvas (dep bump in that repo), it surfaces in the MCP marketplace and the install modal offers the local PAT stdio path.

Notes

  • The catalog schema does not support dynamic URL field substitution (urlFields), so the remote option uses urlEditable: true with the documented {organization} placeholder URL — users edit it to their real organization URL in the install dialog, matching the Datadog pattern.
  • Verified the official @azure-devops/mcp@2.7.0 CLI: --authentication pat reads PERSONAL_ACCESS_TOKEN (base64-encoded, used directly as the Basic auth credential) and accepts the organization positional before or after flags. Helper text documents the base64 encoding requirement.
  • The OAuth authorizationUrl/tokenUrl use the Microsoft Entra common endpoints with the Azure DevOps resource scope (499b84ac-.../.default); the hosted MCP server performs MCP-spec OAuth with Entra. Agent Canvas handles hosted-MCP OAuth via the agent-server backend.

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

@jpelletier1 can click here to continue refining the PR

Add a first-class Azure DevOps integration to the MCP marketplace catalog
so Agent Canvas users can connect their Azure DevOps organization directly
from the MCP UI.

Surfaces the official Microsoft Azure DevOps MCP Server
(https://github.com/microsoft/azure-devops-mcp) with two connection options:

- Remote (recommended, public preview): Azure DevOps-hosted streamable HTTP
  endpoint at https://mcp.dev.azure.com/{organization}, authenticated with
  Microsoft Entra ID (OAuth). The URL is editable so users fill in their
  organization name.
- Local (PAT): stdio via ,
  with the organization passed as a CLI argument and the Personal Access
  Token supplied through the documented PERSONAL_ACCESS_TOKEN environment
  variable (base64-encoded).

Adds the Azure DevOps logo asset under integrations/icons/ and regenerates
the catalog index.

Closes OpenHands/agent-canvas#929

Co-authored-by: openhands <openhands@all-hands.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: feat A new feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

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

2 participants