v1.3.1 · 68 MCP Tools · 70+ CLI Commands

Azure DevOps senza browser

CLI potente e MCP server in C#/.NET 8 per interagire con Azure DevOps direttamente dal terminale — o tramite il tuo agente AI preferito.

68MCP Tools
.NET 8C# 12
MITOpen Source
3Piattaforme
$ azdo context
Org        : contoso
Project    : MyApp
Repository : backend
Registered : yes

$ azdo pr create --title "Add OAuth" --draft
✓ PR #1234 created — https://dev.azure.com/contoso/...

$ azdo build list --top 10 --table
ID   BUILD         PIPELINE     STATUS      RESULT     BRANCH
123  20260715.3     CI           completed   succeeded  main
122  20260715.2     CI           completed   failed     feature/oauth

$ azdo mcp serve
🚀 MCP server ready — 68 tools available

Perché azdo?

🤖

AI-Native

68 tool MCP pronti per Claude Desktop, Copilot, Cursor e qualunque client compatibile. Output compatto ottimizzato per LLM.

⚡

Zero Config

Rilevamento automatico dell'organizzazione dal git remote o file .azdo. Un solo file di configurazione centrale per tutte le org.

📊

Output Tabellare

Tutti i comandi di lettura supportano --table per vedere i risultati come tabella ASCII nel terminale. Sovrascrive --compact.

🔐

PAT & Entra ID

Autenticazione via Personal Access Token o Azure Identity. Permessi 600 su Unix, secure storage nativo.

📦

Single Binary

Un solo eseguibile standalone. Zero dipendenze runtime. Pubblicazione cross-platform: Linux, macOS, Windows.

🔌

HTTP + stdio

Trasporto stdio per client desktop, HTTP Streamable per browser e VS Code web. Middleware pipeline estensibile.

🛡️

Sicurezza Concorrenza

Auth applicata per-richiesta, mai su client condiviso. Config salvata atomicamente con permessi 600. PAT passato a git via variabili env, non liste processo.

⚡

Cache Intelligente

TTL configurabile da file config. Le operazioni di scrittura invalidano automaticamente i dati correlati in cache. Perfetto per flussi interattivi e MCP.

Installazione

dotnet tool

dotnet tool install -g AzDo

Single Binary

# macOS ARM64
curl -L "..." -o azdo.tar.gz
tar xzf azdo.tar.gz && sudo cp azdo /usr/local/bin/

# Linux x64
curl -L "..." -o azdo.tar.gz
tar xzf azdo.tar.gz && sudo cp azdo /usr/local/bin/

Build from source

git clone https://github.com/Lupala-coder/azdo
cd azdo/src/DevOpsCli
dotnet build -c Release
# binary: bin/Release/net8.0/azdo

Quick Setup

# 1. Configura la tua org
azdo config add --org contoso --pat "your-pat-token" --project MyApp

# 2. Verifica
azdo context

# 3. Usa la CLI
azdo pr list --status active --table
azdo wi query --wiql "SELECT [System.Id] FROM WorkItems WHERE [System.State]='Active'" --table
azdo build list --top 10 --table

# 4. Oppure avvia il server MCP
azdo mcp serve

CLI Commands

Tutti i comandi accettano --org e --project. Quelli di lettura supportano --compact e --table.

🔍 Context & Config

ComandoCosa fa
azdo contextRileva org/project/repo dal git remote corrente (o file .azdo). Mostra se l'org è registrata nella config locale.
azdo config listElenca tutte le organizzazioni configurate con i PAT mascherati.
azdo config add --org X --pat <token>Registra un'organizzazione con un PAT. Il token viene salvato in ~/.config/devops-cli/config.json con permessi 600 (Unix) e scritto atomicamente. Non lascia mai la tua macchina.
azdo config remove --org XRimuove un'organizzazione e il suo PAT dalla config locale.
azdo config pathMostra il percorso del file di configurazione su disco.

📋 Work Items

ComandoCosa fa
azdo wi query --wiql "SELECT ..." [--top 10] [--table]Esegue una query WIQL. Con --table mostra tabella nel terminale.
azdo wi get --ids 1,2,3 [--fields ...] [--table]Recupera uno o più work item per ID. --fields filtra i campi restituiti.
azdo wi create --type Task --title "..." [--assigned-to ...] [--parent 1234]Crea un nuovo work item. Collega a un parent, assegna a un utente, metti in un'iterazione.
azdo wi update --id 1234 [--state Active] [--title "..."]Aggiorna un work item. Solo i campi forniti vengono modificati.
azdo wi comment --id 1234 --text "..."Aggiunge un commento alla sezione Discussion del work item.
azdo wi hierarchy --id 1234 [--table]Mostra il work item con l'albero dei figli ricorsivo. Con --table indentato.
azdo wi link --source 1234 --target 5678 --type childCollega due work item. Tipi: child, parent, related, duplicate.
azdo wi search --query "keyword" [--type Bug] [--table]Ricerca full-text nei work item. Richiede Azure DevOps Search abilitato.

📁 Projects

ComandoCosa fa
azdo project list [--top 20] [--table]Elenca tutti i progetti nell'organizzazione con id, nome, stato, visibilità.
azdo project get --id <nome-o-id> [--table]Dettaglio di un singolo progetto per UUID o nome.
azdo project clone-all [--output dir] [--ssh] [--parallel 4]Clona (o pull) tutti i repo di tutti i progetti. Organizza in org/project/repo. --dry-run per anteprima.

📊 Boards — Iterazioni, Team, Aree

ComandoCosa fa
azdo board iterations [--team X] [--table]Elenca le iterazioni/sprint del progetto con date inizio/fine.
azdo board iteration current [--team X] [--table]Restituisce lo sprint attualmente attivo per un team. Utile negli script CI/CD.
azdo board teams [--table]Elenca tutti i team del progetto.
azdo board members --team-id X [--table]Elenca i membri di un team con display name e unique name.
azdo board areas [--depth 5] [--table]Elenca le area path come albero. Con --table indentate per profondità.
azdo board backlog [--team X] [--table]Mostra la configurazione del product backlog (livelli: Epics, Features, Stories).
azdo board sprint --iteration X [--team X] [--table]Mostra i work item assegnati a uno sprint specifico.
azdo board iteration create --name "Sprint 42" [--start ...] [--finish ...]Crea un nuovo sprint con date ISO 8601.
azdo board area create --name "NewArea" [--parent "ParentArea"]Crea una nuova area path, opzionalmente sotto una parent.
azdo board team create --name "MyTeam" [--description "..."]Crea un nuovo team nel progetto.
azdo board team set-area --team-id X --area-path "Project\\Area"Assegna un'area path a un team.
azdo board team add-member --team-id X --member-id <guid>Aggiunge un utente a un team. Il GUID si trova con identity search.
azdo board team remove-member --team-id X --member-id <guid>Rimuove un utente da un team (non dall'organizzazione).

👥 Identity, Users & Groups

ComandoCosa fa
azdo identity search --query "email..." [--top 20] [--table]Cerca identità per email o display name (Graph API). Restituisce descriptor (aad.…), email, principal name. Richiede vso.graph.
azdo identity list-users [--top 100] [--table]Elenca tutti gli utenti dell'organizzazione con licenze e stato (MEM API). Richiede vso.memberentitlementmanagement.
azdo identity add-user --email user@example.com [--license express]Invita un utente nell'organizzazione. Licenze: express, stakeholder, basic, advanced.
azdo identity remove-user --id <guid>Rimuove un utente dall'organizzazione per entitlement ID. Permanente.
azdo identity list-groups [--table]Elenca tutti i gruppi con descriptor (vssgp.…), origine, scope.
azdo identity group-members --descriptor vssgp.… [--table]Elenca i membri di un gruppo. I nomi vengono risolti automaticamente.
azdo identity group-create --name "MyGroup" [--description "..."]Crea un nuovo gruppo (project-scoped se viene fornito --project).
azdo identity group-member-add --group vssgp.… --member aad.…Aggiunge un utente o gruppo a un gruppo tramite descriptor.
azdo identity group-member-remove --group vssgp.… --member aad.…Rimuove un membro da un gruppo. Non cancella l'utente/gruppo.

📦 Repository & Git

ComandoCosa fa
azdo repo list [--top 20] [--table]Elenca tutti i repository del progetto con id, nome, branch default.
azdo repo create --name "MyNewRepo"Crea un nuovo repository Git vuoto nel progetto.
azdo repo branches --repo X [--search feature] [--table]Elenca i branch di un repository. --search filtra per nome (contiene).
azdo repo branch create --repo X --name feature/foo --from mainCrea un nuovo branch da un ref sorgente (branch o SHA).
azdo repo branch delete --repo X --name feature/fooCancella un branch remoto. Il clone locale non viene toccato.
azdo repo commits --repo X [--branch main] [--author ...] [--since ...] [--top 50] [--table]Elenca i commit con filtri: branch, autore, intervallo date, paginazione.
azdo repo diff --repo X --base main --target feature/foo [--table]Mostra il diff tra due commit/branch. Con --table: tabella CHANGE | PATH.
azdo repo file --repo X --path src/file.cs [--ref main] [--table]Recupera il contenuto di un file da un branch/commit specifico.
azdo repo file push --repo X --path f.cs --content "..." --branch main --message "..."Crea o aggiorna un file via commit diretto. Nessun clone locale necessario.
azdo repo file delete --repo X --path f.cs --branch main --message "..."Cancella un file via commit diretto.
azdo repo tags --repo X [--table]Elenca i tag (annotated e lightweight) del repository.
azdo repo tag create --repo X --name v1.0 --message "..." --object-id <sha>Crea un annotated tag che punta a un commit SHA.
azdo repo clone-all [--output dir] [--ssh] [--parallel 4]Clona (o pull) tutti i repository del progetto corrente.

🔄 Pull Requests

ComandoCosa fa
azdo pr list [--repo X] [--status active] [--creator ...] [--table]Elenca PR con filtri. Stato: active, abandoned, completed, all.
azdo pr create --title "..." [--source ...] [--target main] [--draft] [--work-item 1234]Crea una PR. Default: source = branch corrente, target = main, repo = rilevato dal git remote. I reviewer devono essere GUID.
azdo pr vote --pr 1234 --voter-id <guid> --vote 10Vota una PR: 10=approva, 5=approva+suggerimenti, 0=reset, -5=in attesa, -10=respingi.
azdo pr abandon --pr 1234Abbandona una PR (chiude senza mergiare).
azdo pr complete --pr 1234 [--delete-source]Completa (mergia) una PR. --delete-source rimuove il branch sorgente.
azdo pr detail --pr 1234 [--table]Dettaglio completo PR: titolo, stato, merge status, voti dei reviewer, label. Con --table mostra tabella reviewer.
azdo pr threads --pr 1234 [--table]Elenca i thread di review con commenti, file, numeri di riga, stato.
azdo pr comment --pr 1234 --text "..." [--file src/Foo.cs --line 42]Aggiunge un commento. Con --file/--line: commento inline sul diff.

🏗️ Build, Pipeline & Release

ComandoCosa fa
azdo build list [--top 20] [--definition 5] [--table]Elenca le build recenti. Filtra per definition ID. --table perfetto per dashboard CI.
azdo build status --id 1234 [--table]Stato dettagliato build con timeline (task, fasi, tempi). Con --table: info block + tabella TIMELINE.
azdo build trigger --definition 5 [--branch refs/heads/main]Avvia una nuova esecuzione della pipeline.
azdo build logs --id 1234 [--table]Elenca gli URL dei log di ogni task di una build.
azdo pipeline list [--top 20] [--table]Elenca tutte le pipeline YAML e classic con id, nome, folder, revision.
azdo release definitions [--search X] [--table]Elenca le definizioni di release. --search filtra per nome.
azdo release list [--definition 5] [--status active] [--table]Elenca le release con i rispettivi ambienti e stati di deployment.
azdo release trigger --definition 5 [--description "..."]Avvia una nuova release da una definizione.

📖 Wiki & 🔎 Search

ComandoCosa fa
azdo wiki list [--table]Elenca tutte le wiki del progetto.
azdo wiki page --wiki-id X --path "/Guide" [--table]Recupera una pagina wiki per path. Restituisce il contenuto Markdown.
azdo wiki upsert --wiki-id X --path "/Guide" --content "# Hello"Crea o aggiorna una pagina wiki. Contenuto in Markdown.
azdo search code --query "IDisposable" [--repo X] [--table]Ricerca full-text nel codice. Risultati: file, path, repo, numero di match.
azdo search wi --query "auth" [--type Bug] [--table]Ricerca full-text nei work item. Filtra per tipo.

68 MCP Tools

Tutti i tool accettano org e project come override. I tool di lettura supportano compact e table. Rilevamento automatico dal git remote o file .azdo.

🔍 Context

azdo_context azdo_context_set

📋 Work Items (8)

azdo_wi_query azdo_wi_get azdo_wi_create azdo_wi_update azdo_wi_comment azdo_wi_hierarchy azdo_wi_link azdo_wi_search

📁 Projects (3)

azdo_project_list azdo_project_get azdo_project_clone_all

📊 Boards (7)

azdo_iterations_list azdo_iteration_current azdo_teams_list azdo_members_list azdo_areas_list azdo_backlog_product azdo_backlog_sprint

📦 Repositories (13)

azdo_repo_list azdo_repo_create azdo_git_branches azdo_repo_branch_create azdo_repo_branch_delete azdo_git_commits azdo_git_diff azdo_git_file azdo_repo_file_push azdo_repo_file_delete azdo_repo_tags_list azdo_repo_tag_create azdo_repo_clone_all

🔄 Pull Requests (8)

azdo_pr_list azdo_pr_create azdo_pr_vote azdo_pr_update azdo_pr_detail azdo_pr_threads azdo_pr_comment azdo_pr_resolve

🏗️ Build & Pipeline (5)

azdo_build_list azdo_build_status azdo_build_trigger azdo_pipelines_list azdo_build_logs

🚀 Releases (3)

azdo_release_definitions azdo_release_list azdo_release_trigger

📖 Wiki (3)

azdo_wiki_list azdo_wiki_page_get azdo_wiki_page_upsert

🔎 Search (2)

azdo_code_search azdo_wi_search

👥 Identity & Users (9)

azdo_identity_search azdo_group_list azdo_group_members azdo_group_create azdo_group_member_add azdo_group_member_remove azdo_user_list azdo_user_add azdo_user_remove

⚙️ Admin (6)

azdo_iteration_create azdo_area_create azdo_team_create azdo_team_area_set azdo_team_member_add azdo_team_member_remove

Integrazioni AI

Claude Desktop

Aggiungi al claude_desktop_config.json:

{
  "mcpServers": {
    "azdo": {
      "command": "/usr/local/bin/azdo",
      "args": ["mcp", "serve"]
    }
  }
}

GitHub Copilot

Configura in ~/.config/github-copilot/cli/mcp-config.json:

{
  "mcpServers": {
    "azdo": {
      "command": "/usr/local/bin/azdo",
      "args": ["mcp", "serve"]
    }
  }
}

HTTP Transport

Per client browser-based (VS Code web, Copilot Chat web). Ascolta solo loopback; richieste cross-origin dei browser vengono rifiutate (403) per prevenire DNS-rebinding:

azdo mcp serve --transport http --port 9287

{
  "mcpServers": {
    "azdo": { "url": "http://localhost:9287/mcp" }
  }
}

Domande frequenti

Che cos'è azdo?

azdo è una CLI e un server MCP open source in C#/.NET 8 per usare Azure DevOps dal terminale o da client AI compatibili.

Come si installa azdo?

Puoi installarlo come tool .NET con dotnet tool install -g AzDo oppure scaricare un binario standalone dalla sezione Releases del repository.

Quali client AI possono usare il server MCP?

Il server MCP può essere configurato in client compatibili come Claude Desktop, GitHub Copilot e Cursor.