CI¶
The Action¶
- uses: jestatsio/toolprint@v1
with:
config: ./.vscode/mcp.json
fail-on: high
The build fails if a scan finds anything at or above fail-on, including drift from your committed
toolprint.lock.
Inputs¶
| Input | Default | Notes |
|---|---|---|
target |
— | Config path, http(s) URL, npx:<package>, or a command |
config |
— | Path to an MCP client config |
skills |
— | A skills directory, or true for the default roots |
fail-on |
high |
info · low · medium · high · critical |
baseline |
— | Prior --json report to compare against |
fail-on-new |
false |
With baseline, gate only on new findings |
ignore-file |
— | Reviewed false positives (default toolprint.ignore.json) |
lockfile |
— | Lockfile to enforce |
sarif-file |
— | Write SARIF here for upload-sarif |
comment-on-pr |
false |
Upsert a sticky PR comment |
version |
latest |
npm dist-tag or exact version |
github-token |
github.token |
Used to post the PR comment |
Pin version to an exact release if you want fully reproducible CI.
Exit codes¶
| Code | Meaning |
|---|---|
0 |
Clean — nothing at/above fail-on, and for scan, no drift |
1 |
Operational error — couldn't connect to or parse a source |
2 |
Findings at/above fail-on (on scan, drift from the lock too) |
1 and 2 are deliberately distinct: a server that is temporarily unreachable is not the same event
as a server that turned hostile.
Authenticated servers¶
Pass the token through env so it never appears in the workflow command or the logs:
- uses: jestatsio/toolprint@v1
env:
TOOLPRINT_BEARER: ${{ secrets.MCP_TOKEN }}
with:
target: https://mcp.example.com/mcp
fail-on: high
See Authentication.
Code scanning (SARIF)¶
Surface findings as alerts in the Security tab and inline on pull requests.
permissions:
contents: read
security-events: write # required to upload SARIF
steps:
- uses: actions/checkout@v6
- uses: jestatsio/toolprint@v1
with:
config: ./.vscode/mcp.json
sarif-file: toolprint.sarif
- uses: github/codeql-action/upload-sarif@v3
if: always() # upload even when findings are present
with:
sarif_file: toolprint.sarif
Each check is a rule with a security-severity; each finding is a result, anchored to your config
(or the lockfile) with a stable fingerprint so an alert tracks across runs instead of churning.
In SARIF mode findings do not fail the job — they become code-scanning alerts. An operational
error still fails. Gate via branch protection on the code-scanning check, or keep a second plain
scan step.
Pull-request comment¶
permissions:
contents: read
pull-requests: write # required to post the comment
steps:
- uses: actions/checkout@v6
- uses: jestatsio/toolprint@v1
with:
config: ./.vscode/mcp.json
fail-on: high
comment-on-pr: true
A single sticky comment with a per-severity findings table, refreshed on every push. The job still fails on findings as usual, and a comment failure never breaks the build. On a forked PR the token is read-only, so the comment is skipped and the job stays green.
comment-on-pr has no effect when sarif-file is set — code scanning already annotates the PR.
Scanning skill bundles¶
- uses: jestatsio/toolprint@v1
with:
skills: ./.claude/skills
fail-on: high
See Skill Bundles.
Adopting on a repo that isn't clean¶
- uses: jestatsio/toolprint@v1
with:
config: ./.vscode/mcp.json
baseline: baseline.json
fail-on-new: true
See Baselines.
Without the Action¶
The CLI is the whole product; the Action is a thin wrapper.
npx toolprint@0.3.0 scan --config ./.vscode/mcp.json --fail-on high --no-color
Exit codes are the contract, so any CI system works. Use --no-color for readable logs.