azdoutil 3.2.0

dotnet tool install --global azdoutil --version 3.2.0
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local azdoutil --version 3.2.0
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=azdoutil&version=3.2.0
                    
nuke :add-package azdoutil --version 3.2.0
                    

azdoutil

A collection of useful Azure DevOps utilities.

Written by Benjamin Day
Pluralsight Author | Microsoft MVP
https://www.benday.com
https://www.honestcheetah.com
info@benday.com
YouTube: https://www.youtube.com/@_benday

📖 New book: Azure Cosmos DB for .NET Developers: From Document Thinking to Production Patterns — It's the book on Cosmos DB for .NET developers! Document modeling with aggregate roots, hierarchical partition keys, request unit economics, Change Feed patterns, and a complete production case study — all in C# and ASP.NET Core.

Got ideas for Azure DevOps utilities you'd like to see? Found a bug? Let us know by submitting an issue https://github.com/benday-inc/azdoutil/issues. Want to contribute? Submit a pull request.

Command Categories

  • Azure DevOps Utility Configuration - Commands for setting up this tool and connecting to Azure DevOps

  • Automated Builds - Commands that help with automated builds and automated releases

  • Flow Metrics - Tools for forecasting project management details using Flow Metrics such as throughput and cycle time.

Want to learn more about how to use Flow Metrics to run your projects? Check out this course:
Predicting the Future, Estimating, and Running Your Projects with Flow Metrics.

  • Process Templates - Process template customization and administration utilities

  • Team Project Administration - Tools for creating, editing, and managing Team Projects in Azure DevOps

  • Test Data - Utilities for populating Azure DevOps Team Projects with test data

  • Version Control - Tools for creating, converting, managing version control repositories

  • Work Items - Utilities for editing work items and working with work item queries (WIQL)

  • Miscellaneous - Miscellaneous commands

Installing

The azdoutil is distributed as a .NET Core Tool via NuGet. To install it go to the command prompt and type
dotnet tool install azdoutil -g

Prerequisites

Getting Started

Everything starts with a configuration. After you've installed azdoutil, you'll need to run azdoutil addconfig to add a configuration. A configuration is how you store the URL for your Azure DevOps instance and the personal access token (PAT) for authenticating to that instance.

Configurations are named and you can have as many as you'd like.

Set a Default Configuration

There's one default configuration named (default). If you only work with one Azure DevOps instance, then all you'll need to do is to is run azdoutil addconfig --url {url} --pat {pat} and that will set your default configuration.

Additional Named Configurations

If you want to add additional named configurations, you'll run azdoutil addconfig --config {name} --url {url} --pat {pat}.

Running Commands

Once you've set a default configuration, you can run any azdoutil command without having to specify any additional URL or PAT info.

If you want to run a command against an Azure DevOps instance that is NOT your default, you'll need to supply the --config {name} argument.

Managing Configurations

To add new configuration or modify an existing configuration, use the azdoutil addconfig command. You can list your configurations using the azdoutil listconfig command. To delete a configuration, use the azdoutil removeconfig command.

MCP Server (AI assistant integration)

azdoutil can run as a Model Context Protocol (MCP) server so an AI assistant (GitHub Copilot, Claude, etc.) can answer delivery questions in plain language — "how long does stuff usually take?", "when will these 10 items be done?", "what's stuck?" — by calling azdoutil's flow metrics calculations directly.

Start it with azdoutil mcp-server. Run azdoutil mcp-config to print ready-to-paste setup for Claude Code, Claude Desktop, VS Code, Visual Studio 2022/2026, and Cursor — or run azdoutil mcp-config --install and let it register the server for you at user (per-machine) scope. See the GitHub README for full setup and routing details.

The tools are all read-only:

Tool What it answers
get_typical_delivery_window "How long does stuff usually take?" — cycle time percentiles (50th/85th/95th).
get_throughput "How much are we getting done?" — throughput and cycle time over a date range.
forecast_completion_date "When will these N items be done?" — Monte Carlo forecast of weeks needed.
forecast_items_in_timeframe "How much can we get done in N weeks?" — Monte Carlo forecast of item counts.
get_aging_work "What's stuck?" — in-progress items aging beyond the typical delivery window.
get_project_summary "How's the project going?" — combined throughput, delivery window, and aging headlines.
list_configurations The Azure DevOps configurations azdoutil knows about (never returns tokens).
list_team_projects Team projects in the org/collection.
get_project_info Details for one project (id, URL, state, process).
list_teams Teams in a project.
list_process_templates Process templates available in the org.
get_work_item_types Work item types in a project (PBI, Bug, Task, …).
get_work_item_type_states Workflow states for a work item type (New → Done).
list_work_item_queries Saved work item queries in a project.
run_work_item_query Run a saved query by name and return the matching items.
list_git_repositories Git repositories in a project.
analyze_repository Build-readiness analysis of a repo without cloning it.
discover_cli_commands Finds the right azdoutil command line for anything not exposed as a tool.

Commands

Category Command Name Description
AzdoUtil Configuration addconfig Add or update an Azure DevOps configuration. For example, which server or account plus auth information.
AzdoUtil Configuration listconfig List an Azure DevOps configuration. For example, which server or account plus auth information.
AzdoUtil Configuration removeconfig Remove an Azure DevOps configuration. For example, which server or account plus auth information.
Builds exportagentcapabilities Script out the user-defined capabilities of the build agents to a JSON file so they can be reapplied to a new server with importagentcapabilities. Only agents that have custom capabilities are written.
Builds exportbuilddef Export build definition
Builds exportreleasedef Export release definition
Builds find-deployment-group-usages Read the deployment groups and deployment group agents for one or every team project, then trace which release definitions deploy to each group -- including which target machines each phase's tag filter actually selects. Deployment groups only exist in classic release pipelines, so builds have nothing to scan.
Builds find-nuget-tool-installer Find the classic build definitions that use the NuGet tool installer task (NuGetToolInstaller) and report which version of the task each step uses and which version of NuGet it installs.
Builds finddemands Find the build and release definitions that have agent demands, and list the demands each one carries. Demands are the capabilities a definition requires of an agent, so this is the companion to the agent capability commands. Scans both builds and releases unless /builds or /releases is given.
Builds findtaskgroupusages Find build definitions that reference task groups in a team project.
Builds importagentcapabilities Reapply the user-defined capabilities from an exportagentcapabilities file onto the agents of the current server, matching agents by name. By default the imported capabilities are merged onto whatever each agent already has; use /replace to overwrite. Use /preview to see what would change without writing anything.
Builds importbuilddef Import build definition from JSON file
Builds importreleasedef Import release definition from JSON file
Builds inlinetaskgroup Inline a task group's steps into a build definition and disable the original task group reference.
Builds listagentcapabilities List the build agents across all agent pools and the user-defined capabilities each one has. Use /customonly to show only the agents that have custom capabilities.
Builds listagentpools List agent pools
Builds listbuilddefs List build definitions
Builds listqueues List build queues in a team project or team projects
Builds listreleasedefs List release definitions
Builds listtaskgroups List task groups in a team project.
Builds repairbuilddefagentpool Repairs the agent pool setting for the build definitions in a team project or team projects. This is helpful after an on-prem to cloud migration.
Builds repairreleasedefagentpool Repairs the agent pool setting for the release definitions in a team project or team projects. This is helpful after an on-prem to cloud migration.
Builds setagentcapabilities Push a set of user-defined capabilities onto agents without going through the UI. Target a whole pool with /pool, a single agent with /agent, or every agent with /allpools. Supply the capabilities inline with /capabilities:"name=value;name2=value2" and/or from a flat JSON file with /input. Merges by default; use /replace to overwrite and /preview to see the changes first.
Builds update-nuget-tool-installer Update the NuGet tool installer steps (NuGetToolInstaller) in classic build definitions to a chosen task version and NuGet version, set each step's display name to show the NuGet version, and save the change back to the server. Build definitions that already match are left alone.
Flow Metrics agingwork Get aging in-progress work items
Flow Metrics cycletimeconfidence Get item cycle time for 50% and 85% levels. This helps you understand how items typically are delivered.
Flow Metrics forecastdurationforitemcount Use throughput data to forecast likely number of weeks to get given number of items done using Monte Carlo simulation
Flow Metrics forecastitemsinweeks Use throughput data to forecast likely number of items done in given number of weeks using Monte Carlo simulation
Flow Metrics forecastworkitem Use throughput data to forecast when a work item is likely to be done based on the current backlog priority using Monte Carlo simulation
Flow Metrics suggest-sle Calculate a suggested service level expectation (SLE) based on cycle time
Flow Metrics throughputcycletime Get cycle time and throughput data for a team project for a date range
MCP Server mcp-config Show or manage the MCP server registration for an AI client. With no options it prints ready-to-paste configuration; with --install or --uninstall it registers or removes the server at user scope (per-machine) for Claude Code or VS Code.
MCP Server mcp-server Start a Model Context Protocol (MCP) server over stdio that exposes the flow metrics tools to an AI assistant. The process stays alive until the MCP client disconnects.
Miscellaneous connectiondata Get information about a connection to Azure DevOps.
Process Templates addrefinementprocess Creates backlog refinement process template as described at https://www.benday.com/2022/09/29/streamlining-backlog-refinement-with-azure-devops/
Process Templates changeprocess Change the process for a Team Project
Project Administration createproject Create team projects
Project Administration createteam Creates a new team in an Azure DevOps Team Project.
Project Administration deleteproject Delete team project
Project Administration export-local-groups Export the permission grants held by Windows local groups on the app tier machine: the groups, their memberships, and every security namespace ACL that references them, serialized to JSON. Also writes a PowerShell script that recreates the groups and memberships on a new machine, for a server migration where the collection database moves to a new app tier.
Project Administration getproject Get team project info
Project Administration import-local-groups Reapply the permission grants from an export-local-groups JSON file on the new server. Each old local group is re-resolved by name under the new app tier machine, and its grants are merged into the same security namespace tokens they came from. Run the generated PowerShell script on the new machine first so the groups exist and the server has synced them.
Project Administration listprocesstemplates List process templates
Project Administration listprojects List team projects
Project Administration listteams Gets list of teams in an Azure DevOps Team Project.
Test Data createfromexcel Create work items using Excel script
Test Data createfromgenerator Create work items using random data generator
Test Data createrandomtitles Create fake work item titles using random data generator without creating any work items.
Version Control analyzeallrepos Analyzes all Git repositories for build readiness without cloning.
Version Control analyzerepo Analyzes a Git repository for build readiness without cloning.
Version Control assess-tfvc-migration Analyzes a TFVC path and reports what a conversion to Git would have to deal with.
Version Control branchhealth Surveys the branches in a Git repository and reports how much work is in flight.
Version Control creategitrepo Creates a Git repository in an Azure DevOps Team Project.
Version Control listallgitrepos Gets list of Git repositories from all Azure DevOps Team Projects.
Version Control listgitrepos Gets list of Git repositories from an Azure DevOps Team Project.
Version Control tfvc-to-git Converts a Team Foundation Version Control (TFVC) folder to a Git repository.
Version Control where-tf Finds the tf command line client, which ships inside Visual Studio and is rarely on the PATH.
Work Items comparewitdfields Compare work item fields between two work item type definition files.
Work Items copycategory Copy category type from one category file to another.
Work Items copywitdfield Copy work item field from one work item type definition to another.
Work Items exportprocesstemplate Exports the process template configuration for one or more projects. This command only works on Windows and requires witadmin.exe to be installed.
Work Items exportworkitemquery Export work item query results
Work Items getareas Gets a list of areas in an Azure DevOps Team Project.
Work Items getfields Gets a list of work item fields for a work item type in an Azure DevOps Team Project.
Work Items getiterations Gets a list of iterations in an Azure DevOps Team Project.
Work Items getworkitem Get work item by id
Work Items getworkitemstates Gets the list of states for a work item type in an Azure DevOps Team Project.
Work Items getworkitemtypes Gets a list of work item types in an Azure DevOps Team Project.
Work Items listworkitemqueries Gets a list of all work item queries in an Azure DevOps Team Project.
Work Items runworkitemquery Run work item query
Work Items setiteration Create iteration including start and end date
Work Items setworkitemstate Set the state value on an existing work item
Work Items showworkitemquery Show work item query

AzdoUtil Configuration

addconfig

Add or update an Azure DevOps configuration. For example, which server or account plus auth information.

Arguments

Argument Is Optional Data Type Description
config Optional String Name of the configuration
pat Optional String PAT for this collection
windowsauth Optional Boolean Use windows authentication with the current logged in user
url Required String URL for this collection (example: https://dev.azure.com/accountname)
maxapiversion Optional String Highest REST api-version to use with this collection (example: 5.0). Only needed for an older server that will not answer the automatic check.

listconfig

List an Azure DevOps configuration. For example, which server or account plus auth information.

Arguments

Argument Is Optional Data Type Description
config Optional String Name of the configuration

removeconfig

Remove an Azure DevOps configuration. For example, which server or account plus auth information.

Arguments

Argument Is Optional Data Type Description
config Required String Name of the configuration

Builds

exportagentcapabilities

Script out the user-defined capabilities of the build agents to a JSON file so they can be reapplied to a new server with importagentcapabilities. Only agents that have custom capabilities are written.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
pool Optional String Only export agents in this agent pool
output Optional String Path to write the JSON file to. If omitted, the JSON is written to the console.

exportbuilddef

Export build definition

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name
name Required String Build definition name
xaml Optional Boolean List XAML build definitions
showlastruninfo Optional Boolean Show last build run info
csv Optional Boolean Output results in CSV format
csv-noheader Optional Boolean Do not print the CSV column header info
raw Optional Boolean Output raw build definition

exportreleasedef

Export release definition

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name
name Required String Release definition name
queueinfo Optional Boolean Only display queue info
json Optional Boolean Export to JSON

find-deployment-group-usages

Read the deployment groups and deployment group agents for one or every team project, then trace which release definitions deploy to each group -- including which target machines each phase's tag filter actually selects. Deployment groups only exist in classic release pipelines, so builds have nothing to scan.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name
all Optional Boolean Scan every project in this collection
csv Optional Boolean Output one CSV row per release phase to deployment group usage
json Optional Boolean Output results as JSON

find-nuget-tool-installer

Find the classic build definitions that use the NuGet tool installer task (NuGetToolInstaller) and report which version of the task each step uses and which version of NuGet it installs.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name
all Optional Boolean Scan every project in this collection
csv Optional Boolean Output results in CSV format
json Optional Boolean Output results as JSON

finddemands

Find the build and release definitions that have agent demands, and list the demands each one carries. Demands are the capabilities a definition requires of an agent, so this is the companion to the agent capability commands. Scans both builds and releases unless /builds or /releases is given.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name
all Optional Boolean Scan every project in this collection
builds Optional Boolean Only scan build definitions
releases Optional Boolean Only scan release definitions
json Optional Boolean Output results as JSON

findtaskgroupusages

Find build definitions that reference task groups in a team project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name
taskgroupid Optional String Optional. Filter to only references of this task group id.
json Optional Boolean Output results as JSON

importagentcapabilities

Reapply the user-defined capabilities from an exportagentcapabilities file onto the agents of the current server, matching agents by name. By default the imported capabilities are merged onto whatever each agent already has; use /replace to overwrite. Use /preview to see what would change without writing anything.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
input Required String Path to the JSON file produced by exportagentcapabilities
replace Optional Boolean Overwrite each agent's user capabilities instead of merging
preview Optional Boolean Preview the changes without writing anything

importbuilddef

Import build definition from JSON file

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name
input Required String Path to JSON file containing build definition
cloneid Optional Int32 ID of the definition to clone (optional)
clonerev Optional Int32 Revision of the definition to clone (optional)

importreleasedef

Import release definition from JSON file

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name
input Required String Path to JSON file containing release definition
cloneid Optional Int32 ID of the definition to clone (optional)
clonerev Optional Int32 Revision of the definition to clone (optional)

inlinetaskgroup

Inline a task group's steps into a build definition and disable the original task group reference.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name
name Required String Build definition name
taskgroupid Optional String Optional. Inline only this task group id. Default inlines all task groups in the definition.
dryrun Optional Boolean Write before/after JSON files locally instead of updating the build definition on the server.
exporttopath Optional String Directory for dry-run output files. Default is the current working directory.

listagentcapabilities

List the build agents across all agent pools and the user-defined capabilities each one has. Use /customonly to show only the agents that have custom capabilities.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
pool Optional String Only look at this agent pool
customonly Optional Boolean Only show agents that have user-defined capabilities
json Optional Boolean Output as JSON

listagentpools

List agent pools

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
agents Optional Boolean Get agents in each pool
json Optional Boolean Output as JSON

listbuilddefs

List build definitions

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name
all Optional Boolean All builds in all projects in this collection
nameonly Optional Boolean Only display the build definition name
xaml Optional Boolean List XAML build definitions
json Optional Boolean Export to JSON

listqueues

List build queues in a team project or team projects

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name
all Optional Boolean All builds in all projects in this collection
json Optional Boolean Output as JSON

listreleasedefs

List release definitions

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name
all Optional Boolean All releases in all projects in this collection
json Optional Boolean Export to JSON
queueinfo Optional Boolean Only display queue info

listtaskgroups

List task groups in a team project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name
nameonly Optional Boolean Only display the task group name
json Optional Boolean Output results as JSON

repairbuilddefagentpool

Repairs the agent pool setting for the build definitions in a team project or team projects. This is helpful after an on-prem to cloud migration.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name
all Optional Boolean All builds in all projects in this collection
PrintJsonOnPreview Optional Boolean Print modified json in preview mode
preview Optional Boolean Preview only. Do not update build definitions.
buildname Optional String Build definition name filter. This will only apply if the build name contains this value and only if /all is not specified.
originalbuildinfofile Required String Build def JSON file from on-prem server. Assumes that pools have been recreated in the cloud using the same name.

repairreleasedefagentpool

Repairs the agent pool setting for the release definitions in a team project or team projects. This is helpful after an on-prem to cloud migration.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name
all Optional Boolean All releases in all projects in this collection
PrintJsonOnPreview Optional Boolean Print modified json in preview mode
preview Optional Boolean Preview only. Do not update release definitions.
originalreleaseinfofile Required String Release def agent pool references JSON file from on-prem server. Assumes that pools have been recreated in the cloud using the same name.

setagentcapabilities

Push a set of user-defined capabilities onto agents without going through the UI. Target a whole pool with /pool, a single agent with /agent, or every agent with /allpools. Supply the capabilities inline with /capabilities:"name=value;name2=value2" and/or from a flat JSON file with /input. Merges by default; use /replace to overwrite and /preview to see the changes first.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
capabilities Optional String Capabilities as name=value pairs separated by semicolons, e.g. "VisualStudio=2022;SpecialSoftware=true"
input Optional String Path to a flat JSON file of name/value capabilities to apply
pool Optional String Apply to every agent in this pool
agent Optional String Apply to the agent with this name (optionally narrowed by /pool)
allpools Optional Boolean Apply to every agent in every pool
replace Optional Boolean Overwrite each agent's user capabilities instead of merging
preview Optional Boolean Preview the changes without writing anything

update-nuget-tool-installer

Update the NuGet tool installer steps (NuGetToolInstaller) in classic build definitions to a chosen task version and NuGet version, set each step's display name to show the NuGet version, and save the change back to the server. Build definitions that already match are left alone.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name
all Optional Boolean Update build definitions in every project in this collection
name Optional String Build definition name. If omitted, every build definition in scope that uses the NuGet tool installer task is considered.
nugetversion Optional String Version of NuGet the task should install. Default is '7.9.x'.
taskversion Optional String Version spec for the NuGetToolInstaller task itself. Default is '1.*'.
dryrun Optional Boolean Write before/after JSON files locally instead of updating the build definitions on the server.
exporttopath Optional String Directory for dry-run output files. Default is the current working directory.

Flow Metrics

agingwork

Get aging in-progress work items

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name
teamname Optional String Team name

cycletimeconfidence

Get item cycle time for 50% and 85% levels. This helps you understand how items typically are delivered.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
numberofdays Required Int32 Number of days of history to compute
teamproject Required String Team project name
teamname Optional String Team name

forecastdurationforitemcount

Use throughput data to forecast likely number of weeks to get given number of items done using Monte Carlo simulation

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
numberofdays Required Int32 Number of days of history to compute
teamproject Required String Team project name
forecastitemcount Required Int32 Number of items to forecast duration for
teamname Optional String Team name

forecastitemsinweeks

Use throughput data to forecast likely number of items done in given number of weeks using Monte Carlo simulation

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
numberofdays Required Int32 Number of days of history to compute
teamproject Required String Team project name
forecastweeks Required Int32 Number of weeks into the future to forecast
teamname Optional String Team name

forecastworkitem

Use throughput data to forecast when a work item is likely to be done based on the current backlog priority using Monte Carlo simulation

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
numberofdays Required Int32 Number of days of history to compute
id Required Int32 Id of the work item to forecast
teamname Optional String Team name

suggest-sle

Calculate a suggested service level expectation (SLE) based on cycle time

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
numberofdays Required Int32 Number of days of history to compute
teamproject Required String Team project name
teamname Optional String Team name
percent Optional Int32 Percentage level to calculate. (For example, 85% of our items complete in X days)

throughputcycletime

Get cycle time and throughput data for a team project for a date range

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
numberofdays Required Int32 Number of days of history to compute
teamproject Required String Team project name
teamname Optional String Team name

MCP Server

mcp-config

Show or manage the MCP server registration for an AI client. With no options it prints ready-to-paste configuration; with --install or --uninstall it registers or removes the server at user scope (per-machine) for Claude Code or VS Code.

Arguments

Argument Is Optional Data Type Description
install Optional Boolean Register the MCP server with a client at user (per-machine) scope
uninstall Optional Boolean Remove the MCP server registration from a client
client Optional String Target client: claude-code (default) or vscode
config Optional String azdoutil configuration the server should use by default (sets AZDO_CONFIG_NAME)

mcp-server

Start a Model Context Protocol (MCP) server over stdio that exposes the flow metrics tools to an AI assistant. The process stays alive until the MCP client disconnects.

Arguments

Argument Is Optional Data Type Description

Miscellaneous

connectiondata

Get information about a connection to Azure DevOps.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use

Process Templates

addrefinementprocess

Creates backlog refinement process template as described at https://www.benday.com/2022/09/29/streamlining-backlog-refinement-with-azure-devops/

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
agile Optional Boolean Whether to create an agile backlog refinement process template instead of scrum.

changeprocess

Change the process for a Team Project

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name
processname Required String New process name

Project Administration

createproject

Create team projects

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name
processname Required String Process template name

createteam

Creates a new team in an Azure DevOps Team Project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name that contains the team
teamname Required String Name of the new team
description Optional String Description for the new team

deleteproject

Delete team project

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name to delete
confirm Optional Boolean Confirm delete

export-local-groups

Export the permission grants held by Windows local groups on the app tier machine: the groups, their memberships, and every security namespace ACL that references them, serialized to JSON. Also writes a PowerShell script that recreates the groups and memberships on a new machine, for a server migration where the collection database moves to a new app tier.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
machine Required String Name of the app tier machine whose local groups should be exported. Grants are matched by the domain part of each Windows identity.
output Optional String Path for the export JSON file. Default is 'local-groups-export.json' in the current directory. The PowerShell script is written next to it with a .ps1 extension.

getproject

Get team project info

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name

import-local-groups

Reapply the permission grants from an export-local-groups JSON file on the new server. Each old local group is re-resolved by name under the new app tier machine, and its grants are merged into the same security namespace tokens they came from. Run the generated PowerShell script on the new machine first so the groups exist and the server has synced them.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
input Required String Path to the JSON file written by export-local-groups
machine Required String Name of the NEW app tier machine. Groups are resolved as MACHINE\GroupName under this name.
preview Optional Boolean Resolve the groups and show what would be applied without changing anything

listprocesstemplates

List process templates

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use

listprojects

List team projects

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use

listteams

Gets list of teams in an Azure DevOps Team Project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name that contains the teams

Test Data

createfromexcel

Create work items using Excel script

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
skipfuturedates Optional Boolean Skip script steps that occur in the future
pathtoexcel Required String Path to the Excel script
startdate Required DateTime Date for the start of the Excel script
teamproject Required String Name of the team project
processname Required String Process template name
createproject Required Boolean Creates the team project if it doesn't exist

createfromgenerator

Create work items using random data generator

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
skipfuturedates Optional Boolean Skip script steps that occur in the future
numberofsprints Required Int32 Number of sprints to generate
teamproject Optional String Name of the team project
processname Required String Process template name
createproject Optional Boolean Creates the team project if it doesn't exist
teamcount Optional Int32 Creates data for multiple teams. This option is only available when creating a new project.
alldone Optional Boolean All PBIs in a sprint makes it to done
addsessiontag Optional Boolean Add a session tag to work items for debugging purposes
output Optional String Save generated script file to disk in this directory. Note the filename will be auto-generated.
scriptonly Optional Boolean Creates the excel export script. Requires an arg value for 'output'

createrandomtitles

Create fake work item titles using random data generator without creating any work items.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use

Version Control

analyzeallrepos

Analyzes all Git repositories for build readiness without cloning.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name (if omitted, analyzes all projects)
csv Optional Boolean Output results in CSV format

analyzerepo

Analyzes a Git repository for build readiness without cloning.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name. Read from the origin remote of the current directory's git repository when it is not supplied.
reponame Optional String Repository name. Read from the origin remote of the current directory's git repository when it is not supplied.
csv Optional Boolean Output results in CSV format

assess-tfvc-migration

Analyzes a TFVC path and reports what a conversion to Git would have to deal with.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name. Read from the TFVC workspace holding the current directory when it is not supplied.
tfvc-path Optional String TFVC path to assess. Defaults to the server path of the current directory when it is inside a workspace, and to $/<teamproject> otherwise.
scandepth Optional Int32 How many folder levels below the path to scan for unregistered branches. Defaults to 3.
csv Optional Boolean Output the findings as CSV instead of a report

branchhealth

Surveys the branches in a Git repository and reports how much work is in flight.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name. Read from the origin remote of the current directory's git repository when it is not supplied.
reponame Optional String Repository name. Read from the origin remote of the current directory's git repository when it is not supplied.
days Optional Int32 How many days count as active. Defaults to 7. The last 30 days are always reported as well.
csv Optional Boolean Output one row per branch as CSV instead of a report

creategitrepo

Creates a Git repository in an Azure DevOps Team Project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name that contains the git repositories
reponame Required String Name of the new git repository

listallgitrepos

Gets list of Git repositories from all Azure DevOps Team Projects.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
csv Optional Boolean Output results in CSV format
showlastcommit Optional Boolean Include last commit info for each repository

listgitrepos

Gets list of Git repositories from an Azure DevOps Team Project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name that contains the git repositories

tfvc-to-git

Converts a Team Foundation Version Control (TFVC) folder to a Git repository.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name that contains the TFVC and Git repositories
reponame Required String Name of the new git repository
tfvc-path Required String Source TFVC folder to convert

where-tf

Finds the tf command line client, which ships inside Visual Studio and is rarely on the PATH.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Print only the path of the first copy that was found

Work Items

comparewitdfields

Compare work item fields between two work item type definition files.

Arguments

Argument Is Optional Data Type Description
file1 Required String Path to the source work item type definition file.
file2 Required String Path to the source work item type definition file.
flip Optional Boolean Reverse the source and target files.

copycategory

Copy category type from one category file to another.

Arguments

Argument Is Optional Data Type Description
file1 Required String Path to the source category definition file.
file2 Required String Path to the target category definition file.
refname Required String Refname of the category to copy.
overwrite Required Boolean Overwrite the target field if it already exists.

copywitdfield

Copy work item field from one work item type definition to another.

Arguments

Argument Is Optional Data Type Description
file1 Required String Path to the source work item type definition file.
file2 Required String Path to the target work item type definition file.
refname Required String Refname of the field to copy.
overwrite Required Boolean Overwrite the target field if it already exists.

exportprocesstemplate

Exports the process template configuration for one or more projects. This command only works on Windows and requires witadmin.exe to be installed.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Optional String Team project name to export.
all Optional Boolean Export all projects in the organization or team project collection.
exporttopath Optional String Path to export the process template to. If not specified, the current directory is used.
witadminpath Optional String Specify path to witadmin.exe if it can't be located automatically.

exportworkitemquery

Export work item query results

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name to delete
queryname Required String Work item query name
exporttopath Required String Export to path

getareas

Gets a list of areas in an Azure DevOps Team Project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name that contains the iterations
verbose Optional Boolean Verbose output

getfields

Gets a list of work item fields for a work item type in an Azure DevOps Team Project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name that contains the work item type
workitemtypename Required String Name of the work item type
filter Optional String Case insensitive string filter for the results.

getiterations

Gets a list of iterations in an Azure DevOps Team Project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name that contains the iterations
verbose Optional Boolean Verbose output

getworkitem

Get work item by id

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
id Required Int32 Work item id

getworkitemstates

Gets the list of states for a work item type in an Azure DevOps Team Project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name that contains the work item type
workitemtypename Required String Name of the work item type

getworkitemtypes

Gets a list of work item types in an Azure DevOps Team Project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name that contains the work item types
nameonly Optional Boolean Only show the name of the work item types in the results.

listworkitemqueries

Gets a list of all work item queries in an Azure DevOps Team Project.

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name that contains the work item queries

runworkitemquery

Run work item query

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name containing the qork item query to run
queryname Required String Work item query name

setiteration

Create iteration including start and end date

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project name
startdate Required DateTime Iteration start date
enddate Required DateTime Iteration end date
name Required String Iteration name

setworkitemstate

Set the state value on an existing work item

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
state Required String Work item state value
id Required Int32 Work item id for the work item to be updated
date Optional DateTime Iteration end date
override Optional Boolean Override non-matching state values and force set the value you want

showworkitemquery

Show work item query

Arguments

Argument Is Optional Data Type Description
quiet Optional Boolean Quiet mode
config Optional String Configuration name to use
teamproject Required String Team project that contains the work item query
queryname Required String Work item query name
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
3.2.0 43 9/3/2026
3.1.0 84 8/31/2026
3.0.1 76 8/31/2026
3.0.0 90 8/29/2026
2.23.0 105 8/15/2026
2.22.2 129 7/15/2026
2.22.0 118 7/14/2026
2.21.0 162 4/30/2026
2.19.0 202 3/7/2026
2.18.1 158 3/5/2026
2.18.0 154 3/4/2026
2.17.0 180 2/5/2026
2.16.1 185 1/20/2026
2.14.0 298 10/20/2025
2.13.1 280 10/20/2025
2.13.0 284 10/20/2025
2.12.0 336 6/23/2025
2.11.0 271 3/15/2025
2.10.0 275 2/21/2025
2.9.2 281 2/12/2025
Loading failed

v3.2 - update-nuget-tool-installer now takes --all to update the build definitions in every project in the collection, and its build definition name is optional so an omitted name means every build definition in scope. It now runs the same scan as find-nuget-tool-installer first and only writes the build definitions that are actually out of spec, so a definition already using the requested task version, NuGet version, and step display name is left alone instead of taking a revision for a no-op save;
v3.1 - The tool now negotiates the REST api-version with the server instead of assuming a current one, so commands work against older on-prem servers such as Azure DevOps Server 2019 rather than failing with a 404 or 400. The supported version is discovered from the server and only ever lowered, so behavior against Azure DevOps Services is unchanged; a --maxapiversion option on addconfig pins it for a server that will not answer the automatic check; connectiondata now reports the server version and build, the release it belongs to, and the highest api-version it accepts; Bug fix: export-local-groups resolved identities in batches large enough to overrun the default IIS query string limit, and the resulting failure was silently reported as 'no local groups hold any permission grants' -- batches are now sized by length and a failed lookup is reported; Bug fix: listprojects called the server twice and discarded the error message the server sent back;
v3.0.1 - Bug fix: the commands that scan one team project or all of them (find-nuget-tool-installer, find-deployment-group-usages, finddemands, listbuilddefs, listqueues, listreleasedefs, and the two agent pool repair commands) ignored a missing team project name and called the server without one, which failed with a 404. They now report which argument is missing;
v3.0 - Upgraded to Benday.CommandsFramework v5: arguments are now typed POSIX-style (--name value) and the old /name:value form still works but is deprecated; the tool now returns a real exit code so scripts and pipelines can detect failures; added the 'tui' terminal interface; Added find-nuget-tool-installer and update-nuget-tool-installer to report and standardize NuGet tool installer tasks in classic builds; Added find-deployment-group-usages to trace deployment groups, their tagged target machines, and the release definitions that deploy to them; Added export-local-groups and import-local-groups to migrate permission grants held by Windows local groups on the app tier when a collection moves to a new server;
v2.23 - Added assess-tfvc-migration to report what a TFVC to Git conversion would have to deal with: branches and their activity, folders used as branches without being registered as such, build definitions that pull from TFVC and the workspaces they map, large files and checked-in build output, and solutions that share projects; Added branchhealth to survey the branches of a Git repository; Added where-tf to find the tf command line client; Added additional commands for import/export of agent pool user defined capabilities; Added commands to search for demands in builds and releases;
v2.22 - MCP server; Bug fixes;
v2.21 - Adding commands to help manage classic build task group definitions including a command to inline task groups back into the build;
v2.20 - Modified the listagentpools command to include agent capabilities in its output;
v2.19 - Added refinement process template based on Agile; Added ability to create test data in an Agile-based team project;
v2.18 - Added support for 'gui' command to launch the GUI version of the tool;
v2.17 - Adding command to get list of all repos in a project with optional csv output and optional last commit info;
v2.16 - Work item test data generator now populates either BacklogPriority or StackRank for PBIs and User Stories;
v2.15 - Adding support for .NET 10;
v2.14 - Added import json release definition command;
v2.13 - Re-adding missing import json build def command;
v2.12 - Fixing null reference exception in listreleasedefs; Update package versions; Fix EPPlus licensing change;
v2.11 - Minor bug fixes and improvements;
v2.10 - Changes to to GetWorkItemFieldsCommand to fix a bug, improve formatting of data, and add simple text filtering;
v2.9.2 - Bug fix for bulk export of agent info for releases;
v2.9.1 - Bug fix;
v2.9 - added option to bulk export agent info for all releases in all projects;
v2.8 - added command to export release definition with option to only display queue info;
v2.7 - added command to repair agent pool bindings for build definitions after a cloud migration; added ability to list all build queues for a project;
v2.6 - added support for viewing release definitions in a project and/or collection
v2.5 - added list agent pools command; added support for viewing all builds in a collection; added support for viewing the pool for a build definition;
v2.4 - added support for work item type definition comparison