agent-mcp-guard 0.3.0 → 0.3.1
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 +18 -9
- package/action.yml +1 -1
- package/docs/business-playbook.md +5 -3
- package/docs/examples/e2e-example.md +60 -0
- package/docs/github-action.md +5 -3
- package/docs/launch-checklist.md +11 -1
- package/docs/marketplace-action-readme.md +91 -0
- package/docs/marketplace.md +119 -0
- package/docs/operator-runbook.md +1 -1
- package/docs/paid-audit.md +6 -4
- package/docs/roadmap.md +1 -1
- package/package.json +4 -1
- package/scripts/prepare-marketplace-action.js +72 -0
- package/site/e2e/claude_desktop_config.json +28 -0
- package/site/e2e/index.html +106 -0
- package/site/e2e/report.html +440 -0
- package/site/e2e/report.json +148 -0
- package/site/e2e/report.md +47 -0
- package/site/e2e/report.sarif +570 -0
- package/src/cli.js +1 -1
- package/src/report.js +12 -4
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Website: [chaoyue0307.github.io/mcp-guard](https://chaoyue0307.github.io/mcp-gua
|
|
|
14
14
|
<a href="https://www.npmjs.com/package/agent-mcp-guard"><img alt="npm version" src="https://img.shields.io/npm/v/agent-mcp-guard?color=0f766e"></a>
|
|
15
15
|
<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>
|
|
16
16
|
<a href="LICENSE"><img alt="License" src="https://img.shields.io/badge/license-Apache--2.0-111827"></a>
|
|
17
|
-
<a href="https://github.com/ChaoYue0307/mcp-guard/releases/tag/v0.3.
|
|
17
|
+
<a href="https://github.com/ChaoYue0307/mcp-guard/releases/tag/v0.3.1"><img alt="Release" src="https://img.shields.io/github/v/release/ChaoYue0307/mcp-guard?color=7c2d12"></a>
|
|
18
18
|
</p>
|
|
19
19
|
|
|
20
20
|
## Install
|
|
@@ -57,12 +57,24 @@ mcp-guard scan --config .mcp.json --fail-on high
|
|
|
57
57
|
Use the GitHub Action:
|
|
58
58
|
|
|
59
59
|
```yaml
|
|
60
|
-
- uses: ChaoYue0307/mcp-guard@v0.3.
|
|
60
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.3.1
|
|
61
61
|
with:
|
|
62
62
|
fail-on: high
|
|
63
63
|
upload-sarif: "true"
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
+
## End-to-End Example
|
|
67
|
+
|
|
68
|
+
Use the transparent example to evaluate what the scanner actually does:
|
|
69
|
+
|
|
70
|
+
- input config: [site/e2e/claude_desktop_config.json](site/e2e/claude_desktop_config.json)
|
|
71
|
+
- generated Markdown report: [site/e2e/report.md](site/e2e/report.md)
|
|
72
|
+
- generated HTML report: [site/e2e/report.html](site/e2e/report.html)
|
|
73
|
+
- generated JSON report: [site/e2e/report.json](site/e2e/report.json)
|
|
74
|
+
- generated SARIF report: [site/e2e/report.sarif](site/e2e/report.sarif)
|
|
75
|
+
|
|
76
|
+
The example scans 3 MCP servers and reports 9 findings with a risk score of 98. It is synthetic, but fully reproducible from committed files.
|
|
77
|
+
|
|
66
78
|
## What It Finds
|
|
67
79
|
|
|
68
80
|
| Risk | Why it matters |
|
|
@@ -121,24 +133,21 @@ MCP configs often contain sensitive local paths, internal hostnames, tokens, and
|
|
|
121
133
|
- secret-like values redacted in reports;
|
|
122
134
|
- text, Markdown, HTML, JSON, and SARIF output for local review, CI artifacts, and GitHub code scanning.
|
|
123
135
|
|
|
124
|
-
##
|
|
136
|
+
## Early Access and Feedback
|
|
125
137
|
|
|
126
|
-
|
|
138
|
+
Want to try `mcp-guard` on a real AI agent or MCP setup?
|
|
127
139
|
|
|
128
|
-
|
|
140
|
+
The project is currently an automated local scanner. I am collecting early users, real-world config examples, CI setup feedback, and rule requests to improve coverage.
|
|
129
141
|
|
|
130
142
|
Contact: [hechaoyue0307@gmail.com](mailto:hechaoyue0307@gmail.com)
|
|
131
143
|
|
|
132
|
-
Service details: [docs/paid-audit.md](docs/paid-audit.md)
|
|
133
|
-
|
|
134
144
|
## Documentation
|
|
135
145
|
|
|
136
146
|
- [Rule reference](docs/rules.md)
|
|
137
147
|
- [GitHub Action](docs/github-action.md)
|
|
148
|
+
- [Marketplace publishing plan](docs/marketplace.md)
|
|
138
149
|
- [Privacy and security](docs/privacy-and-security.md)
|
|
139
150
|
- [Roadmap](docs/roadmap.md)
|
|
140
|
-
- [Business playbook](docs/business-playbook.md)
|
|
141
|
-
- [Launch checklist](docs/launch-checklist.md)
|
|
142
151
|
- [Operator runbook](docs/operator-runbook.md)
|
|
143
152
|
|
|
144
153
|
## Exit Codes
|
package/action.yml
CHANGED
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
`mcp-guard` is the local-first security scanner for teams adopting AI agents and MCP servers.
|
|
6
6
|
|
|
7
|
-
The business is not the open-source CLI alone. The CLI creates trust and distribution.
|
|
7
|
+
The business is not the open-source CLI alone. The CLI creates trust and distribution. Near-term validation comes from early users running the scanner on real setups. Revenue can later come from private audits, remediation, and team workflows once those services are actually offered.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Future Paid Offer
|
|
10
10
|
|
|
11
11
|
AI Agent/MCP Security Audit.
|
|
12
12
|
|
|
13
|
+
Do not advertise this as active until there is a clear delivery process, pricing, and availability.
|
|
14
|
+
|
|
13
15
|
Deliverables:
|
|
14
16
|
|
|
15
17
|
- MCP server inventory;
|
|
@@ -35,7 +37,7 @@ I built mcp-guard, an open-source local scanner for MCP and AI agent tool config
|
|
|
35
37
|
|
|
36
38
|
It checks for risky shell access, unpinned npx packages, broad filesystem permissions, exposed secrets, and remote MCP servers.
|
|
37
39
|
|
|
38
|
-
I am
|
|
40
|
+
I am collecting real-world MCP and AI agent config patterns from teams using Claude, Cursor, Codex, or MCP in production-like workflows. If you can share a redacted config or run the CLI locally, your feedback can help improve the scanner's rules and reports.
|
|
39
41
|
```
|
|
40
42
|
|
|
41
43
|
## First 20 Targets
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# End-to-End Example
|
|
2
|
+
|
|
3
|
+
This example is designed for transparent product evaluation. It uses a synthetic MCP config committed to the repository, then runs the real `mcp-guard` CLI to generate Markdown, HTML, JSON, and SARIF outputs.
|
|
4
|
+
|
|
5
|
+
The input is intentionally unsafe so users can see whether the scanner catches concrete risks.
|
|
6
|
+
|
|
7
|
+
## Input
|
|
8
|
+
|
|
9
|
+
Config file:
|
|
10
|
+
|
|
11
|
+
- [`site/e2e/claude_desktop_config.json`](../../site/e2e/claude_desktop_config.json)
|
|
12
|
+
|
|
13
|
+
It contains three MCP server entries:
|
|
14
|
+
|
|
15
|
+
- `filesystem-all-home`: launches an unpinned remote package with broad filesystem access and a secret-like environment variable.
|
|
16
|
+
- `shell-installer`: runs `bash -c` with a curl-pipe-shell installer pattern.
|
|
17
|
+
- `remote-prod`: points at a remote MCP endpoint with a secret-like authorization header.
|
|
18
|
+
|
|
19
|
+
## Reproduce the Reports
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
node ./bin/mcp-guard.js scan --config site/e2e/claude_desktop_config.json --format markdown --output site/e2e/report.md
|
|
23
|
+
node ./bin/mcp-guard.js scan --config site/e2e/claude_desktop_config.json --format html --output site/e2e/report.html
|
|
24
|
+
node ./bin/mcp-guard.js scan --config site/e2e/claude_desktop_config.json --format json --output site/e2e/report.json
|
|
25
|
+
node ./bin/mcp-guard.js scan --config site/e2e/claude_desktop_config.json --format sarif --output site/e2e/report.sarif
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Expected Result
|
|
29
|
+
|
|
30
|
+
The current scanner reports:
|
|
31
|
+
|
|
32
|
+
- Risk score: `98`
|
|
33
|
+
- Findings: `9`
|
|
34
|
+
- Critical: `2`
|
|
35
|
+
- High: `5`
|
|
36
|
+
- Medium: `2`
|
|
37
|
+
- Low: `0`
|
|
38
|
+
|
|
39
|
+
Important findings include:
|
|
40
|
+
|
|
41
|
+
- `MCP010`: shell command executes inline script.
|
|
42
|
+
- `MCP050`: curl-pipe-shell startup command.
|
|
43
|
+
- `MCP021`: unpinned remote MCP package.
|
|
44
|
+
- `MCP030`: secret-like environment variable.
|
|
45
|
+
- `MCP040` and `MCP041`: broad working directory and filesystem argument.
|
|
46
|
+
- `MCP061`: secret-like remote header.
|
|
47
|
+
|
|
48
|
+
## Generated Artifacts
|
|
49
|
+
|
|
50
|
+
- [Markdown report](../../site/e2e/report.md)
|
|
51
|
+
- [HTML report](../../site/e2e/report.html)
|
|
52
|
+
- [JSON report](../../site/e2e/report.json)
|
|
53
|
+
- [SARIF report](../../site/e2e/report.sarif)
|
|
54
|
+
|
|
55
|
+
## What This Proves
|
|
56
|
+
|
|
57
|
+
- The scanner does not need the config to leave the machine.
|
|
58
|
+
- Secret-like values are redacted in reports.
|
|
59
|
+
- Findings include rule IDs, severity, evidence, and remediation guidance.
|
|
60
|
+
- The same scan can feed a human-readable HTML report, automation JSON, and GitHub code scanning SARIF.
|
package/docs/github-action.md
CHANGED
|
@@ -4,6 +4,8 @@ Use the `mcp-guard` action to scan MCP and AI agent tool configuration in pull r
|
|
|
4
4
|
|
|
5
5
|
The action runs the CLI from the pinned GitHub Action tag, generates Markdown, HTML, JSON, and SARIF reports, writes a job summary, uploads reports as an artifact, and fails the job when findings meet your selected severity threshold.
|
|
6
6
|
|
|
7
|
+
Marketplace/action repository: <https://github.com/ChaoYue0307/mcp-guard-action>
|
|
8
|
+
|
|
7
9
|
## Basic Workflow
|
|
8
10
|
|
|
9
11
|
```yaml
|
|
@@ -22,7 +24,7 @@ jobs:
|
|
|
22
24
|
runs-on: ubuntu-latest
|
|
23
25
|
steps:
|
|
24
26
|
- uses: actions/checkout@v4
|
|
25
|
-
- uses: ChaoYue0307/mcp-guard@v0.3.
|
|
27
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.3.1
|
|
26
28
|
with:
|
|
27
29
|
fail-on: high
|
|
28
30
|
```
|
|
@@ -48,7 +50,7 @@ jobs:
|
|
|
48
50
|
runs-on: ubuntu-latest
|
|
49
51
|
steps:
|
|
50
52
|
- uses: actions/checkout@v4
|
|
51
|
-
- uses: ChaoYue0307/mcp-guard@v0.3.
|
|
53
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.3.1
|
|
52
54
|
with:
|
|
53
55
|
config: .mcp.json
|
|
54
56
|
fail-on: high
|
|
@@ -60,7 +62,7 @@ jobs:
|
|
|
60
62
|
Use `fail-on: none` when you want artifacts and summaries without blocking a pull request.
|
|
61
63
|
|
|
62
64
|
```yaml
|
|
63
|
-
- uses: ChaoYue0307/mcp-guard@v0.3.
|
|
65
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.3.1
|
|
64
66
|
with:
|
|
65
67
|
fail-on: none
|
|
66
68
|
```
|
package/docs/launch-checklist.md
CHANGED
|
@@ -10,8 +10,9 @@
|
|
|
10
10
|
- [ ] Publish with `npm publish --access public`.
|
|
11
11
|
- [ ] Generate fresh sample report with `npm run scan:example`.
|
|
12
12
|
- [ ] Add screenshots or paste report excerpt into README.
|
|
13
|
+
- [ ] Finish the GitHub Marketplace web publishing step for `mcp-guard-action`.
|
|
13
14
|
- [ ] Post a short technical article or launch note.
|
|
14
|
-
- [ ] Contact 20 early users for
|
|
15
|
+
- [ ] Contact 20 early users for scan feedback, missing rules, and CI setup needs.
|
|
15
16
|
- [ ] Follow the detailed steps in `docs/operator-runbook.md`.
|
|
16
17
|
|
|
17
18
|
## User Setup
|
|
@@ -27,6 +28,15 @@ mcp-guard scan
|
|
|
27
28
|
mcp-guard scan --config .mcp.json --fail-on high
|
|
28
29
|
```
|
|
29
30
|
|
|
31
|
+
## GitHub Action Setup
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.3.1
|
|
35
|
+
with:
|
|
36
|
+
fail-on: high
|
|
37
|
+
upload-sarif: "true"
|
|
38
|
+
```
|
|
39
|
+
|
|
30
40
|
Exit codes:
|
|
31
41
|
|
|
32
42
|
- `0`: scan completed and did not hit the fail threshold.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# mcp-guard MCP Security Scanner
|
|
2
|
+
|
|
3
|
+
Scan MCP and AI agent tool configuration in GitHub Actions before risky tools merge.
|
|
4
|
+
|
|
5
|
+
`mcp-guard` finds risky shell startup commands, leaked secret-like values, broad filesystem access, remote MCP endpoints, dangerous command patterns, and unpinned remote package runners.
|
|
6
|
+
|
|
7
|
+
## Usage
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
name: mcp-guard
|
|
11
|
+
|
|
12
|
+
on:
|
|
13
|
+
pull_request:
|
|
14
|
+
push:
|
|
15
|
+
branches: [main]
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: read
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
scan:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.3.1
|
|
26
|
+
with:
|
|
27
|
+
fail-on: high
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Upload SARIF to GitHub Security
|
|
31
|
+
|
|
32
|
+
```yaml
|
|
33
|
+
permissions:
|
|
34
|
+
contents: read
|
|
35
|
+
security-events: write
|
|
36
|
+
|
|
37
|
+
jobs:
|
|
38
|
+
scan:
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
steps:
|
|
41
|
+
- uses: actions/checkout@v4
|
|
42
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.3.1
|
|
43
|
+
with:
|
|
44
|
+
config: .mcp.json
|
|
45
|
+
fail-on: high
|
|
46
|
+
upload-sarif: "true"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Inputs
|
|
50
|
+
|
|
51
|
+
| Input | Default | Description |
|
|
52
|
+
| --- | --- | --- |
|
|
53
|
+
| `config` | empty | Optional MCP config path. Empty scans default project and user config locations. |
|
|
54
|
+
| `fail-on` | `high` | Fails the job for `critical`, `high`, `medium`, or `low` findings. Use `none` for report-only mode. |
|
|
55
|
+
| `output-dir` | `mcp-guard-report` | Directory for generated reports. |
|
|
56
|
+
| `upload-artifact` | `true` | Uploads generated reports as a workflow artifact. |
|
|
57
|
+
| `upload-sarif` | `false` | Uploads SARIF to GitHub code scanning. Requires `security-events: write`. |
|
|
58
|
+
| `artifact-name` | `mcp-guard-report` | Name of the uploaded artifact. |
|
|
59
|
+
|
|
60
|
+
## Outputs
|
|
61
|
+
|
|
62
|
+
| Output | Description |
|
|
63
|
+
| --- | --- |
|
|
64
|
+
| `markdown-report` | Path to the generated Markdown report. |
|
|
65
|
+
| `html-report` | Path to the generated HTML report. |
|
|
66
|
+
| `json-report` | Path to the generated JSON report. |
|
|
67
|
+
| `sarif-report` | Path to the generated SARIF report. |
|
|
68
|
+
| `exit-code` | `0` when below threshold, `2` when findings met the threshold. |
|
|
69
|
+
|
|
70
|
+
## Reports
|
|
71
|
+
|
|
72
|
+
The action generates:
|
|
73
|
+
|
|
74
|
+
- Markdown for pull request review.
|
|
75
|
+
- HTML for review-ready artifacts.
|
|
76
|
+
- JSON for automation.
|
|
77
|
+
- SARIF 2.1.0 for GitHub code scanning.
|
|
78
|
+
|
|
79
|
+
Secret-like values are redacted before reports are written.
|
|
80
|
+
|
|
81
|
+
## Transparent Example
|
|
82
|
+
|
|
83
|
+
Inspect a committed input config, reproduction commands, and generated Markdown, HTML, JSON, and SARIF artifacts:
|
|
84
|
+
|
|
85
|
+
https://chaoyue0307.github.io/mcp-guard/e2e/
|
|
86
|
+
|
|
87
|
+
## Links
|
|
88
|
+
|
|
89
|
+
- Product site: https://chaoyue0307.github.io/mcp-guard/
|
|
90
|
+
- Main repository: https://github.com/ChaoYue0307/mcp-guard
|
|
91
|
+
- npm package: https://www.npmjs.com/package/agent-mcp-guard
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# GitHub Marketplace Plan
|
|
2
|
+
|
|
3
|
+
GitHub Marketplace has stricter packaging rules than normal action usage. The main `mcp-guard` repository should stay as the product repository because it contains the CLI, website, tests, CI, Pages, docs, and examples.
|
|
4
|
+
|
|
5
|
+
Official GitHub docs: https://docs.github.com/en/actions/how-tos/create-and-publish-actions/publish-in-github-marketplace
|
|
6
|
+
|
|
7
|
+
Use a dedicated public repository for Marketplace:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
ChaoYue0307/mcp-guard-action
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Why a Dedicated Repository
|
|
14
|
+
|
|
15
|
+
GitHub requires Marketplace action repositories to:
|
|
16
|
+
|
|
17
|
+
- be public;
|
|
18
|
+
- contain a single root `action.yml` or `action.yaml`;
|
|
19
|
+
- have a unique action metadata `name`;
|
|
20
|
+
- avoid workflow files in the repository.
|
|
21
|
+
|
|
22
|
+
The main repo intentionally contains `.github/workflows`, so it should not be the Marketplace repo.
|
|
23
|
+
|
|
24
|
+
## Prepared Action Package
|
|
25
|
+
|
|
26
|
+
Generate the clean action repository payload:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm run marketplace:prepare
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
This creates:
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
dist/mcp-guard-action/
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The generated directory includes only the files needed by the action:
|
|
39
|
+
|
|
40
|
+
- `action.yml`
|
|
41
|
+
- `README.md`
|
|
42
|
+
- `LICENSE`
|
|
43
|
+
- `package.json`
|
|
44
|
+
- `bin/`
|
|
45
|
+
- `src/`
|
|
46
|
+
- `scripts/action-summary.js`
|
|
47
|
+
|
|
48
|
+
It intentionally excludes `.github/workflows`.
|
|
49
|
+
|
|
50
|
+
## Recommended Marketplace Metadata
|
|
51
|
+
|
|
52
|
+
Repository name:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
mcp-guard-action
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Action name:
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
mcp-guard MCP Security Scanner
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Description:
|
|
65
|
+
|
|
66
|
+
```text
|
|
67
|
+
Scan MCP and AI agent tool configuration for risky commands, leaked secrets, broad filesystem access, remote endpoints, and unpinned packages.
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Primary category:
|
|
71
|
+
|
|
72
|
+
```text
|
|
73
|
+
Security
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Secondary category:
|
|
77
|
+
|
|
78
|
+
```text
|
|
79
|
+
Code quality
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Release title:
|
|
83
|
+
|
|
84
|
+
```text
|
|
85
|
+
v0.3.1
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Release notes:
|
|
89
|
+
|
|
90
|
+
```text
|
|
91
|
+
Initial Marketplace-ready release.
|
|
92
|
+
|
|
93
|
+
- Runs mcp-guard from the pinned action tag.
|
|
94
|
+
- Generates Markdown, HTML, JSON, and SARIF reports.
|
|
95
|
+
- Writes a GitHub Step Summary for pull request review.
|
|
96
|
+
- Can upload SARIF to GitHub code scanning with `upload-sarif: "true"`.
|
|
97
|
+
- Fails workflows by configurable severity threshold.
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Manual Publishing Steps
|
|
101
|
+
|
|
102
|
+
Completed:
|
|
103
|
+
|
|
104
|
+
- Public repository created: <https://github.com/ChaoYue0307/mcp-guard-action>
|
|
105
|
+
- `dist/mcp-guard-action/` exported, committed, and pushed.
|
|
106
|
+
- Release created: <https://github.com/ChaoYue0307/mcp-guard-action/releases/tag/v0.3.1>
|
|
107
|
+
- README, docs, and website examples now use:
|
|
108
|
+
|
|
109
|
+
```yaml
|
|
110
|
+
- uses: ChaoYue0307/mcp-guard-action@v0.3.1
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Remaining Marketplace web step:
|
|
114
|
+
|
|
115
|
+
1. Open `action.yml` or the release page on GitHub and click the Marketplace banner.
|
|
116
|
+
2. Select `Publish this Action to the GitHub Marketplace`.
|
|
117
|
+
3. Accept the GitHub Marketplace Developer Agreement if prompted.
|
|
118
|
+
4. Choose `Security` as the primary category.
|
|
119
|
+
5. Publish the release with 2FA.
|
package/docs/operator-runbook.md
CHANGED
|
@@ -98,5 +98,5 @@ Send this to 20 teams using MCP or AI agents:
|
|
|
98
98
|
```text
|
|
99
99
|
I am building mcp-guard, an open-source security scanner for MCP and AI agent tool configs. It checks for risky shell access, unpinned remote packages, over-broad file permissions, exposed secrets, and unsafe remote server setup.
|
|
100
100
|
|
|
101
|
-
I am
|
|
101
|
+
I am collecting real-world MCP config patterns from teams using agents in real workflows. If you can share a redacted config or run the CLI locally, your feedback can help improve the scanner's rules and reports.
|
|
102
102
|
```
|
package/docs/paid-audit.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Future Service Concept
|
|
2
2
|
|
|
3
|
-
This is
|
|
3
|
+
This is a planning note for a possible future service attached to `mcp-guard`.
|
|
4
|
+
|
|
5
|
+
It is not currently advertised as an active consulting service. Keep public website and README copy focused on the automated scanner, early pilots, and CI setup feedback until this offer is actually available.
|
|
4
6
|
|
|
5
7
|
## Who It Is For
|
|
6
8
|
|
|
@@ -24,6 +26,6 @@ Use `docs/templates/audit-report-template.md` as the starting point for client d
|
|
|
24
26
|
- Small startup: USD 1,000-3,000.
|
|
25
27
|
- Funded team or private deployment pilot: USD 3,000-8,000.
|
|
26
28
|
|
|
27
|
-
## Sales Copy
|
|
29
|
+
## Draft Sales Copy
|
|
28
30
|
|
|
29
|
-
I am building `mcp-guard`, an open-source scanner for MCP and AI agent tool security. It checks for risky shell access, unpinned remote packages, over-broad file permissions, exposed secrets, and unsafe remote server setup. I am
|
|
31
|
+
I am building `mcp-guard`, an open-source scanner for MCP and AI agent tool security. It checks for risky shell access, unpinned remote packages, over-broad file permissions, exposed secrets, and unsafe remote server setup. I am collecting real-world config patterns from teams using agents in real workflows.
|
package/docs/roadmap.md
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
2. Rule packs mapped to MCP security best practices.
|
|
17
17
|
3. Policy file for approved commands, packages, directories, and remote URLs.
|
|
18
18
|
4. Baseline mode: accept known findings and fail only on new risks.
|
|
19
|
-
5. `mcp-guard audit` mode for
|
|
19
|
+
5. `mcp-guard audit` mode for review-ready reports.
|
|
20
20
|
|
|
21
21
|
## Later
|
|
22
22
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-mcp-guard",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "Open-source CLI scanner for risky MCP server and AI agent tool configuration.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://chaoyue0307.github.io/mcp-guard/",
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"scan:example": "node ./bin/mcp-guard.js scan --config examples/unsafe-claude_desktop_config.json --output examples/sample-report.md",
|
|
20
20
|
"release:check": "node ./scripts/release-check.js",
|
|
21
21
|
"launch:github": "node ./scripts/launch-github.js",
|
|
22
|
+
"marketplace:prepare": "node ./scripts/prepare-marketplace-action.js",
|
|
22
23
|
"publish:npm": "node ./scripts/publish-npm.js",
|
|
23
24
|
"start": "node ./bin/mcp-guard.js"
|
|
24
25
|
},
|
|
@@ -44,10 +45,12 @@
|
|
|
44
45
|
"README.md",
|
|
45
46
|
"action.yml",
|
|
46
47
|
"scripts/action-summary.js",
|
|
48
|
+
"scripts/prepare-marketplace-action.js",
|
|
47
49
|
"LICENSE",
|
|
48
50
|
"SECURITY.md",
|
|
49
51
|
"docs",
|
|
50
52
|
"examples",
|
|
53
|
+
"site/e2e",
|
|
51
54
|
"site/assets/readme-hero.svg",
|
|
52
55
|
"site/assets/brand-mark.svg"
|
|
53
56
|
]
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
|
|
6
|
+
const root = path.resolve(import.meta.dirname, "..");
|
|
7
|
+
const outputDir = path.join(root, "dist", "mcp-guard-action");
|
|
8
|
+
const packageJson = JSON.parse(fs.readFileSync(path.join(root, "package.json"), "utf8"));
|
|
9
|
+
|
|
10
|
+
fs.rmSync(outputDir, { recursive: true, force: true });
|
|
11
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
12
|
+
|
|
13
|
+
copyFile("action.yml", "action.yml");
|
|
14
|
+
copyFile("LICENSE", "LICENSE");
|
|
15
|
+
copyFile("docs/marketplace-action-readme.md", "README.md");
|
|
16
|
+
copyDir("bin", "bin");
|
|
17
|
+
copyDir("src", "src");
|
|
18
|
+
copyFile("scripts/action-summary.js", "scripts/action-summary.js");
|
|
19
|
+
writePackageJson();
|
|
20
|
+
validateExport();
|
|
21
|
+
|
|
22
|
+
process.stdout.write(`Marketplace action package prepared at ${path.relative(root, outputDir)}\n`);
|
|
23
|
+
|
|
24
|
+
function copyFile(from, to) {
|
|
25
|
+
const source = path.join(root, from);
|
|
26
|
+
const target = path.join(outputDir, to);
|
|
27
|
+
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
28
|
+
fs.copyFileSync(source, target);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function copyDir(from, to) {
|
|
32
|
+
fs.cpSync(path.join(root, from), path.join(outputDir, to), {
|
|
33
|
+
recursive: true,
|
|
34
|
+
filter: (source) => !source.includes(`${path.sep}.DS_Store`)
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function writePackageJson() {
|
|
39
|
+
const actionPackage = {
|
|
40
|
+
name: "mcp-guard-action",
|
|
41
|
+
version: packageJson.version,
|
|
42
|
+
private: true,
|
|
43
|
+
description: "GitHub Action wrapper for mcp-guard MCP and AI agent security scanning.",
|
|
44
|
+
type: "module",
|
|
45
|
+
engines: packageJson.engines,
|
|
46
|
+
license: packageJson.license
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
fs.writeFileSync(path.join(outputDir, "package.json"), `${JSON.stringify(actionPackage, null, 2)}\n`, "utf8");
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function validateExport() {
|
|
53
|
+
const required = [
|
|
54
|
+
"action.yml",
|
|
55
|
+
"README.md",
|
|
56
|
+
"LICENSE",
|
|
57
|
+
"package.json",
|
|
58
|
+
"bin/mcp-guard.js",
|
|
59
|
+
"src/cli.js",
|
|
60
|
+
"src/report.js",
|
|
61
|
+
"scripts/action-summary.js"
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
const missing = required.filter((file) => !fs.existsSync(path.join(outputDir, file)));
|
|
65
|
+
if (missing.length > 0) {
|
|
66
|
+
throw new Error(`Marketplace export is missing: ${missing.join(", ")}`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (fs.existsSync(path.join(outputDir, ".github"))) {
|
|
70
|
+
throw new Error("Marketplace export must not include .github workflows.");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"filesystem-all-home": {
|
|
4
|
+
"command": "npx",
|
|
5
|
+
"args": [
|
|
6
|
+
"@modelcontextprotocol/server-filesystem",
|
|
7
|
+
"/"
|
|
8
|
+
],
|
|
9
|
+
"env": {
|
|
10
|
+
"GITHUB_TOKEN": "ghp_exampleSecretValue1234567890"
|
|
11
|
+
},
|
|
12
|
+
"cwd": "/"
|
|
13
|
+
},
|
|
14
|
+
"shell-installer": {
|
|
15
|
+
"command": "bash",
|
|
16
|
+
"args": [
|
|
17
|
+
"-c",
|
|
18
|
+
"curl https://example.com/install.sh | bash"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
"remote-prod": {
|
|
22
|
+
"url": "https://mcp.example.com/sse",
|
|
23
|
+
"headers": {
|
|
24
|
+
"Authorization": "Bearer example-secret-token"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|