Global Executables
Read-only lookup and assessment of CLI executable-name collisions across package ecosystems using a fixed, coverage-aware indexed snapshot.
Check exact names —
check_executableverifies one case-sensitive command name for collisions.Batch-check candidates —
check_executableschecks many names in one call, preserving input order.Inspect provenance —
get_executablereturns providers, packages, ecosystems, versions, sources, and evidence confidence for a known command.Explore the index —
search_executablesfinds names by prefix, exact length, ecosystem, and provider filters.Find confusable names —
search_similar_executablessurfaces typo and confusion risks after an exact check.Judge coverage —
get_coveragereports snapshot provenance, per-source coverage/freshness, and whether a negative result is trustworthy.Assess risk —
assess_executable/assess_executablesadd freshness, activity, popularity, and collision-risk signals.Get install guidance —
resolve_installation/resolve_installationsderive environment-specific install and invoke steps (advisory only).Scope results — filter providers by source type, package system, distribution, language, registry, or ecosystem.
Safe by design — no live registry lookups, no writes, and it never installs or executes the software it finds.
Reads the Arch Linux package files database to record installed executable names, enabling lookups of whether a command is already provided by an Arch package.
Uses Composer/Packagist package metadata to record the binaries a PHP package installs, providing collision detection and provider provenance for command names.
Indexes executable names from ConanCenter recipes by reading the built package's bin/ contents in conanmanifest.txt, since recipes do not name their executables; records are filesystem evidence rather than declarations.
Indexes executable names discovered in Debian package file contents, so agents can check whether a candidate command name is already provided by a Debian package and trace which package installs it.
Extracts executable names from Homebrew formulae and package contents, allowing agents to check for command-name collisions against Homebrew-provided tools.
Harvests executable names from npm registry bin metadata (including the ecosyste.ms critical population), so agents can tell whether a CLI command name is already taken by an npm package.
Indexes executable names declared in composer.json bin fields via Packagist metadata, so agents can check command-name collisions against PHP packages.
Collects console script / entry point executable names from PyPI distributions, enabling lookups of whether a command name is already installed by a Python package.
Reads gemspec executables metadata from RubyGems to record executable names installed by gems, enabling checks for existing Ruby command names.
Collects executable names from Ubuntu (Debian-family) package contents, providing collision checks and provenance for command names shipped by Ubuntu packages.

Why this exists
A package name is not necessarily the command it installs. Searching registries for package names can miss a collision such as a differently named package that already ships your proposed command.
Ordinary package search | Global Executables |
Searches package and repository names | Searches the actual installed command name |
Leaves evidence scattered across registries | Normalizes providers across ecosystems |
A missing result can look deceptively final | Reports coverage and absence confidence |
Requires a person to repeat the work | Lets AI agents check names in batches and verify known packages |
The index preserves the relationship that matters:
command → provider → package → ecosystem → source evidenceRelated MCP server: domain-check
Try it now—no installation
Open the Index Playground to check a name, find similar commands, inspect providers, or review source coverage. The Playground reads the same public JSON dataset as the MCP server, and query data is not sent to a third-party API.
For an AI-assisted check, connect the MCP server below and ask:
I am naming a new CLI. Check `envc`, `evcr`, `evpk`, and `envcp` for exact
collisions and confusingly similar commands. Keep rejected names internal and
explain the coverage caveat for every survivor.The agent can reject envcp with evidence instead of relying on a package-name
search: the command is provided on PyPI by both chaperone and envcp.
What you get
Capability | What it gives you |
Exact and batch checks | Collision results for one name or a candidate set |
Similar-name search | Typo and confusion candidates before you publish |
Provider provenance | Package, ecosystem, version, source, and evidence confidence |
Coverage-aware negatives | An explicit distinction between “not found” and “proven free” |
Installation resolution | Conservative install and invoke steps for a target environment |
Public, inspectable data | Versioned JSON, schemas, freshness, and coverage on GitHub |
The server has no write tools and never installs or executes the software it finds.
Quick start
1. Install uv
The recommended setup uses uv.
You do not need to clone this repository, download the dataset, or create an API key.
Verify that uvx is available:
uvx --version2. Add the MCP server
Choose your client below. The first launch downloads the package from PyPI; later
launches reuse uv's cache.
Add this to claude_desktop_config.json, ~/.cursor/mcp.json, or a project's
.cursor/mcp.json:
{
"mcpServers": {
"global-executables": {
"command": "uvx",
"args": ["global-executables", "mcp"]
}
}
}claude mcp add global-executables -- uvx global-executables mcpcodex mcp add global-executables -- uvx global-executables mcpStart a new Codex session after adding the server. See the Codex setup tutorial for registration checks and a source-checkout setup.
Add this to .vscode/mcp.json:
{
"servers": {
"global-executables": {
"type": "stdio",
"command": "uvx",
"args": ["global-executables", "mcp"]
}
}
}Use this server entry instead of the uvx entry:
{
"command": "docker",
"args": ["run", "-i", "--rm", "ghcr.io/asopitech-labs/global-executables-mcp:latest"]
}The image is public and contains the server, but not a stale copy of the dataset.
3. Ask your agent
Try one of these prompts:
Is the command name `envc` already taken? Check similar names too.Check `envc`, `evcr`, `evpk`, and `envcp` as possible CLI names. Do not show
rejected candidates; explain the dataset coverage for the survivors.Which package provides the `ruff` executable, and how should I install it in a
Python 3.12 project virtual environment?The agent will normally call check_executables for a batch and
search_similar_executables for the candidates that remain.
found: true means a collision. found: false means only that the current
snapshot contains no match. When status is unknown, partial source coverage
means the name is not proven to be available. Read warnings,
absence.confidence, and coverage_scope before adopting a name.
How it works
Snapshot lookups fetch only the public dictionary branch files a
query needs, cache them in the current user's cache directory, and revalidate
them with ETag. Cached files remain usable when the network is temporarily
unavailable.
Requirement | Details |
Authentication | None |
Local dataset | Not required |
Default transport | stdio |
Data access | On-demand HTTPS from the public |
Writes or command execution | Lookup never executes software; verified discovery can reserve a Git branch only on a configured runner |
Supported Python | 3.11+ (handled automatically by |
Variable | Effect |
| use a local checkout of the |
| cache location (default |
| serve only cached files, never touch the network |
uvx global-executables mcp --help lists the same options as flags. The package is
published to PyPI from release 1.3.0. See the MCP guide for HTTP
transport, offline operation, and running from a source checkout.
MCP tools at a glance
Tool | Use it when you want to… |
| check one exact, case-sensitive command name |
| check several naming candidates in one call (recommended) |
| retrieve providers and provenance for a known command |
| search by prefix, length, ecosystem, or scope |
| find names that may be confused with a candidate |
| inspect source coverage, freshness, and warnings |
| add freshness, activity, popularity, and collision-risk signals |
| derive environment-specific install and invoke guidance |
| verify commands declared by one current npm or PyPI release |
Snapshot lookup tools are read-only. discover_published_package makes bounded live
registry and artifact requests without executing package code. On a designated runner
configured with Git write access, successful verification also reserves an immutable
intake/<id> branch for central revalidation. The result reports reservation.status;
an unconfigured copy reports unavailable and does not claim publication. Neither
MCP nor CLI writes the published dictionary directly.
The repository's Verify and reserve published package discovery GitHub Actions
workflow is the designated runner; it invokes both CLI and MCP before the collector.
Installation resolvers return instructions; they never install or execute software.
Full inputs and result contracts are documented in the MCP guide.
The scheduled intake collector validates and rechecks reserved evidence before merging
it into artifact-data. The regular refresh remains the only writer of the dictionary
branch. See the MCP guide for runner configuration and the reservation
lifecycle.
Supported ecosystems
Family | Sources | Typical executable evidence |
System packages | Debian, Ubuntu, Arch Linux | Installed package file lists |
macOS packages | Homebrew | Formula metadata and package contents |
Language registries | npm, PyPI, crates.io, Go modules, RubyGems, Packagist | Declared bins, entry points, or executable targets |
C and C++ recipes | ConanCenter, vcpkg, xmake-repo | Built file lists, tool declarations, or marked binary packages |
Every provider keeps its source and a confidence level (direct, filesystem, or
inferred). Coverage differs by ecosystem, so negative results carry explicit
coverage metadata instead of pretending that every registry is exhaustive. See
Data Sources for collection details and
coverage and freshness for the result contract.
Documentation map
If you want to… | Start here |
Connect an MCP client or use HTTP transport | |
Configure Codex step by step | |
Verify a clean source checkout | |
Understand records, indexes, and schemas | |
Review collection scope and attribution | |
Operate or contribute to the data pipeline |
Troubleshooting
Install uv, confirm that uvx --version works in a new terminal, and restart the
MCP client so it receives the updated PATH. If the client uses a restricted
environment, set the configuration's command to the absolute path reported by
command -v uvx (macOS/Linux) or where uvx (Windows).
Restart the client or begin a new agent session after changing its MCP configuration.
Then check the client logs for JSON syntax errors or a failed uvx launch. Codex users
can run codex mcp list and codex mcp get global-executables; Claude Code users can
run claude mcp list.
Offline mode can serve only files that earlier queries placed in the cache. Reconnect
once and run the needed queries, or point GLOBAL_EXECUTABLES_DATASET_ROOT at a local
checkout of the dictionary branch. See local stdio setup.
That is expected whenever the relevant ecosystems are not exhaustively covered. It
means “not found in this snapshot,” not “safe to claim.” Use get_coverage, check
similar names, and perform additional registry and web searches before publishing.
Goals
Global Executables aims to provide:
a public dataset of real-world executable names;
cross-ecosystem coverage;
traceable provenance for every collected executable;
reproducible dataset generation;
Git-friendly structured data;
machine-readable indexes for efficient lookup;
historical tracking of executable names;
MCP access for AI agents;
explicit dataset coverage and freshness information.
The dataset itself is the primary artifact.
The MCP server is an access layer over that public data, not the source of truth.
Try the live Index Playground
to inspect crawl progress and run read-only check, search, similar,
coverage, and assess queries directly in a browser. The playground is a
static GitHub Pages client over the public JSON dataset; no query data is sent
to a third-party API.
The program and published data have independent lifecycles. Program source,
schemas, tests, and documentation live on main; the generated JSON dictionary
lives on the orphan dictionary branch. The stable raw-data base URL is:
https://raw.githubusercontent.com/asopitech-labs/global-executables/dictionarySee the dictionary branch migration note for the
branch contract, local setup, and the main URL cutover.
Go development follows the JetBrains Modern Go Guidelines. See the Go crawler development and build contract for the versioned review, build, test, security, and release workflow.
Architecture
Package ecosystems
│
├── Debian / Ubuntu
├── Arch Linux
├── Homebrew
├── npm
├── PyPI
├── crates.io
├── Go modules
├── RubyGems
├── Packagist / Composer
├── ConanCenter
├── vcpkg
├── xmake-repo
└── others
│
▼
GitHub Actions (`main`)
│
collect / normalize
│
▼
`dictionary` branch dataset
│
┌───────┴────────┐
│ │
▼ ▼
GitHub / raw MCP Server
data │
▼
AI agentsGitHub Actions periodically collects upstream package information, normalizes executable records, regenerates indexes, validates the dataset, and publishes the resulting files.
Data Model
The canonical unit is an executable name.
Each executable is represented by a structured file containing its known providers.
Conceptually:
{
"command": "example",
"providers": [
{
"ecosystem": "example-ecosystem",
"package": "example-package",
"version": "1.0.0",
"repository": "https://example.com/repository",
"source": "example-source",
"confidence": "direct"
}
],
"first_seen": "2026-08-14",
"last_seen": "2026-08-14"
}A single executable may have multiple providers across multiple ecosystems.
Repository Layout
The dictionary branch contains only published artifacts:
dictionary/
├── data/
│ ├── executables/
│ │ ├── en/
│ │ │ ├── envc.json
│ │ │ └── envcp.json
│ │ └── gi/
│ │ └── git.json
│ │
│ ├── indexes/
│ │ ├── prefix/
│ │ ├── length/
│ │ ├── ecosystem/
│ │ └── trigram/
│ │
│ ├── metadata.json
│ └── history.json
└── reports/
├── production-crawl.json
└── production-refresh.jsonThe main branch separately keeps fixtures/, schema/, src/, tools/,
tests/, docs/, playground/, and .github/workflows/; it does not track
the generated paths above. The canonical dataset uses ordinary structured
files rather than requiring a database server.
Derived indexes are reproducible and may be regenerated from the canonical executable records.
Lookup
Exact lookup maps directly to the repository structure.
For example:
envcp
↓
prefix: en
↓
data/executables/en/envcp.jsonThis allows consumers to retrieve individual records without downloading or querying a centralized database.
Derived indexes support broader queries such as:
prefix;
executable length;
ecosystem;
similar names.
Data Sources
Collectors are independent for each ecosystem.
Potential sources include:
Ecosystem | Executable evidence |
Debian / Ubuntu | package file contents |
Arch Linux | package files database |
Homebrew | formula/package contents |
npm | ecosyste.ms critical population; npm registry |
PyPI | distribution entry points / |
crates.io | Rust binary targets |
Go modules |
|
RubyGems | gemspec |
Packagist / Composer |
|
ConanCenter |
|
vcpkg |
|
xmake-repo |
|
others | ecosystem-specific executable metadata |
C and C++ have no single registry, so three recipe repositories are read instead, and
each contributes the strongest evidence it actually carries. vcpkg names the tools a
port installs, because naming them is what installs them. ConanCenter recipes never
name their executables, so the built package's own file list is read. xmake declares
that a package is a binary but never what the binary is called, so its records are
marked inferred and no xmake record should be read as a declaration. None of the
three is exhaustive: a vcpkg port can install a command without declaring it, a
ConanCenter recipe nobody has built states nothing about installed files, and an xmake
package can install a command under another name.
The project records how each executable was discovered rather than treating all observations as equally authoritative.
Confidence
Records may carry a confidence level describing how an executable name was established.
For example:
direct
filesystem
inferreddirect means the executable is explicitly declared by package metadata.
filesystem means it was observed in package contents as an installed executable.
inferred means it was derived indirectly and should be treated with lower confidence.
Consumers can use this information when deciding whether a potential naming collision is significant.
Installation guidance
resolve_installation and resolve_installations provide environment-specific
installation guidance. Agents can call these MCP tools directly; people can enter
the same target context in the
browser Playground.
The CLI exposes the resolver against a local dictionary too:
global-executables resolve-installation pygo --root ./dictionary \
--environment '{"package_manager":"pip","runtime_version":"3.12","install_scope":"project","virtualenv_bin":"./.venv/bin"}'The MCP guide documents the required target context and the
installation-v1 result contract. Guidance without target-specific
install-and-invoke validation is marked unverified. The
method validation record distinguishes tested
package-manager syntax from untested package identities.
Agent Workflow
A naming agent should use Global Executables before presenting CLI name recommendations.
Recommended workflow:
Generate candidate names internally
│
▼
check_executables
│
▼
Separate `found:true` collisions from `found:false` observations
│
▼
search_similar_executables for not-found candidates
│
▼
Remove confusing candidates
│
▼
Present surviving namesRejected candidates do not need to be surfaced to the user.
The purpose of the service is to make collision checking part of the agent's normal reasoning workflow rather than a manual follow-up task.
Result Semantics
Absence from the dataset does not prove that an executable name has never been used.
Results therefore distinguish the factual observation from confidence in absence:
collision
clear_in_index
unknownFor example:
{
"name": "evpk",
"found": false,
"status": "unknown",
"snapshot": "2026-10-19",
"coverage_scope": "unknown",
"checked_sources": [
"arch",
"crates",
"debian",
"go",
"homebrew",
"npm",
"pypi",
"ubuntu"
],
"searched_sources": [
"arch",
"crates",
"debian",
"go",
"homebrew",
"npm",
"pypi",
"ubuntu"
],
"coverage": {
"arch": {
"status": "success",
"coverage_kind": "exhaustive",
"records": 1647,
"source": "data/production/intermediate/arch.jsonl"
},
"npm": {
"status": "success",
"coverage_kind": "partial",
"records": 127,
"source": "data/production/intermediate/npm.jsonl",
"scope": "ecosyste.ms critical npm population covering 80% of downloads or dependent repositories",
"catalog_complete": true,
"catalog_packages": 2295,
"catalog_snapshot": "2026-10-18",
"catalog_source": "https://packages.ecosyste.ms/critical?registry=npmjs.org",
"catalog_digest": "sha256:4b610ce561d63b72b7a4137ed75ba5ecbec5fbafda236218fc4264c92db605b3"
}
},
"warnings": [
{
"code": "npm_coverage_incomplete",
"ecosystem": "npm",
"message": "npm coverage is incomplete or limited to a declared population. A missing result is not proof that no npm package uses this executable and is not permission to adopt the name.",
"coverage": {
"status": "success",
"coverage_kind": "partial",
"source": "data/production/intermediate/npm.jsonl",
"scope": "ecosyste.ms critical npm population covering 80% of downloads or dependent repositories",
"catalog_complete": true,
"catalog_packages": 2295,
"catalog_snapshot": "2026-10-18",
"catalog_source": "https://packages.ecosyste.ms/critical?registry=npmjs.org",
"catalog_digest": "sha256:4b610ce561d63b72b7a4137ed75ba5ecbec5fbafda236218fc4264c92db605b3"
},
"reference": "https://github.com/asopitech-labs/global-executables/issues/54"
}
],
"absence": {
"status": "not_found_in_current_index",
"confidence": "insufficient_coverage",
"searched_sources": [
"arch",
"crates",
"debian",
"go",
"homebrew",
"npm",
"pypi",
"ubuntu"
]
}
}found:false means that the name was not found in the current index. unknown
means the available coverage is insufficient to make an exhaustive absence
claim; it does not mean that the query was unavailable. clear_in_index is
returned only when every source in the queried snapshot has
coverage_kind: exhaustive, a successful run, and no finite population limit
(scope or catalog_* fields). A completed npm critical catalog sets
catalog_complete: true and keeps coverage_kind: partial; it never makes
the snapshot exhaustive. Incomplete npm coverage also adds a
npm_coverage_incomplete warning. None of these statuses is permission to
adopt a name.
The coverage object reports the per-source collection status, coverage kind,
and record count. The example shows two representative sources; the live
response includes all sources in the snapshot (and may also include each
source's input path).
It does not mean that the name is legally or globally guaranteed to be available.
Coverage and Freshness
Dataset metadata records:
generation timestamp;
snapshot identifier;
number of indexed executables;
enabled collectors;
freshness of each upstream source;
collector status.
This information is available both as structured data and through MCP.
Agents can therefore evaluate the strength of a lookup result instead of treating the index as complete by assumption.
GitHub as the Source of Truth
Global Executables deliberately keeps its canonical data in the repository's
orphan dictionary branch.
This provides:
transparent provenance;
reviewable changes;
reproducible generation;
historical tracking;
forks and mirrors;
direct raw-file access;
independence from the availability of the MCP service.
If the hosted MCP endpoint disappears, the dataset remains usable.
A third party can build another MCP server, search engine, CLI, or analysis tool directly from the repository.
Automation
GitHub Actions maintains the dataset.
The general pipeline is:
scheduled / manual trigger
│
▼
run collectors
│
▼
normalize
│
▼
merge
│
▼
generate executable files
│
▼
generate indexes
│
▼
validate
│
▼
publishCollectors should contain the actual collection logic independently of GitHub Actions so they can also be executed and tested locally.
act may be used during development to run compatible GitHub Actions workflows locally.
What Global Executables Is Not
Global Executables is not:
a trademark search service;
a brand-name availability service;
a package registry;
a package manager;
a vulnerability database;
a software catalog;
proof that an unused name is legally available.
It answers a narrower question:
What executable names are known to be used across the software ecosystems covered by the dataset?
Trademark, company-name, domain, repository-name, and broader web searches remain separate checks.
Potential Uses
Beyond CLI naming, the dataset can support:
automated CLI naming assistants;
repository CI policies;
package publishing checks;
ecosystem collision analysis;
executable discovery;
historical studies of CLI ecosystems;
IDE and developer-tool integrations;
AI-agent preflight checks.
Project Principle
Public data first. MCP second.
The value of Global Executables is not tied to a particular server implementation.
The durable asset is the openly available, reproducible, cross-ecosystem executable-name dataset.
MCP makes that dataset immediately useful to agents.
Current implementation
The schemas, deterministic builder, production OS index collector, derived
prefix/length/ecosystem/trigram and logical-scope indexes, collector parsers,
local/HTTP MCP server with Git intake for verified npm/PyPI discovery,
assessment API, bounded fixture freshness scenarios, and CI checks are implemented
in this repository. Coverage is measured
against each source. npm stays coverage_kind: partial even when its finite
ecosyste.ms critical catalog finishes (catalog_complete: true); the all-registry
npm long tail is not in the index. See
docs/DATA_MODEL.md for exact naming, sharding, alias, and
history rules and docs/OPERATIONS.md for reproducible
commands, freshness-state scenarios, and honest measured coverage limitations.
For zero-setup use, see Quick start. To query a pinned snapshot without network access, install the program, materialize the published branch in a separate worktree, and point the server at it:
python -m pip install -e .
git fetch origin dictionary
git worktree add .dictionary origin/dictionary
global-executables-mcp --root . --dataset-root .dictionaryUse --transport streamable-http for remote access. Both modes expose
check_executable, check_executables, get_executable,
search_executables, search_similar_executables, get_coverage,
assess_executable, and assess_executables; neither
mode exposes writes. Data is reusable under the repository license by reading
the canonical JSON directly from the dictionary branch, without running MCP.
See docs/MCP.md for local client configuration, the remote
endpoint, resources, health visibility, and the survivor-only agent workflow.
The manual fixture workflow exercises a bounded incremental freshness scan. It
rotates through immutable test partitions, persists a cursor and last successful
observations on the freshness-data branch, and publishes a machine-readable test
report. It is not production freshness or a full dataset refresh. Coverage is
snapshot-specific and reported by get_coverage. The
published snapshot contains production OS/Homebrew coverage, a completed but
partial npm critical catalog (catalog_complete, not registry-wide exhaustiveness),
and partial coverage for other registries such as PyPI and Go; it is not full
global ecosystem coverage, so consumers must preserve
clear_in_index/unknown semantics and the npm_coverage_incomplete warning.
Registry artifact inspection is separately resumable. CI refreshes the finite npm
critical catalog and crawls it to 100% daily, while dedicated local containers advance
PyPI and Go module cursors and publish checkpoints to artifact-data; these local
containers are temporary completion boosters and stop at 100%. After a source reaches
100%, a six-hour GitHub Actions matrix cycles through every indexed package with a
persisted refresh cursor. Successful results replace stale package observations,
including commands removed by a newer release. CI also performs
one daily crates.io dump change check and downloads the dump only when it changed.
The CI refresher dispatches a dictionary rebuild only when normalized observations
changed and redeploys Pages whenever it publishes crawl progress. Go modules, npm, PyPI, RubyGems, and Packagist use the transactional Go runtime;
their bbolt state commits cursor, retry verdicts, and observations together. CI
regenerates npm's bounded population; PyPI, RubyGems, and Packagist reuse sampled
catalogs, while Go extends its index. Finishing a declared catalog may set
catalog_complete; npm is never promoted to coverage_kind: exhaustive from that
catalog alone. Other sources become exhaustive only after their declared catalog
and required artifact inspections complete successfully without a finite population
limit.
Successful collection does not by itself permit a negative collision claim.
Every valid query returns a factual found observation. Fixture, smoke, and
partial snapshots return insufficient absence confidence for absent names;
clear_in_index requires metadata explicitly marking the complete queried
snapshot exhaustive. Derived search indexes are integrity-pinned in metadata
and are used directly by prefix, length, ecosystem, and similarity queries.
For a clean-checkout setup, client configuration, expected responses, and
verification steps, see docs/SETUP.md.
Issue completion and release evidence follow docs/RELEASE.md;
implementation claims alone do not close work.
Data sources, their licenses and terms, and required attribution are listed in docs/DATA_SOURCES.md.
Available Tools
10 toolsassess_executableAssess one executable nameARead-onlyIdempotent
Assess freshness, activity, popularity, and collision risk for one command name.
Use this after an existence check; use assess_executables for several names, and do not use it
instead of check_executable. scope filters providers before signals are aggregated; release
age is measured against request time with a 365-day threshold, while usage counts can still
establish activity. The tool makes no live registry call; unknown or insufficient_evidence
means missing snapshot evidence, not that the name is safe.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters. | |
| scope | No | Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, yet the description adds genuinely non-obvious behavior: no live registry call is made, scope filters providers before signals are aggregated, release age uses a 365-day threshold measured against request time, and unknown/insufficient_evidence signals missing snapshot evidence rather than safety. The last point is a critical interpretation caveat that prevents a false 'safe' conclusion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then constraints, then result-interpretation caveats — a sensible ordering with no filler. The middle sentence is dense and packs several clauses together, but each clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be described, and the description instead covers what an agent cannot get from schema or annotations: the absence of a live registry call and the meaning of unknown/insufficient_evidence. Nothing needed to call or interpret the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value beyond the schema: scope narrows providers before signal aggregation, and the 365-day age threshold explains how the name/age interaction is evaluated. The usage-count fallback ('usage counts can still establish activity') clarifies how signals combine when age is stale.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (assess) plus the resource (one command name) and enumerates the four dimensions scored (freshness, activity, popularity, collision risk). The word 'one' plus the explicit contrast with the plural sibling assess_executables makes it unambiguous which tool handles a single name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the tool in a workflow ('after an existence check'), names the batch alternative (assess_executables for several names), and states a prohibition ('do not use it instead of check_executable'). When-to-use, when-to-batch, and when-not-to-use are all covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assess_executablesAssess executable names in batchARead-onlyIdempotent
Assess freshness, activity, popularity, and collision risk for several command names.
Use this to compare candidates; use assess_executable for one, and do not use it instead of
check_executables. One scope filters every name before per-name signal aggregation; release
age uses request time and results, including duplicates, preserve input order. The tool makes
no live registry call; unknown or insufficient_evidence means missing snapshot evidence, not
safety, so retain each result's existence and coverage context.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | Executable command names to process in one request. Each value follows the same exact, case-sensitive rules as name, and results preserve input order. | |
| scope | No | Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations (which only cover read-only/idempotent/openWorld): it discloses that no live registry call is made, that unknown/insufficient_evidence denotes missing snapshot evidence rather than safety, that a single scope filters all names before aggregation, and that duplicates/order are preserved. These are exactly the behavioral facts an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and routing are front-loaded in the first two sentences, and the remaining text is dense with non-redundant behavior. It is slightly run-on and mixes instruction with description ('so retain each result's existence and coverage context'), costing a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, yet the description still explains how to interpret ambiguous result states and ordering. For a two-parameter batch read tool, nothing an agent needs to call or interpret it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds genuine meaning beyond the schema for scope ('One scope filters every name before per-name signal aggregation') and for names (release age uses request time, results preserve input order, duplicates retained).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (assess) plus the exact signals computed (freshness, activity, popularity, collision risk) and the batch scope (several command names). This distinguishes it immediately from the singular sibling assess_executable and from the check_* family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'use assess_executable for one' and 'do not use it instead of check_executables'. That is a positive selection rule plus an exclusion, which is the strongest form of usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_executableCheck one executable nameARead-onlyIdempotent
Check one exact command name for a collision in the indexed snapshot.
Use this for one candidate; use check_executables for several, and do not use it for fuzzy
discovery—use search_similar_executables. name is case-sensitive and is not normalized;
scope filters providers with AND semantics before the collision decision, so a scoped miss is
non-exhaustive. The tool makes no live registry call and never runs or installs software; a
hit returns providers, while a miss is clear only when coverage_scope is exhaustive.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters. | |
| scope | No | Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, and the description still adds substantive behavior: no live registry call, never runs or installs software, hits return providers, and misses are only conclusive when coverage_scope is exhaustive. That is exactly the extra context the annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then alternatives, then behavioral caveats, so an agent can stop reading early. It is somewhat dense and repeats the non-exhaustive-scope idea once, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter lookup tool with full schema coverage and an output schema, the description covers routing, case-sensitivity, scope semantics, and the crucial exhaustiveness caveat on negative results. Nothing an agent needs to call it or interpret a miss is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema: name is case-sensitive and not normalized, and scope filters providers with AND semantics before the collision decision. It stops short of enumerating valid scope keys, leaving that to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 scope: check one exact command name for a collision in the indexed snapshot. It explicitly distinguishes itself from check_executables (several) and search_similar_executables (fuzzy discovery), so an agent can route correctly without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use this tool ('one candidate'), when to use the sibling instead ('several' -> check_executables), and when not to use it at all ('do not use it for fuzzy discovery'). It also warns that a scoped miss is non-exhaustive, which is a prerequisite an agent needs before acting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_executablesCheck executable names in batchARead-onlyIdempotent
Check several exact command names for collisions in one indexed snapshot.
Use this for multiple candidates; use check_executable for one, and do not use it to rank
similar spellings—use search_similar_executables. One scope filters every name with AND
semantics; each name is evaluated independently and results, including duplicates, preserve
input order. The tool makes no live registry call and never runs software; treat misses as
unknown unless coverage_scope is exhaustive, which a supplied scope never is.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | Executable command names to process in one request. Each value follows the same exact, case-sensitive rules as name, and results preserve input order. | |
| scope | No | Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds genuinely new behavior: no live registry call, never executes software, misses are 'unknown' rather than negative, and supplied scopes are never exhaustive. This is exactly the caveat an agent needs to avoid over-interpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then alternatives, then semantics and caveats. Every clause earns its place, though the second half is dense with em-dash asides and could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering safety, the description supplies the remaining essentials: batch semantics, ordering guarantees, alternatives, and the non-exhaustive-coverage caveat. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema does not state per-field: one scope filters every name with AND semantics, each name is evaluated independently, and duplicates are preserved in input order. That explains how the two parameters interact in a batch call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check), resource (several exact command names), and scope (collisions in one indexed snapshot), and immediately distinguishes itself from the singular check_executable. An agent can identify the batch variant without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes usage: 'Use this for multiple candidates; use check_executable for one, and do not use it to rank similar spellings—use search_similar_executables.' It names both alternatives and the exclusion condition, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_coverageGet dataset coverageARead-onlyIdempotent
Explain snapshot provenance, source coverage, freshness, and negative-result limits.
Call this with no parameters before interpreting a miss; use check_executable to look up a
command, and do not use coverage metadata as an existence result. negative_lookup becomes
exhaustive only when every declared source succeeded with exhaustive, unrestricted coverage;
otherwise absence remains unknown. The tool reads fixed metadata without probing registries,
and freshness may be unavailable because its partial scan is stored separately.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower, yet the description still adds real semantics: negative_lookup is exhaustive only if every declared source succeeded with exhaustive unrestricted coverage, absence otherwise remains unknown, and freshness may be unavailable because the partial scan is stored separately. That is substantive behavioral disclosure beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, usage guidance follows, and no sentence is filler. The second sentence is clause-dense and jargon-heavy, which costs a little readability, but the information density is earned.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value shape need not be restated; the description instead supplies the interpretive caveats an agent needs to read that output correctly (negative-result limits, registry non-probing, possibly-missing freshness). Nothing required to call or interpret the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description reinforces this with "Call this with no parameters," leaving no ambiguity about how to invoke it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ("Explain") and enumerates the exact facets of the resource it returns: snapshot provenance, source coverage, freshness, and negative-result limits. It also implicitly separates itself from the executable-lookup siblings by routing command lookups to check_executable. The resource itself is somewhat abstract domain metadata, which keeps it just short of a crisp 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ("Call this with no parameters before interpreting a miss"), an explicit alternative ("use check_executable to look up a command"), and an explicit prohibition ("do not use coverage metadata as an existence result"). This is the full when/when-not/alternative triad.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_executableGet an executable recordARead-onlyIdempotent
Return the canonical provider record for one exact indexed command name.
Use this to inspect package, ecosystem, source, version, and provenance; use check_executable
for collision decisions, and do not treat a null record as availability. name is not
normalized; scope applies AND filters to providers before deciding whether record is null, so
a known command can disappear when no provider matches. The tool reads one fixed snapshot and
performs no live lookup; interpret null with coverage_scope.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters. | |
| scope | No | Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, but the description adds non-obvious behavior: it reads one fixed snapshot with no live lookup, scope filters are ANDed over providers before null is decided, and null must be interpreted together with coverage_scope. That is real context the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The record/snapshot behavior is front-loaded, and every clause carries information (routing, normalization, AND-filtering, null semantics). It is a dense, run-on paragraph rather than a cleanly broken structure, which costs a point but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-record read with an output schema already documenting the return shape, the description supplies everything the agent still needs: exact-match semantics, snapshot vs live lookup, and how null relates to coverage_scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 nonetheless adds meaning beyond the schema by noting that 'name is not normalized' and by explaining that scope acts as an AND filter applied before the null determination, which the schema only describes as 'all supplied key-value pairs must match'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource with scope: 'Return the canonical provider record for one exact indexed command name.' It explicitly distinguishes itself from the sibling check_executable, so an agent can route between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('inspect package, ecosystem, source, version, and provenance'), explicit alternative ('use check_executable for collision decisions'), and an explicit exclusion ('do not treat a null record as availability'). Both the alternative tool and the interpretation rule are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_installationResolve installation for one executableARead-onlyIdempotent
Resolve advisory install and invocation argv for one indexed command provider.
Use this after lookup for one known target; use resolve_installations for several commands,
and do not use it for name availability—use check_executable. environment maps its package
manager to a provider ecosystem before preferences.package narrows candidates; omitted target
facts are returned in required_context rather than guessed. The tool never executes argv or
probes package availability; status and verification distinguish ready, ambiguous,
unsupported, unverified, missing-index, and incomplete-context outcomes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters. | |
| environment | Yes | Target installation context. Set package_manager to apt, brew, npm, or pip. Depending on the manager, also provide os, distribution, distribution_release, architecture, runtime_version, install_scope (user or project), virtualenv_bin, and has_admin as requested by the result. | |
| preferences | No | Optional provider-selection preferences. Use package to select an exact package when more than one indexed provider exposes the command. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, and the description adds substantial context beyond them: it never executes argv or probes package availability, and it enumerates outcome states (ready, ambiguous, unsupported, unverified, missing-index, incomplete-context) plus the fact that omitted target facts surface in required_context rather than being guessed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core purpose is front-loaded, then routing, then behavioral guarantees. Dense but every sentence carries information; slightly run-on with the nested clause about required_context, keeping it out of the top band.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value detail is unnecessary, and annotations cover the safety profile. The description fills the remaining gaps: execution guarantees, failure-state vocabulary, and parameter interaction, leaving nothing an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 nonetheless clarifies interaction semantics the schema does not: 'environment maps its package manager to a provider ecosystem before preferences.package narrows candidates.' That sequencing between environment and preferences adds real meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Resolve advisory install and invocation argv for one indexed command provider.' This clearly delineates it from resolve_installations (several) and check_executable (availability), so an agent can distinguish it from siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'Use this after lookup for one known target; use resolve_installations for several commands, and do not use it for name availability—use check_executable.' Names both alternatives and the conditions that select them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_installationsResolve installations in batchARead-onlyIdempotent
Resolve advisory install and invocation argv for several commands on one target.
Use this when all commands share an environment and preferences; use resolve_installation
for one, and do not use it for availability—use check_executables. The shared environment
selects an ecosystem before preferences.package narrows each command independently; results,
including duplicates, preserve input order. The tool never executes argv or probes package
availability, and each result reports its own status, required_context, and verification.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | Executable command names to process in one request. Each value follows the same exact, case-sensitive rules as name, and results preserve input order. | |
| environment | Yes | Target installation context. Set package_manager to apt, brew, npm, or pip. Depending on the manager, also provide os, distribution, distribution_release, architecture, runtime_version, install_scope (user or project), virtualenv_bin, and has_admin as requested by the result. | |
| preferences | No | Optional provider-selection preferences. Use package to select an exact package when more than one indexed provider exposes the command. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), yet the description adds substantive behavior: it never executes argv or probes package availability, duplicates are preserved, and input order is retained. Each result carries its own status, required_context, and verification—context the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose before routing guidance, and every sentence carries information (scope, alternatives, resolution order, no-execution guarantee). Slightly dense, but no filler sentences to cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch tool with an output schema present, the description covers what an agent needs: scope, sibling routing, resolution mechanics, order guarantees, and the non-execution contract. Return-value detail is correctly delegated to the output schema, and the mention of per-result fields is a bonus.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: the shared environment selects the ecosystem first, then preferences.package narrows each command independently, and names/environment are explicitly tied to per-command resolution. This relationship is not spelled out in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('resolve advisory install and invocation argv for several commands on one target') and immediately distinguishes itself from siblings resolve_installation (single) and check_executables (availability). An agent can select this without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit positive condition ('when all commands share an environment and preferences'), names the single-item alternative (resolve_installation), and an explicit negative exclusion ('do not use it for availability—use check_executables'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_executablesSearch executable namesARead-onlyIdempotent
Discover indexed command names matching prefix, length, ecosystem, and provider filters.
Use this for exploration; use check_executable for exact collisions and
search_similar_executables for confusable names. All active filters intersect; ecosystem and
scope.ecosystem must both match, so conflicting values return none, and limit applies only
after deterministic case-insensitive sorting with case-sensitive tie-breaking. Do not use an
empty result to infer availability: the tool makes no live registry call and fails instead of
returning partial data when a required derived index is missing or corrupt.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of sorted results to return. | |
| scope | No | Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive. | |
| length | No | Optional exact character length of the executable name. | |
| prefix | No | Case-sensitive command-name prefix. Leave empty to search all indexed names subject to the other filters and limit. | |
| ecosystem | No | Optional exact provider ecosystem identifier, for example npm, pypi, homebrew, debian, or ubuntu. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description adds substantial context beyond them: no live registry call, failure rather than partial data when the derived index is missing or corrupt, deterministic case-insensitive sort with case-sensitive tie-breaking, and that limit applies only after sorting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and the sibling routing before the operational caveats. Dense but every sentence carries distinct information; the sorting/limit clause is slightly detailed but not wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the remaining gaps an agent needs: filter intersection behavior, non-live data caveat, failure mode, and ordering guarantees.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds genuine cross-parameter semantics not present in the schema: all active filters intersect, ecosystem and scope.ecosystem must both match, and conflicting values return none. It does not add per-parameter syntax beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Discover indexed command names') plus the exact filter dimensions (prefix, length, ecosystem, provider). It explicitly differentiates itself from siblings: check_executable for exact collisions and search_similar_executables for confusable names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use ('this for exploration'), names two alternatives with their distinct conditions, and adds a when-not caveat ('Do not use an empty result to infer availability'). The routing guidance is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_similar_executablesFind similar executable namesARead-onlyIdempotent
Find indexed command names that may be confused with one proposed name.
Use this after an exact check for typo risk; use check_executable for exact existence, and do
not substitute this fuzzy result. name seeds case-folded trigram candidates, scope filters
them before scoring, and limit applies after ranking by edit distance, trigram similarity,
then name. The tool makes no live registry call; an empty match list covers only the fixed
snapshot and optional scope, not global absence.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters. | |
| limit | No | Maximum number of sorted results to return. | |
| scope | No | Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-open-world, and the description goes well beyond them: it discloses that no live registry call is made, that results come from a fixed snapshot, that an empty list does not prove global absence, and the exact ranking order (edit distance, trigram similarity, then name). This is exactly the negative-result semantics an agent needs to avoid over-claiming.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the routing rule, and every sentence carries information. The parameter sentence is somewhat dense and run-on, and the block indentation adds noise, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described. Given that, the description is complete: it covers the fuzzy-vs-exact distinction, the snapshot limitation, negative-result caveats, and parameter interaction, leaving no material gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real pipeline meaning: name seeds case-folded trigram candidates, scope filters before scoring, and limit applies after ranking. That clarifies ordering effects (scope narrows the candidate pool; limit truncates the ranked output) that the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (find) and resource (indexed command names) with an explicit qualifier: candidates that 'may be confused with one proposed name.' It implicitly separates itself from check_executable by characterizing this as fuzzy typo-risk search rather than exact lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing ('use this after an exact check for typo risk'), names the alternative tool for the other case ('use check_executable for exact existence'), and adds a prohibition ('do not substitute this fuzzy result'). Nothing about when to pick this tool is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.2- Changed
assess_executable2 fields changed- added
Input schema / properties / name / descriptionAdded value: +"Exact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters." - added
Input schema / properties / scope / descriptionAdded value: +"Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive."
- Changed
assess_executables2 fields changed- added
Input schema / properties / names / descriptionAdded value: +"Executable command names to process in one request. Each value follows the same exact, case-sensitive rules as name, and results preserve input order." - added
Input schema / properties / scope / descriptionAdded value: +"Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive."
- Changed
check_executable2 fields changed- added
Input schema / properties / name / descriptionAdded value: +"Exact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters." - added
Input schema / properties / scope / descriptionAdded value: +"Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive."
- Changed
check_executables2 fields changed- added
Input schema / properties / names / descriptionAdded value: +"Executable command names to process in one request. Each value follows the same exact, case-sensitive rules as name, and results preserve input order." - added
Input schema / properties / scope / descriptionAdded value: +"Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive."
- Changed
get_executable2 fields changed- added
Input schema / properties / name / descriptionAdded value: +"Exact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters." - added
Input schema / properties / scope / descriptionAdded value: +"Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive."
- Changed
resolve_installation3 fields changed- added
Input schema / properties / environment / descriptionAdded value: +"Target installation context. Set package_manager to apt, brew, npm, or pip. Depending on the manager, also provide os, distribution, distribution_release, architecture, runtime_version, install_scope (user or project), virtualenv_bin, and has_admin as requested by the result." - added
Input schema / properties / name / descriptionAdded value: +"Exact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters." - added
Input schema / properties / preferences / descriptionAdded value: +"Optional provider-selection preferences. Use package to select an exact package when more than one indexed provider exposes the command."
- Changed
resolve_installations3 fields changed- added
Input schema / properties / environment / descriptionAdded value: +"Target installation context. Set package_manager to apt, brew, npm, or pip. Depending on the manager, also provide os, distribution, distribution_release, architecture, runtime_version, install_scope (user or project), virtualenv_bin, and has_admin as requested by the result." - added
Input schema / properties / names / descriptionAdded value: +"Executable command names to process in one request. Each value follows the same exact, case-sensitive rules as name, and results preserve input order." - added
Input schema / properties / preferences / descriptionAdded value: +"Optional provider-selection preferences. Use package to select an exact package when more than one indexed provider exposes the command."
- Changed
search_executables5 fields changed- added
Input schema / properties / ecosystem / descriptionAdded value: +"Optional exact provider ecosystem identifier, for example npm, pypi, homebrew, debian, or ubuntu." - added
Input schema / properties / length / descriptionAdded value: +"Optional exact character length of the executable name." - added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of sorted results to return." - added
Input schema / properties / prefix / descriptionAdded value: +"Case-sensitive command-name prefix. Leave empty to search all indexed names subject to the other filters and limit." - added
Input schema / properties / scope / descriptionAdded value: +"Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive."
- Changed
search_similar_executables3 fields changed- added
Input schema / properties / limit / descriptionAdded value: +"Maximum number of sorted results to return." - added
Input schema / properties / name / descriptionAdded value: +"Exact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters." - added
Input schema / properties / scope / descriptionAdded value: +"Optional provider filters: source_type, package_system, distribution_family, distribution, distribution_release, language, registry, or ecosystem. All supplied key-value pairs must match; scoped negative results remain non-exhaustive."
10 tool updates
v0.1.0- First observed
assess_executable - First observed
assess_executables - First observed
check_executable - First observed
check_executables - First observed
get_coverage - First observed
get_executable - First observed
resolve_installation - First observed
resolve_installations - First observed
search_executables - First observed
search_similar_executables
TDQS
Scored across 10 tools
The set has clear action boundaries (check, get, resolve, search, assess), and the singular/plural arity pairs are explicitly explained. However, check_executable and get_executable both perform exact-name lookups and return provider-related data, so an agent could initially confuse collision checking with record retrieval.
All tools use snake_case verb_noun naming with a consistent singular/plural convention for batch variants. There is no mixed casing, vague verb, or inconsistent pattern.
Ten tools is well-scoped for an advisory executable-index service, covering coverage metadata, exact checks, install resolution, search, similarity, and assessment. Each tool and its batch variant earns its place.
Core workflows are covered: coverage inspection, exact collision checks, install resolution, discovery, similarity search, and risk assessment. Minor gaps remain, such as no batch variant for get_executable and no explicit ecosystem/provider enumeration tool, but agents can work around them.
Maintenance
Related MCP Connectors
Check if a brand name is free across domains, GitHub, npm and PyPI, and suggest available names.
Checks if a project, brand or app name already exists: trademarks, domains, web and GitHub.
Checks if a project, brand or app name already exists: trademarks, domains, web and GitHub.
Check brand name availability on Instagram, TikTok, X, YouTube, GitHub and more in one call
Related MCP Servers
- AlicenseAqualityDmaintenanceFast domain availability checker that searches across multiple registrars (Porkbun, Namecheap) and protocols (RDAP, WHOIS) to find available domains, compare pricing, get suggestions, and check social media username availability.7254 npm28MIT
- FlicenseNot gradedqualityAmaintenanceFast domain availability checker with RDAP/WHOIS lookup, batch checking, TLD presets, pattern generation, and detailed registration info. Built in Rust for native performance.306-
- AlicenseAqualityAmaintenanceMonitor taken usernames and get alerted the moment they free up or drop, so you can claim a handle before anyone else. Also checks live username availability across the major social platforms, domain availability across popular TLDs, and screens names for trademark conflicts.1172 npmMIT
- AlicenseBqualityAmaintenancePre-install gate for AI coding agents. Checks npm, PyPI and crates.io package names before an install runs and blocks names that do not exist, were registered after models invented them, or sit one keystroke from a popular package. CLI, GitHub Action and MCP server. Apache 2.0.11Apache 2.0