agent-mcp-guard 0.4.6 → 0.4.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/docs/audit.md +3 -2
- package/docs/baseline.md +2 -2
- package/docs/business-playbook.md +1 -1
- package/docs/github-action.md +6 -6
- package/docs/launch-checklist.md +1 -1
- package/docs/marketplace-action-readme.md +5 -5
- package/docs/marketplace.md +6 -6
- package/docs/paid-audit.md +1 -1
- package/docs/roadmap.md +1 -1
- package/docs/trusted-publishing.md +2 -2
- package/package.json +1 -1
- package/site/e2e/audit/mcp-guard-audit-manifest.json +49 -2
- package/site/e2e/audit/mcp-guard-executive-summary.md +1 -1
- package/site/e2e/audit/mcp-guard-remediation-checklist.md +1 -1
- package/site/e2e/audit/mcp-guard-remediation.md +1 -1
- package/site/e2e/audit/mcp-guard-report.html +1 -1
- package/site/e2e/audit/mcp-guard-report.json +2 -2
- package/site/e2e/audit/mcp-guard-report.md +1 -1
- package/site/e2e/audit/mcp-guard.sarif +1 -1
- package/site/e2e/report.html +1 -1
- package/site/e2e/report.json +2 -2
- package/site/e2e/report.md +1 -1
- package/site/e2e/report.sarif +1 -1
- package/src/audit.js +30 -8
- package/src/cli.js +1 -1
package/README.md
CHANGED
|
@@ -19,7 +19,7 @@ Live demo PR: [mcp-guard-demo#1](https://github.com/ChaoYue0307/mcp-guard-demo/p
|
|
|
19
19
|
<a href="https://github.com/marketplace/actions/mcp-guard-mcp-security-scanner"><img alt="GitHub Marketplace" src="https://img.shields.io/badge/Marketplace-mcp--guard-0f766e?logo=github"></a>
|
|
20
20
|
<a href="https://github.com/ChaoYue0307/mcp-guard/actions"><img alt="CI" src="https://github.com/ChaoYue0307/mcp-guard/actions/workflows/ci.yml/badge.svg"></a>
|
|
21
21
|
<a href="LICENSE"><img alt="License" src="https://img.shields.io/badge/license-Apache--2.0-111827"></a>
|
|
22
|
-
<a href="https://github.com/ChaoYue0307/mcp-guard/releases/tag/v0.4.
|
|
22
|
+
<a href="https://github.com/ChaoYue0307/mcp-guard/releases/tag/v0.4.7"><img alt="Release" src="https://img.shields.io/github/v/release/ChaoYue0307/mcp-guard?color=7c2d12"></a>
|
|
23
23
|
</p>
|
|
24
24
|
|
|
25
25
|
## Install
|
|
@@ -93,7 +93,7 @@ mcp-guard scan --config .mcp.json --baseline .mcp-guard-baseline.json --fail-on
|
|
|
93
93
|
Use the GitHub Action:
|
|
94
94
|
|
|
95
95
|
```yaml
|
|
96
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
96
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
97
97
|
with:
|
|
98
98
|
config: .mcp.json
|
|
99
99
|
# policy: .mcp-guard-policy.json
|
|
@@ -152,7 +152,7 @@ For paid setup or internal review handoff, `mcp-guard audit` writes a complete e
|
|
|
152
152
|
- remediation plan grouped by MCP server;
|
|
153
153
|
- remediation checklist for PR or handoff tracking;
|
|
154
154
|
- Markdown, HTML, JSON, and SARIF reports;
|
|
155
|
-
- machine-readable audit manifest.
|
|
155
|
+
- machine-readable audit manifest with artifact hashes.
|
|
156
156
|
|
|
157
157
|
For stricter governance, commit `.mcp-guard-policy.json` and define the commands, remote packages, filesystem roots, and remote MCP endpoints the team has approved. See [Policy files](docs/policy.md).
|
|
158
158
|
|
package/docs/audit.md
CHANGED
|
@@ -37,7 +37,7 @@ mcp-guard audit --config .mcp.json --fail-on high
|
|
|
37
37
|
| `mcp-guard-report.html` | Readable HTML report for review artifacts. |
|
|
38
38
|
| `mcp-guard-report.json` | Redacted machine-readable report for automation. |
|
|
39
39
|
| `mcp-guard.sarif` | SARIF 2.1.0 report for GitHub code scanning. |
|
|
40
|
-
| `mcp-guard-audit-manifest.json` | Manifest listing status, summary, policy/baseline context, and
|
|
40
|
+
| `mcp-guard-audit-manifest.json` | Manifest listing status, summary, policy/baseline context, file paths, SHA-256 hashes, and artifact sizes. |
|
|
41
41
|
|
|
42
42
|
## Review Flow
|
|
43
43
|
|
|
@@ -46,7 +46,8 @@ mcp-guard audit --config .mcp.json --fail-on high
|
|
|
46
46
|
3. Work through `mcp-guard-remediation.md` with the engineering team.
|
|
47
47
|
4. Track concrete work in `mcp-guard-remediation-checklist.md`.
|
|
48
48
|
5. Use `mcp-guard-report.html` for readable evidence and `mcp-guard-report.json` or `mcp-guard.sarif` for automation.
|
|
49
|
-
6.
|
|
49
|
+
6. Use the `integrity.artifacts` section in `mcp-guard-audit-manifest.json` when you need to prove an audit artifact has not changed.
|
|
50
|
+
7. Commit a reviewed policy and baseline only after the team has decided what risk is intentionally accepted.
|
|
50
51
|
|
|
51
52
|
## Privacy
|
|
52
53
|
|
package/docs/baseline.md
CHANGED
|
@@ -30,7 +30,7 @@ If the scan finds only baseline-accepted findings, the exit code is `0`. If a ne
|
|
|
30
30
|
## GitHub Action
|
|
31
31
|
|
|
32
32
|
```yaml
|
|
33
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
33
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
34
34
|
with:
|
|
35
35
|
config: .mcp.json
|
|
36
36
|
baseline: .mcp-guard-baseline.json
|
|
@@ -45,7 +45,7 @@ The generated Markdown, HTML, JSON, and PR comment separate active findings from
|
|
|
45
45
|
{
|
|
46
46
|
"version": 1,
|
|
47
47
|
"generatedAt": "2026-05-10T00:00:00.000Z",
|
|
48
|
-
"toolVersion": "0.4.
|
|
48
|
+
"toolVersion": "0.4.7",
|
|
49
49
|
"findings": [
|
|
50
50
|
{
|
|
51
51
|
"fingerprint": "mcpg_a009b2c2",
|
|
@@ -17,7 +17,7 @@ Deliverables:
|
|
|
17
17
|
- install the CLI and GitHub Action;
|
|
18
18
|
- run `mcp-guard init` or generate an equivalent workflow manually;
|
|
19
19
|
- generate Markdown, HTML, JSON, and SARIF reports;
|
|
20
|
-
- generate a customer handoff audit pack with executive summary, remediation plan, remediation checklist, reports, and manifest;
|
|
20
|
+
- generate a customer handoff audit pack with executive summary, remediation plan, remediation checklist, reports, and hashed manifest;
|
|
21
21
|
- define an initial `.mcp-guard-policy.json` for approved commands, packages, directories, and remote URLs;
|
|
22
22
|
- create an initial baseline for accepted known findings;
|
|
23
23
|
- enable PR comments and optional SARIF upload;
|
package/docs/github-action.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Use the `mcp-guard` action to scan MCP and AI agent tool configuration in pull requests and CI.
|
|
4
4
|
|
|
5
|
-
The action runs the CLI from the pinned GitHub Action tag, generates an audit pack with Markdown, HTML, JSON, SARIF, remediation, checklist, and manifest files, writes a job summary, uploads reports as an artifact, and fails the job when findings meet your selected severity threshold.
|
|
5
|
+
The action runs the CLI from the pinned GitHub Action tag, generates an audit pack with Markdown, HTML, JSON, SARIF, remediation, checklist, and hashed manifest files, writes a job summary, uploads reports as an artifact, and fails the job when findings meet your selected severity threshold.
|
|
6
6
|
|
|
7
7
|
It can also use a committed baseline to accept known findings, enforce a committed policy file, and optionally post a pull request comment with only the active findings.
|
|
8
8
|
|
|
@@ -37,7 +37,7 @@ jobs:
|
|
|
37
37
|
runs-on: ubuntu-latest
|
|
38
38
|
steps:
|
|
39
39
|
- uses: actions/checkout@v6
|
|
40
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
40
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
41
41
|
with:
|
|
42
42
|
config: .mcp.json
|
|
43
43
|
fail-on: high
|
|
@@ -65,7 +65,7 @@ jobs:
|
|
|
65
65
|
runs-on: ubuntu-latest
|
|
66
66
|
steps:
|
|
67
67
|
- uses: actions/checkout@v6
|
|
68
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
68
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
69
69
|
with:
|
|
70
70
|
config: .mcp.json
|
|
71
71
|
fail-on: high
|
|
@@ -77,7 +77,7 @@ jobs:
|
|
|
77
77
|
Use `fail-on: none` when you want artifacts and summaries without blocking a pull request.
|
|
78
78
|
|
|
79
79
|
```yaml
|
|
80
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
80
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
81
81
|
with:
|
|
82
82
|
fail-on: none
|
|
83
83
|
```
|
|
@@ -93,7 +93,7 @@ mcp-guard scan --config .mcp.json --write-baseline .mcp-guard-baseline.json
|
|
|
93
93
|
Commit `.mcp-guard-baseline.json`, then reference it from the action:
|
|
94
94
|
|
|
95
95
|
```yaml
|
|
96
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
96
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
97
97
|
with:
|
|
98
98
|
config: .mcp.json
|
|
99
99
|
baseline: .mcp-guard-baseline.json
|
|
@@ -107,7 +107,7 @@ Reports will show active findings separately from findings accepted by the basel
|
|
|
107
107
|
Use a policy when you want CI to enforce approved commands, packages, directories, and remote URLs.
|
|
108
108
|
|
|
109
109
|
```yaml
|
|
110
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
110
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
111
111
|
with:
|
|
112
112
|
config: .mcp.json
|
|
113
113
|
policy: .mcp-guard-policy.json
|
package/docs/launch-checklist.md
CHANGED
|
@@ -37,7 +37,7 @@ mcp-guard audit --config .mcp.json --policy .mcp-guard-policy.json --output-dir
|
|
|
37
37
|
## GitHub Action Setup
|
|
38
38
|
|
|
39
39
|
```yaml
|
|
40
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
40
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
41
41
|
with:
|
|
42
42
|
config: .mcp.json
|
|
43
43
|
baseline: .mcp-guard-baseline.json
|
|
@@ -23,7 +23,7 @@ jobs:
|
|
|
23
23
|
runs-on: ubuntu-latest
|
|
24
24
|
steps:
|
|
25
25
|
- uses: actions/checkout@v6
|
|
26
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
26
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
27
27
|
with:
|
|
28
28
|
config: .mcp.json
|
|
29
29
|
fail-on: high
|
|
@@ -42,7 +42,7 @@ jobs:
|
|
|
42
42
|
runs-on: ubuntu-latest
|
|
43
43
|
steps:
|
|
44
44
|
- uses: actions/checkout@v6
|
|
45
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
45
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
46
46
|
with:
|
|
47
47
|
config: .mcp.json
|
|
48
48
|
fail-on: high
|
|
@@ -88,7 +88,7 @@ The action generates an audit pack:
|
|
|
88
88
|
- SARIF 2.1.0 for GitHub code scanning.
|
|
89
89
|
- Remediation Markdown for server-by-server handoff.
|
|
90
90
|
- Remediation checklist for PR and setup tracking.
|
|
91
|
-
- Audit manifest JSON for downstream automation.
|
|
91
|
+
- Audit manifest JSON with SHA-256 hashes and byte sizes for downstream automation.
|
|
92
92
|
|
|
93
93
|
Secret-like values are redacted before reports are written.
|
|
94
94
|
|
|
@@ -103,7 +103,7 @@ mcp-guard scan --config .mcp.json --write-baseline .mcp-guard-baseline.json
|
|
|
103
103
|
Then enforce only new findings:
|
|
104
104
|
|
|
105
105
|
```yaml
|
|
106
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
106
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
107
107
|
with:
|
|
108
108
|
config: .mcp.json
|
|
109
109
|
baseline: .mcp-guard-baseline.json
|
|
@@ -115,7 +115,7 @@ Then enforce only new findings:
|
|
|
115
115
|
Commit `.mcp-guard-policy.json` or pass `policy` to enforce approved commands, remote packages, directories, and remote MCP URLs.
|
|
116
116
|
|
|
117
117
|
```yaml
|
|
118
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
118
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
119
119
|
with:
|
|
120
120
|
config: .mcp.json
|
|
121
121
|
policy: .mcp-guard-policy.json
|
package/docs/marketplace.md
CHANGED
|
@@ -82,17 +82,17 @@ Code quality
|
|
|
82
82
|
Current release title:
|
|
83
83
|
|
|
84
84
|
```text
|
|
85
|
-
v0.4.
|
|
85
|
+
v0.4.7
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
Release notes:
|
|
89
89
|
|
|
90
90
|
```text
|
|
91
|
-
|
|
91
|
+
Audit integrity release.
|
|
92
92
|
|
|
93
|
-
- Adds
|
|
94
|
-
- PR comments
|
|
95
|
-
-
|
|
93
|
+
- Adds SHA-256 checksums and byte sizes for generated audit artifacts in `mcp-guard-audit-manifest.json`.
|
|
94
|
+
- Keeps remediation checklist, first remediation steps in PR comments, executive summary, remediation plan, Markdown, HTML, JSON, SARIF, policy, baseline, artifacts, and SARIF upload support.
|
|
95
|
+
- Improves paid setup and internal review handoff by making generated evidence easier to verify after delivery.
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
## Manual Publishing Steps
|
|
@@ -105,7 +105,7 @@ Completed:
|
|
|
105
105
|
- README, docs, and website examples now use:
|
|
106
106
|
|
|
107
107
|
```yaml
|
|
108
|
-
- uses: ChaoYue0307/mcp-guard-action@v0.4.
|
|
108
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.4.7
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
Remaining Marketplace web step:
|
package/docs/paid-audit.md
CHANGED
|
@@ -13,7 +13,7 @@ It is not currently advertised as an active consulting service. Keep public webs
|
|
|
13
13
|
## Deliverables
|
|
14
14
|
|
|
15
15
|
- MCP and agent tool inventory.
|
|
16
|
-
- `mcp-guard audit` evidence pack with executive summary, remediation plan, remediation checklist, reports, and manifest.
|
|
16
|
+
- `mcp-guard audit` evidence pack with executive summary, remediation plan, remediation checklist, reports, and hashed manifest.
|
|
17
17
|
- Risk report covering shell access, package execution, filesystem scope, secrets, remote servers, and dangerous commands.
|
|
18
18
|
- Practical remediation checklist.
|
|
19
19
|
- Optional PR with safer config and policy changes.
|
package/docs/roadmap.md
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
- Optional GitHub pull request comments from the Marketplace Action.
|
|
14
14
|
- `mcp-guard init` for bootstrapping a GitHub Action workflow and optional baseline.
|
|
15
15
|
- Policy file enforcement for approved commands, packages, directories, and remote URLs.
|
|
16
|
-
- `mcp-guard audit` for review-ready executive summaries, remediation plans, remediation checklists, reports, and manifests.
|
|
16
|
+
- `mcp-guard audit` for review-ready executive summaries, remediation plans, remediation checklists, reports, and hashed manifests.
|
|
17
17
|
- npm Trusted Publishing workflow prepared for tokenless release publishing.
|
|
18
18
|
|
|
19
19
|
## Next
|
|
@@ -36,7 +36,7 @@ Configure this once on npmjs.com:
|
|
|
36
36
|
After this is saved, run the workflow from GitHub Actions with the release tag, for example:
|
|
37
37
|
|
|
38
38
|
```text
|
|
39
|
-
v0.4.
|
|
39
|
+
v0.4.7
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
## Release Flow After Setup
|
|
@@ -44,7 +44,7 @@ v0.4.6
|
|
|
44
44
|
1. Update `package.json` and `src/cli.js`.
|
|
45
45
|
2. Run `npm test` and `npm run release:check`.
|
|
46
46
|
3. Commit and push to `main`.
|
|
47
|
-
4. Create a GitHub release tag such as `v0.4.
|
|
47
|
+
4. Create a GitHub release tag such as `v0.4.7`.
|
|
48
48
|
5. Run the `Publish npm` workflow with the same tag.
|
|
49
49
|
6. Verify npm:
|
|
50
50
|
|
package/package.json
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 1,
|
|
3
3
|
"tool": {
|
|
4
4
|
"name": "mcp-guard",
|
|
5
|
-
"version": "0.4.
|
|
5
|
+
"version": "0.4.7"
|
|
6
6
|
},
|
|
7
|
-
"generatedAt": "2026-05-
|
|
7
|
+
"generatedAt": "2026-05-10T20:08:00.622Z",
|
|
8
8
|
"status": "needs_review",
|
|
9
9
|
"failOn": "none",
|
|
10
10
|
"outputDir": "site/e2e/audit",
|
|
@@ -36,5 +36,52 @@
|
|
|
36
36
|
"jsonReport": "site/e2e/audit/mcp-guard-report.json",
|
|
37
37
|
"sarifReport": "site/e2e/audit/mcp-guard.sarif",
|
|
38
38
|
"manifest": "site/e2e/audit/mcp-guard-audit-manifest.json"
|
|
39
|
+
},
|
|
40
|
+
"integrity": {
|
|
41
|
+
"algorithm": "sha256",
|
|
42
|
+
"artifacts": [
|
|
43
|
+
{
|
|
44
|
+
"key": "executiveSummary",
|
|
45
|
+
"path": "site/e2e/audit/mcp-guard-executive-summary.md",
|
|
46
|
+
"bytes": 1764,
|
|
47
|
+
"sha256": "d4679b3353a25ed4f88479ae2594fa6a7e2b1b61a9455b56a61e10a70131c87e"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"key": "remediation",
|
|
51
|
+
"path": "site/e2e/audit/mcp-guard-remediation.md",
|
|
52
|
+
"bytes": 2752,
|
|
53
|
+
"sha256": "1a7a83531f9fea7f0dc8a074a378151f1f7e10a713abc93136e0200bb1dbd35a"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"key": "remediationChecklist",
|
|
57
|
+
"path": "site/e2e/audit/mcp-guard-remediation-checklist.md",
|
|
58
|
+
"bytes": 2056,
|
|
59
|
+
"sha256": "d75a40e9c2f243cf9193e50d6d9fa8c56e2d50950deb2f1cc843e230c002e548"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"key": "markdownReport",
|
|
63
|
+
"path": "site/e2e/audit/mcp-guard-report.md",
|
|
64
|
+
"bytes": 3297,
|
|
65
|
+
"sha256": "11a09f58c19ebb836ff4da6f75d050b508fc989dd41ea1c31a02dbafc3367317"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"key": "htmlReport",
|
|
69
|
+
"path": "site/e2e/audit/mcp-guard-report.html",
|
|
70
|
+
"bytes": 12988,
|
|
71
|
+
"sha256": "3f597e3e1423159f2665b5f5c3b754c2eda4df5645cc2707fa872ddb3c9b7a3c"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"key": "jsonReport",
|
|
75
|
+
"path": "site/e2e/audit/mcp-guard-report.json",
|
|
76
|
+
"bytes": 5938,
|
|
77
|
+
"sha256": "a7b2f086928c1d697c4402b37e84b055a7e12ed2bef55654a19733a80d082947"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"key": "sarifReport",
|
|
81
|
+
"path": "site/e2e/audit/mcp-guard.sarif",
|
|
82
|
+
"bytes": 20856,
|
|
83
|
+
"sha256": "994c3bd89e616a76c53cd3797f6323001cc11dcb1afd96ddaeeb9d53c6432ee8"
|
|
84
|
+
}
|
|
85
|
+
]
|
|
39
86
|
}
|
|
40
87
|
}
|
|
@@ -297,7 +297,7 @@
|
|
|
297
297
|
<div class="metric"><strong>1</strong><span>Scanned files</span></div>
|
|
298
298
|
<div class="metric"><strong>3</strong><span>MCP servers</span></div>
|
|
299
299
|
<div class="metric"><strong>9</strong><span>Active findings</span></div>
|
|
300
|
-
<div class="metric"><strong>2026-05-10
|
|
300
|
+
<div class="metric"><strong>2026-05-10 20:08 UTC</strong><span>Generated</span></div>
|
|
301
301
|
</div>
|
|
302
302
|
</div>
|
|
303
303
|
<aside class="scorecard" aria-label="Risk score">
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"metadata": {
|
|
3
|
-
"generatedAt": "2026-05-
|
|
3
|
+
"generatedAt": "2026-05-10T20:08:00.622Z",
|
|
4
4
|
"cwd": ".",
|
|
5
5
|
"home": "~",
|
|
6
6
|
"policyPath": "",
|
|
7
7
|
"policyEnabled": false,
|
|
8
|
-
"toolVersion": "0.4.
|
|
8
|
+
"toolVersion": "0.4.7"
|
|
9
9
|
},
|
|
10
10
|
"policy": null,
|
|
11
11
|
"scannedFiles": [
|
package/site/e2e/report.html
CHANGED
|
@@ -297,7 +297,7 @@
|
|
|
297
297
|
<div class="metric"><strong>1</strong><span>Scanned files</span></div>
|
|
298
298
|
<div class="metric"><strong>3</strong><span>MCP servers</span></div>
|
|
299
299
|
<div class="metric"><strong>9</strong><span>Active findings</span></div>
|
|
300
|
-
<div class="metric"><strong>2026-05-10
|
|
300
|
+
<div class="metric"><strong>2026-05-10 20:07 UTC</strong><span>Generated</span></div>
|
|
301
301
|
</div>
|
|
302
302
|
</div>
|
|
303
303
|
<aside class="scorecard" aria-label="Risk score">
|
package/site/e2e/report.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"metadata": {
|
|
3
|
-
"generatedAt": "2026-05-
|
|
3
|
+
"generatedAt": "2026-05-10T20:07:57.237Z",
|
|
4
4
|
"cwd": ".",
|
|
5
5
|
"home": "~",
|
|
6
6
|
"policyPath": "",
|
|
7
7
|
"policyEnabled": false,
|
|
8
|
-
"toolVersion": "0.4.
|
|
8
|
+
"toolVersion": "0.4.7"
|
|
9
9
|
},
|
|
10
10
|
"policy": null,
|
|
11
11
|
"scannedFiles": [
|
package/site/e2e/report.md
CHANGED
package/site/e2e/report.sarif
CHANGED
package/src/audit.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import fs from "node:fs/promises";
|
|
2
|
+
import crypto from "node:crypto";
|
|
2
3
|
import path from "node:path";
|
|
3
4
|
import { applyBaseline, loadBaselineFile } from "./baseline.js";
|
|
4
5
|
import { displayPath } from "./fingerprint.js";
|
|
@@ -44,12 +45,6 @@ export async function writeAuditPack({
|
|
|
44
45
|
|
|
45
46
|
await fs.mkdir(resolvedOutputDir, { recursive: true });
|
|
46
47
|
|
|
47
|
-
const manifest = buildAuditManifest(result, files, {
|
|
48
|
-
cwd,
|
|
49
|
-
outputDir: resolvedOutputDir,
|
|
50
|
-
failOn
|
|
51
|
-
});
|
|
52
|
-
|
|
53
48
|
await Promise.all([
|
|
54
49
|
fs.writeFile(files.executiveSummary, generateExecutiveSummary(result, { failOn }), "utf8"),
|
|
55
50
|
fs.writeFile(files.remediation, generateRemediationPlan(result), "utf8"),
|
|
@@ -59,6 +54,14 @@ export async function writeAuditPack({
|
|
|
59
54
|
fs.writeFile(files.jsonReport, `${generateJsonReport(result)}\n`, "utf8"),
|
|
60
55
|
fs.writeFile(files.sarifReport, `${generateSarifReport(result)}\n`, "utf8")
|
|
61
56
|
]);
|
|
57
|
+
|
|
58
|
+
const artifacts = await auditArtifacts(files, cwd);
|
|
59
|
+
const manifest = buildAuditManifest(result, files, {
|
|
60
|
+
cwd,
|
|
61
|
+
outputDir: resolvedOutputDir,
|
|
62
|
+
failOn,
|
|
63
|
+
artifacts
|
|
64
|
+
});
|
|
62
65
|
await fs.writeFile(files.manifest, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
|
|
63
66
|
|
|
64
67
|
return {
|
|
@@ -246,7 +249,7 @@ function generateRemediationChecklist(result) {
|
|
|
246
249
|
return `${lines.join("\n")}\n`;
|
|
247
250
|
}
|
|
248
251
|
|
|
249
|
-
function buildAuditManifest(result, files, { cwd, outputDir, failOn }) {
|
|
252
|
+
function buildAuditManifest(result, files, { cwd, outputDir, failOn, artifacts }) {
|
|
250
253
|
return {
|
|
251
254
|
version: 1,
|
|
252
255
|
tool: {
|
|
@@ -268,10 +271,29 @@ function buildAuditManifest(result, files, { cwd, outputDir, failOn }) {
|
|
|
268
271
|
baseline: result.baseline || { enabled: false },
|
|
269
272
|
files: Object.fromEntries(
|
|
270
273
|
Object.entries(files).map(([key, filePath]) => [key, displayPath(filePath, cwd)])
|
|
271
|
-
)
|
|
274
|
+
),
|
|
275
|
+
integrity: {
|
|
276
|
+
algorithm: "sha256",
|
|
277
|
+
artifacts
|
|
278
|
+
}
|
|
272
279
|
};
|
|
273
280
|
}
|
|
274
281
|
|
|
282
|
+
async function auditArtifacts(files, cwd) {
|
|
283
|
+
const artifacts = [];
|
|
284
|
+
for (const [key, filePath] of Object.entries(files)) {
|
|
285
|
+
if (key === "manifest") continue;
|
|
286
|
+
const content = await fs.readFile(filePath);
|
|
287
|
+
artifacts.push({
|
|
288
|
+
key,
|
|
289
|
+
path: displayPath(filePath, cwd),
|
|
290
|
+
bytes: content.byteLength,
|
|
291
|
+
sha256: crypto.createHash("sha256").update(content).digest("hex")
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
return artifacts;
|
|
295
|
+
}
|
|
296
|
+
|
|
275
297
|
function decisionGuidance(result) {
|
|
276
298
|
if (result.findings.length === 0) {
|
|
277
299
|
return ["No active findings were detected. Continue reviewing new MCP servers before adding them."];
|
package/src/cli.js
CHANGED
|
@@ -7,7 +7,7 @@ import { scan } from "./scan.js";
|
|
|
7
7
|
import { generateHtmlReport, generateJsonReport, generateMarkdownReport, generateSarifReport, generateTextReport } from "./report.js";
|
|
8
8
|
import { compareSeverity, severityRank } from "./severity.js";
|
|
9
9
|
|
|
10
|
-
const VERSION = "0.4.
|
|
10
|
+
const VERSION = "0.4.7";
|
|
11
11
|
|
|
12
12
|
export async function runCli(argv, io) {
|
|
13
13
|
const args = argv.slice(2);
|