publish-pilot-mcp
It automates taking a project from an empty folder to a published GitHub repo and npm/PyPI/crates.io package, while leaving sign-in, 2FA, and approval clicks to you.
Check readiness: tools, logins, git identity, package/repo name availability.
Install missing tools with winget, brew, or apt.
Start and monitor GitHub/npm/PyPI/crates.io login jobs.
Scaffold projects with source, tests, README, LICENSE, CHANGELOG, manifest, and workflows.
Add CI and trusted-publishing release workflows.
Run checks: secret scan, install, lint, typecheck, build, and tests.
Inspect publish dry runs and flag junk/secrets.
Commit safely and refuse commits containing secrets.
Create/push GitHub repos with chosen visibility.
Publish packages, skip existing versions, and enforce npm E429 cooldowns.
Set up trusted publishing via OIDC.
Tag releases, push tags, and create GitHub releases from the CHANGELOG.
Watch workflows and return failing logs.
Bump versions and update CHANGELOG entries.
Verify installs in fresh temp folders.
Send desktop notifications and open approved registry/GitHub pages.
Run shell commands while refusing destructive operations.
Enables creating and managing GitHub repositories, handling authentication, committing and pushing code, creating releases, and interacting with GitHub via the gh CLI.
Generates CI and release workflows (ci.yml, release.yml) for GitHub Actions, watches workflow runs, and supports trusted publishing with OIDC.
Supports publishing npm packages, including login, publish approval, trusted publishing setup, and version management.
Supports publishing Python packages to PyPI via twine, including login, trusted publishing setup, and version management.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@publish-pilot-mcptake this empty folder to a published GitHub repo and npm package"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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*
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-mcpOn 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-mcpClaude 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 -gThen 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
Check that your machine is ready:
npx -y publish-pilot-mcp doctor both npmThis lists the tools that are installed or missing (git, gh, node/npm) and whether you are logged in to GitHub and npm.
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
ghis not logged in yet).Sign in to npm (only if
npm whoamifails).Approve the first
npm publishon 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 |
| Checks git, gh, the registry CLI, your logins and your git identity. Starts no logins. |
| Installs a missing tool with winget (Windows), brew (macOS) or apt (Linux). |
| Checks that the package and repo names are valid and free, and picks the best free alternative (for npm, |
| Starts a browser login: |
| Polls a running login or publish job: status, output, URLs and codes. |
| Creates source, tests, README, LICENSE, CHANGELOG, .gitignore, manifest and workflows. Never overwrites files. With |
| Writes |
| Secret scan, then install, lint, typecheck, build and test (npm scripts, a Python |
| Runs the publish dry run and lists the files that would ship, flagging junk and secrets. |
| Runs |
| Runs |
| Runs |
| Connects the package to |
| Tags |
| Waits for the workflow run of the current commit (release by default) and returns the failing log if it fails. |
| Bumps the patch, minor or major version and adds a CHANGELOG entry, or turns the "Unreleased" section into the new version. |
| 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. |
| Desktop notification. With |
| 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
.envfiles, 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_commandrefuses 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 --helpTroubleshooting
doctorsays a tool is MISSING: ask Claude to runinstall_tool, or install it yourself (for examplewinget 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,EINVALor "Connection closed"): the config uses plainnpx. Use the Windows form above (cmd /c npx -y publish-pilot-mcp) and restart the client. Claude Desktop writes each server's log tomcp-server-<name>.log; on Windows look in%LOCALAPPDATA%\Claude\logsor%APPDATA%\Claude\logs.npx publish-pilot-mcpsays 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 publishfails with E429rate 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_packagerecords the failure in~/.publish-pilot/rate-limits.jsonand refuses to try again for 24 hours (unless called withforce). Wait, or ask npm to lift it at https://www.npmjs.com/support.The npm approval link expired: ask Claude to call
publish_packageagain. 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 tobump_version, commit, and tag the new version. Old tags are never moved.npm publishfrom Actions fails with 404 or 401: trusted publishing isn't set up for this repo andrelease.ymlyet. Runsetup_trusted_publishing(the package must already exist on npm).
License
Available Tools
19 toolsadd_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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | ||
| private | No | Private repo: Ubuntu-only CI to save Actions minutes | |
| release | No | registry | |
| registry | No | Omit for repo-only | |
| overwrite | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | ||
| level | No | patch | |
| notes | No | Markdown |
TDQS
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.
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.
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.
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.
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.
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_namesBRead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| registry | No | ||
| repoName | No | ||
| packageName | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | ||
| name | Yes | ||
| visibility | No | public | |
| description | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | ||
| message | Yes | Commit message. |
TDQS
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.
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.
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.
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.
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.
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_packageBRead-only
Publish dry run: files that would ship, junk/secret warnings, registry check.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| stop | No | ||
| sendEnter | No | Answer a 'Press ENTER' prompt | |
| waitSeconds | No | Max 45 s per call; call again while running |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| service | Yes | ||
| openBrowser | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| title | No | publish-pilot | |
| message | Yes |
TDQS
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.
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.
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.
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.
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.
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.
preflightARead-only
Check tools (git, gh, registry CLI), logins and git identity. Run first.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| registry | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | ||
| force | No | Ignore the E429 wait; only if the user says the block was lifted | |
| dryRun | No | ||
| openBrowser | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes |
TDQS
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.
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.
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.
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.
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.
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_commandADestructive
Run a shell command (PowerShell on Windows, sh elsewhere). Destructive ones (force-push, deleting tags/repos/releases, unpublish, rm -r) are refused.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | ||
| command | Yes | ||
| timeoutSeconds | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cli | No | Add a CLI entry point | |
| dir | Yes | ||
| name | Yes | ||
| target | No | Default both with repoUrl, else package. repo: never published to a registry | |
| license | No | MIT | |
| private | No | Private repo: Ubuntu-only CI to save Actions minutes | |
| repoUrl | No | https://github.com/owner/repo | |
| registry | Yes | ||
| workflows | No | Default follows target | |
| description | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | ||
| repo | Yes | owner/name | |
| openBrowser | No | ||
| workflowFile | No | release.yml |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | ||
| version | No | ||
| createRelease | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| command | Yes | List of commands (PowerShell on Windows, sh elsewhere) | |
| repoUrl | No | ||
| version | No | ||
| registry | No |
TDQS
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.
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.
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.
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.
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.
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_workflowCRead-only
Result of the workflow run for HEAD (default release.yml), with failed logs.
| Name | Required | Description | Default |
|---|---|---|---|
| dir | Yes | ||
| ref | No | Tag or branch | |
| workflow | No | release.yml | |
| waitSeconds | No | Max 45 s per call; call again while running |
TDQS
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.
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.
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.
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.
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.
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.
21 tool updates
v0.4.0- Changed
add_workflows5 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / dir / descriptionRemoved value: -"Project folder (absolute path, or relative to the server's working directory)." - changed
Input schema / properties / private / descriptionPrevious 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" - changed
Input schema / properties / registry / descriptionPrevious value: -"Omit for a repo-only project."New value: +"Omit for repo-only" - removed
Input schema / properties / release / descriptionRemoved value: -"registry: publish + GitHub release; github-only: just a GitHub release."
- Changed
bump_version3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / dir / descriptionRemoved value: -"Project folder (absolute path, or relative to the server's working directory)." - changed
Input schema / properties / notes / descriptionPrevious value: -"Markdown for the CHANGELOG entry, e.g. '### Fixed\\n\\n- Release workflow.'"New value: +"Markdown"
- Changed
check_names4 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / packageName / descriptionRemoved value: -"Package name to check on the registry." - removed
Input schema / properties / registry / descriptionRemoved value: -"Package registry: npm, pypi (PyPI) or crates (crates.io)." - removed
Input schema / properties / repoName / descriptionRemoved value: -"GitHub repo name to check under your account."
- Changed
create_github_repo3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / dir / descriptionRemoved value: -"Project folder (absolute path, or relative to the server's working directory)." - removed
Input schema / properties / name / descriptionRemoved value: -"Repo name (without owner)."
- Changed
git_commit2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / dir / descriptionRemoved value: -"Project folder (absolute path, or relative to the server's working directory)."
- Changed
inspect_package2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / dir / descriptionRemoved value: -"Project folder (absolute path, or relative to the server's working directory)."
- Changed
install_tool2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / name / descriptionRemoved value: -"Tool to install."
- Changed
job_status5 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / id / descriptionRemoved value: -"Job id from login, publish_package or setup_trusted_publishing." - changed
Input schema / properties / sendEnter / descriptionPrevious value: -"Send Enter to the job (for 'Press ENTER' prompts)."New value: +"Answer a 'Press ENTER' prompt" - removed
Input schema / properties / stop / descriptionRemoved value: -"Stop the job (e.g. to restart a publish whose link expired)." - changed
Input schema / properties / waitSeconds / descriptionPrevious 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"
- Changed
login3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / openBrowser / descriptionRemoved value: -"Open the login page in the default browser." - removed
Input schema / properties / service / descriptionRemoved value: -"Which account to log in to."
- Changed
notify2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - added
Input schema / properties / urlAdded value: +{ + "type": "string" +}
- Removed
open_url - Changed
preflight3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / registry / descriptionRemoved value: -"Package registry: npm, pypi (PyPI) or crates (crates.io)." - removed
Input schema / properties / target / descriptionRemoved value: -"What to publish: a GitHub repo, a registry package, or both."
- Changed
publish_package4 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / dir / descriptionRemoved value: -"Project folder (absolute path, or relative to the server's working directory)." - changed
Input schema / properties / force / descriptionPrevious 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" - removed
Input schema / properties / openBrowser / descriptionRemoved value: -"Open approval pages in the default browser."
- Changed
run_checks2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / dir / descriptionRemoved value: -"Project folder (absolute path, or relative to the server's working directory)."
- Changed
run_command1 field changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
scaffold_project11 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - changed
Input schema / properties / cli / descriptionPrevious value: -"Add a command-line entry point with --help and --version (npm, pypi)."New value: +"Add a CLI entry point" - removed
Input schema / properties / description / descriptionRemoved value: -"One-line description." - removed
Input schema / properties / dir / descriptionRemoved value: -"Project folder (absolute path, or relative to the server's working directory)." - removed
Input schema / properties / license / descriptionRemoved value: -"SPDX license id." - removed
Input schema / properties / name / descriptionRemoved value: -"Package name." - changed
Input schema / properties / private / descriptionPrevious 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" - removed
Input schema / properties / registry / descriptionRemoved value: -"Package registry: npm, pypi (PyPI) or crates (crates.io)." - removed
Input schema / properties / repoUrl / patternRemoved value: -"^https:\\/\\/github\\.com\\/[\\w.-]+\\/[\\w.-]+$" - changed
Input schema / properties / target / descriptionPrevious 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" - changed
Input schema / properties / workflows / descriptionPrevious value: -"Default with repoUrl: ci+release for target 'both', ci+repo-release for 'repo', ci for 'package'."New value: +"Default follows target"
- Removed
scan_secrets - Changed
setup_trusted_publishing3 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / dir / descriptionRemoved value: -"Project folder (absolute path, or relative to the server's working directory)." - changed
Input schema / properties / repo / descriptionPrevious value: -"owner/name of the GitHub repo."New value: +"owner/name"
- Changed
tag_and_release4 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / createRelease / descriptionRemoved value: -"Default: create the release here only when .github/workflows/release.yml doesn't create one. Pass true or false to force." - removed
Input schema / properties / dir / descriptionRemoved value: -"Project folder (absolute path, or relative to the server's working directory)." - removed
Input schema / properties / version / descriptionRemoved value: -"Must match the manifest; defaults to it."
- Changed
verify_install4 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - changed
Input schema / properties / command / descriptionPrevious 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)" - removed
Input schema / properties / registry / descriptionRemoved value: -"Package registry: npm, pypi (PyPI) or crates (crates.io)." - removed
Input schema / properties / repoUrl / descriptionRemoved value: -"https://github.com/owner/repo — clone instead of installing."
- Changed
watch_workflow5 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Input schema / properties / dir / descriptionRemoved value: -"Project folder (absolute path, or relative to the server's working directory)." - changed
Input schema / properties / ref / descriptionPrevious value: -"Only runs for this tag/branch, e.g. v0.1.1."New value: +"Tag or branch" - changed
Input schema / properties / waitSeconds / defaultPrevious value: -50New value: +45 - changed
Input schema / properties / waitSeconds / descriptionPrevious 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"
7 tool updates
v0.3.0- Changed
add_workflows1 field changed- added
Input schema / properties / privateAdded value: +{ + "default": false, + "description": "Private repo: CI runs on Ubuntu only (Windows minutes count 2x, macOS 10x).", + "type": "boolean" +}
- Changed
job_status1 field changed- changed
Input schema / properties / waitSeconds / descriptionPrevious 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."
- Changed
publish_package1 field changed- added
Input schema / properties / forceAdded value: +{ + "default": false, + "description": "Publish even within 24 hours of an E429. Only when the user confirms the block was lifted.", + "type": "boolean" +}
- Changed
scaffold_project3 fields changed- added
Input schema / properties / privateAdded value: +{ + "default": false, + "description": "The GitHub repo will be private: CI runs on Ubuntu only to save paid Actions minutes.", + "type": "boolean" +} - added
Input schema / properties / targetAdded value: +{ + "description": "What will be published. Default 'both' when repoUrl is set, otherwise 'package'.", + "enum": [ + "repo", + "package", + "both" + ], + "type": "string" +} - changed
Input schema / properties / workflows / descriptionPrevious 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'."
- Changed
tag_and_release2 fields changed- removed
Input schema / properties / createRelease / defaultRemoved value: -false - changed
Input schema / properties / createRelease / descriptionPrevious 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."
- Changed
verify_install3 fields changed- added
Input schema / properties / command / anyOfAdded value: +[ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array" + } +] - changed
Input schema / properties / command / descriptionPrevious 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." - removed
Input schema / properties / command / typeRemoved value: -"string"
- Changed
watch_workflow1 field changed- added
Input schema / properties / waitSeconds / descriptionAdded 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."
21 tool updates
v0.1.0- First observed
add_workflows - First observed
bump_version - First observed
check_names - First observed
create_github_repo - First observed
git_commit - First observed
inspect_package - First observed
install_tool - First observed
job_status - First observed
login - First observed
notify - First observed
open_url - First observed
preflight - First observed
publish_package - First observed
run_checks - First observed
run_command - First observed
scaffold_project - First observed
scan_secrets - First observed
setup_trusted_publishing - First observed
tag_and_release - First observed
verify_install - First observed
watch_workflow
TDQS
Scored across 19 tools
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.
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.
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.
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
Related MCP Connectors
Launch your clients' products on up to 100 directories each from Claude, ChatGPT, Cursor or VS Code.
Publish and schedule videos to TikTok, YouTube Shorts, Instagram, Facebook, LinkedIn, Pinterest, Bluesky, Threads and X from Claude, Cursor or any MCP client. Upload once, post everywhere, track views in unified analytics, and retry failed posts. Official platform APIs only, free plan available. Docs: https://docs.multi-upload-tool.com/mcp
Source-checked CLI guides and model-aware planning for Claude Code, Codex, and Grok Build.
Work on your own computers from Claude or ChatGPT: run commands, edit and search files.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables GitHub project management from Claude, supporting issue creation, milestones, labels, changelog generation, and repository stats.85 npm1MIT
- FlicenseNot gradedqualityDmaintenanceEnables to interact with GitHub repositories directly from Claude, supporting actions like viewing repos, checking status, committing and pushing changes, and managing pull requests.-
- AlicenseAqualityDmaintenanceEnables Claude to access and manage GitHub repositories dynamically at runtime, including private repos, with tools for browsing files, searching code, and viewing commits, pull requests, and issues.111ISC
- AlicenseAqualityDmaintenanceEnables Claude to create, manage, and clean up git worktrees automatically, including dependency installation and GitHub PR creation.5MIT