mcp-proof 0.3.10 → 0.3.11
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 +4 -3
- package/bin/mcp-proof.js +18 -9
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ npx mcp-proof --config ~/.config/Claude/claude_desktop_config.json
|
|
|
29
29
|
npx mcp-proof --skill ~/.claude/skills/example/SKILL.md
|
|
30
30
|
|
|
31
31
|
# Inspect an exact tools/call payload before execution
|
|
32
|
-
cat call.json | npx mcp-proof --
|
|
32
|
+
cat call.json | npx mcp-proof --inspect-call --json
|
|
33
33
|
|
|
34
34
|
# Create a shareable Trust Card for a PR or README
|
|
35
35
|
npx mcp-proof tools.json --markdown > MCP_TRUST.md
|
|
@@ -134,7 +134,8 @@ Options:
|
|
|
134
134
|
--stdio <cmd> launch a real stdio MCP server, call tools/list, scan returned tools
|
|
135
135
|
--config <path> scan every stdio server in an MCP client config with mcpServers
|
|
136
136
|
--skill <path> scan a Claude SKILL.md (educational/warning context aware)
|
|
137
|
-
--
|
|
137
|
+
--inspect-call [<path>] inspect a tools/call payload before execution
|
|
138
|
+
--execute [<path>] deprecated alias for --inspect-call
|
|
138
139
|
--markdown emit a shareable Markdown Trust Card
|
|
139
140
|
--trust-card alias for --markdown
|
|
140
141
|
--sarif emit SARIF 2.1.0 for GitHub code scanning
|
|
@@ -226,7 +227,7 @@ The npm CLI is local-first: MCP manifests, tool descriptions, tool arguments, cl
|
|
|
226
227
|
- **Publisher verification is lexical only by default.** npm scope match + Levenshtein typosquat. Pass `--live` to confirm npm packages against `registry.npmjs.org` with one network call. *No GitHub-API lookup, no signature verification.*
|
|
227
228
|
- **No source-tree scan.** The full VyriAI gateway also runs a static scanner over the package source for `child_process`, postinstall scripts, obfuscation. That step needs the source unpacked locally and isn't shipped in this CLI.
|
|
228
229
|
- **No dependency CVE check.** The full gateway wraps `npm audit`; this CLI doesn't shell out.
|
|
229
|
-
- **Limited runtime-payload inspection.** `--
|
|
230
|
+
- **Limited runtime-payload inspection.** `--inspect-call` scans a supplied `tools/call` name and arguments before execution (`--execute` remains a deprecated alias); it does not execute the call, enforce an authorization policy, verify identity, or observe server runtime behavior.
|
|
230
231
|
- **Stdio discovery only.** `--stdio` / `--config` launches local stdio MCP servers and calls `tools/list`. It does not yet connect to HTTP/SSE MCP servers.
|
|
231
232
|
- **Skill context is keyword-based.** The skill detector looks for warning/example/demonstration framing around sensitive signals. A well-disguised attack without that framing may not downgrade.
|
|
232
233
|
- **Local payload cap.** The CLI refuses inputs over 5 MB by default to avoid accidental memory blowups in CI. Override with `MCP_SCAN_MAX_BYTES=20mb` if you have an unusually large tools manifest.
|
package/bin/mcp-proof.js
CHANGED
|
@@ -43,15 +43,16 @@ Usage:
|
|
|
43
43
|
mcp-proof --stdio "<command to launch MCP server>"
|
|
44
44
|
mcp-proof --config <claude-or-cursor-config.json>
|
|
45
45
|
mcp-proof --skill <SKILL.md>
|
|
46
|
-
mcp-proof --
|
|
46
|
+
mcp-proof --inspect-call [<call.json>] inspect a tools/call payload before execution
|
|
47
47
|
|
|
48
|
-
If <file.json> is omitted and --stdio/--config/--skill/--
|
|
48
|
+
If <file.json> is omitted and --stdio/--config/--skill/--inspect-call are not used, JSON is read from stdin.
|
|
49
49
|
|
|
50
50
|
Options:
|
|
51
51
|
--stdio <cmd> launch a real stdio MCP server, call tools/list, scan returned tools
|
|
52
52
|
--config <path> scan every stdio server in an MCP client config with mcpServers
|
|
53
53
|
--skill <path> scan a Claude SKILL.md (educational/warning context aware)
|
|
54
|
-
--
|
|
54
|
+
--inspect-call [<path>] inspect a tools/call payload before execution (reads stdin if path omitted)
|
|
55
|
+
--execute [<path>] deprecated alias for --inspect-call
|
|
55
56
|
--markdown emit a shareable Markdown Trust Card
|
|
56
57
|
--trust-card alias for --markdown
|
|
57
58
|
--sarif emit SARIF 2.1.0 for GitHub code scanning
|
|
@@ -94,9 +95,12 @@ async function main() {
|
|
|
94
95
|
if (args.selfTest) {
|
|
95
96
|
return runSelfTest(args);
|
|
96
97
|
}
|
|
97
|
-
|
|
98
|
+
if (args.deprecatedExecute) {
|
|
99
|
+
process.stderr.write('mcp-proof: --execute is deprecated; use --inspect-call instead.\n');
|
|
100
|
+
}
|
|
101
|
+
const exclusiveModes = [args.stdio, args.config, args.skill, args.inspectCall].filter(Boolean).length;
|
|
98
102
|
if (exclusiveModes > 1) {
|
|
99
|
-
process.stderr.write('mcp-proof: use one of --stdio, --config, --skill, --
|
|
103
|
+
process.stderr.write('mcp-proof: use one of --stdio, --config, --skill, --inspect-call at a time.\n');
|
|
100
104
|
process.exit(64);
|
|
101
105
|
}
|
|
102
106
|
|
|
@@ -144,7 +148,7 @@ async function main() {
|
|
|
144
148
|
process.exit(exitCodeForDecision(result.decision));
|
|
145
149
|
}
|
|
146
150
|
|
|
147
|
-
if (args.
|
|
151
|
+
if (args.inspectCall) {
|
|
148
152
|
let result;
|
|
149
153
|
try {
|
|
150
154
|
result = runExecute(args);
|
|
@@ -207,7 +211,7 @@ function parseArgs(argv) {
|
|
|
207
211
|
const out = {
|
|
208
212
|
source: '', transport: '', bind: '', json: false, selfTest: false,
|
|
209
213
|
help: false, version: false, file: '', stdio: '', config: '', skill: '',
|
|
210
|
-
|
|
214
|
+
inspectCall: false, deprecatedExecute: false, format: 'human', live: false, timeoutMs: DEFAULT_TIMEOUT_MS,
|
|
211
215
|
};
|
|
212
216
|
for (let i = 0; i < argv.length; i++) {
|
|
213
217
|
const a = argv[i];
|
|
@@ -224,8 +228,13 @@ function parseArgs(argv) {
|
|
|
224
228
|
case '--stdio': out.stdio = argv[++i] || ''; break;
|
|
225
229
|
case '--config': out.config = expandHome(argv[++i] || ''); break;
|
|
226
230
|
case '--skill': out.skill = expandHome(argv[++i] || ''); break;
|
|
231
|
+
case '--inspect-call':
|
|
232
|
+
out.inspectCall = true;
|
|
233
|
+
if (argv[i + 1] && !argv[i + 1].startsWith('-')) out.file = argv[++i];
|
|
234
|
+
break;
|
|
227
235
|
case '--execute':
|
|
228
|
-
out.
|
|
236
|
+
out.inspectCall = true;
|
|
237
|
+
out.deprecatedExecute = true;
|
|
229
238
|
if (argv[i + 1] && !argv[i + 1].startsWith('-')) out.file = argv[++i];
|
|
230
239
|
break;
|
|
231
240
|
case '--live': out.live = true; break;
|
|
@@ -643,7 +652,7 @@ function runExecute(args) {
|
|
|
643
652
|
throw e;
|
|
644
653
|
}
|
|
645
654
|
const result = evaluateCall(parsed);
|
|
646
|
-
result.mode = '
|
|
655
|
+
result.mode = 'inspect-call';
|
|
647
656
|
result.name = args.file || 'stdin';
|
|
648
657
|
return result;
|
|
649
658
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-proof",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.11",
|
|
4
4
|
"description": "Auditable, privacy-preserving MCP (Model Context Protocol) server verifier with local Trust Cards and SARIF output — test servers before connecting them to an AI system.",
|
|
5
5
|
"main": "engine.js",
|
|
6
6
|
"bin": {
|