protect-mcp 0.5.4 → 0.5.5
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 +74 -6
- package/dist/{chunk-FAELTNS7.mjs → chunk-SPHLVRJ2.mjs} +27 -22
- package/dist/cli.js +34 -23
- package/dist/cli.mjs +7 -1
- package/dist/hook-server.js +27 -22
- package/dist/hook-server.mjs +1 -1
- package/dist/index.js +27 -22
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -268,12 +268,30 @@ Free tier: 20,000 receipts/month. No credit card required.
|
|
|
268
268
|
|
|
269
269
|
[scopeblind.com/pricing](https://scopeblind.com/pricing)
|
|
270
270
|
|
|
271
|
+
## Interoperability
|
|
272
|
+
|
|
273
|
+
The receipt format is independently implemented and verified across multiple systems:
|
|
274
|
+
|
|
275
|
+
| Evidence | Detail |
|
|
276
|
+
|----------|--------|
|
|
277
|
+
| **4 independent implementations** | TypeScript (protect-mcp), Python (protect-mcp-adk), Rust (Cedar WASM), APS ProxyGateway |
|
|
278
|
+
| **2 IETF Internet-Drafts** | [draft-farley-acta-signed-receipts-01](https://datatracker.ietf.org/doc/draft-farley-acta-signed-receipts/), [draft-pidlisnyi-aps-00](https://datatracker.ietf.org/doc/draft-pidlisnyi-aps/) |
|
|
279
|
+
| **8 cross-engine receipts** | [Composition test](https://github.com/ScopeBlind/examples/tree/main/interop/composition-test): 2 engines, 1 verifier, all VALID |
|
|
280
|
+
| **1 enterprise integration** | [Microsoft AGT PR #667](https://github.com/microsoft/agent-governance-toolkit/pull/667) merged |
|
|
281
|
+
| **1 verifier, zero dependencies** | `npx @veritasacta/verify receipt.json --key <hex>` (Apache-2.0, offline) |
|
|
282
|
+
|
|
283
|
+
Verify any receipt from any implementation:
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
npx @veritasacta/verify receipt.json --key <public-key-hex>
|
|
287
|
+
# Exit 0 = valid, 1 = tampered, 2 = malformed
|
|
288
|
+
```
|
|
289
|
+
|
|
271
290
|
## Standards & IP
|
|
272
291
|
|
|
273
|
-
- **IETF Internet-Draft**: [draft-farley-acta-signed-receipts-01](https://datatracker.ietf.org/doc/draft-farley-acta-signed-receipts/)
|
|
274
|
-
- **Patent Status**: 4 Australian provisional patents pending (2025-2026)
|
|
275
|
-
- **
|
|
276
|
-
- **Microsoft AGT Integration**: [PR #667](https://github.com/microsoft/agent-governance-toolkit/pull/667) — Cedar policy bridge for Agent Governance Toolkit
|
|
292
|
+
- **IETF Internet-Draft**: [draft-farley-acta-signed-receipts-01](https://datatracker.ietf.org/doc/draft-farley-acta-signed-receipts/)
|
|
293
|
+
- **Patent Status**: 4 Australian provisional patents pending (2025-2026)
|
|
294
|
+
- **Cedar WASM**: [PR #64](https://github.com/cedar-policy/cedar-for-agents/pull/64) on cedar-for-agents (under review)
|
|
277
295
|
|
|
278
296
|
## What's New in v0.5.3
|
|
279
297
|
|
|
@@ -282,12 +300,62 @@ Free tier: 20,000 receipts/month. No credit card required.
|
|
|
282
300
|
- Anonymous install telemetry (opt-out: `PROTECT_MCP_TELEMETRY=off`)
|
|
283
301
|
- Improved Cedar WASM detection
|
|
284
302
|
|
|
303
|
+
## Cybersecurity: Vulnerability Disclosure Receipts
|
|
304
|
+
|
|
305
|
+
protect-mcp provides the infrastructure for receipt-signed vulnerability disclosure workflows. When AI security agents (Claude Code Security, Mythos, or similar) discover vulnerabilities, every step of the disclosure lifecycle can produce a signed, chain-linked receipt:
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
DISCOVER → DISCLOSE → PATCH → DEPLOY
|
|
309
|
+
(Each step: Ed25519-signed, chain-linked, Cedar policy-bound)
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
Cedar policies govern what the scanning agent is allowed to do:
|
|
313
|
+
- **CAN**: scan code, report findings internally
|
|
314
|
+
- **CANNOT**: disclose externally or deploy patches without human approval
|
|
315
|
+
- **MUST**: escalate critical findings to humans
|
|
316
|
+
|
|
317
|
+
See the [security vulnerability disclosure example](https://github.com/ScopeBlind/examples/tree/main/security-vulnerability-disclosure) for a complete working implementation with Cedar policies and example receipt chains.
|
|
318
|
+
|
|
319
|
+
Related: [Vulnerability Disclosure Receipt Design](https://github.com/scopeblind/scopeblind-gateway/issues/2)
|
|
320
|
+
|
|
285
321
|
## Examples
|
|
286
322
|
|
|
287
|
-
See complete working examples at [github.com/ScopeBlind/examples](https://github.com/ScopeBlind/examples)
|
|
323
|
+
See complete working examples at [github.com/ScopeBlind/examples](https://github.com/ScopeBlind/examples):
|
|
324
|
+
- [Claude Code hooks](https://github.com/ScopeBlind/examples/tree/main/claude-code-hooks) — receipt signing for every tool call
|
|
325
|
+
- [Security vulnerability disclosure](https://github.com/ScopeBlind/examples/tree/main/security-vulnerability-disclosure) — receipt-signed disclosure lifecycle with Cedar governance
|
|
326
|
+
- [MCP server signing](https://github.com/ScopeBlind/examples/tree/main/mcp-server-signing) — Cedar WASM policy engine with audit bundles
|
|
327
|
+
|
|
328
|
+
## ScopeBlind Dashboard
|
|
329
|
+
|
|
330
|
+
protect-mcp works fully offline, forever, for free. For teams that want visibility across agents, ScopeBlind offers a hosted dashboard:
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
npx protect-mcp connect
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
| | Free | Pro | Enterprise |
|
|
337
|
+
|---|---|---|---|
|
|
338
|
+
| Receipts/month | 20,000 | Pay-as-you-go | Annual commit |
|
|
339
|
+
| Price | $0 | $0.50 / 1K | $0.40 / 1K |
|
|
340
|
+
| Receipt explorer | Yes | Yes | Yes |
|
|
341
|
+
| Compliance reports | Yes | Yes | Yes |
|
|
342
|
+
| SSO / SAML | - | - | Yes |
|
|
343
|
+
| SLA | - | - | 99.9% |
|
|
344
|
+
|
|
345
|
+
No signup required for free tier. No card upfront.
|
|
346
|
+
|
|
347
|
+
[Dashboard](https://scopeblind.com) | [Docs](https://scopeblind.com/docs/protect-mcp) | [Pricing](https://scopeblind.com/pricing)
|
|
348
|
+
|
|
349
|
+
## Telemetry
|
|
350
|
+
|
|
351
|
+
protect-mcp sends a single anonymous install beacon on first run (package name, version, OS, Node version). No PII. Disable with:
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
PROTECT_MCP_TELEMETRY=off
|
|
355
|
+
```
|
|
288
356
|
|
|
289
357
|
## License
|
|
290
358
|
|
|
291
359
|
MIT — free to use, modify, distribute, and build upon without restriction.
|
|
292
360
|
|
|
293
|
-
[
|
|
361
|
+
Built by [ScopeBlind](https://scopeblind.com) | [npm](https://www.npmjs.com/package/protect-mcp) | [GitHub](https://github.com/scopeblind/scopeblind-gateway) | [IETF Draft](https://datatracker.ietf.org/doc/draft-farley-acta-signed-receipts/)
|
|
@@ -696,48 +696,53 @@ async function startHookServer(options = {}) {
|
|
|
696
696
|
}));
|
|
697
697
|
});
|
|
698
698
|
server.listen(port, "127.0.0.1", () => {
|
|
699
|
-
process.stderr.write(
|
|
699
|
+
const w = (s) => process.stderr.write(s);
|
|
700
|
+
const pad = (s, n = 46) => s.padEnd(n);
|
|
701
|
+
w(`
|
|
700
702
|
`);
|
|
701
|
-
|
|
703
|
+
w(` protect-mcp v0.5.4
|
|
702
704
|
`);
|
|
703
|
-
|
|
705
|
+
w(` ScopeBlind \u2014 https://scopeblind.com
|
|
704
706
|
`);
|
|
705
|
-
|
|
707
|
+
w(`
|
|
706
708
|
`);
|
|
707
|
-
|
|
709
|
+
w(` Listening http://127.0.0.1:${port}
|
|
708
710
|
`);
|
|
709
|
-
|
|
711
|
+
w(` Mode ${enforce ? "enforce" : "shadow"}
|
|
710
712
|
`);
|
|
711
|
-
|
|
713
|
+
w(` Policy ${cedarPolicies ? `Cedar (${cedarPolicies.fileCount} files)` : jsonPolicy ? "JSON" : "none"}
|
|
712
714
|
`);
|
|
713
|
-
|
|
715
|
+
w(` Signing ${isSigningEnabled() ? "Ed25519" : "disabled"}
|
|
714
716
|
`);
|
|
715
|
-
|
|
717
|
+
if (state.swarmContext.team_name) {
|
|
718
|
+
w(` Swarm ${state.swarmContext.team_name} (${state.swarmContext.agent_type})
|
|
716
719
|
`);
|
|
717
|
-
|
|
720
|
+
}
|
|
721
|
+
w(`
|
|
718
722
|
`);
|
|
719
|
-
|
|
723
|
+
w(` POST /hook Hook receiver
|
|
720
724
|
`);
|
|
721
|
-
|
|
725
|
+
w(` GET /health Health + signer info
|
|
722
726
|
`);
|
|
723
|
-
|
|
727
|
+
w(` GET /receipts Signed receipts
|
|
724
728
|
`);
|
|
725
|
-
|
|
729
|
+
w(` GET /suggestions Cedar policy suggestions
|
|
726
730
|
`);
|
|
727
|
-
|
|
731
|
+
w(`
|
|
728
732
|
`);
|
|
729
|
-
|
|
733
|
+
w(` deny is authoritative \u2014 cannot be overridden.
|
|
730
734
|
`);
|
|
731
|
-
|
|
735
|
+
w(`
|
|
732
736
|
`);
|
|
733
|
-
process.
|
|
737
|
+
const hasSlug = process.env.SCOPEBLIND_SLUG || existsSync(join(process.cwd(), ".scopeblind"));
|
|
738
|
+
if (!hasSlug) {
|
|
739
|
+
w(` Dashboard npx protect-mcp connect
|
|
734
740
|
`);
|
|
735
|
-
|
|
741
|
+
w(` Free up to 20,000 receipts/month
|
|
736
742
|
`);
|
|
737
|
-
|
|
738
|
-
`);
|
|
739
|
-
process.stderr.write(`
|
|
743
|
+
w(`
|
|
740
744
|
`);
|
|
745
|
+
}
|
|
741
746
|
});
|
|
742
747
|
const shutdown = () => {
|
|
743
748
|
process.stderr.write("\n[PROTECT_MCP] Shutting down hook server...\n");
|
package/dist/cli.js
CHANGED
|
@@ -5447,48 +5447,53 @@ async function startHookServer(options = {}) {
|
|
|
5447
5447
|
}));
|
|
5448
5448
|
});
|
|
5449
5449
|
server.listen(port, "127.0.0.1", () => {
|
|
5450
|
-
process.stderr.write(
|
|
5450
|
+
const w = (s) => process.stderr.write(s);
|
|
5451
|
+
const pad = (s, n = 46) => s.padEnd(n);
|
|
5452
|
+
w(`
|
|
5451
5453
|
`);
|
|
5452
|
-
|
|
5454
|
+
w(` protect-mcp v0.5.4
|
|
5453
5455
|
`);
|
|
5454
|
-
|
|
5456
|
+
w(` ScopeBlind \u2014 https://scopeblind.com
|
|
5455
5457
|
`);
|
|
5456
|
-
|
|
5458
|
+
w(`
|
|
5457
5459
|
`);
|
|
5458
|
-
|
|
5460
|
+
w(` Listening http://127.0.0.1:${port}
|
|
5459
5461
|
`);
|
|
5460
|
-
|
|
5462
|
+
w(` Mode ${enforce ? "enforce" : "shadow"}
|
|
5461
5463
|
`);
|
|
5462
|
-
|
|
5464
|
+
w(` Policy ${cedarPolicies ? `Cedar (${cedarPolicies.fileCount} files)` : jsonPolicy ? "JSON" : "none"}
|
|
5463
5465
|
`);
|
|
5464
|
-
|
|
5466
|
+
w(` Signing ${isSigningEnabled() ? "Ed25519" : "disabled"}
|
|
5465
5467
|
`);
|
|
5466
|
-
|
|
5468
|
+
if (state.swarmContext.team_name) {
|
|
5469
|
+
w(` Swarm ${state.swarmContext.team_name} (${state.swarmContext.agent_type})
|
|
5467
5470
|
`);
|
|
5468
|
-
|
|
5471
|
+
}
|
|
5472
|
+
w(`
|
|
5469
5473
|
`);
|
|
5470
|
-
|
|
5474
|
+
w(` POST /hook Hook receiver
|
|
5471
5475
|
`);
|
|
5472
|
-
|
|
5476
|
+
w(` GET /health Health + signer info
|
|
5473
5477
|
`);
|
|
5474
|
-
|
|
5478
|
+
w(` GET /receipts Signed receipts
|
|
5475
5479
|
`);
|
|
5476
|
-
|
|
5480
|
+
w(` GET /suggestions Cedar policy suggestions
|
|
5477
5481
|
`);
|
|
5478
|
-
|
|
5482
|
+
w(`
|
|
5479
5483
|
`);
|
|
5480
|
-
|
|
5484
|
+
w(` deny is authoritative \u2014 cannot be overridden.
|
|
5481
5485
|
`);
|
|
5482
|
-
|
|
5486
|
+
w(`
|
|
5483
5487
|
`);
|
|
5484
|
-
process.
|
|
5488
|
+
const hasSlug = process.env.SCOPEBLIND_SLUG || (0, import_node_fs8.existsSync)((0, import_node_path5.join)(process.cwd(), ".scopeblind"));
|
|
5489
|
+
if (!hasSlug) {
|
|
5490
|
+
w(` Dashboard npx protect-mcp connect
|
|
5485
5491
|
`);
|
|
5486
|
-
|
|
5492
|
+
w(` Free up to 20,000 receipts/month
|
|
5487
5493
|
`);
|
|
5488
|
-
|
|
5489
|
-
`);
|
|
5490
|
-
process.stderr.write(`
|
|
5494
|
+
w(`
|
|
5491
5495
|
`);
|
|
5496
|
+
}
|
|
5492
5497
|
});
|
|
5493
5498
|
const shutdown = () => {
|
|
5494
5499
|
process.stderr.write("\n[PROTECT_MCP] Shutting down hook server...\n");
|
|
@@ -6125,6 +6130,12 @@ Examples:
|
|
|
6125
6130
|
protect-mcp status
|
|
6126
6131
|
protect-mcp bundle --output audit.json
|
|
6127
6132
|
|
|
6133
|
+
Dashboard:
|
|
6134
|
+
npx protect-mcp connect Create a free ScopeBlind dashboard
|
|
6135
|
+
Free up to 20,000 receipts/month
|
|
6136
|
+
|
|
6137
|
+
https://scopeblind.com Docs, pricing, enterprise
|
|
6138
|
+
|
|
6128
6139
|
`);
|
|
6129
6140
|
}
|
|
6130
6141
|
function parseArgs(argv) {
|
|
@@ -7312,7 +7323,7 @@ async function sendInstallTelemetry() {
|
|
|
7312
7323
|
}
|
|
7313
7324
|
writeFileSync2(markerFile, String(Date.now()), "utf-8");
|
|
7314
7325
|
process.stderr.write(
|
|
7315
|
-
"[protect-mcp] Anonymous
|
|
7326
|
+
"[protect-mcp] Thanks for installing! Anonymous telemetry sent (disable: PROTECT_MCP_TELEMETRY=off)\n[protect-mcp] Free dashboard: npx protect-mcp connect | https://scopeblind.com\n"
|
|
7316
7327
|
);
|
|
7317
7328
|
} catch {
|
|
7318
7329
|
}
|
package/dist/cli.mjs
CHANGED
|
@@ -75,6 +75,12 @@ Examples:
|
|
|
75
75
|
protect-mcp status
|
|
76
76
|
protect-mcp bundle --output audit.json
|
|
77
77
|
|
|
78
|
+
Dashboard:
|
|
79
|
+
npx protect-mcp connect Create a free ScopeBlind dashboard
|
|
80
|
+
Free up to 20,000 receipts/month
|
|
81
|
+
|
|
82
|
+
https://scopeblind.com Docs, pricing, enterprise
|
|
83
|
+
|
|
78
84
|
`);
|
|
79
85
|
}
|
|
80
86
|
function parseArgs(argv) {
|
|
@@ -1262,7 +1268,7 @@ async function sendInstallTelemetry() {
|
|
|
1262
1268
|
}
|
|
1263
1269
|
writeFileSync(markerFile, String(Date.now()), "utf-8");
|
|
1264
1270
|
process.stderr.write(
|
|
1265
|
-
"[protect-mcp] Anonymous
|
|
1271
|
+
"[protect-mcp] Thanks for installing! Anonymous telemetry sent (disable: PROTECT_MCP_TELEMETRY=off)\n[protect-mcp] Free dashboard: npx protect-mcp connect | https://scopeblind.com\n"
|
|
1266
1272
|
);
|
|
1267
1273
|
} catch {
|
|
1268
1274
|
}
|
package/dist/hook-server.js
CHANGED
|
@@ -1097,48 +1097,53 @@ async function startHookServer(options = {}) {
|
|
|
1097
1097
|
}));
|
|
1098
1098
|
});
|
|
1099
1099
|
server.listen(port, "127.0.0.1", () => {
|
|
1100
|
-
process.stderr.write(
|
|
1100
|
+
const w = (s) => process.stderr.write(s);
|
|
1101
|
+
const pad = (s, n = 46) => s.padEnd(n);
|
|
1102
|
+
w(`
|
|
1101
1103
|
`);
|
|
1102
|
-
|
|
1104
|
+
w(` protect-mcp v0.5.4
|
|
1103
1105
|
`);
|
|
1104
|
-
|
|
1106
|
+
w(` ScopeBlind \u2014 https://scopeblind.com
|
|
1105
1107
|
`);
|
|
1106
|
-
|
|
1108
|
+
w(`
|
|
1107
1109
|
`);
|
|
1108
|
-
|
|
1110
|
+
w(` Listening http://127.0.0.1:${port}
|
|
1109
1111
|
`);
|
|
1110
|
-
|
|
1112
|
+
w(` Mode ${enforce ? "enforce" : "shadow"}
|
|
1111
1113
|
`);
|
|
1112
|
-
|
|
1114
|
+
w(` Policy ${cedarPolicies ? `Cedar (${cedarPolicies.fileCount} files)` : jsonPolicy ? "JSON" : "none"}
|
|
1113
1115
|
`);
|
|
1114
|
-
|
|
1116
|
+
w(` Signing ${isSigningEnabled() ? "Ed25519" : "disabled"}
|
|
1115
1117
|
`);
|
|
1116
|
-
|
|
1118
|
+
if (state.swarmContext.team_name) {
|
|
1119
|
+
w(` Swarm ${state.swarmContext.team_name} (${state.swarmContext.agent_type})
|
|
1117
1120
|
`);
|
|
1118
|
-
|
|
1121
|
+
}
|
|
1122
|
+
w(`
|
|
1119
1123
|
`);
|
|
1120
|
-
|
|
1124
|
+
w(` POST /hook Hook receiver
|
|
1121
1125
|
`);
|
|
1122
|
-
|
|
1126
|
+
w(` GET /health Health + signer info
|
|
1123
1127
|
`);
|
|
1124
|
-
|
|
1128
|
+
w(` GET /receipts Signed receipts
|
|
1125
1129
|
`);
|
|
1126
|
-
|
|
1130
|
+
w(` GET /suggestions Cedar policy suggestions
|
|
1127
1131
|
`);
|
|
1128
|
-
|
|
1132
|
+
w(`
|
|
1129
1133
|
`);
|
|
1130
|
-
|
|
1134
|
+
w(` deny is authoritative \u2014 cannot be overridden.
|
|
1131
1135
|
`);
|
|
1132
|
-
|
|
1136
|
+
w(`
|
|
1133
1137
|
`);
|
|
1134
|
-
process.
|
|
1138
|
+
const hasSlug = process.env.SCOPEBLIND_SLUG || (0, import_node_fs5.existsSync)((0, import_node_path3.join)(process.cwd(), ".scopeblind"));
|
|
1139
|
+
if (!hasSlug) {
|
|
1140
|
+
w(` Dashboard npx protect-mcp connect
|
|
1135
1141
|
`);
|
|
1136
|
-
|
|
1142
|
+
w(` Free up to 20,000 receipts/month
|
|
1137
1143
|
`);
|
|
1138
|
-
|
|
1139
|
-
`);
|
|
1140
|
-
process.stderr.write(`
|
|
1144
|
+
w(`
|
|
1141
1145
|
`);
|
|
1146
|
+
}
|
|
1142
1147
|
});
|
|
1143
1148
|
const shutdown = () => {
|
|
1144
1149
|
process.stderr.write("\n[PROTECT_MCP] Shutting down hook server...\n");
|
package/dist/hook-server.mjs
CHANGED
package/dist/index.js
CHANGED
|
@@ -37962,48 +37962,53 @@ async function startHookServer(options = {}) {
|
|
|
37962
37962
|
}));
|
|
37963
37963
|
});
|
|
37964
37964
|
server.listen(port, "127.0.0.1", () => {
|
|
37965
|
-
process.stderr.write(
|
|
37965
|
+
const w = (s) => process.stderr.write(s);
|
|
37966
|
+
const pad = (s, n = 46) => s.padEnd(n);
|
|
37967
|
+
w(`
|
|
37966
37968
|
`);
|
|
37967
|
-
|
|
37969
|
+
w(` protect-mcp v0.5.4
|
|
37968
37970
|
`);
|
|
37969
|
-
|
|
37971
|
+
w(` ScopeBlind \u2014 https://scopeblind.com
|
|
37970
37972
|
`);
|
|
37971
|
-
|
|
37973
|
+
w(`
|
|
37972
37974
|
`);
|
|
37973
|
-
|
|
37975
|
+
w(` Listening http://127.0.0.1:${port}
|
|
37974
37976
|
`);
|
|
37975
|
-
|
|
37977
|
+
w(` Mode ${enforce ? "enforce" : "shadow"}
|
|
37976
37978
|
`);
|
|
37977
|
-
|
|
37979
|
+
w(` Policy ${cedarPolicies ? `Cedar (${cedarPolicies.fileCount} files)` : jsonPolicy ? "JSON" : "none"}
|
|
37978
37980
|
`);
|
|
37979
|
-
|
|
37981
|
+
w(` Signing ${isSigningEnabled() ? "Ed25519" : "disabled"}
|
|
37980
37982
|
`);
|
|
37981
|
-
|
|
37983
|
+
if (state.swarmContext.team_name) {
|
|
37984
|
+
w(` Swarm ${state.swarmContext.team_name} (${state.swarmContext.agent_type})
|
|
37982
37985
|
`);
|
|
37983
|
-
|
|
37986
|
+
}
|
|
37987
|
+
w(`
|
|
37984
37988
|
`);
|
|
37985
|
-
|
|
37989
|
+
w(` POST /hook Hook receiver
|
|
37986
37990
|
`);
|
|
37987
|
-
|
|
37991
|
+
w(` GET /health Health + signer info
|
|
37988
37992
|
`);
|
|
37989
|
-
|
|
37993
|
+
w(` GET /receipts Signed receipts
|
|
37990
37994
|
`);
|
|
37991
|
-
|
|
37995
|
+
w(` GET /suggestions Cedar policy suggestions
|
|
37992
37996
|
`);
|
|
37993
|
-
|
|
37997
|
+
w(`
|
|
37994
37998
|
`);
|
|
37995
|
-
|
|
37999
|
+
w(` deny is authoritative \u2014 cannot be overridden.
|
|
37996
38000
|
`);
|
|
37997
|
-
|
|
38001
|
+
w(`
|
|
37998
38002
|
`);
|
|
37999
|
-
process.
|
|
38003
|
+
const hasSlug = process.env.SCOPEBLIND_SLUG || (0, import_node_fs9.existsSync)((0, import_node_path5.join)(process.cwd(), ".scopeblind"));
|
|
38004
|
+
if (!hasSlug) {
|
|
38005
|
+
w(` Dashboard npx protect-mcp connect
|
|
38000
38006
|
`);
|
|
38001
|
-
|
|
38007
|
+
w(` Free up to 20,000 receipts/month
|
|
38002
38008
|
`);
|
|
38003
|
-
|
|
38004
|
-
`);
|
|
38005
|
-
process.stderr.write(`
|
|
38009
|
+
w(`
|
|
38006
38010
|
`);
|
|
38011
|
+
}
|
|
38007
38012
|
});
|
|
38008
38013
|
const shutdown = () => {
|
|
38009
38014
|
process.stderr.write("\n[PROTECT_MCP] Shutting down hook server...\n");
|
package/dist/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "protect-mcp",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.5",
|
|
4
4
|
"mcpName": "com.scopeblind/protect-mcp",
|
|
5
5
|
"description": "Enterprise security gateway for MCP servers and Claude Code hooks. Cedar policies, Ed25519-signed receipts, swarm tracking, and tamper detection. Shadow or enforce mode.",
|
|
6
6
|
"main": "dist/index.js",
|