azure-devops-mcp-remote
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@azure-devops-mcp-remotelist work items in project MyProject"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Azure DevOps MCP Server
Conecte assistentes de IA (GitHub Copilot, Claude, Cursor) ao seu Azure DevOps — work items, repositórios, pipelines, wikis e mais.
Este servidor implementa o protocolo MCP (Model Context Protocol) para Azure DevOps. Isso permite que qualquer assistente de IA compatível com MCP leia e modifique seus projetos no Azure DevOps usando linguagem natural.
Exemplo: Você pede ao Copilot "crie um work item de bug no projeto X com prioridade alta" e ele usa este servidor para executar a ação diretamente no Azure DevOps.
Este projeto é um fork do Azure DevOps MCP Server da Microsoft, com suporte adicional a transporte HTTP/SSE remoto, autenticação OBO multi-usuário e deploy em containers.
📖 Índice
Related MCP server: Azure DevOps MCP Server
⚡ Quick Start — Funcionando em 2 minutos
Pré-requisitos
Node.js 20+ instalado
Uma organização Azure DevOps existente
Um Personal Access Token (PAT) do Azure DevOps
Passo 1 — Definir o token
Crie um PAT no Azure DevOps com as permissões necessárias (Read/Write nos escopos que você quer usar) e exporte como variável de ambiente:
# Linux/Mac
export ADO_MCP_AUTH_TOKEN="seu-pat-token-aqui"
# Windows (PowerShell)
$env:ADO_MCP_AUTH_TOKEN = "seu-pat-token-aqui"Passo 2 — Clonar, instalar e buildar
git clone https://github.com/fsaito-github/azure-devops-mcp-remote.git
cd azure-devops-mcp-remote
npm install
npm run buildPasso 3 — Testar o servidor
Substitua sua-organizacao pelo nome da sua org no Azure DevOps (a parte que aparece em https://dev.azure.com/sua-organizacao):
node dist/index.js sua-organizacao --authentication envvarSe não houver erros, o servidor está pronto. Encerre com Ctrl+C.
Passo 4 — Configurar no VS Code
Crie o arquivo .vscode/mcp.json no seu projeto (não no repo do MCP, mas no projeto onde você usa o Copilot):
{
"servers": {
"azure-devops": {
"type": "stdio",
"command": "node",
"args": [
"C:/caminho/completo/para/azure-devops-mcp-remote/dist/index.js",
"sua-organizacao",
"--authentication",
"envvar"
]
}
}
}⚠️ Importante: Substitua
C:/caminho/completo/para/azure-devops-mcp-remotepelo caminho real onde você clonou o repositório. No Windows, use/ou\\\\como separador.
Pronto! Abra o Copilot Chat no VS Code e peça algo como "liste os work items do projeto MyProject".
💡 Para outros clientes (Claude Desktop, Cursor, etc.), veja a seção Configuração nos Clientes MCP.
🔌 Configuração nos Clientes MCP
VS Code / GitHub Copilot (stdio — local)
Crie .vscode/mcp.json na raiz do seu projeto:
{
"servers": {
"azure-devops": {
"type": "stdio",
"command": "node",
"args": [
"C:/caminho/para/azure-devops-mcp-remote/dist/index.js",
"sua-organizacao",
"--authentication",
"envvar"
]
}
}
}VS Code / GitHub Copilot (HTTP — servidor remoto)
Se o servidor está rodando remotamente (ex: Azure Container Apps):
{
"servers": {
"azure-devops": {
"type": "http",
"url": "https://seu-servidor.azurecontainerapps.io/mcp"
}
}
}Se usando autenticação OBO, adicione o header com o JWT obtido via /auth/login:
{
"servers": {
"azure-devops": {
"type": "http",
"url": "https://seu-servidor.azurecontainerapps.io/mcp",
"headers": {
"Authorization": "Bearer seu-jwt-token-aqui"
}
}
}
}Claude Desktop
Em claude_desktop_config.json:
{
"mcpServers": {
"azure-devops": {
"command": "node",
"args": [
"C:/caminho/para/azure-devops-mcp-remote/dist/index.js",
"sua-organizacao",
"--authentication",
"envvar"
]
}
}
}Cursor
Crie .cursor/mcp.json na raiz do projeto:
{
"mcpServers": {
"azure-devops": {
"command": "node",
"args": [
"C:/caminho/para/azure-devops-mcp-remote/dist/index.js",
"sua-organizacao",
"--authentication",
"envvar"
]
}
}
}Visual Studio 2022
Crie .mcp.json na raiz da solução:
{
"servers": {
"azure-devops": {
"type": "stdio",
"command": "node",
"args": [
"C:/caminho/para/azure-devops-mcp-remote/dist/index.js",
"sua-organizacao",
"--authentication",
"envvar"
]
}
}
}Copilot Studio (servidor remoto)
No Power Platform, crie um Custom Connector apontando para
https://seu-servidor/mcpNo Copilot Studio, adicione o connector como Tool (tipo MCP)
Se usando OBO, configure o header
Authorizationcom o JWT do usuário
Transporte SSE (clientes mais antigos)
Se o seu cliente MCP só suporta SSE (e não Streamable HTTP):
{
"servers": {
"azure-devops": {
"type": "sse",
"url": "https://seu-servidor/sse"
}
}
}O servidor precisa estar rodando com
--transport sseneste caso.
🛠️ O que este servidor pode fazer
O servidor expõe 80+ operações organizadas em 9 domínios. Você pode habilitar apenas os domínios que precisa com a flag --domains.
Work Items (work-items)
Criar, ler, atualizar, comentar e vincular work items (bugs, tasks, user stories, etc.).
Operação | Descrição |
| Listar meus work items atribuídos |
| Obter detalhes de um work item |
| Criar novo work item |
| Atualizar campos de um work item |
| Atualizar múltiplos work items de uma vez |
| Adicionar comentário |
| Adicionar work items filhos |
| Vincular work item a um PR |
| Criar/remover links entre work items |
| Navegar backlogs |
| Executar queries salvas |
| Histórico e comentários |
Repositórios Git (repositories)
Gerenciar repos, branches, PRs e code reviews.
Operação | Descrição |
| Listar repositórios de um projeto |
| Obter detalhes de um repo |
| Listar branches |
| Criar branch |
| Navegar arquivos/pastas do repo |
| Listar PRs |
| Obter detalhes de um PR |
| Criar PR |
| Atualizar PR (título, descrição, status) |
| Aprovar/rejeitar PR |
| Gerenciar revisores |
| Listar comentários de review |
| Criar comentário de review |
| Responder comentário |
| Buscar commits |
Pipelines (pipelines)
Gerenciar builds, pipelines e artefatos.
Operação | Descrição |
| Listar definições de build |
| Listar builds |
| Verificar status de um build |
| Obter logs de um build |
| Disparar execução de pipeline |
| Criar pipeline |
| Listar/obter execuções |
| Gerenciar artefatos |
| Atualizar estágio de build |
Projetos e Times (core)
Operação | Descrição |
| Listar todos os projetos da organização |
| Listar times de um projeto |
| Buscar identidades de usuários |
Iterações e Capacidade (work)
Operação | Descrição |
| Listar sprints/iterações |
| Criar e atribuir iterações |
| Gerenciar capacidade do time |
Wiki (wiki)
Operação | Descrição |
| Listar e obter wikis |
| Navegar e ler páginas |
| Criar ou editar páginas |
Test Plans (test-plans)
Operação | Descrição |
| Gerenciar planos de teste |
| Gerenciar suites |
| Gerenciar casos de teste |
| Ver resultados de testes |
Busca (search)
Operação | Descrição |
| Buscar código nos repositórios |
| Buscar em páginas wiki |
| Buscar work items |
Segurança Avançada (advanced-security)
Operação | Descrição |
| Listar alertas de segurança |
| Obter detalhes de um alerta |
Filtrando domínios
Se você só precisa de work items e repositórios, por exemplo:
npx -y @azure-devops/mcp sua-org -a envvar --domains repositories,work-itemsDomínios disponíveis: core, repositories, pipelines, work-items, work, wiki, test-plans, search, advanced-security
🔐 Autenticação — Qual método usar?
Você está rodando local no seu computador?
├── SIM → Tem navegador disponível?
│ ├── SIM → Use "interactive" (padrão, abre o browser para login)
│ └── NÃO → Use "envvar" (PAT token via variável de ambiente)
│
└── NÃO → Está rodando em servidor/container remoto?
├── É Azure Container Apps / Azure VM?
│ ├── Um único serviço (CI/CD, bot) → Use "env" (Managed Identity)
│ └── Múltiplos usuários reais → Use "obo" (cada um com sua identidade)
│
├── É GitHub Codespaces? → Use "azcli" (detectado automaticamente)
│
└── Outro ambiente? → Use "envvar" (PAT token)Resumo dos métodos
Método | Flag | O que faz | Quando usar |
OAuth Interativo |
| Abre o browser para login Azure AD | Desenvolvimento local com navegador |
Azure CLI |
| Usa credenciais do | Codespaces, dev local já autenticado |
PAT Token |
| Lê token da variável | Qualquer ambiente — simples e rápido |
Managed Identity |
| Usa identidade gerenciada do Azure | Azure Container Apps, VMs (sem segredos) |
OBO (On-Behalf-Of) |
| Cada usuário faz login e age com sua identidade | Produção multi-usuário |
Detalhes de cada método
Acesse
https://dev.azure.com/sua-org/_usersSettings/tokensClique em New Token
Dê um nome, selecione os escopos (Read/Write) e copie o token
Defina a variável de ambiente:
export ADO_MCP_AUTH_TOKEN="seu-token-aqui"Inicie o servidor:
npx -y @azure-devops/mcp sua-org -a envvar⚠️ Todos os acessos ao Azure DevOps são feitos com a identidade do dono do PAT. Não há distinção por usuário.
Não precisa configurar nada. Ao iniciar o servidor, ele abre automaticamente o browser para login:
npx -y @azure-devops/mcp sua-orgO token é cacheado — nas próximas execuções, o login é silencioso.
az login
npx -y @azure-devops/mcp sua-org -a azcliDetectado automaticamente em GitHub Codespaces.
Funciona automaticamente em Azure Container Apps, VMs e outros serviços com System-Assigned ou User-Assigned Managed Identity.
node dist/index.js sua-org --transport http --port 3000 -a envA identidade precisa ser adicionada como usuário no Azure DevOps (veja a seção de Deploy).
Neste modo, cada usuário faz login com sua conta Azure AD e todas as ações no Azure DevOps são rastreadas com a identidade real do usuário.
Requer um App Registration no Azure AD. Veja o guia completo: Azure AD Setup
Variáveis de ambiente necessárias:
OAUTH_CLIENT_ID=id-do-app-registration
OAUTH_CLIENT_SECRET=secret-do-app
OAUTH_TENANT_ID=id-do-tenant-azure-ad
OAUTH_REDIRECT_URL=http://localhost:8080/auth/callback
JWT_SECRET=uma-chave-secreta-aleatoriaFluxo do usuário:
Servidor inicia:
node dist/index.js sua-org --transport http --port 8080 -a oboUsuário acessa
http://localhost:8080/auth/loginno browserFaz login com Azure AD → recebe um JWT
Configura o JWT no cliente MCP (header
Authorization: Bearer <jwt>)Todas as ações no Azure DevOps são feitas com a identidade desse usuário
Endpoints de autenticação:
Endpoint | Método | Descrição |
| GET | Iniciar login OAuth2 |
| GET | Callback do OAuth2 (automático) |
| GET | Ver informações do usuário logado |
| GET | Status da autenticação |
| POST | Renovar token Azure AD |
| POST | Renovar token Azure DevOps |
| POST | Encerrar sessão |
Guia completo: Autenticação OBO
⚙️ Opções da CLI
mcp-server-azuredevops <organizacao> [opções]Flag | Alias | Descrição | Padrão |
| — | Nome da organização Azure DevOps (obrigatório) | — |
| — | Tipo de transporte: |
|
|
| Porta para HTTP/SSE |
|
|
| Tipo de autenticação (veja seção acima) |
|
|
| Azure Tenant ID (opcional, para | — |
|
| Domínios a habilitar (separados por vírgula) |
|
Exemplos:
# Desenvolvimento local com PAT (mais simples)
npx -y @azure-devops/mcp contoso -a envvar
# Servidor HTTP remoto com Managed Identity
node dist/index.js contoso --transport http --port 3000 -a env
# Apenas domínios de repos e pipelines
npx -y @azure-devops/mcp contoso -a envvar --domains repositories,pipelines
# Multi-usuário com OBO
node dist/index.js contoso --transport http --port 8080 -a obo🏗️ Arquitetura
┌─────────────────┐ ┌──────────────────────────────┐
│ Cliente MCP │ HTTPS │ Azure Container Apps │
│ │ ◄─────────────────► │ │
│ • VS Code │ (ou stdio local) │ ┌──────────────────────┐ │
│ • Copilot │ │ │ MCP Server │ │
│ • Claude │ │ │ --transport http │ │
│ • Cursor │ │ │ --port 3000 │ │
│ │ │ └──────────┬───────────┘ │
└─────────────────┘ │ │ │
│ Token (PAT, │
│ Managed Identity │
│ ou OBO) │
└─────────────┼───────────────┘
│
┌─────────────▼───────────────┐
│ Azure DevOps REST API │
│ dev.azure.com/<org> │
└─────────────────────────────┘Transportes disponíveis:
Transporte | Flag | Uso |
stdio |
| Padrão. O cliente inicia o servidor como subprocesso local. |
HTTP (Streamable) |
| Servidor remoto acessível via HTTPS. Recomendado para produção. |
SSE |
| Para clientes MCP mais antigos que não suportam HTTP Streamable. |
🚀 Deploy em Produção (Azure Container Apps)
Pré-requisitos
Azure CLI instalado e autenticado (
az login)Assinatura Azure ativa
Docker (opcional, para build local)
Passo 1 — Definir variáveis
RESOURCE_GROUP="rg-mcp-server"
LOCATION="eastus2"
ACR_NAME="acrmcpserver" # deve ser único globalmente
CONTAINER_APP_ENV="mcp-env"
CONTAINER_APP_NAME="ado-mcp-server"
ADO_ORG="sua-organizacao" # nome da sua org no Azure DevOps
IMAGE_NAME="ado-mcp-server"Passo 2 — Criar os recursos Azure
# Resource Group
az group create --name $RESOURCE_GROUP --location $LOCATION
# Azure Container Registry
az acr create --name $ACR_NAME --resource-group $RESOURCE_GROUP --sku Basic --admin-enabled true
# Container Apps Environment
az containerapp env create \
--name $CONTAINER_APP_ENV \
--resource-group $RESOURCE_GROUP \
--location $LOCATIONPasso 3 — Build e push da imagem Docker
# Build e push direto no ACR (não precisa de Docker local)
az acr build --registry $ACR_NAME --image $IMAGE_NAME:latest .Ou, se preferir build local:
docker build -t $ACR_NAME.azurecr.io/$IMAGE_NAME:latest .
az acr login --name $ACR_NAME
docker push $ACR_NAME.azurecr.io/$IMAGE_NAME:latestPasso 4 — Criar o Container App com Managed Identity
az containerapp create \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--environment $CONTAINER_APP_ENV \
--image "$ACR_NAME.azurecr.io/$IMAGE_NAME:latest" \
--registry-server "$ACR_NAME.azurecr.io" \
--registry-identity system \
--target-port 3000 \
--ingress external \
--system-assigned \
--command "node" "dist/index.js" "$ADO_ORG" "--transport" "http" "--port" "3000" "-a" "env" \
--min-replicas 1 \
--max-replicas 3Passo 5 — Configurar permissões da Managed Identity
# Obter o Principal ID da Managed Identity
PRINCIPAL_ID=$(az containerapp show \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--query "identity.principalId" -o tsv)
echo "Principal ID: $PRINCIPAL_ID"Agora, adicione essa identity como usuário no Azure DevOps:
Clique em Add users
Adicione o Object ID (que é o Principal ID acima) como usuário
Atribua a licença Basic ou Stakeholder
Dê permissões nos projetos necessários (Contributor, Reader, etc.)
💡 Dica: Para automatizar via API, use o Azure DevOps REST API - User Entitlements.
Passo 6 — Obter a URL e testar
FQDN=$(az containerapp show \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--query "properties.configuration.ingress.fqdn" -o tsv)
echo "MCP Server URL: https://$FQDN/mcp"Teste com uma requisição MCP de inicialização:
curl -X POST https://$FQDN/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'Se receber uma resposta JSON com "result", o servidor está funcionando! 🎉
Usando PAT ao invés de Managed Identity
Se preferir usar PAT Token no container:
az containerapp update \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--set-env-vars "ADO_MCP_AUTH_TOKEN=secretref:ado-pat" \
--command "node" "dist/index.js" "$ADO_ORG" "--transport" "http" "--port" "3000" "-a" "envvar"Limpeza de recursos
az group delete --name $RESOURCE_GROUP --yes --no-wait🧪 Desenvolvimento Local
# Clonar e instalar
git clone https://github.com/microsoft/azure-devops-mcp.git
cd azure-devops-mcp
npm install
# Build
npm run build
# Rodar com PAT
export ADO_MCP_AUTH_TOKEN="seu-pat"
node dist/index.js sua-org -a envvar
# Rodar com HTTP transport
node dist/index.js sua-org --transport http --port 3000 -a envvar
# Rodar com Docker
docker build -t ado-mcp-server .
docker run -p 3000:3000 -e ADO_MCP_AUTH_TOKEN=seu-pat \
ado-mcp-server sua-org --transport http --port 3000 -a envvar
# Rodar testes
npm test
# Rodar linter
npm run eslintVariáveis de ambiente
Copie .env.example para .env e ajuste:
cp .env.example .envVariável | Obrigatória | Descrição |
| Para | Personal Access Token |
| Para | App Registration Client ID |
| Para | App Registration Secret |
| Para | Azure AD Tenant ID |
| Para | Callback URL (ex: |
| Para | Chave para assinar JWTs de sessão |
| Não | Nível de log: |
| Não | Porta do servidor (padrão: |
📚 Documentação Complementar
Documento | Descrição |
Guia de instalação detalhado para cada IDE | |
Casos de uso e prompts exemplo | |
Perguntas frequentes | |
Diagnóstico de problemas | |
Configuração do App Registration para OBO | |
Guia completo do fluxo On-Behalf-Of |
📝 Referências
📄 Licença
Este projeto é baseado no Azure DevOps MCP Server da Microsoft, licenciado sob MIT License.
This server cannot be deployed
Maintenance
Related MCP Connectors
Crie épicos, features, histórias e tasks no Azure DevOps a partir de uma conversa.
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
- mcpOAuthcom.vibgrate
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Azure DevOps to manage work items, Git repositories, branches, commits, and projects through natural language commands.511 npm5MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with Azure DevOps entities like projects, repositories, work items, pull requests, and pipelines.13 npm17MIT
- AlicenseBqualityCmaintenanceEnables AI assistants to interact with Azure DevOps, providing tools for managing work items, repositories, pipelines, and more through the Model Context Protocol.1007 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Azure DevOps projects, including work items, test results, Git repositories, and dependency analysis via the Model Context Protocol.-