Description
A set of utility tools for DevOps, built around a dependency-free core that is exposed through several optional surfaces: a CLI, an MCP server, agent tools, a Claude Code plugin, a TUI, and a Qt UI.
Two things it does today:
- Azure DevOps, made scriptable and agent-friendly — work items, builds, repositories and pull requests over plain REST, on cloud and on-prem alike, with clean JSON on stdout and a human confirmation in front of every write.
- Kubernetes manifest sanitizing — mask every
Secretvalue so a manifest can be pasted into a ticket, a chat, or an LLM prompt.
Requires Python 3.12+.
📖 Full documentation: https://carneirofc.github.io/devops-utils/
Install
Recommended — no install at all. With uv,
uvx fetches the package and the extra you name into a cached, throwaway
environment per invocation:
uvx --from "devops-utils[azure]" devops-utils azdo list --project MyProject --mine
uvx --from "devops-utils[mcp]" devops-utils-mcp # MCP server
uvx --from "devops-utils[all]" devops-utils --help # every surface
The extra is not optional: azdo needs [azure], the MCP server needs [mcp],
and [all] covers everything. Or install it the usual way:
pip install "devops-utils[all]" # or [azure] / [mcp] / [tui] / [qt]
uv tool install "devops-utils[all]" # isolated, always on PATH
Details, the full extras table, and Azure DevOps credential setup: Install and configure.
A quick taste
# Mask every Secret value in a Kubernetes manifest, print to stdout
devops-utils sanitize manifest.yml -o -
# What's assigned to me and still open?
devops-utils azdo list --project MyProject --mine --state Active
# Why did the last build on main fail?
devops-utils azdo builds --project MyProject --branch main --result failed --top 1
devops-utils azdo timeline 1234 --project MyProject
# File a bug under an Epic, linked to the offending commit
devops-utils azdo create --project MyProject --type Bug --parent 1400 \
--title "Checkout times out at 30s" --tag payments
devops-utils azdo link 42 --kind commit --project MyProject --repo MyRepo --value 0a1b2c3d
# Create a whole Feature/Story/Task tree from one plan file
devops-utils azdo apply plan.yml --dry-run
# Install the bundled agent skills and Claude Code subagents
devops-utils setup all
Azure DevOps access is configured entirely through environment variables
(AZURE_DEVOPS_ORG_URL, AZURE_DEVOPS_TOKEN, …) — no credentials are ever read
from the machine.
Documentation
| Guide | What's in it |
|---|---|
| Install and configure | Extras, uvx, cloud + on-prem credential setup |
| Azure DevOps from the command line | Cookbook: finding work, changing work, diagnosing pipelines, repo search, jq recipes |
| Bulk work items with a plan file | azdo apply — hierarchies, links and comments in one reviewed batch |
| Sanitize Kubernetes manifests | Masking Secrets, and what to do with the result |
| Wire it into an AI agent | setup, MCP server, bundled skills and subagents, the Claude Code plugin, issue-tracker config |
| Reference | Every parameter, link kind, field name and API detail |
| API reference | Generated from the source |
Use as a Claude Code plugin
The bundled skills and read-only Azure DevOps subagents also ship as a Claude
Code plugin, namespaced as devops-utils:*:
/plugin marketplace add carneirofc/devops-utils
/plugin install devops-utils@carneirofc
/reload-plugins
The subagents call the MCP tools, so they also need
devops-utils setup mcp — see
Wire it into an AI agent.
Development
uv sync --all-extras --dev
uv run pytest
uv run sphinx-build -W --keep-going -b html docs _site # build the docs
The committed plugin tree (plugins/devops-utils/,
.claude-plugin/marketplace.json) is generated from the bundled sources;
re-run devops-utils setup plugin --force after changing a skill or agent (a
test enforces they stay in sync).
Author
Cláudio Ferreira Carneiro - carneirofc @ claudiofcarneiro@gmail.com
Licence
devops-utils is licensed under the MIT License. See LICENSE.
Metadata
Release files for devops-utils 0.13.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| devops_utils-0.13.0.tar.gz | 135.6 kB | Without provenance | Details for devops_utils-0.13.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| devops_utils-0.13.0-py3-none-any.whl | Python 3 | none | any | Details for devops_utils-0.13.0-py3-none-any.whl |
Total release size: 245.4 kB
Release files / devops_utils-0.13.0.tar.gz
| Download URL | devops_utils-0.13.0.tar.gz |
|---|---|
| Size | 135.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ec86fbbbd56838f08884b497c687ee0f5afff5e56a5a52aeb18fbca8d818e8e8
|
|
BLAKE2b-256 checksum How to use checksums |
5594aa468de4848ba15e71cf7e8844ed596b9d92157d86d3126c11fd8f0f32cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / devops_utils-0.13.0-py3-none-any.whl
| Download URL | devops_utils-0.13.0-py3-none-any.whl |
|---|---|
| Size | 109.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
57d0026c8ddb69a6da4f1dcf7a5eff2d659f0e97fc3a98b457f4640180728dc2
|
|
BLAKE2b-256 checksum How to use checksums |
d122c1229c561ec79eac125958d30373ca0aa0f2177f9deaa3e44fa5565c1207
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.24 {"installer":{"name":"uv","version":"0.12.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for devops-utils 0.13.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.