Repository navigation
feat(mcp): surface Azure DevOps in the MCP marketplace - #1572
jpelletier1 wants to merge 1 commit into
Conversation
Bumps @openhands/extensions to the commit that adds the Azure DevOps integration catalog entry (OpenHands/extensions#384), so an tile appears in the Agent Canvas MCP marketplace. The entry exposes the official Microsoft Azure DevOps MCP Server with a hosted remote (OAuth) streamable HTTP connection and a local PAT-based stdio fallback. The install modal renders the local PAT stdio path () with an organization CLI argument and the PERSONAL_ACCESS_TOKEN env field. Adds unit + route-render tests verifying the tile renders, the install modal opens with the PAT fields, and the entry is searchable / matched against installed servers. Closes #929 Co-authored-by: openhands <openhands@all-hands.dev>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
❌ Mock-LLM E2E Tests54/60 passed · 1 failed · 5 skipped Commit: Details
🔍 Failure details (1)❌ files/mock-llm-files-and-git.spec.ts › files tab, git control bar, and browser tab › step 1: ensure mock LLM profile is configuredPosted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
✅ Mock-LLM Docker E2E Test Results60/60 passed Commit: Details
Posted by the Mock-LLM E2E workflow · results are deterministic (scripted LLM responses) |
smolpaws
left a comment
There was a problem hiding this comment.
Hi, I'm smolpaws, Engel's personal OpenHands agent, driven by GPT-5.5. I reviewed this PR for simplicity, safety and maintainability.
Taste rating: acceptable
Improvement needed:
- package.json: this changes
@openhands/extensionsfrom the npm release0.7.0togithub:OpenHands/extensions#ca4d9ce5fade1de80a661353ff39635f841f4c56. A pinned first-party GitHub commit is understandable for a draft, but it should not be left as the merge dependency unless maintainers deliberately want to bypass npm release provenance and normal dependency tooling.
Concrete suggestion:
- before this leaves draft, publish or select an
@openhands/extensionsnpm version that contains the Azure DevOps catalog entry - switch
package.jsonback to the released package version
Risk assessment: medium. This is first-party, but Git-based installs are still a supply-chain and reproducibility risk compared with the package release path.
Verdict: needs rework before merging
Key insight: use the GitHub commit only as a temporary draft bridge, not as the final dependency source.
This review was created by an AI agent, OpenHands, on behalf of Engel.
|
This repository has moved to https://github.com/OpenHands/OpenHands. We’d appreciate it if you re-opened this pull request there. Thank you! |
HUMAN:
AGENT:
This PR surfaces the Azure DevOps MCP integration in the Agent Canvas marketplace. The catalog entry itself lives in
@openhands/extensions(see OpenHands/extensions#384); this PR bumps the canvas dependency to that commit so the tile renders, and adds canvas-side tests proving the wiring end-to-end.I verified the entry flows through the real catalog package and renders in the UI by:
@openhands/extensionsexposes the entry:node -e "import { getIntegrationCatalogEntry } from '@openhands/extensions/integrations'; console.log(getIntegrationCatalogEntry('azure-devops').connectionOptions.map(o=>o.id))"→[ 'remote', 'pat' ], and it appears inlistIntegrationCatalog({ mcp: true })andlistIntegrationCatalog({ oauth: true }).npm run typecheckandnpm run build— both pass.npx vitest run __tests__/routes/mcp-page.test.tsx __tests__/utils/mcp-marketplace-utils.test.ts __tests__/components/features/mcp-page— all pass (102 tests), including the new route test that renders themcp-marketplace-card-azure-devopstile, clicks it, and asserts the install modal shows the PAT stdio command (npx -y @azure-devops/mcp --authentication pat) plus theorganizationandPERSONAL_ACCESS_TOKENfields.Why
Agent Canvas had no Azure DevOps entry in the MCP integration marketplace, even though
azure_devopsis already a recognized git/auth provider in the OpenHands codebase (icon, URL parsing, dropdown support). Users could not connect their Azure DevOps organization from the MCP UI, so agents could not act on Azure DevOps resources (work items, repos, pipelines, wikis, test plans).Summary
@openhands/extensionsto the commit that adds theazure-devopscatalog entry (remote OAuth streamable HTTP + local PAT stdio via the official Microsoft@azure-devops/mcpserver).mcp-page.test.tsx) proving the tile renders and the install modal opens with the PAT fields.Issue Number
Closes OpenHands/OpenHands#15769
How to Test
npm ci npm run make-i18n npm run typecheck && npm run build npx vitest run __tests__/routes/mcp-page.test.tsx __tests__/utils/mcp-marketplace-utils.test.tsThen run
npm run dev, open the MCP page, and confirm an "Azure DevOps" tile appears in the marketplace. Click it → the install modal shows the local PAT stdio command with Organization and Personal Access Token fields; the remote (OAuth) connection is the catalog default.Video/Screenshots
N/A — verified via the automated route-render test (
mcp-marketplace-card-azure-devopstile + install modal withPERSONAL_ACCESS_TOKEN/organizationfields). A human can capture a UI screenshot during review.Type
Notes
OpenHands/extensions(PR Vercel preview build fails:MISSING_EXPORTforSharedClient/ConversationClient/FileClientfrom@openhands/typescript-client#2273) following the existinggithub.json(stdio) /linear.json/datadog.json(urlEditable) patterns. The canvas dep is pinned to that extensions commit via agithub:git ref; once the extensions PR is merged and a new@openhands/extensionsversion is published, this can be repinned to the registry release.urlEditable: truewith the documentedhttps://mcp.dev.azure.com/{organization}placeholder (the catalog schema has no dynamic URL-field substitution), so users fill in their organization URL in the install dialog — same pattern as Datadog.@azure-devops/mcp@2.7.0CLI:--authentication patreadsPERSONAL_ACCESS_TOKEN(base64-encoded:PAT, used directly as the Basic credential), and the organization is a CLI positional. Helper text documents the base64 encoding requirement.This PR was created by an AI agent (OpenHands) on behalf of the OpenHands team.
@jpelletier1 can click here to continue refining the PR
🐳 Docker images for this PR
• GHCR package: https://github.com/OpenHands/agent-canvas/pkgs/container/agent-canvas
ghcr.io/openhands/agent-canvasghcr.io/openhands/agent-server:1.29.3-pythonopenhands-automation==1.0.0a13f706c0cb055bd63c61399650195457e52cab7a47Pull (multi-arch manifest)
# Multi-arch manifest — Docker automatically pulls the correct architecture docker pull ghcr.io/openhands/agent-canvas:sha-f706c0cRun
All tags pushed for this build
About Multi-Architecture Support
sha-f706c0c) is a multi-arch manifest supporting both amd64 and arm64sha-f706c0c-amd64) are also available if needed