Skip to main content
Glama

Check Python upgrade wheel readiness

check_python_upgrade
Read-onlyIdempotent

Check a project's dependencies for installable wheels on a target Python version and platforms, listing blocked packages and the version bump that fixes each.

Instructions

Before moving a project to a new Python (e.g. 3.15 or free-threaded 3.15t), list every dependency that has no installable wheel for it on the target platforms, and the smallest version bump that fixes each one. Reads uv.lock / pylock.toml / poetry.lock / Pipfile.lock / requirements.txt / pyproject.toml from path, or checks explicit requirements specs. Statuses: ready, bump (newer release has a wheel), blocked (no release has one: waiting on upstream), excluded (requires-python), build (sdist only), skip (marker), missing. Blocked packages carry tracking: the upstream issue/PR to watch.

Input Schema

NameRequiredDescriptionDefault
pathNoLockfile, requirements file, pyproject.toml or project directory. Default: server working dir.
glibcNoOldest glibc for linux-* targets, default 2.34
macosNoOldest macOS for macos-* targets, default 14
pythonNoTarget CPython, e.g. '3.15' or '3.15t' (free-threaded).3.15
trackingNoFor each blocked package, link the upstream GitHub issue/PR about wheels for the target Python (packages[].tracking). One GitHub search per repo; uses GITHUB_TOKEN from the server environment if set. Never changes a verdict.
index_urlNoSimple-API index (PEP 691/503) to use instead of PyPI, e.g. 'https://download.pytorch.org/whl/cpu'. Like pip --index-url. Default: -i from requirements files, PIP_INDEX_URL, then PyPI.
platformsNoTarget platforms. Default: linux-x86_64, macos-arm64, windows-amd64
requirementsNoRequirement specs such as 'numpy==1.26.4' (instead of path).
extra_index_urlsNoMore simple-API indexes; files from all indexes are pooled, like pip --extra-index-url.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover the read-only/idempotent/open-world profile, but the description goes well beyond: it enumerates the verdict taxonomy, explains that blocked packages carry `tracking` links, and discloses that tracking costs one GitHub search per repo, uses GITHUB_TOKEN, and never changes a verdict. It also spells out index resolution precedence (index_url vs. requirements-file -i vs. PIP_INDEX_URL vs. PyPI).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by input-source mechanics and a compact status glossary. The status list is dense but each term is needed to interpret output; no filler sentences. Slightly long single breath, but structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description carries return-value burden and does so reasonably: verdict semantics and the `packages[].tracking` field are explained, along with the bump outcome. What's less explicit is the shape of the per-package record (current version, bump target, platform coverage), which an agent would need to consume results fully.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3; the description adds real meaning the schema lacks by naming the exact lockfile formats read from `path` (uv.lock, pylock.toml, poetry.lock, Pipfile.lock, requirements.txt, pyproject.toml). It still leaves `glibc`/`macos` and the platform set entirely to the schema, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence gives a specific verb, resource, and trigger ('Before moving a project to a new Python... list every dependency that has no installable wheel for it'), plus the concrete output ('smallest version bump'). It does not name or differentiate against the sibling explain_wheel, so it falls short of the top band.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The trigger condition is explicit ('Before moving a project to a new Python (e.g. 3.15 or free-threaded 3.15t)'), and the description clarifies the two input modes: read lockfiles from `path`, or check explicit `requirements` specs. It stops short of stating when to use explain_wheel instead, so no full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Deploy Server

Other Tools