Skip to main content
Glama

Global Executables checks whether a CLI command name is already taken by indexing executable names across package ecosystems

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 evidence

Related 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

Install in Cursor

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 --version

2. 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 mcp
codex mcp add global-executables -- uvx global-executables mcp

Start 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.

IMPORTANT

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 dictionary branch

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 uvx)

Variable

Effect

GLOBAL_EXECUTABLES_DATASET_ROOT

use a local checkout of the dictionary branch instead of HTTPS

GLOBAL_EXECUTABLES_CACHE_DIR

cache location (default ~/.cache/global-executables, ~/Library/Caches/global-executables, or %LOCALAPPDATA%\global-executables\Cache)

GLOBAL_EXECUTABLES_OFFLINE=1

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_executable

check one exact, case-sensitive command name

check_executables

check several naming candidates in one call (recommended)

get_executable

retrieve providers and provenance for a known command

search_executables

search by prefix, length, ecosystem, or scope

search_similar_executables

find names that may be confused with a candidate

get_coverage

inspect source coverage, freshness, and warnings

assess_executable / assess_executables

add freshness, activity, popularity, and collision-risk signals

resolve_installation / resolve_installations

derive environment-specific install and invoke guidance

discover_published_package

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

MCP access and agent integration

Configure Codex step by step

Codex MCP tutorial

Verify a clean source checkout

Setup and verification

Understand records, indexes, and schemas

Data model

Review collection scope and attribution

Data sources

Operate or contribute to the data pipeline

Operations

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/dictionary

See 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 agents

GitHub 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.json

The 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.json

This 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 bin metadata

PyPI

distribution entry points / console_scripts

crates.io

Rust binary targets

Go modules

package main directories in module archives

RubyGems

gemspec executables metadata

Packagist / Composer

composer.json bin declarations in Packagist metadata

ConanCenter

bin/ contents of the built package, read from conanmanifest.txt

vcpkg

vcpkg_copy_tools(TOOL_NAMES ...) declarations in portfile.cmake

xmake-repo

set_kind("binary") packages, whose command name is inferred

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
inferred

direct 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 names

Rejected 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
unknown

For 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
          │
          ▼
        publish

Collectors 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 .dictionary

Use --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 tools
assess_executableAssess one executable nameA
Read-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.
    
NameRequiredDescriptionDefault
nameYesExact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters.
scopeNoOptional 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

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

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, 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.

Purpose5/5

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.

Usage Guidelines5/5

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 batchA
Read-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.
    
NameRequiredDescriptionDefault
namesYesExecutable command names to process in one request. Each value follows the same exact, case-sensitive rules as name, and results preserve input order.
scopeNoOptional 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

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 nameA
Read-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.
    
NameRequiredDescriptionDefault
nameYesExact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters.
scopeNoOptional 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

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/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 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.

Usage Guidelines5/5

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 batchA
Read-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.
    
NameRequiredDescriptionDefault
namesYesExecutable command names to process in one request. Each value follows the same exact, case-sensitive rules as name, and results preserve input order.
scopeNoOptional 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

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

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, 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.

Purpose5/5

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.

Usage Guidelines5/5

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 coverageA
Read-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.
    
NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines5/5

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 recordA
Read-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.
    
NameRequiredDescriptionDefault
nameYesExact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters.
scopeNoOptional 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

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines5/5

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 executableA
Read-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.
    
NameRequiredDescriptionDefault
nameYesExact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters.
environmentYesTarget 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.
preferencesNoOptional provider-selection preferences. Use package to select an exact package when more than one indexed provider exposes the command.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

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 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.

Purpose5/5

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.

Usage Guidelines5/5

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 batchA
Read-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.
    
NameRequiredDescriptionDefault
namesYesExecutable command names to process in one request. Each value follows the same exact, case-sensitive rules as name, and results preserve input order.
environmentYesTarget 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.
preferencesNoOptional provider-selection preferences. Use package to select an exact package when more than one indexed provider exposes the command.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

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, 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.

Purpose5/5

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.

Usage Guidelines5/5

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 namesA
Read-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.
    
NameRequiredDescriptionDefault
limitNoMaximum number of sorted results to return.
scopeNoOptional 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.
lengthNoOptional exact character length of the executable name.
prefixNoCase-sensitive command-name prefix. Leave empty to search all indexed names subject to the other filters and limit.
ecosystemNoOptional exact provider ecosystem identifier, for example npm, pypi, homebrew, debian, or ubuntu.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 namesA
Read-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.
    
NameRequiredDescriptionDefault
nameYesExact, case-sensitive executable command name, not a package name or filesystem path; must be 1-255 characters without path separators or control characters.
limitNoMaximum number of sorted results to return.
scopeNoOptional 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

NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

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, 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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 9 tool updatesv0.1.2
    • Changedassess_executable2 fields changed
      • addedInput schema / properties / name / description
        Added 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."
      • addedInput schema / properties / scope / description
        Added 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."
    • Changedassess_executables2 fields changed
      • addedInput schema / properties / names / description
        Added 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."
      • addedInput schema / properties / scope / description
        Added 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."
    • Changedcheck_executable2 fields changed
      • addedInput schema / properties / name / description
        Added 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."
      • addedInput schema / properties / scope / description
        Added 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."
    • Changedcheck_executables2 fields changed
      • addedInput schema / properties / names / description
        Added 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."
      • addedInput schema / properties / scope / description
        Added 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."
    • Changedget_executable2 fields changed
      • addedInput schema / properties / name / description
        Added 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."
      • addedInput schema / properties / scope / description
        Added 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."
    • Changedresolve_installation3 fields changed
      • addedInput schema / properties / environment / description
        Added 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."
      • addedInput schema / properties / name / description
        Added 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."
      • addedInput schema / properties / preferences / description
        Added value: +"Optional provider-selection preferences. Use package to select an exact package when more than one indexed provider exposes the command."
    • Changedresolve_installations3 fields changed
      • addedInput schema / properties / environment / description
        Added 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."
      • addedInput schema / properties / names / description
        Added 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."
      • addedInput schema / properties / preferences / description
        Added value: +"Optional provider-selection preferences. Use package to select an exact package when more than one indexed provider exposes the command."
    • Changedsearch_executables5 fields changed
      • addedInput schema / properties / ecosystem / description
        Added value: +"Optional exact provider ecosystem identifier, for example npm, pypi, homebrew, debian, or ubuntu."
      • addedInput schema / properties / length / description
        Added value: +"Optional exact character length of the executable name."
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of sorted results to return."
      • addedInput schema / properties / prefix / description
        Added value: +"Case-sensitive command-name prefix. Leave empty to search all indexed names subject to the other filters and limit."
      • addedInput schema / properties / scope / description
        Added 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."
    • Changedsearch_similar_executables3 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Maximum number of sorted results to return."
      • addedInput schema / properties / name / description
        Added 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."
      • addedInput schema / properties / scope / description
        Added 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."
  2. 10 tool updatesv0.1.0
    • First observedassess_executable
    • First observedassess_executables
    • First observedcheck_executable
    • First observedcheck_executables
    • First observedget_coverage
    • First observedget_executable
    • First observedresolve_installation
    • First observedresolve_installations
    • First observedsearch_executables
    • First observedsearch_similar_executables

TDQS

A4.6/5.0

Scored across 10 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Fast 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.
    7
    254 npm
    28
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Fast domain availability checker with RDAP/WHOIS lookup, batch checking, TLD presets, pattern generation, and detailed registration info. Built in Rust for native performance.
    306
    -
  • A
    license
    A
    quality
    A
    maintenance
    Monitor 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.
    11
    72 npm
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Pre-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.
    1
    1
    Apache 2.0