Skip to main content
Glama

publish-pilot-mcp

An MCP server that lets Claude(or any other agent) take a project from an empty folder to a published GitHub repo and npm, PyPI or crates.io package. It checks your tools, handles logins, scaffolds the project, runs checks, publishes and releases. You only do the sign-in, 2FA and approval clicks.ANDDDDD whats the difference between this mcp and other mcps(like windows mcp) those control ur pcs? well this mcp would less likely to control ur whole pc to get the job done which means u can either publish multiple repos at the same time or use ur pc while Claude is doing the job*

npm CI

Install

You need Node.js 22 or newer. The server runs with npx, so it needs no separate install. To publish, you also need git, the GitHub CLI (gh) and your registry's CLI; doctor (below) shows what's missing, and Claude can install it for you.

Claude Code (macOS, Linux, WSL):

claude mcp add publish-pilot -- npx -y publish-pilot-mcp

On native Windows, npx is a .cmd script that MCP clients can't start directly, so wrap it in cmd /c:

claude mcp add publish-pilot -- cmd /c npx -y publish-pilot-mcp

Claude Desktop: open Settings → Developer → Edit Config. That opens claude_desktop_config.json, wherever your install keeps it. Add publish-pilot under mcpServers, keeping any servers already there, save, and restart Claude Desktop.

Windows:

{
  "mcpServers": {
    "publish-pilot": {
      "command": "cmd",
      "args": ["/c", "npx", "-y", "publish-pilot-mcp"]
    }
  }
}

macOS and Linux:

{
  "mcpServers": {
    "publish-pilot": {
      "command": "npx",
      "args": ["-y", "publish-pilot-mcp"]
    }
  }
}

Any other MCP client: run npx -y publish-pilot-mcp as a stdio server (cmd /c npx -y publish-pilot-mcp on Windows).

Faster start (optional). npx checks the registry every time the client starts the server, which adds about 0.7 s. A global install starts in about 0.2 s, but you update it yourself (npm install -g publish-pilot-mcp@latest):

npm install -g publish-pilot-mcp
npm root -g

Then point the client at node and the installed dist/cli.js, using the folder npm root -g printed. For example, on Windows:

{
  "mcpServers": {
    "publish-pilot": {
      "command": "node",
      "args": ["C:\\Users\\you\\AppData\\Roaming\\npm\\node_modules\\publish-pilot-mcp\\dist\\cli.js"]
    }
  }
}

On macOS and Linux, "command": "publish-pilot-mcp" with no args also works.

Related MCP server: ship-it-mcp

Quick start

  1. Check that your machine is ready:

    npx -y publish-pilot-mcp doctor both npm

    This lists the tools that are installed or missing (git, gh, node/npm) and whether you are logged in to GitHub and npm.

  2. Ask Claude, naming the folder to work in:

    Use publish-pilot to make an npm package called my-tool in C:\code\my-tool that converts CSV to JSON, and publish it to both GitHub and npm.

    In Claude Code you can also run the built-in plan with /mcp__publish-pilot__publish_project (listed as /publish-pilot:publish_project).

Claude then works through the plan: preflight, scaffold, code and tests, quality checks, dry run, commit, GitHub repo, publish, trusted publishing, tag, release and a final install test. When it needs you, it sends a desktop notification and either opens the right page (the GitHub device-code login) or a terminal window where npm asks for your approval (npm login, publish and trusted-publisher setup).

What you have to do yourself

The server never types passwords or 2FA codes and never clicks Authorize, Approve or Save. Expect to:

  • Sign in to GitHub and click Authorize (only if gh is not logged in yet).

  • Sign in to npm (only if npm whoami fails).

  • Approve the first npm publish on npmjs.com (2FA).

  • Approve the trusted-publisher link (npm trust github) with 2FA. If you prefer the website, open the package's Settings → Trusted Publisher page and fill in the values Claude gives you.

npm only shows its approval link in a real terminal. So on Windows and macOS these npm steps run in a visible PowerShell or Terminal window: if it says "Press ENTER to open in the browser", press Enter there and approve. On Linux they run under script, which gives npm a terminal, and the page opens in your browser.

npm can only add a trusted publisher to a package that already exists, so a brand-new package is published once from your machine and every later version from GitHub Actions.

After that, every release is a pushed v* tag. GitHub Actions publishes with OIDC, so no tokens are stored anywhere.

Tools

Tool

What it does

preflight

Checks git, gh, the registry CLI, your logins and your git identity. Starts no logins.

install_tool

Installs a missing tool with winget (Windows), brew (macOS) or apt (Linux).

check_names

Checks that the package and repo names are valid and free, and picks the best free alternative (for npm, @you/name).

login

Starts a browser login: gh auth login --web (returns the one-time code and URL), or npm login --auth-type=web in a terminal window.

job_status

Polls a running login or publish job: status, output, URLs and codes.

scaffold_project

Creates source, tests, README, LICENSE, CHANGELOG, .gitignore, manifest and workflows. Never overwrites files. With target: "repo" the README explains clone-and-build and the manifest blocks registry publishing. With private: true, CI runs on Ubuntu only.

add_workflows

Writes ci.yml and a release.yml that uses trusted publishing (OIDC), skips versions that already exist and creates a GitHub release from the CHANGELOG. private: true keeps CI on Ubuntu, because private repos pay for Actions minutes and Windows/macOS cost 2×/10×.

run_checks

Secret scan, then install, lint, typecheck, build and test (npm scripts, a Python .venv with pytest, or cargo). Skips the install when node_modules is up to date, runs lint and typecheck at the same time, and doesn't build twice when the test script builds.

inspect_package

Runs the publish dry run and lists the files that would ship, flagging junk and secrets.

git_commit

Runs git init -b main if needed and commits. Refuses if secrets would be committed.

create_github_repo

Runs gh repo create <name> --public/--private --source . --push, and warns when a private repo's CI would run on paid Windows/macOS minutes.

publish_package

Runs npm publish (in a terminal window, for npm's 2FA approval), twine upload or cargo publish. Skips versions that already exist, and waits 24 hours after a rate-limit error.

setup_trusted_publishing

Connects the package to release.yml (npm trust github, or the PyPI/crates.io settings page with the exact values).

tag_and_release

Tags v<version>, pushes the branch and tag in one atomic push, and creates the GitHub release from the CHANGELOG, unless release.yml already does that.

watch_workflow

Waits for the workflow run of the current commit (release by default) and returns the failing log if it fails.

bump_version

Bumps the patch, minor or major version and adds a CHANGELOG entry, or turns the "Unreleased" section into the new version.

verify_install

Installs from the real registry (or clones the repo, private ones included) into a new temp folder and runs your README steps one by one, stopping at the first that fails.

notify

Desktop notification. With url, also opens a page on github.com, npmjs.com, pypi.org or crates.io (other hosts are refused).

run_command

Runs a command in PowerShell (Windows) or sh. Destructive commands are refused.

The publish_project prompt takes optional target, name, description, registry, visibility, license, what and dir arguments. Anything you leave out, Claude asks for before it starts.

Safety

  • All command output is scanned, and tokens (GitHub, npm, PyPI, crates.io, AWS and others) are replaced with *** before Claude sees them.

  • Commits and publishes are blocked when .env files, private keys or tokens would be included.

  • It never deletes, force-pushes or unpublishes anything, tags included. Failed releases are fixed with a new patch version instead. run_command refuses force-push, tag/repo/release deletion, npm unpublish, cargo yank, logout/token commands and recursive deletes.

  • It only opens https:// pages on github.com, npmjs.com, pypi.org and crates.io.

Use as a library

import { createServer } from "publish-pilot-mcp";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

await createServer().connect(new StdioServerTransport());

preflight, scaffoldProject, releaseWorkflow, scanProject, checkPackageName and other helpers are exported too, with TypeScript types.

Build from source

git clone https://github.com/acus9345/publish-pilot-mcp.git
cd publish-pilot-mcp
npm install
npm test
node dist/cli.js --help

Troubleshooting

  • doctor says a tool is MISSING: ask Claude to run install_tool, or install it yourself (for example winget install --id GitHub.cli -e). Then restart your MCP client so it picks up the new PATH.

  • The server doesn't start on Windows (spawn npx ENOENT, EINVAL or "Connection closed"): the config uses plain npx. Use the Windows form above (cmd /c npx -y publish-pilot-mcp) and restart the client. Claude Desktop writes each server's log to mcp-server-<name>.log; on Windows look in %LOCALAPPDATA%\Claude\logs or %APPDATA%\Claude\logs.

  • npx publish-pilot-mcp says the command isn't recognized: you ran it inside the publish-pilot-mcp source folder, where npx runs the local copy. Run it from any other folder.

  • npm publish fails with E429 rate limited exceeded: npm limits how many packages and versions one account can publish, and it doesn't say what the limit is. Nothing was published. Don't retry soon: every failed attempt can extend the block. publish_package records the failure in ~/.publish-pilot/rate-limits.json and refuses to try again for 24 hours (unless called with force). Wait, or ask npm to lift it at https://www.npmjs.com/support.

  • The npm approval link expired: ask Claude to call publish_package again. Each call opens a fresh link, and versions that are already published are skipped.

  • The release workflow says the tag doesn't match the version: the v* tag must equal the manifest version. Ask Claude to bump_version, commit, and tag the new version. Old tags are never moved.

  • npm publish from Actions fails with 404 or 401: trusted publishing isn't set up for this repo and release.yml yet. Run setup_trusted_publishing (the package must already exist on npm).

License

MIT

Available Tools

19 tools
add_workflowsB

Write ci.yml and release.yml (on v* tags: test, publish via OIDC unless the version exists, GitHub release from CHANGELOG). Keeps existing files unless overwrite.

NameRequiredDescriptionDefault
dirYes
privateNoPrivate repo: Ubuntu-only CI to save Actions minutes
releaseNoregistry
registryNoOmit for repo-only
overwriteNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations only declare destructiveHint=false, and the description adds meaningful behavior beyond that: existing files are preserved unless overwrite is set, and the generated release workflow conditionally publishes via OIDC unless the version already exists. It doesn't describe permissions needed or exact file locations, but the added behavioral context is substantial for a non-destructive write tool.

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?

Two dense sentences with no wasted words, front-loaded with the files written and the conditional behavior. The parenthetical is information-rich but slightly compressed; overall it earns its space.

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

Completeness3/5

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

For a 5-parameter file-generation tool with no output schema and minimal annotations, the description covers the core behavior and overwrite semantics but leaves the required dir parameter and several enum parameters unexplained. An agent can call it, but some parameters remain opaque.

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

Parameters2/5

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

Schema description coverage is 40%, so the description must compensate, but it only partially does. It clarifies overwrite semantics and hints at release behavior on v* tags, but leaves dir, release, and registry enum meanings unexplained, and does not mention private's Ubuntu-only optimization.

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?

States a specific action ('Write ci.yml and release.yml') and the key trigger behavior on v* tags. It is clearly distinguishable from siblings like setup_trusted_publishing or tag_and_release, though it doesn't explicitly name which sibling it complements.

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

Usage Guidelines3/5

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

Usage is implied by the content (CI/release workflow generation) but there is no explicit when-to-use or when-not-to-use guidance, nor any mention of alternatives such as scaffold_project. An agent can infer the scenario, but the description doesn't route between tools.

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

bump_versionA

Bump the version and add notes to CHANGELOG (no notes: Unreleased becomes the version). Does not commit.

NameRequiredDescriptionDefault
dirYes
levelNopatch
notesNoMarkdown

TDQS

A3.7/5.0
Behavior4/5

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

With only destructiveHint=false in annotations, the description earns credit for disclosing two real behaviors: the fallback where the Unreleased heading becomes the version when no notes are supplied, and that the change is left uncommitted (dirty working tree). It still doesn't say which files are altered or whether the operation is reversible.

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

Conciseness5/5

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

Two sentences, zero waste, and the core action is front-loaded ahead of the edge case and the commit caveat.

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

Completeness3/5

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

No output schema and a file-mutating tool with minimal annotations: the description should state which version file is targeted, whether it requires an existing CHANGELOG/git repo, and what is returned. Those gaps leave an agent guessing about prerequisites, though the core mechanics are covered.

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

Parameters3/5

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

Schema coverage is 33%: only 'notes' is documented (as Markdown), and the description adds the meaningful default behavior when notes is empty. But 'dir' is completely undefined (project root? repo path?) and 'level' is left to the self-explanatory enum, so compensation for the low coverage is partial.

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?

Specific verb+resource: bumps the version and writes notes into the CHANGELOG, with a parenthetical on what happens when notes are empty. It implicitly separates itself from git_commit via 'Does not commit', though it never names the file(s) whose version is bumped.

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

Usage Guidelines3/5

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

'Does not commit' hints that a follow-up commit (e.g. git_commit) is required, which is useful workflow context. But there is no explicit when-to-use statement, no precondition (clean tree, existing CHANGELOG), and no comparison to siblings like tag_and_release or publish_package.

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

check_namesB
Read-only

Check a package name on its registry and a repo name on your GitHub. If taken, returns the first free alternative (npm: @user/name first).

NameRequiredDescriptionDefault
registryNo
repoNameNo
packageNameNo

TDQS

B3/5.0
Behavior3/5

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

The readOnlyHint=true annotation is consistent with a name-availability lookup, and the description usefully adds fallback behavior plus the npm scoping preference (@user/name first). It does not disclose that live registry/GitHub lookups occur, whether GitHub auth is needed ('your GitHub' hints at it), rate limits, or what is returned when no free alternative exists.

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?

Two short sentences with the core action front-loaded and no filler. The trailing parenthetical '(npm: @user/name first)' is terse to the point of being cryptic, slightly costing clarity.

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

Completeness3/5

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

For a tool with three fully undocumented, all-optional parameters, no output schema, and only a readOnly annotation, the description leaves meaningful gaps: optionality/combination rules, supported registries, and the shape of a 'not taken' versus 'taken' result. It covers the core idea but not enough to call it confidently without trial.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the load. It loosely maps each of the three params to a concept (packageName/registry, repoName), but says nothing about the npm/pypi/crates enum, that all three are optional and can be combined or omitted, or what defaults apply — all of which an agent must guess.

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?

States a specific verb and two concrete resources: a package name on a registry and a repo name on GitHub, with the second sentence clarifying that this is an availability check that falls back to a free alternative. It is distinguishable from siblings like inspect_package or create_github_repo, though the description never names them explicitly to sharpen the boundary.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not guidance, and no reference to alternatives such as preflight, scaffold_project, or create_github_repo that also deal with names and projects. The context (check a name before publishing/creating) is only inferable from the return-value sentence.

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

create_github_repoB

Create the GitHub repo from the folder and push. If it is already this folder's origin, just pushes.

NameRequiredDescriptionDefault
dirYes
nameYes
visibilityNopublic
descriptionNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations only declare destructiveHint=false, so the description carries most of the burden. It usefully discloses idempotent-ish behavior when the folder is already the origin, but omits that the default visibility is public (a meaningful side effect), that auth via login is likely required, and what happens on name collisions.

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?

Two compact sentences with the primary action front-loaded and no filler. The second sentence is slightly awkwardly worded ("If it is already this folder's origin") but still earns its place.

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

Completeness4/5

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

Placeholder corrected below.

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

Parameters2/5

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

Schema description coverage is 0% across 4 parameters, so the description must compensate and does not. It only indirectly gestures at `dir` ("the folder") and `name` ("repo"); `visibility` and `description` are never mentioned, and the public default is left undisclosed.

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?

States a specific verb and resource ("Create the GitHub repo") plus the accompanying action ("push"). The phrase "from the folder" is slightly vague about whether local git init also occurs, and it doesn't distinguish itself from siblings like publish_package or tag_and_release, but the core action is unambiguous.

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

Usage Guidelines2/5

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

The second sentence describes a conditional behavior (already the origin → just push) rather than when to choose this tool over alternatives such as check_names or publish_package. No prerequisites (e.g. login) or when-not-to-use conditions are stated.

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

git_commitA

Stage all and commit (git init -b main if needed). Refuses if secrets would be committed.

NameRequiredDescriptionDefault
dirYes
messageYesCommit message.

TDQS

A3.5/5.0
Behavior4/5

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

With only destructiveHint=false available, the description carries real behavioral weight: it discloses a side effect (creating a repo with a main branch if absent) and a safety behavior (refusing when secrets would be committed). It still doesn't say what happens when there are no changes to commit or what the tool returns, so it is not fully self-sufficient.

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

Conciseness5/5

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

Two tight sentences, zero filler, with the primary action front-loaded and the safety caveat placed last where it belongs.

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

Completeness3/5

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

For a git mutation tool with minimal annotations and no output schema, the description covers the important surprises (auto-init, secret refusal) but leaves gaps: unclear what 'dir' expects, no statement of failure modes (nothing to commit, unmerged state), and no hint about the result of the commit.

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

Parameters2/5

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

Schema coverage is only 50% — 'message' is documented in the schema, but 'dir' is a bare string with no description and the tool description never explains it (repo path? existing or to-be-created?). 'Stage all' weakly implies dir scopes the staging area, but that inference is left to the agent.

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?

States a specific operation ('Stage all and commit') with an explicit scope qualifier ('all'), plus the auto-init fallback. It is clearly distinguishable from workflow siblings like tag_and_release or bump_version, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

The phrase 'git init -b main if needed' implies this is the entry point when no repo exists, which hints at when to use it. But there is no explicit when-to-use versus the git-adjacent siblings (tag_and_release, bump_version) and no statement of preconditions or exclusions.

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

inspect_packageB
Read-only

Publish dry run: files that would ship, junk/secret warnings, registry check.

NameRequiredDescriptionDefault
dirYes

TDQS

B3.4/5.0
Behavior4/5

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

readOnlyHint=true is consistent with a dry-run/inspection operation. Beyond the annotation, the description usefully discloses what the tool reports back (shipped files, junk and secret warnings, registry check), which is meaningful because there is no output schema. It does not say whether warnings block anything or how failures surface.

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?

A single telegraphic sentence with no filler; the core concept ('publish dry run') is front-loaded and the rest enumerates concrete outputs. The fragment style is terse but every element carries information.

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

Completeness3/5

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

For a one-parameter tool with an output-less schema, the description covers the essentials of what is produced. It omits where 'dir' points, whether the registry check requires network/auth, and how warnings affect the outcome, leaving some gaps for an agent deciding how to react to results.

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

Parameters2/5

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

Schema description coverage is 0% and the single parameter 'dir' is never mentioned or explained in the description. With low coverage the description should compensate by clarifying that 'dir' is the package directory to inspect, but it does not.

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 phrase 'Publish dry run' plus the enumerated outputs (files that would ship, junk/secret warnings, registry check) makes the operation concrete and distinguishable from a real publish. It stops short of naming publish_package as the non-dry-run counterpart, so the differentiation is implied rather than stated.

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

Usage Guidelines3/5

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

Usage is only implied: 'dry run' signals it should be run before an actual publish. There is no explicit guidance on when to prefer it over publish_package, no stated prerequisites, and no note about whether it can be run at any point in the workflow.

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

install_toolA

Install a tool with winget, brew or apt.

NameRequiredDescriptionDefault
nameYes

TDQS

A3.6/5.0
Behavior4/5

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

The description is highly transparent about implementation by explicitly naming the three different package managers used (winget, brew, apt). This adds vital behavioral context regarding environmental compatibility beyond the simple 'non-destructive' annotation.

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

Conciseness5/5

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

The definition is extremely concise and to the point. It uses a single sentence to encapsulate the tool's entire functional description without any fluff.

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

Completeness4/5

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

Given the limited scope (only six allowed tools), the description is contextually complete for understanding the tool's core function and operational constraints. Since there is no output schema, no return value explanation is necessary.

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

Parameters3/5

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

The schema provides the complete list of tools via the 'enum' constraint. Since the description does not add context or meaning to the specific enumerated values (git, node, etc.), it receives the baseline score of 3.

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 clearly states the goal: installing a tool. It specifies the methodology (winget, brew, apt). However, it does not differentiate this general installation tool from other setup/configuration tools in the sibling list, preventing a perfect 5.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool relative to the workflow (e.g., is it prerequisite for other tools?) or when it should not be used. It only states what it does.

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

job_statusC

Status and output of a login/publish job; without id, lists jobs.

NameRequiredDescriptionDefault
idNo
stopNo
sendEnterNoAnswer a 'Press ENTER' prompt
waitSecondsNoMax 45 s per call; call again while running

TDQS

C2.9/5.0
Behavior2/5

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

Annotations only declare openWorldHint=false, so the description must carry nearly the full behavioral burden. It reveals that the tool returns output in addition to status, but says nothing about the long-polling nature (45s cap, re-call while running), what stop actually does, or whether stopping is destructive/irreversible.

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?

A single compact clause with the listing behavior front-loaded alongside the primary purpose. It is efficient, though the terseness edges toward under-specification rather than pure conciseness.

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

Completeness2/5

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

With four parameters, no output schema, and negligible annotations, the description should explain the existing-output return and polling/stop behavior. It leaves the stop parameter and the output format completely unaddressed, which is inadequate for a job-control tool.

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

Parameters2/5

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

Schema coverage is only 50%; sendEnter and waitSeconds are documented in the schema, but 'stop' — the one mutating parameter — has no description in either place, and 'id' is only partially implied by the listing behavior. The description does not compensate for the undocumented stop semantics.

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?

States a specific verb and resource ('Status and output of a login/publish job') and clarifies the dual mode with 'without id, lists jobs'. An agent can tell it apart from the job-spawning siblings like login and publish_package, though the relationship to polling siblings such as watch_workflow is not made explicit.

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

Usage Guidelines3/5

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

'without id, lists jobs' gives one implied conditional for the no-arg case, which is useful. However, there is no guidance on when to call this versus watch_workflow, or when to use stop instead of simply re-polling.

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

loginA

Start a browser login. Returns a job with the URL and code; the user signs in and approves. Poll job_status until running is false.

NameRequiredDescriptionDefault
serviceYes
openBrowserNo

TDQS

A4/5.0
Behavior5/5

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

Given the minimal annotations, the description provides crucial behavioral context by explaining that the tool is asynchronous, returning a 'job' instead of an immediate success/failure, and mandating the use of `job_status` for completion tracking. This reduces ambiguity for the agent.

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 description is brief and highly efficient, using two sentences to cover the execution flow and the subsequent required actions without any fluff.

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?

The description provides a complete narrative of the tool's operation. It covers the initiation phase (call), the intermediate state (job return), and the final action required by the agent (polling the job status).

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

Parameters2/5

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

With 0% schema description coverage, the description provides little help regarding the meaning of the specific input parameters like `service` or `openBrowser`. It describes the workflow but does not semantically elaborate on the required inputs.

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 tool name and description clearly identify the action as starting a browser login. It distinguishes this function from other automation tools in the set, such as package installation or repository creation.

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

Usage Guidelines4/5

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

It explains the necessary operational sequence: initiate login, wait for URL/code return, perform manual steps (sign in and approve), and then follow up by polling `job_status`. This guides the agent through a complex, multi-step process.

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

notifyB

Desktop notification, e.g. 'Ready for your approval'. url opens a github.com, npmjs.com, pypi.org or crates.io page.

NameRequiredDescriptionDefault
urlNo
titleNopublish-pilot
messageYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations only declare destructiveHint=false, so the description carries most of the burden. It usefully implies a local, non-destructive alert and discloses that the url parameter causes a page to be opened — a real behavioral trait beyond the annotations. It does not say what happens for URLs outside the four named domains, whether the notification blocks, or what the call returns.

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?

Two short, front-loaded sentences with no padding — the core purpose comes first and the URL clause second. The URL sentence is slightly telegraphic ('opens a ... page') but nothing is wasted.

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

Completeness3/5

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

For a trivial three-parameter notification tool with no output schema this is nearly sufficient, but gaps remain: what happens to non-matching URLs, what 'title' controls, and whether the tool returns anything at all. Adequate rather than complete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for all three parameters. It adds real meaning for 'url' (constrained to github.com, npmjs.com, pypi.org, crates.io) and an example value for 'message', but 'title' (with its 'publish-pilot' default) is never mentioned and the required/optional status of each is unstated.

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?

States a specific verb+resource: 'Desktop notification', with a concrete example message ('Ready for your approval') that anchors the intent. No sibling tool in the list does anything comparable, so differentiation is implicit and adequate, though it never explicitly frames itself as a local side-effect-free alert.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus alternatives, nor any context about which workflows (e.g. after scaffold_project or run_checks) warrant a notification. The only guidance is a fragment about which URL domains are supported, which is parameter-level, not usage-level.

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

preflightA
Read-only

Check tools (git, gh, registry CLI), logins and git identity. Run first.

NameRequiredDescriptionDefault
targetYes
registryNo

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true is consistent with a check-only tool, and the description confirms it inspects state rather than mutating it. Beyond that it says nothing about what a failed check means (does it abort?), what is returned, or prerequisites—context the annotation does 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.

Conciseness5/5

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

Two short sentences, front-loaded with the resource list and ending with the ordering directive. No filler or redundancy.

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

Completeness3/5

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

Covers the checklist scope and the sequencing, which is the essential call-time context for a read-only tool with no output schema. It leaves the enum parameters' meaning and the outcome/failure semantics unexplained, which matters for a gating preflight step.

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

Parameters2/5

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

Schema description coverage is 0% for two enum parameters. The description gestures at the registry CLI, implying the registry param, but never explains what 'target' (repo/package/both) selects or how registry interacts with it. With low coverage the description needed to compensate and largely does not.

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?

States a specific verb (check) and concrete resources: tools (git, gh, registry CLI), logins, and git identity. It is distinguishably different from siblings like verify_install or run_checks, though it never explicitly defines the boundary with them.

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

Usage Guidelines4/5

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

'Run first' is an explicit ordering directive that tells the agent when to invoke this relative to the rest of the workflow. It gives no when-not conditions or failure handling, but the primary usage context is stated clearly.

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

publish_packageB

Publish to the registry; returns a job (npm approval opens in a terminal). Skips existing versions, and refuses for 24 h after an E429.

NameRequiredDescriptionDefault
dirYes
forceNoIgnore the E429 wait; only if the user says the block was lifted
dryRunNo
openBrowserNo

TDQS

B3.4/5.0
Behavior4/5

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

The annotations only declare destructiveHint=false, so the description carries most of the burden and does add real value: publishing returns a job, npm approval opens in a terminal, existing versions are skipped, and the tool self-blocks for 24h after an E429. It stops short of saying whether the publish is irreversible or what the job object contains.

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?

Dense and front-loaded: the core action and return value come first, caveats second. The telegraphic style and undefined 'E429' cost a little clarity but nothing is padded.

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

Completeness3/5

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

For a 4-parameter mutation with no output schema, the description should cover auth prerequisites, what 'dryRun' and 'openBrowser' do, and how the returned job relates to job_status. It covers the E429/skip semantics but leaves those gaps.

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

Parameters2/5

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

Schema coverage is only 25% — only 'force' has a schema description. The description explains the E429 behavior that makes 'force' meaningful, but says nothing about 'dir', 'dryRun', or 'openBrowser', so three of four parameters are undocumented in both places.

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?

States a specific verb and resource ('Publish to the registry') plus the return shape ('returns a job'), which is enough to distinguish it from siblings like preflight, check_names, or tag_and_release. It does not explicitly name which sibling to use first, but the action is unambiguous.

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

Usage Guidelines3/5

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

Usage is only implied: the note about skipping existing versions and refusing for 24h after an E429 hints at preconditions, but there is no explicit 'use this when X, use preflight/check_names first otherwise' guidance. Prerequisites such as being logged in (a login sibling exists) are unstated.

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

run_checksB

Secret scan, install, lint, typecheck, build, test (npm scripts, .venv + pytest, or cargo). Stops at the first failure.

NameRequiredDescriptionDefault
dirYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations only supply destructiveHint=false; the description adds a genuinely useful behavioral trait by stating the run aborts at the first failure. However, it omits the side effects of the install step (creating node_modules/.venv), whether output is streamed or summarized, and how long such a run may take, all of which matter for a multi-stage pipeline.

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

Conciseness5/5

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

One sentence, front-loaded with the step list and ending on the most important behavioral fact (stops at first failure). No filler.

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

Completeness3/5

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

With no output schema and only a single annotation, the description should carry more weight for a heavyweight multi-step pipeline. It enumerates stages well but says nothing about the result format, exit status reporting, or auto-detection rules for choosing npm vs .venv/pytest vs cargo.

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

Parameters2/5

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

The single parameter 'dir' has 0% schema description coverage, and the description never explains it. It is unclear whether 'dir' is the project root, a directory to scan, or a working directory for each script, and nothing indicates path format or whether it must contain a package manifest or pyproject.

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 action (run a check suite) and enumerates the concrete steps: secret scan, install, lint, typecheck, build, test, with toolchain variants for npm, .venv/pytest, and cargo. That makes it clearly distinguishable from siblings like verify_install or run_command, though it never explicitly contrasts itself with preflight, which sounds closely related.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus alternatives such as preflight, verify_install, or run_command. The only implicit guidance is the word 'install' plus the flow order, which hints at a full pre-commit/pre-release validation pass, but the agent must infer that.

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

run_commandA
Destructive

Run a shell command (PowerShell on Windows, sh elsewhere). Destructive ones (force-push, deleting tags/repos/releases, unpublish, rm -r) are refused.

NameRequiredDescriptionDefault
cwdNo
commandYes
timeoutSecondsNo

TDQS

A4.3/5.0
Behavior5/5

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

While the annotations provide a general destructive hint, the description provides specific operational transparency by listing concrete examples of destructive commands and detailing the OS environment supported, adding significant context beyond the structured hint.

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

Conciseness5/5

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

The description is highly efficient, front-loading the core function and immediately following up with the most critical operational constraints regarding safety and environment.

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

Completeness2/5

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

Despite the robust safety and operational framing, the tool definition lacks completeness because, given the 0% schema description coverage, it does not explain what `cwd` (Current Working Directory) or `timeoutSeconds` achieve or how they should be used.

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

Parameters2/5

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

Schema description coverage is 0%, meaning the description must explain parameters, but it only mentions the command execution mechanism itself. It fails to define the purpose or use cases for the optional `cwd` or `timeoutSeconds` parameters.

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 description clearly identifies the function as running a shell command and specifies the runtime environment differences (PowerShell vs sh), making its purpose highly unambiguous relative to the sibling tools.

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?

The description provides strong usage guidelines by explicitly listing several destructive operations (force-push, deleting tags, rm -r) that the agent must refuse to execute, thereby defining clear boundaries for safe use.

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

scaffold_projectA

Create a project: source, test, README, LICENSE, CHANGELOG, .gitignore, manifest (0.1.0). With repoUrl, also CI and release workflows. Never overwrites files.

NameRequiredDescriptionDefault
cliNoAdd a CLI entry point
dirYes
nameYes
targetNoDefault both with repoUrl, else package. repo: never published to a registry
licenseNoMIT
privateNoPrivate repo: Ubuntu-only CI to save Actions minutes
repoUrlNohttps://github.com/owner/repo
registryYes
workflowsNoDefault follows target
descriptionYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations only declare destructiveHint=false; the description adds real behavioral facts beyond that — "Never overwrites files" (idempotent/safe on re-run) and conditional CI/release generation driven by repoUrl. It doesn't say what happens on collision (skip vs. error) or whether the directory is created when absent, which keeps it below 5.

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?

Two telegraphic sentences, front-loaded with the artifact list followed by the conditional and the safety guarantee; nothing is wasted. It is clipped to the point of being slightly under-specified rather than verbose.

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

Completeness3/5

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

For a 10-parameter scaffolding tool with only one annotation and no output schema, the description covers generated artifacts and the repoUrl branch, but omits how target/registry/private interact, collision behavior, and whether the target directory must pre-exist — gaps an agent would hit on first call.

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

Parameters3/5

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

Schema coverage is 50% across 10 parameters. The description explains one parameter's downstream effect (repoUrl triggers workflows) and stamps the manifest version, but says nothing about how target, registry, private, cli, or workflows shape the output — leaving several enums fully dependent on terse schema text.

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?

It gives a specific verb ("Create") plus the exact artifact set (source, test, README, LICENSE, CHANGELOG, .gitignore, manifest at 0.1.0), so an agent can tell precisely what lands on disk. It doesn't name a sibling to contrast with (preflight, add_workflows, create_github_repo), so it stops short of full differentiation.

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

Usage Guidelines3/5

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

The conditional "With repoUrl, also CI and release workflows" implies when the richer scaffold applies, but there's no statement of when to use this vs. add_workflows, preflight, or create_github_repo, and no exclusions or prerequisites (e.g., empty dir requirement).

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

setup_trusted_publishingB

Link the package to release.yml for OIDC publishing. npm: npm trust (package must exist; user approves 2FA). PyPI/crates: opens the settings page with the values; user clicks Save.

NameRequiredDescriptionDefault
dirYes
repoYesowner/name
openBrowserNo
workflowFileNorelease.yml

TDQS

B3.4/5.0
Behavior4/5

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

Annotations only cover destructiveHint=false, so the description carries the interactive-behavior burden well: it discloses that npm runs `npm trust` and requires user 2FA approval, and that PyPI/crates opens a settings page the user must save manually. That is exactly the kind of halting/auth context an agent needs. It stops short of saying what happens on failure or whether it's idempotent.

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?

Three short fragments, front-loaded with the core action before the per-registry detail. Efficiency is high, though the telegraphic style comes at some cost to readability.

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

Completeness3/5

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

The critical complexity — divergent npm vs PyPI/crates behavior and user-interaction requirements — is covered, and no output schema means return values needn't be described. But with two required params and no annotations beyond destructiveHint, leaving `dir` undefined and the return/confirmation behavior unstated is a real gap.

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

Parameters2/5

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

Schema description coverage is only 25% (only `repo` has "owner/name"), so the description should compensate. It only partially does: "release.yml" maps to the workflowFile default and "opens the settings page" hints at openBrowser. The required `dir` parameter is never explained in schema or description.

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?

States a specific action and mechanism: link the package to release.yml for OIDC publishing, then branch by registry (npm trust vs PyPI/crates settings page). An agent can tell what the tool accomplishes, though the tool's name is the main thing distinguishing it from siblings like add_workflows or publish_package.

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

Usage Guidelines3/5

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

"package must exist" gives one precondition, and the per-registry branch implies the tool is invoked once a package is on a registry. But there is no explicit when-not guidance, no mention of when to prefer login or add_workflows first, and no ordering advice relative to publish_package.

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

tag_and_releaseA

Tag v, push branch and tag together, and create the GitHub release from CHANGELOG unless release.yml does. Never moves tags.

NameRequiredDescriptionDefault
dirYes
versionNo
createReleaseNo

TDQS

A4.8/5.0
Behavior5/5

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

The phrase 'Never moves tags' is a crucial behavioral trait that informs the agent about the operation's safety profile beyond the 'destructiveHint: false' annotation. This prevents potential destructive tag manipulation.

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

Conciseness5/5

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

The single sentence is dense and highly efficient, front-loading the core functionality and immediately addressing key constraints and dependencies (like the release.yml logic).

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?

It manages the complexity of a multi-step Git workflow (tag + push + release) in one place by defining the scope (everything except moves) and the release logic exception (release.yml).

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

Parameters5/5

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

With 0% schema description coverage, the description is critical. It adds semantics by clarifying that the versioning refers to 'v<manifest version>' and explicitly links the `createRelease` behavior to the existence of 'release.yml'.

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 description specifies a concrete set of actions: tagging a version, pushing a branch and tag together, and creating a GitHub release. This clearly distinguishes it from simple commit or version bump tools.

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

Usage Guidelines4/5

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

It explicitly mentions a conditional branch ('unless release.yml does'), guiding the agent on when the default release creation logic is skipped. While it doesn't explicitly state when NOT to use the tag functionality, the conditional logic provides clear usage context.

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

verify_installA

In a fresh temp folder, install the published package (or clone repoUrl) and run commands in order, stopping at the first failure. Its executables are on PATH.

NameRequiredDescriptionDefault
nameNo
commandYesList of commands (PowerShell on Windows, sh elsewhere)
repoUrlNo
versionNo
registryNo

TDQS

A3.5/5.0
Behavior3/5

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

Adds genuinely useful behavioral facts beyond the annotations: execution happens in a fresh temp folder (isolation) and halts at the first failing command (fail-fast), plus executables land on PATH. It does not disclose timeouts, network requirements, cleanup of the temp folder, or what is returned on failure, so the disclosure is partial.

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

Conciseness5/5

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

Two tight sentences with the key constraint (fresh temp folder, stop at first failure) front-loaded and no filler. Every clause carries information an agent needs.

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

Completeness3/5

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

With no output schema and only a non-destructive annotation, the description should say more about outcomes (pass/fail reporting, where artifacts remain, timeout behavior) for a tool that spins up installs and runs arbitrary commands. The core mechanics are covered, but failure reporting is not.

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

Parameters3/5

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

Schema coverage is only 20% (only 'command' is documented), so the description must compensate. It clarifies that repoUrl is an alternative to installing the published package and implies name/version/registry select that package, but leaves version/registry semantics and name's role unstated.

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?

Specific verb+resource: installs a published package (or clones repoUrl) into a fresh temp folder and runs commands in order, stopping at first failure. An agent can tell it's an end-to-end install verification rather than a raw command runner. However it never names siblings like install_tool or run_command to disambiguate.

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

Usage Guidelines3/5

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

The phrase 'verify install' via fresh-folder install + command sequence implies the scenario (validate a package actually works after publishing), but there is no explicit when-to-use/when-not or comparison to install_tool/run_command/run_checks. Usage must be inferred from the workflow shape.

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

watch_workflowC
Read-only

Result of the workflow run for HEAD (default release.yml), with failed logs.

NameRequiredDescriptionDefault
dirYes
refNoTag or branch
workflowNorelease.yml
waitSecondsNoMax 45 s per call; call again while running

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds genuinely useful context — the returned result includes failed logs and defaults to release.yml at HEAD — but says nothing about the running/terminal states, polling expectations, or auth requirements that matter for a watch tool.

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

Conciseness3/5

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

It is a single short sentence with no waste, but the sentence-fragment structure and the awkwardly placed parenthetical make it harder to parse than it needs to be. Brevity here shades into under-specification rather than efficiency.

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

Completeness2/5

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

With no output schema and a polling tool whose return value varies by run state, the description should explain what comes back and how to handle a still-running result. Instead it gives one clause about failed logs and leaves the required dir parameter and the running state unexplained.

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

Parameters3/5

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

Schema coverage is 50%: ref, workflow, and waitSeconds are documented in the schema, and the description reinforces the HEAD/ref and release.yml/workflow defaults. However, the one required parameter, dir, is undocumented in both the schema and the description, which is a notable gap.

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

Purpose3/5

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

The description names the resource (a workflow run for HEAD, default release.yml) and mentions failed logs, but it is a noun phrase with no verb — an agent cannot tell whether it triggers, polls, or merely fetches results. It also does not distinguish itself from the sibling job_status, which plausibly covers overlapping ground.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool, when not to, or which sibling to prefer. The polling behavior is only hinted at by the schema's waitSeconds text ('call again while running'), leaving the description with no routing guidance at all.

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. 21 tool updatesv0.4.0
    • Changedadd_workflows5 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / dir / description
        Removed value: -"Project folder (absolute path, or relative to the server's working directory)."
      • changedInput schema / properties / private / description
        Previous value: -"Private repo: CI runs on Ubuntu only (Windows minutes count 2x, macOS 10x)."New value: +"Private repo: Ubuntu-only CI to save Actions minutes"
      • changedInput schema / properties / registry / description
        Previous value: -"Omit for a repo-only project."New value: +"Omit for repo-only"
      • removedInput schema / properties / release / description
        Removed value: -"registry: publish + GitHub release; github-only: just a GitHub release."
    • Changedbump_version3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / dir / description
        Removed value: -"Project folder (absolute path, or relative to the server's working directory)."
      • changedInput schema / properties / notes / description
        Previous value: -"Markdown for the CHANGELOG entry, e.g. '### Fixed\\n\\n- Release workflow.'"New value: +"Markdown"
    • Changedcheck_names4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / packageName / description
        Removed value: -"Package name to check on the registry."
      • removedInput schema / properties / registry / description
        Removed value: -"Package registry: npm, pypi (PyPI) or crates (crates.io)."
      • removedInput schema / properties / repoName / description
        Removed value: -"GitHub repo name to check under your account."
    • Changedcreate_github_repo3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / dir / description
        Removed value: -"Project folder (absolute path, or relative to the server's working directory)."
      • removedInput schema / properties / name / description
        Removed value: -"Repo name (without owner)."
    • Changedgit_commit2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / dir / description
        Removed value: -"Project folder (absolute path, or relative to the server's working directory)."
    • Changedinspect_package2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / dir / description
        Removed value: -"Project folder (absolute path, or relative to the server's working directory)."
    • Changedinstall_tool2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / name / description
        Removed value: -"Tool to install."
    • Changedjob_status5 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / id / description
        Removed value: -"Job id from login, publish_package or setup_trusted_publishing."
      • changedInput schema / properties / sendEnter / description
        Previous value: -"Send Enter to the job (for 'Press ENTER' prompts)."New value: +"Answer a 'Press ENTER' prompt"
      • removedInput schema / properties / stop / description
        Removed value: -"Stop the job (e.g. to restart a publish whose link expired)."
      • changedInput schema / properties / waitSeconds / description
        Previous value: -"Wait up to this long for the job to finish. Capped at 45 s per call so the call returns before common 60 s client timeouts; call again while running is true."New value: +"Max 45 s per call; call again while running"
    • Changedlogin3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / openBrowser / description
        Removed value: -"Open the login page in the default browser."
      • removedInput schema / properties / service / description
        Removed value: -"Which account to log in to."
    • Changednotify2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • addedInput schema / properties / url
        Added value: +{
        +  "type": "string"
        +}
    • Removedopen_url
    • Changedpreflight3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / registry / description
        Removed value: -"Package registry: npm, pypi (PyPI) or crates (crates.io)."
      • removedInput schema / properties / target / description
        Removed value: -"What to publish: a GitHub repo, a registry package, or both."
    • Changedpublish_package4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / dir / description
        Removed value: -"Project folder (absolute path, or relative to the server's working directory)."
      • changedInput schema / properties / force / description
        Previous value: -"Publish even within 24 hours of an E429. Only when the user confirms the block was lifted."New value: +"Ignore the E429 wait; only if the user says the block was lifted"
      • removedInput schema / properties / openBrowser / description
        Removed value: -"Open approval pages in the default browser."
    • Changedrun_checks2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / dir / description
        Removed value: -"Project folder (absolute path, or relative to the server's working directory)."
    • Changedrun_command1 field changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedscaffold_project11 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / cli / description
        Previous value: -"Add a command-line entry point with --help and --version (npm, pypi)."New value: +"Add a CLI entry point"
      • removedInput schema / properties / description / description
        Removed value: -"One-line description."
      • removedInput schema / properties / dir / description
        Removed value: -"Project folder (absolute path, or relative to the server's working directory)."
      • removedInput schema / properties / license / description
        Removed value: -"SPDX license id."
      • removedInput schema / properties / name / description
        Removed value: -"Package name."
      • changedInput schema / properties / private / description
        Previous value: -"The GitHub repo will be private: CI runs on Ubuntu only to save paid Actions minutes."New value: +"Private repo: Ubuntu-only CI to save Actions minutes"
      • removedInput schema / properties / registry / description
        Removed value: -"Package registry: npm, pypi (PyPI) or crates (crates.io)."
      • removedInput schema / properties / repoUrl / pattern
        Removed value: -"^https:\\/\\/github\\.com\\/[\\w.-]+\\/[\\w.-]+$"
      • changedInput schema / properties / target / description
        Previous value: -"What will be published. Default 'both' when repoUrl is set, otherwise 'package'."New value: +"Default both with repoUrl, else package. repo: never published to a registry"
      • changedInput schema / properties / workflows / description
        Previous value: -"Default with repoUrl: ci+release for target 'both', ci+repo-release for 'repo', ci for 'package'."New value: +"Default follows target"
    • Removedscan_secrets
    • Changedsetup_trusted_publishing3 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / dir / description
        Removed value: -"Project folder (absolute path, or relative to the server's working directory)."
      • changedInput schema / properties / repo / description
        Previous value: -"owner/name of the GitHub repo."New value: +"owner/name"
    • Changedtag_and_release4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / createRelease / description
        Removed value: -"Default: create the release here only when .github/workflows/release.yml doesn't create one. Pass true or false to force."
      • removedInput schema / properties / dir / description
        Removed value: -"Project folder (absolute path, or relative to the server's working directory)."
      • removedInput schema / properties / version / description
        Removed value: -"Must match the manifest; defaults to it."
    • Changedverify_install4 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedInput schema / properties / command / description
        Previous value: -"Commands to run in the folder (PowerShell on Windows, sh elsewhere). Prefer a list: each one must succeed before the next runs."New value: +"List of commands (PowerShell on Windows, sh elsewhere)"
      • removedInput schema / properties / registry / description
        Removed value: -"Package registry: npm, pypi (PyPI) or crates (crates.io)."
      • removedInput schema / properties / repoUrl / description
        Removed value: -"https://github.com/owner/repo — clone instead of installing."
    • Changedwatch_workflow5 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedInput schema / properties / dir / description
        Removed value: -"Project folder (absolute path, or relative to the server's working directory)."
      • changedInput schema / properties / ref / description
        Previous value: -"Only runs for this tag/branch, e.g. v0.1.1."New value: +"Tag or branch"
      • changedInput schema / properties / waitSeconds / default
        Previous value: -50New value: +45
      • changedInput schema / properties / waitSeconds / description
        Previous value: -"Capped at 45 s per call so the call returns before common 60 s client timeouts; while the run is in progress, call again."New value: +"Max 45 s per call; call again while running"
  2. 7 tool updatesv0.3.0
    • Changedadd_workflows1 field changed
      • addedInput schema / properties / private
        Added value: +{
        +  "default": false,
        +  "description": "Private repo: CI runs on Ubuntu only (Windows minutes count 2x, macOS 10x).",
        +  "type": "boolean"
        +}
    • Changedjob_status1 field changed
      • changedInput schema / properties / waitSeconds / description
        Previous value: -"Wait up to this long for the job to finish (keep under your client's tool timeout)."New value: +"Wait up to this long for the job to finish. Capped at 45 s per call so the call returns before common 60 s client timeouts; call again while running is true."
    • Changedpublish_package1 field changed
      • addedInput schema / properties / force
        Added value: +{
        +  "default": false,
        +  "description": "Publish even within 24 hours of an E429. Only when the user confirms the block was lifted.",
        +  "type": "boolean"
        +}
    • Changedscaffold_project3 fields changed
      • addedInput schema / properties / private
        Added value: +{
        +  "default": false,
        +  "description": "The GitHub repo will be private: CI runs on Ubuntu only to save paid Actions minutes.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / target
        Added value: +{
        +  "description": "What will be published. Default 'both' when repoUrl is set, otherwise 'package'.",
        +  "enum": [
        +    "repo",
        +    "package",
        +    "both"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / workflows / description
        Previous value: -"Default: ci+release when repoUrl is set."New value: +"Default with repoUrl: ci+release for target 'both', ci+repo-release for 'repo', ci for 'package'."
    • Changedtag_and_release2 fields changed
      • removedInput schema / properties / createRelease / default
        Removed value: -false
      • changedInput schema / properties / createRelease / description
        Previous value: -"Create the GitHub release here (repo-only projects). For 'both', release.yml creates it."New value: +"Default: create the release here only when .github/workflows/release.yml doesn't create one. Pass true or false to force."
    • Changedverify_install3 fields changed
      • addedInput schema / properties / command / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / command / description
        Previous value: -"Command to run in the folder (PowerShell on Windows, sh elsewhere)."New value: +"Commands to run in the folder (PowerShell on Windows, sh elsewhere). Prefer a list: each one must succeed before the next runs."
      • removedInput schema / properties / command / type
        Removed value: -"string"
    • Changedwatch_workflow1 field changed
      • addedInput schema / properties / waitSeconds / description
        Added value: +"Capped at 45 s per call so the call returns before common 60 s client timeouts; while the run is in progress, call again."
  3. 21 tool updatesv0.1.0
    • First observedadd_workflows
    • First observedbump_version
    • First observedcheck_names
    • First observedcreate_github_repo
    • First observedgit_commit
    • First observedinspect_package
    • First observedinstall_tool
    • First observedjob_status
    • First observedlogin
    • First observednotify
    • First observedopen_url
    • First observedpreflight
    • First observedpublish_package
    • First observedrun_checks
    • First observedrun_command
    • First observedscaffold_project
    • First observedscan_secrets
    • First observedsetup_trusted_publishing
    • First observedtag_and_release
    • First observedverify_install
    • First observedwatch_workflow

TDQS

B3.4/5.0

Scored across 19 tools

Disambiguation4/5

Most tools target distinct phases of the publishing workflow (preflight, scaffold, checks, publish, release, verify), and the descriptions clarify boundaries. Some overlap remains between run_checks, inspect_package, and verify_install, and run_command is a broad escape hatch that could be used for many tasks.

Naming Consistency3/5

The set is consistently snake_case, but the naming pattern is mixed: most tools are action_noun, while others are bare verbs/nouns (preflight, login, notify, job_status) or noun_verb (git_commit). The names are readable, but not predictably uniform.

Tool Count4/5

19 tools is slightly heavy for a typical MCP server but justified by the broad publish-and-release lifecycle. Each tool maps to a meaningful step, though the surface could be consolidated by merging related check/verify operations.

Completeness5/5

The surface covers the full publishing lifecycle: setup, scaffolding, validation, versioning, repo creation, CI/release workflows, publishing, trusted publishing, tagging, verification, and a safe command runner. No major dead ends are apparent for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers