devops_utils.core.azure_devops.client module

HTTP client for the Azure DevOps REST API (cloud + on-prem Server).

The httpx import is deferred so importing the package never requires the azure extra when these tools are unused (mirrors devops_utils.mcp.server).

Credentials are never read from the machine (no az CLI, credential files or Windows credential store). The bearer token is supplied out-of-band through the AZURE_DEVOPS_TOKEN environment variable.

class devops_utils.core.azure_devops.client.AzureDevOpsClient(org_url: str, token: str, auth_scheme: str = 'bearer', api_version: str = '7.1', transport: Any | None = None)[source]

Bases: object

Thin wrapper over httpx for the Azure DevOps REST API.

Parameters:
  • org_url – Base URL. Cloud https://dev.azure.com/{org} or on-prem https://server/tfs/{collection}. A trailing slash is stripped.

  • token – Bearer token or Personal Access Token (see auth_scheme).

  • auth_scheme – "bearer" sends Authorization: Bearer <token>; "pat" sends Authorization: Basic base64(":" + token) which is how Azure DevOps expects a raw PAT.

  • api_version – REST api-version query value. Lower it for older on-prem servers (e.g. "6.0").

classmethod from_env() → AzureDevOpsClient[source]

Build a client from environment variables.

Reads AZURE_DEVOPS_ORG_URL and AZURE_DEVOPS_TOKEN (both required), and optional AZURE_DEVOPS_AUTH_SCHEME (default bearer) and AZURE_DEVOPS_API_VERSION (default 7.1).

request(method: str, path: str, *, params: dict[str, Any] | None = None, json: Any | None = None, content: bytes | None = None, content_type: str | None = None, api_version: str | None = None, base_url: str | None = None) → Any[source]

Perform a request and return the parsed JSON body (or None).

api-version is injected into the query string unless already present. base_url overrides org_url for APIs served from a different host (e.g. cloud code search on almsearch.dev.azure.com). Raises AzureDevOpsError for any non-2xx response.

exception devops_utils.core.azure_devops.client.AzureDevOpsError(status_code: int, method: str, url: str, body: str)[source]

Bases: RuntimeError

Raised when the Azure DevOps API returns a non-2xx response.