@kryptosai/mcp-observatory 0.27.0 → 1.28.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/COMMERCIAL.md +28 -2
- package/CONTRIBUTORS.md +39 -0
- package/README.md +114 -22
- package/dist/src/action-receipt.d.ts +20 -0
- package/dist/src/action-receipt.js +85 -0
- package/dist/src/action-receipt.js.map +1 -0
- package/dist/src/adapters/http.js +1 -5
- package/dist/src/adapters/http.js.map +1 -1
- package/dist/src/audit.d.ts +64 -0
- package/dist/src/audit.js +359 -0
- package/dist/src/audit.js.map +1 -0
- package/dist/src/cassette.js +3 -2
- package/dist/src/cassette.js.map +1 -1
- package/dist/src/checks/attack-sim.d.ts +20 -0
- package/dist/src/checks/attack-sim.js +316 -0
- package/dist/src/checks/attack-sim.js.map +1 -0
- package/dist/src/ci-issue.js +4 -3
- package/dist/src/ci-issue.js.map +1 -1
- package/dist/src/cli.js +25 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/attack-sim.d.ts +2 -0
- package/dist/src/commands/attack-sim.js +220 -0
- package/dist/src/commands/attack-sim.js.map +1 -0
- package/dist/src/commands/audit.d.ts +2 -0
- package/dist/src/commands/audit.js +132 -0
- package/dist/src/commands/audit.js.map +1 -0
- package/dist/src/commands/init-ci.d.ts +3 -0
- package/dist/src/commands/init-ci.js +78 -13
- package/dist/src/commands/init-ci.js.map +1 -1
- package/dist/src/commands/legacy.js +8 -1
- package/dist/src/commands/legacy.js.map +1 -1
- package/dist/src/commands/receipt.d.ts +2 -0
- package/dist/src/commands/receipt.js +113 -0
- package/dist/src/commands/receipt.js.map +1 -0
- package/dist/src/commands/scan.js +30 -6
- package/dist/src/commands/scan.js.map +1 -1
- package/dist/src/commands/score.js +63 -0
- package/dist/src/commands/score.js.map +1 -1
- package/dist/src/commands/serve.js +9 -1
- package/dist/src/commands/serve.js.map +1 -1
- package/dist/src/commands/setup-ci-conversion.d.ts +3 -1
- package/dist/src/commands/setup-ci-conversion.js +23 -8
- package/dist/src/commands/setup-ci-conversion.js.map +1 -1
- package/dist/src/commands/telemetry.js +20 -14
- package/dist/src/commands/telemetry.js.map +1 -1
- package/dist/src/commands/test.js +31 -2
- package/dist/src/commands/test.js.map +1 -1
- package/dist/src/findings.d.ts +1 -0
- package/dist/src/findings.js +42 -1
- package/dist/src/findings.js.map +1 -1
- package/dist/src/history.js +3 -2
- package/dist/src/history.js.map +1 -1
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/integrations/smithery.js +5 -1
- package/dist/src/integrations/smithery.js.map +1 -1
- package/dist/src/receipt.d.ts +100 -0
- package/dist/src/receipt.js +375 -0
- package/dist/src/receipt.js.map +1 -0
- package/dist/src/reporters/attack-sim.d.ts +2 -0
- package/dist/src/reporters/attack-sim.js +89 -0
- package/dist/src/reporters/attack-sim.js.map +1 -0
- package/dist/src/reporters/pr-comment.js +20 -6
- package/dist/src/reporters/pr-comment.js.map +1 -1
- package/dist/src/reporters/sarif.js +11 -1
- package/dist/src/reporters/sarif.js.map +1 -1
- package/dist/src/runner.d.ts +3 -0
- package/dist/src/runner.js +5 -0
- package/dist/src/runner.js.map +1 -1
- package/dist/src/score.js +1 -1
- package/dist/src/score.js.map +1 -1
- package/dist/src/security-profiles.d.ts +13 -0
- package/dist/src/security-profiles.js +59 -0
- package/dist/src/security-profiles.js.map +1 -0
- package/dist/src/storage.js +3 -2
- package/dist/src/storage.js.map +1 -1
- package/dist/src/telemetry.d.ts +10 -0
- package/dist/src/telemetry.js +17 -1
- package/dist/src/telemetry.js.map +1 -1
- package/dist/src/types.d.ts +1 -1
- package/dist/src/utils/files.d.ts +1 -0
- package/dist/src/utils/files.js +21 -0
- package/dist/src/utils/files.js.map +1 -0
- package/dist/src/utils/ids.js +18 -5
- package/dist/src/utils/ids.js.map +1 -1
- package/dist/src/utils/url.d.ts +2 -0
- package/dist/src/utils/url.js +15 -0
- package/dist/src/utils/url.js.map +1 -0
- package/dist/src/validate.js +1 -1
- package/dist/src/validate.js.map +1 -1
- package/docs/10x-agentic-growth-sprint.md +47 -0
- package/docs/agent-ecosystem-promotion-plan.md +244 -0
- package/docs/agent-tasks.md +95 -0
- package/docs/agentic-contributor-outreach.md +52 -0
- package/docs/automatic-ci-integration.md +33 -0
- package/docs/campaign-attribution.md +58 -0
- package/docs/code-scanning-demo.md +57 -0
- package/docs/commercial-boundary.md +83 -0
- package/docs/contributor-proof-cards/README.md +33 -0
- package/docs/contributor-recognition.md +92 -0
- package/docs/examples/nsa-mcp-audit-report.md +372 -0
- package/docs/examples/nsa-mcp-results.sarif +930 -0
- package/docs/examples/nsa-mcp-score.json +13 -0
- package/docs/feishu-lark-mcp.md +1 -1
- package/docs/github-code-scanning-for-mcp.md +1 -1
- package/docs/government-enterprise-pilot.md +93 -0
- package/docs/launch.md +64 -0
- package/docs/mcp-attack-simulator.md +57 -0
- package/docs/mcp-receipts.md +109 -0
- package/docs/mcp-server-safety-index.md +29 -22
- package/docs/nsa-mcp-audit-ci.md +88 -0
- package/docs/procurement-one-pager.md +74 -0
- package/docs/proof.md +5 -2
- package/docs/public-guidance-crosswalk.md +48 -0
- package/docs/receipt-graph.md +54 -0
- package/docs/safety-index/artifacts/antv-chart-server.json +40 -22
- package/docs/safety-index/artifacts/antv-chart-server.md +22 -9
- package/docs/safety-index/artifacts/browsermcp-server.json +36 -18
- package/docs/safety-index/artifacts/browsermcp-server.md +22 -9
- package/docs/safety-index/artifacts/context7-server.json +83 -26
- package/docs/safety-index/artifacts/context7-server.md +33 -20
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +2438 -0
- package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +176 -0
- package/docs/safety-index/artifacts/everything-server.json +150 -57
- package/docs/safety-index/artifacts/everything-server.md +36 -23
- package/docs/safety-index/artifacts/executeautomation-playwright-server.json +162 -19
- package/docs/safety-index/artifacts/executeautomation-playwright-server.md +25 -12
- package/docs/safety-index/artifacts/filesystem-server.json +221 -19
- package/docs/safety-index/artifacts/filesystem-server.md +24 -11
- package/docs/safety-index/artifacts/kubernetes-server.attack.json +1559 -0
- package/docs/safety-index/artifacts/kubernetes-server.attack.md +43 -0
- package/docs/safety-index/artifacts/kubernetes-server.attack.sarif +2857 -0
- package/docs/safety-index/artifacts/kubernetes-server.json +1573 -0
- package/docs/safety-index/artifacts/kubernetes-server.md +176 -0
- package/docs/safety-index/artifacts/memory-server.json +93 -32
- package/docs/safety-index/artifacts/memory-server.md +45 -25
- package/docs/safety-index/artifacts/opentofu-server.json +44 -18
- package/docs/safety-index/artifacts/opentofu-server.md +23 -10
- package/docs/safety-index/artifacts/playwright-mcp-server.json +177 -21
- package/docs/safety-index/artifacts/playwright-mcp-server.md +27 -14
- package/docs/safety-index/artifacts/promptopia-server.json +45 -19
- package/docs/safety-index/artifacts/promptopia-server.md +21 -8
- package/docs/safety-index/artifacts/puppeteer-server.json +77 -22
- package/docs/safety-index/artifacts/puppeteer-server.md +28 -15
- package/docs/safety-index/artifacts/ref-tools-server.json +36 -18
- package/docs/safety-index/artifacts/ref-tools-server.md +21 -8
- package/docs/safety-index/artifacts/sequential-thinking-server.json +38 -21
- package/docs/safety-index/artifacts/sequential-thinking-server.md +22 -9
- package/docs/safety-index/targets.json +90 -14
- package/docs/security-due-diligence.md +87 -0
- package/docs/setup-ci-doctor.md +13 -1
- package/docs/target-gallery.md +49 -0
- package/docs/target-registry.md +5 -1
- package/docs/tool-call-receipts.md +115 -0
- package/examples/insecure-mcp-server/mcp-observatory.target.json +13 -0
- package/examples/insecure-mcp-server/server.mjs +62 -0
- package/package.json +31 -2
- package/schemas/run-artifact.schema.json +1 -0
- package/scripts/postinstall.mjs +138 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MCP Observatory Run Report
|
|
2
2
|
|
|
3
|
-
Generated at 2026-
|
|
3
|
+
Generated at 2026-07-06T19:49:51.606Z
|
|
4
4
|
|
|
5
5
|
## Target and Environment Metadata
|
|
6
6
|
|
|
@@ -25,7 +25,7 @@ Generated at 2026-06-24T02:07:28.542Z
|
|
|
25
25
|
|
|
26
26
|
| Gate | Total | Pass | Fail | Partial | Unsupported | Flaky | Skipped |
|
|
27
27
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
28
|
-
| pass |
|
|
28
|
+
| pass | 8 | 7 | 0 | 0 | 1 | 0 | 0 |
|
|
29
29
|
|
|
30
30
|
## At a Glance
|
|
31
31
|
|
|
@@ -47,16 +47,29 @@ _Use the `diff` command against another run artifact to classify regressions and
|
|
|
47
47
|
|
|
48
48
|
| Focus | Check | Status | Duration (ms) | Message |
|
|
49
49
|
| --- | --- | --- | --- | --- |
|
|
50
|
-
| healthy |
|
|
51
|
-
| healthy |
|
|
52
|
-
| healthy |
|
|
53
|
-
| healthy |
|
|
50
|
+
| healthy | attack-sim | pass | 0.25 | Safe attack simulation found no high-risk MCP attack-readiness findings. |
|
|
51
|
+
| healthy | conformance | pass | 0.51 | All 7 conformance checks passed. |
|
|
52
|
+
| healthy | prompts | pass | 0.19 | Advertised capability responded with the minimal expected shape (2 items). |
|
|
53
|
+
| healthy | schema-quality | pass | 0.50 | All 4 item(s) have good schema quality. |
|
|
54
|
+
| healthy | security | pass | 0.19 | No security issues detected. |
|
|
54
55
|
| healthy | security-lite | pass | 0.02 | No security issues detected (lightweight scan). |
|
|
55
|
-
| healthy | tools | pass | 0.
|
|
56
|
+
| healthy | tools | pass | 0.89 | Advertised capability responded with the minimal expected shape (2 items). |
|
|
56
57
|
| confirm intent | resources | unsupported | 0.00 | Resources are not advertised by the target. |
|
|
57
58
|
|
|
58
59
|
## Evidence Snippets
|
|
59
60
|
|
|
61
|
+
### attack-sim — pass
|
|
62
|
+
|
|
63
|
+
Summary: Safe attack simulation found no high-risk MCP attack-readiness findings.
|
|
64
|
+
|
|
65
|
+
- Endpoint: `attack-sim/safe`
|
|
66
|
+
- Advertised: `true`
|
|
67
|
+
- Responded: `true`
|
|
68
|
+
- Minimal shape present: `true`
|
|
69
|
+
- Item count: `0`
|
|
70
|
+
- Identifiers: none
|
|
71
|
+
- Diagnostics: none
|
|
72
|
+
|
|
60
73
|
### conformance — pass
|
|
61
74
|
|
|
62
75
|
Summary: All 7 conformance checks passed.
|
|
@@ -152,5 +165,5 @@ npm run cli -- report --run <path-to-run-artifact.json> --format markdown
|
|
|
152
165
|
|
|
153
166
|
- Artifact type: `run`
|
|
154
167
|
- Schema version: `1.0.0`
|
|
155
|
-
- Run ID: `run_2026-
|
|
168
|
+
- Run ID: `run_2026-07-06T194951606Z_e657d5a4`
|
|
156
169
|
- Gate: `pass`
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"artifactType": "run",
|
|
3
3
|
"schemaVersion": "1.0.0",
|
|
4
4
|
"gate": "pass",
|
|
5
|
-
"runId": "run_2026-
|
|
6
|
-
"createdAt": "2026-
|
|
7
|
-
"toolVersion": "0.
|
|
5
|
+
"runId": "run_2026-07-06T194946140Z_d608f553",
|
|
6
|
+
"createdAt": "2026-07-06T19:49:46.140Z",
|
|
7
|
+
"toolVersion": "0.28.0",
|
|
8
8
|
"target": {
|
|
9
9
|
"targetId": "sequential-thinking-server",
|
|
10
10
|
"adapter": "local-process",
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"nodeVersion": "v22.22.1"
|
|
30
30
|
},
|
|
31
31
|
"summary": {
|
|
32
|
-
"total":
|
|
33
|
-
"pass":
|
|
32
|
+
"total": 8,
|
|
33
|
+
"pass": 6,
|
|
34
34
|
"fail": 0,
|
|
35
35
|
"partial": 0,
|
|
36
36
|
"unsupported": 2,
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"id": "tools",
|
|
44
44
|
"capability": "tools",
|
|
45
45
|
"status": "pass",
|
|
46
|
-
"durationMs":
|
|
46
|
+
"durationMs": 3.737249999999676,
|
|
47
47
|
"message": "Advertised capability responded with the minimal expected shape (1 item).",
|
|
48
48
|
"evidence": [
|
|
49
49
|
{
|
|
@@ -67,8 +67,8 @@
|
|
|
67
67
|
"description": "Your current thinking step"
|
|
68
68
|
},
|
|
69
69
|
"nextThoughtNeeded": {
|
|
70
|
-
"
|
|
71
|
-
"
|
|
70
|
+
"description": "Whether another thought step is needed",
|
|
71
|
+
"type": "boolean"
|
|
72
72
|
},
|
|
73
73
|
"thoughtNumber": {
|
|
74
74
|
"type": "integer",
|
|
@@ -109,7 +109,6 @@
|
|
|
109
109
|
},
|
|
110
110
|
"required": [
|
|
111
111
|
"thought",
|
|
112
|
-
"nextThoughtNeeded",
|
|
113
112
|
"thoughtNumber",
|
|
114
113
|
"totalThoughts"
|
|
115
114
|
],
|
|
@@ -123,7 +122,7 @@
|
|
|
123
122
|
"id": "prompts",
|
|
124
123
|
"capability": "prompts",
|
|
125
124
|
"status": "unsupported",
|
|
126
|
-
"durationMs": 0.
|
|
125
|
+
"durationMs": 0.00408400000014808,
|
|
127
126
|
"message": "Prompts are not advertised by the target.",
|
|
128
127
|
"evidence": [
|
|
129
128
|
{
|
|
@@ -139,7 +138,7 @@
|
|
|
139
138
|
"id": "resources",
|
|
140
139
|
"capability": "resources",
|
|
141
140
|
"status": "unsupported",
|
|
142
|
-
"durationMs": 0.
|
|
141
|
+
"durationMs": 0.0015830000002097222,
|
|
143
142
|
"message": "Resources are not advertised by the target.",
|
|
144
143
|
"evidence": [
|
|
145
144
|
{
|
|
@@ -155,7 +154,7 @@
|
|
|
155
154
|
"id": "security-lite",
|
|
156
155
|
"capability": "security-lite",
|
|
157
156
|
"status": "pass",
|
|
158
|
-
"durationMs": 0.
|
|
157
|
+
"durationMs": 0.0753340000001117,
|
|
159
158
|
"message": "No security issues detected (lightweight scan).",
|
|
160
159
|
"evidence": [
|
|
161
160
|
{
|
|
@@ -171,7 +170,7 @@
|
|
|
171
170
|
"id": "conformance",
|
|
172
171
|
"capability": "conformance",
|
|
173
172
|
"status": "pass",
|
|
174
|
-
"durationMs":
|
|
173
|
+
"durationMs": 1.5115419999997357,
|
|
175
174
|
"message": "All 7 conformance checks passed.",
|
|
176
175
|
"evidence": [
|
|
177
176
|
{
|
|
@@ -197,7 +196,7 @@
|
|
|
197
196
|
"id": "schema-quality",
|
|
198
197
|
"capability": "schema-quality",
|
|
199
198
|
"status": "pass",
|
|
200
|
-
"durationMs": 0.
|
|
199
|
+
"durationMs": 0.8508339999998498,
|
|
201
200
|
"message": "All 1 item(s) have good schema quality.",
|
|
202
201
|
"evidence": [
|
|
203
202
|
{
|
|
@@ -214,7 +213,7 @@
|
|
|
214
213
|
"id": "security",
|
|
215
214
|
"capability": "security",
|
|
216
215
|
"status": "pass",
|
|
217
|
-
"durationMs":
|
|
216
|
+
"durationMs": 0.908542000000125,
|
|
218
217
|
"message": "No security issues detected.",
|
|
219
218
|
"evidence": [
|
|
220
219
|
{
|
|
@@ -225,6 +224,23 @@
|
|
|
225
224
|
"itemCount": 0
|
|
226
225
|
}
|
|
227
226
|
]
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
"id": "attack-sim",
|
|
230
|
+
"capability": "attack-sim",
|
|
231
|
+
"status": "pass",
|
|
232
|
+
"durationMs": 0.819166000000223,
|
|
233
|
+
"message": "Safe attack simulation found no high-risk MCP attack-readiness findings.",
|
|
234
|
+
"evidence": [
|
|
235
|
+
{
|
|
236
|
+
"endpoint": "attack-sim/safe",
|
|
237
|
+
"advertised": true,
|
|
238
|
+
"responded": true,
|
|
239
|
+
"minimalShapePresent": true,
|
|
240
|
+
"itemCount": 0,
|
|
241
|
+
"identifiers": []
|
|
242
|
+
}
|
|
243
|
+
]
|
|
228
244
|
}
|
|
229
245
|
],
|
|
230
246
|
"healthScore": {
|
|
@@ -253,7 +269,8 @@
|
|
|
253
269
|
"score": 100,
|
|
254
270
|
"details": [
|
|
255
271
|
"security-lite: pass (100/100)",
|
|
256
|
-
"security: pass (100/100)"
|
|
272
|
+
"security: pass (100/100)",
|
|
273
|
+
"attack-sim: pass (100/100)"
|
|
257
274
|
]
|
|
258
275
|
},
|
|
259
276
|
{
|
|
@@ -271,16 +288,16 @@
|
|
|
271
288
|
"weight": 0.1,
|
|
272
289
|
"score": 100,
|
|
273
290
|
"details": [
|
|
274
|
-
"Connect:
|
|
291
|
+
"Connect: 614ms",
|
|
275
292
|
"p95 latency: 4ms (3 operations)"
|
|
276
293
|
]
|
|
277
294
|
}
|
|
278
295
|
]
|
|
279
296
|
},
|
|
280
297
|
"performanceMetrics": {
|
|
281
|
-
"connectMs":
|
|
282
|
-
"toolsListMs":
|
|
283
|
-
"promptsListMs": 0.
|
|
284
|
-
"resourcesListMs": 0.
|
|
298
|
+
"connectMs": 614.4627080000002,
|
|
299
|
+
"toolsListMs": 3.737249999999676,
|
|
300
|
+
"promptsListMs": 0.00408400000014808,
|
|
301
|
+
"resourcesListMs": 0.0015830000002097222
|
|
285
302
|
}
|
|
286
303
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# MCP Observatory Run Report
|
|
2
2
|
|
|
3
|
-
Generated at 2026-
|
|
3
|
+
Generated at 2026-07-06T19:49:46.140Z
|
|
4
4
|
|
|
5
5
|
## Target and Environment Metadata
|
|
6
6
|
|
|
@@ -25,7 +25,7 @@ Generated at 2026-06-24T02:07:22.515Z
|
|
|
25
25
|
|
|
26
26
|
| Gate | Total | Pass | Fail | Partial | Unsupported | Flaky | Skipped |
|
|
27
27
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
28
|
-
| pass |
|
|
28
|
+
| pass | 8 | 6 | 0 | 0 | 2 | 0 | 0 |
|
|
29
29
|
|
|
30
30
|
## At a Glance
|
|
31
31
|
|
|
@@ -47,16 +47,29 @@ _Use the `diff` command against another run artifact to classify regressions and
|
|
|
47
47
|
|
|
48
48
|
| Focus | Check | Status | Duration (ms) | Message |
|
|
49
49
|
| --- | --- | --- | --- | --- |
|
|
50
|
-
| healthy |
|
|
51
|
-
| healthy |
|
|
52
|
-
| healthy |
|
|
53
|
-
| healthy | security
|
|
54
|
-
| healthy |
|
|
55
|
-
|
|
|
50
|
+
| healthy | attack-sim | pass | 0.82 | Safe attack simulation found no high-risk MCP attack-readiness findings. |
|
|
51
|
+
| healthy | conformance | pass | 1.51 | All 7 conformance checks passed. |
|
|
52
|
+
| healthy | schema-quality | pass | 0.85 | All 1 item(s) have good schema quality. |
|
|
53
|
+
| healthy | security | pass | 0.91 | No security issues detected. |
|
|
54
|
+
| healthy | security-lite | pass | 0.08 | No security issues detected (lightweight scan). |
|
|
55
|
+
| healthy | tools | pass | 3.74 | Advertised capability responded with the minimal expected shape (1 item). |
|
|
56
|
+
| confirm intent | prompts | unsupported | 0.00 | Prompts are not advertised by the target. |
|
|
56
57
|
| confirm intent | resources | unsupported | 0.00 | Resources are not advertised by the target. |
|
|
57
58
|
|
|
58
59
|
## Evidence Snippets
|
|
59
60
|
|
|
61
|
+
### attack-sim — pass
|
|
62
|
+
|
|
63
|
+
Summary: Safe attack simulation found no high-risk MCP attack-readiness findings.
|
|
64
|
+
|
|
65
|
+
- Endpoint: `attack-sim/safe`
|
|
66
|
+
- Advertised: `true`
|
|
67
|
+
- Responded: `true`
|
|
68
|
+
- Minimal shape present: `true`
|
|
69
|
+
- Item count: `0`
|
|
70
|
+
- Identifiers: none
|
|
71
|
+
- Diagnostics: none
|
|
72
|
+
|
|
60
73
|
### conformance — pass
|
|
61
74
|
|
|
62
75
|
Summary: All 7 conformance checks passed.
|
|
@@ -152,5 +165,5 @@ npm run cli -- report --run <path-to-run-artifact.json> --format markdown
|
|
|
152
165
|
|
|
153
166
|
- Artifact type: `run`
|
|
154
167
|
- Schema version: `1.0.0`
|
|
155
|
-
- Run ID: `run_2026-
|
|
168
|
+
- Run ID: `run_2026-07-06T194946140Z_d608f553`
|
|
156
169
|
- Gate: `pass`
|
|
@@ -6,7 +6,10 @@
|
|
|
6
6
|
"packageName": "@modelcontextprotocol/server-everything",
|
|
7
7
|
"category": "Reference",
|
|
8
8
|
"command": "npx",
|
|
9
|
-
"args": [
|
|
9
|
+
"args": [
|
|
10
|
+
"-y",
|
|
11
|
+
"@modelcontextprotocol/server-everything"
|
|
12
|
+
],
|
|
10
13
|
"timeoutMs": 60000,
|
|
11
14
|
"riskClass": "Reference compatibility",
|
|
12
15
|
"failureClass": "Broad protocol surface",
|
|
@@ -21,7 +24,10 @@
|
|
|
21
24
|
"packageName": "@modelcontextprotocol/server-sequential-thinking",
|
|
22
25
|
"category": "Reference",
|
|
23
26
|
"command": "npx",
|
|
24
|
-
"args": [
|
|
27
|
+
"args": [
|
|
28
|
+
"-y",
|
|
29
|
+
"@modelcontextprotocol/server-sequential-thinking"
|
|
30
|
+
],
|
|
25
31
|
"timeoutMs": 60000,
|
|
26
32
|
"riskClass": "Reference compatibility",
|
|
27
33
|
"failureClass": "Tool schema clarity",
|
|
@@ -35,7 +41,10 @@
|
|
|
35
41
|
"packageName": "@modelcontextprotocol/server-memory",
|
|
36
42
|
"category": "Reference / Memory",
|
|
37
43
|
"command": "npx",
|
|
38
|
-
"args": [
|
|
44
|
+
"args": [
|
|
45
|
+
"-y",
|
|
46
|
+
"@modelcontextprotocol/server-memory"
|
|
47
|
+
],
|
|
39
48
|
"timeoutMs": 60000,
|
|
40
49
|
"riskClass": "Agent memory mutation",
|
|
41
50
|
"failureClass": "Persistent state tools",
|
|
@@ -49,7 +58,11 @@
|
|
|
49
58
|
"packageName": "@modelcontextprotocol/server-filesystem",
|
|
50
59
|
"category": "Filesystem",
|
|
51
60
|
"command": "npx",
|
|
52
|
-
"args": [
|
|
61
|
+
"args": [
|
|
62
|
+
"-y",
|
|
63
|
+
"@modelcontextprotocol/server-filesystem",
|
|
64
|
+
"examples/filesystem-fixture"
|
|
65
|
+
],
|
|
53
66
|
"timeoutMs": 30000,
|
|
54
67
|
"riskClass": "Filesystem boundary",
|
|
55
68
|
"failureClass": "Sandboxed filesystem access",
|
|
@@ -63,7 +76,10 @@
|
|
|
63
76
|
"packageName": "@upstash/context7-mcp",
|
|
64
77
|
"category": "Documentation / Search",
|
|
65
78
|
"command": "npx",
|
|
66
|
-
"args": [
|
|
79
|
+
"args": [
|
|
80
|
+
"-y",
|
|
81
|
+
"@upstash/context7-mcp"
|
|
82
|
+
],
|
|
67
83
|
"timeoutMs": 60000,
|
|
68
84
|
"riskClass": "Untrusted content retrieval",
|
|
69
85
|
"failureClass": "Prompt-injection-sensitive retrieval",
|
|
@@ -77,7 +93,10 @@
|
|
|
77
93
|
"packageName": "promptopia-mcp",
|
|
78
94
|
"category": "Prompts",
|
|
79
95
|
"command": "npx",
|
|
80
|
-
"args": [
|
|
96
|
+
"args": [
|
|
97
|
+
"-y",
|
|
98
|
+
"promptopia-mcp"
|
|
99
|
+
],
|
|
81
100
|
"env": {
|
|
82
101
|
"PROMPTS_DIR": "examples/promptopia-prompts"
|
|
83
102
|
},
|
|
@@ -94,13 +113,33 @@
|
|
|
94
113
|
"packageName": "ref-tools-mcp",
|
|
95
114
|
"category": "Developer Tools",
|
|
96
115
|
"command": "npx",
|
|
97
|
-
"args": [
|
|
116
|
+
"args": [
|
|
117
|
+
"-y",
|
|
118
|
+
"ref-tools-mcp"
|
|
119
|
+
],
|
|
98
120
|
"timeoutMs": 60000,
|
|
99
121
|
"riskClass": "Developer reference tooling",
|
|
100
122
|
"failureClass": "Prompt/tool inventory",
|
|
101
123
|
"whyItMatters": "Developer tools become agent dependencies when wired into coding workflows.",
|
|
102
124
|
"reproductionNotes": "Zero-config public package."
|
|
103
125
|
},
|
|
126
|
+
{
|
|
127
|
+
"id": "cyanheads-git-mcp-server",
|
|
128
|
+
"name": "Git MCP Server",
|
|
129
|
+
"repo": "https://www.npmjs.com/package/@cyanheads/git-mcp-server",
|
|
130
|
+
"packageName": "@cyanheads/git-mcp-server",
|
|
131
|
+
"category": "Developer Tools",
|
|
132
|
+
"command": "npx",
|
|
133
|
+
"args": [
|
|
134
|
+
"-y",
|
|
135
|
+
"@cyanheads/git-mcp-server"
|
|
136
|
+
],
|
|
137
|
+
"timeoutMs": 60000,
|
|
138
|
+
"riskClass": "Repository mutation",
|
|
139
|
+
"failureClass": "Git tool boundary",
|
|
140
|
+
"whyItMatters": "Coding agents often need Git context and can cause real repository changes if tool boundaries are unclear.",
|
|
141
|
+
"reproductionNotes": "Zero-config public package. Keep tool invocation read-only unless a harmless fixture repository is added."
|
|
142
|
+
},
|
|
104
143
|
{
|
|
105
144
|
"id": "opentofu-server",
|
|
106
145
|
"name": "OpenTofu MCP server",
|
|
@@ -108,7 +147,10 @@
|
|
|
108
147
|
"packageName": "@opentofu/opentofu-mcp-server",
|
|
109
148
|
"category": "Infrastructure",
|
|
110
149
|
"command": "npx",
|
|
111
|
-
"args": [
|
|
150
|
+
"args": [
|
|
151
|
+
"-y",
|
|
152
|
+
"@opentofu/opentofu-mcp-server"
|
|
153
|
+
],
|
|
112
154
|
"timeoutMs": 60000,
|
|
113
155
|
"riskClass": "Infrastructure-as-code",
|
|
114
156
|
"failureClass": "Infrastructure tool surface",
|
|
@@ -122,9 +164,14 @@
|
|
|
122
164
|
"packageName": "puppeteer-mcp-server",
|
|
123
165
|
"category": "Browser Automation",
|
|
124
166
|
"command": "npx",
|
|
125
|
-
"args": [
|
|
167
|
+
"args": [
|
|
168
|
+
"-y",
|
|
169
|
+
"puppeteer-mcp-server"
|
|
170
|
+
],
|
|
126
171
|
"timeoutMs": 60000,
|
|
127
|
-
"securitySuppressions": [
|
|
172
|
+
"securitySuppressions": [
|
|
173
|
+
"puppeteer_evaluate:shell-injection"
|
|
174
|
+
],
|
|
128
175
|
"riskClass": "Browser control",
|
|
129
176
|
"failureClass": "Browser/code execution boundary",
|
|
130
177
|
"whyItMatters": "Browser automation gives agents navigation, page state, and sometimes code-evaluation powers.",
|
|
@@ -137,7 +184,10 @@
|
|
|
137
184
|
"packageName": "@browsermcp/mcp",
|
|
138
185
|
"category": "Browser Automation",
|
|
139
186
|
"command": "npx",
|
|
140
|
-
"args": [
|
|
187
|
+
"args": [
|
|
188
|
+
"-y",
|
|
189
|
+
"@browsermcp/mcp"
|
|
190
|
+
],
|
|
141
191
|
"timeoutMs": 60000,
|
|
142
192
|
"riskClass": "Browser control",
|
|
143
193
|
"failureClass": "Browser-control boundary",
|
|
@@ -152,7 +202,10 @@
|
|
|
152
202
|
"packageName": "@playwright/mcp",
|
|
153
203
|
"category": "Browser Automation",
|
|
154
204
|
"command": "npx",
|
|
155
|
-
"args": [
|
|
205
|
+
"args": [
|
|
206
|
+
"-y",
|
|
207
|
+
"@playwright/mcp"
|
|
208
|
+
],
|
|
156
209
|
"timeoutMs": 60000,
|
|
157
210
|
"riskClass": "Browser control",
|
|
158
211
|
"failureClass": "Browser/code execution boundary",
|
|
@@ -166,7 +219,10 @@
|
|
|
166
219
|
"packageName": "@antv/mcp-server-chart",
|
|
167
220
|
"category": "Visualization",
|
|
168
221
|
"command": "npx",
|
|
169
|
-
"args": [
|
|
222
|
+
"args": [
|
|
223
|
+
"-y",
|
|
224
|
+
"@antv/mcp-server-chart"
|
|
225
|
+
],
|
|
170
226
|
"timeoutMs": 60000,
|
|
171
227
|
"riskClass": "Generated artifacts",
|
|
172
228
|
"failureClass": "Artifact-producing tools",
|
|
@@ -181,12 +237,32 @@
|
|
|
181
237
|
"packageName": "@executeautomation/playwright-mcp-server",
|
|
182
238
|
"category": "Browser Automation",
|
|
183
239
|
"command": "npx",
|
|
184
|
-
"args": [
|
|
240
|
+
"args": [
|
|
241
|
+
"-y",
|
|
242
|
+
"@executeautomation/playwright-mcp-server"
|
|
243
|
+
],
|
|
185
244
|
"timeoutMs": 60000,
|
|
186
245
|
"riskClass": "Browser control",
|
|
187
246
|
"failureClass": "Startup/listing reproducibility",
|
|
188
247
|
"whyItMatters": "A public browser automation package that fails basic listing checks shows why reproducible readiness evidence matters.",
|
|
189
248
|
"reproductionNotes": "Evaluated as a public package; current result should be treated as a maintainer conversation starter.",
|
|
190
249
|
"publicProof": "https://github.com/executeautomation/mcp-playwright/pull/225"
|
|
250
|
+
},
|
|
251
|
+
{
|
|
252
|
+
"id": "kubernetes-server",
|
|
253
|
+
"name": "Flux159 Kubernetes MCP server",
|
|
254
|
+
"repo": "https://github.com/Flux159/mcp-server-kubernetes",
|
|
255
|
+
"packageName": "mcp-server-kubernetes",
|
|
256
|
+
"category": "Infrastructure / Kubernetes",
|
|
257
|
+
"command": "npx",
|
|
258
|
+
"args": [
|
|
259
|
+
"-y",
|
|
260
|
+
"mcp-server-kubernetes"
|
|
261
|
+
],
|
|
262
|
+
"timeoutMs": 60000,
|
|
263
|
+
"riskClass": "Kubernetes control plane",
|
|
264
|
+
"failureClass": "Command and cluster mutation boundary",
|
|
265
|
+
"whyItMatters": "Kubernetes MCP servers can expose cluster mutation, pod exec, manifest apply/delete, and broad kubectl command surfaces to agents.",
|
|
266
|
+
"reproductionNotes": "Zero-config public package. Evaluated without cluster credentials; findings are metadata and schema boundary prompts, not exploit claims."
|
|
191
267
|
}
|
|
192
268
|
]
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Security Due Diligence Packet
|
|
2
|
+
|
|
3
|
+
Use this page as the first-pass answer set for security, procurement, or pilot-review conversations.
|
|
4
|
+
|
|
5
|
+
## Product Boundary
|
|
6
|
+
|
|
7
|
+
MCP Observatory is a local-first CLI, GitHub Action workflow, and MCP server for testing MCP servers before agents depend on them.
|
|
8
|
+
|
|
9
|
+
It does not claim to prove that an MCP server is safe for every mission. It produces repeatable evidence for startup behavior, tool surface, schema quality, known security footguns, attack-readiness simulations, SARIF, and trust status.
|
|
10
|
+
|
|
11
|
+
## Data Handling
|
|
12
|
+
|
|
13
|
+
Default local audit behavior:
|
|
14
|
+
|
|
15
|
+
- no hosted service required
|
|
16
|
+
- no network upload required
|
|
17
|
+
- no secret value collection required
|
|
18
|
+
- no file content collection required
|
|
19
|
+
- no environment dump collection required
|
|
20
|
+
- report artifacts can remain inside the customer repo or CI artifact store
|
|
21
|
+
|
|
22
|
+
Secret-like values should be redacted. Findings should report names, patterns, rule IDs, and evidence excerpts only where needed for review.
|
|
23
|
+
|
|
24
|
+
## Deployment Model
|
|
25
|
+
|
|
26
|
+
Supported modes:
|
|
27
|
+
|
|
28
|
+
- local CLI run by developer or reviewer
|
|
29
|
+
- GitHub Actions workflow on pull requests and schedules
|
|
30
|
+
- SARIF upload to GitHub Code Scanning
|
|
31
|
+
- MCP server mode for agent-accessible diagnostics
|
|
32
|
+
- optional hosted reporting or private pilot workflows
|
|
33
|
+
|
|
34
|
+
## Controls Produced
|
|
35
|
+
|
|
36
|
+
Artifacts produced by an audit:
|
|
37
|
+
|
|
38
|
+
- Markdown report
|
|
39
|
+
- JSON report
|
|
40
|
+
- SARIF results
|
|
41
|
+
- compact score JSON
|
|
42
|
+
- check statuses
|
|
43
|
+
- normalized findings with fingerprints and recommendations
|
|
44
|
+
- profile control mappings
|
|
45
|
+
|
|
46
|
+
## Failure Policy
|
|
47
|
+
|
|
48
|
+
Audit does not fail by default. CI can opt into policy gates:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npx @kryptosai/mcp-observatory audit npx -y my-mcp-server --profile nsa-mcp --format markdown --output mcp-audit.md --fail-on-critical
|
|
52
|
+
npx @kryptosai/mcp-observatory audit npx -y my-mcp-server --profile nsa-mcp --format markdown --output mcp-audit.md --fail-on-high
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
This lets teams onboard in observation mode, then tighten enforcement after review.
|
|
56
|
+
|
|
57
|
+
## Supply Chain Posture
|
|
58
|
+
|
|
59
|
+
Current project trust signals include:
|
|
60
|
+
|
|
61
|
+
- GitHub Actions CI
|
|
62
|
+
- CodeQL
|
|
63
|
+
- OpenSSF Scorecard badge
|
|
64
|
+
- Dependabot
|
|
65
|
+
- npm package metadata
|
|
66
|
+
- MIT license
|
|
67
|
+
- documented security disclosure path
|
|
68
|
+
- packed-install dry-run validation in release workflows
|
|
69
|
+
|
|
70
|
+
## Review Questions
|
|
71
|
+
|
|
72
|
+
| Question | Short answer |
|
|
73
|
+
|---|---|
|
|
74
|
+
| Does local audit require cloud upload? | No. |
|
|
75
|
+
| Does the `nsa-mcp` profile imply NSA approval? | No. It is a public-guidance mapping only. |
|
|
76
|
+
| Can findings appear in GitHub Code Scanning? | Yes, via SARIF. |
|
|
77
|
+
| Can teams fail builds only on critical or high findings? | Yes, with explicit flags. |
|
|
78
|
+
| Can reports stay private? | Yes. |
|
|
79
|
+
| Can a reviewer reproduce results? | Yes, using the target command and profile in the report. |
|
|
80
|
+
| Does it execute destructive attack payloads? | No. Attack simulation is safe-mode metadata/schema/canary evidence. |
|
|
81
|
+
|
|
82
|
+
## Known Limitations
|
|
83
|
+
|
|
84
|
+
- Passing checks do not prove semantic safety.
|
|
85
|
+
- False positives require reviewer feedback and, where appropriate, documented suppressions.
|
|
86
|
+
- Some MCP servers require credentials or fixtures to test meaningful behavior safely.
|
|
87
|
+
- The first `nsa-mcp` profile is intentionally practical coverage, not a complete government control catalog.
|
package/docs/setup-ci-doctor.md
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
npx @kryptosai/mcp-observatory setup-ci --doctor
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
+
MCP server packages can also opt into install-time workflow creation by setting `mcpObservatory.autoSetupCi` in `package.json`. See [Automatic CI Integration](./automatic-ci-integration.md).
|
|
10
|
+
|
|
9
11
|
It checks:
|
|
10
12
|
|
|
11
13
|
- the GitHub Action workflow exists
|
|
@@ -18,10 +20,20 @@ It checks:
|
|
|
18
20
|
Use it after generating a kit:
|
|
19
21
|
|
|
20
22
|
```bash
|
|
21
|
-
npx @kryptosai/mcp-observatory setup-ci --all --command "npx -y <server-package>"
|
|
23
|
+
npx @kryptosai/mcp-observatory setup-ci --all --command "npx -y <server-package>" --sarif --schedule weekly
|
|
22
24
|
npx @kryptosai/mcp-observatory setup-ci --doctor
|
|
23
25
|
```
|
|
24
26
|
|
|
27
|
+
When a passing `test`, `run`, or single-target `scan` offers CI conversion, the generated kit includes SARIF/Code Scanning upload and weekly scheduled checks by default. Use `--no-ci-sarif` on that source command if a repo wants the lowest-permission workflow first.
|
|
28
|
+
|
|
29
|
+
Repair or upgrade an existing kit in one step:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npx @kryptosai/mcp-observatory setup-ci --doctor --fix
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
`--fix` preserves an existing target or command when it can infer one, then rewrites the adoption kit with deep checks, security checks, SARIF upload, maintainer copy, badge snippets, and weekly scheduled runs.
|
|
36
|
+
|
|
25
37
|
Use it during maintainer PRs to make review easier:
|
|
26
38
|
|
|
27
39
|
```bash
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Target Gallery
|
|
2
|
+
|
|
3
|
+
The Target Gallery turns the Safety Index into a maintainer-friendly map of the MCP ecosystem. It is not a leaderboard. It groups examples by the kind of agent dependency risk they represent.
|
|
4
|
+
|
|
5
|
+
For reproducible evidence, see the [MCP Server Safety Index](./mcp-server-safety-index.md). For contributor credit attached to accepted targets, see [MCP Observatory Contributors](./contributor-recognition.md) and [Contributor Proof Cards](./contributor-proof-cards/).
|
|
6
|
+
|
|
7
|
+
## Reference And Baseline Servers
|
|
8
|
+
|
|
9
|
+
| Target | Why Agents Care | Next Step |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Official everything server | Broad MCP protocol surface across tools, prompts, and resources | Keep as a baseline compatibility target |
|
|
12
|
+
| Official sequential thinking server | Small tool surface with readable schemas | Use as a simple CI starter target |
|
|
13
|
+
| Official memory server | Agent-facing persistent state | Watch schema and write boundaries |
|
|
14
|
+
|
|
15
|
+
## Filesystem, Browser, And Execution Boundaries
|
|
16
|
+
|
|
17
|
+
| Target | Why Agents Care | Next Step |
|
|
18
|
+
| --- | --- | --- |
|
|
19
|
+
| Official filesystem server | File access boundaries need harmless test roots | Review path scope before production |
|
|
20
|
+
| BrowserMCP | Browser-control tools can affect live sessions | Add read-only CI before agent rollout |
|
|
21
|
+
| Microsoft Playwright MCP | Browser automation can cross into code execution policy | Treat findings as policy review prompts |
|
|
22
|
+
| Puppeteer MCP server | Browser automation needs clear execution boundaries | Keep intentional browser checks explicit |
|
|
23
|
+
| ExecuteAutomation Playwright MCP | Startup/listing reproducibility affects agent trust | Start with maintainer conversation |
|
|
24
|
+
|
|
25
|
+
## Retrieval, Documentation, And Prompt Surfaces
|
|
26
|
+
|
|
27
|
+
| Target | Why Agents Care | Next Step |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| Context7 | Retrieval tools can move untrusted text into agent context | Add drift and schema checks |
|
|
30
|
+
| Promptopia | Prompt/resource contracts shape agent behavior | Keep generated evidence current |
|
|
31
|
+
| Ref tools | Developer-tool inventory should stay stable | Add CI and badge proof |
|
|
32
|
+
|
|
33
|
+
## Infrastructure And Artifact-Producing Tools
|
|
34
|
+
|
|
35
|
+
| Target | Why Agents Care | Next Step |
|
|
36
|
+
| --- | --- | --- |
|
|
37
|
+
| OpenTofu MCP server | Infrastructure tools can influence production changes | Run checks before unattended agents use it |
|
|
38
|
+
| AntV chart MCP server | Artifact-producing tools need clear schemas and outputs | Keep CI evidence public |
|
|
39
|
+
|
|
40
|
+
## Add A Target
|
|
41
|
+
|
|
42
|
+
Use the [target contribution guide](./target-contribution-guide.md). The best target has a public package, no secrets, no paid dependency, and a harmless startup command.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm run safety-index
|
|
46
|
+
npm test -- tests/safety-index.test.ts
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Accepted target PRs can receive a Target Scout or Target Verifier role, an All Contributors entry, and a proof card under `docs/contributor-proof-cards/` that links to the merged PR and generated public evidence.
|
package/docs/target-registry.md
CHANGED
|
@@ -23,6 +23,7 @@ Every accepted target creates several useful surfaces:
|
|
|
23
23
|
- JSON and Markdown evidence artifacts
|
|
24
24
|
- a maintainer conversation starter
|
|
25
25
|
- a badge or CI adoption path
|
|
26
|
+
- contributor recognition and a proof-card link
|
|
26
27
|
- a small contribution that another agent can copy
|
|
27
28
|
|
|
28
29
|
That means one tiny PR can produce docs, evidence, search surface, backlinks, and future issues.
|
|
@@ -89,10 +90,13 @@ Add one object to `docs/safety-index/targets.json`:
|
|
|
89
90
|
3. Add one target entry.
|
|
90
91
|
4. Run the Safety Index locally.
|
|
91
92
|
5. Open a small PR with the target and generated evidence.
|
|
92
|
-
6.
|
|
93
|
+
6. Add or request a contributor proof card.
|
|
94
|
+
7. Optionally ask the maintainer if they want an Observatory badge or CI check.
|
|
93
95
|
|
|
94
96
|
Use the detailed walkthrough in [Target Contribution Guide](./target-contribution-guide.md).
|
|
95
97
|
|
|
98
|
+
Accepted target contributions can receive a role on [MCP Observatory Contributors](./contributor-recognition.md), an All Contributors entry, and a Markdown proof card under [`docs/contributor-proof-cards/`](./contributor-proof-cards/).
|
|
99
|
+
|
|
96
100
|
## Contribution Queue
|
|
97
101
|
|
|
98
102
|
Ready-made target tasks live under the [`target-registry` label](https://github.com/KryptosAI/mcp-observatory/issues?q=is%3Aissue%20is%3Aopen%20label%3Atarget-registry). Pick one issue, make one small PR, and include generated evidence.
|