@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.
Files changed (160) hide show
  1. package/COMMERCIAL.md +28 -2
  2. package/CONTRIBUTORS.md +39 -0
  3. package/README.md +114 -22
  4. package/dist/src/action-receipt.d.ts +20 -0
  5. package/dist/src/action-receipt.js +85 -0
  6. package/dist/src/action-receipt.js.map +1 -0
  7. package/dist/src/adapters/http.js +1 -5
  8. package/dist/src/adapters/http.js.map +1 -1
  9. package/dist/src/audit.d.ts +64 -0
  10. package/dist/src/audit.js +359 -0
  11. package/dist/src/audit.js.map +1 -0
  12. package/dist/src/cassette.js +3 -2
  13. package/dist/src/cassette.js.map +1 -1
  14. package/dist/src/checks/attack-sim.d.ts +20 -0
  15. package/dist/src/checks/attack-sim.js +316 -0
  16. package/dist/src/checks/attack-sim.js.map +1 -0
  17. package/dist/src/ci-issue.js +4 -3
  18. package/dist/src/ci-issue.js.map +1 -1
  19. package/dist/src/cli.js +25 -4
  20. package/dist/src/cli.js.map +1 -1
  21. package/dist/src/commands/attack-sim.d.ts +2 -0
  22. package/dist/src/commands/attack-sim.js +220 -0
  23. package/dist/src/commands/attack-sim.js.map +1 -0
  24. package/dist/src/commands/audit.d.ts +2 -0
  25. package/dist/src/commands/audit.js +132 -0
  26. package/dist/src/commands/audit.js.map +1 -0
  27. package/dist/src/commands/init-ci.d.ts +3 -0
  28. package/dist/src/commands/init-ci.js +78 -13
  29. package/dist/src/commands/init-ci.js.map +1 -1
  30. package/dist/src/commands/legacy.js +8 -1
  31. package/dist/src/commands/legacy.js.map +1 -1
  32. package/dist/src/commands/receipt.d.ts +2 -0
  33. package/dist/src/commands/receipt.js +113 -0
  34. package/dist/src/commands/receipt.js.map +1 -0
  35. package/dist/src/commands/scan.js +30 -6
  36. package/dist/src/commands/scan.js.map +1 -1
  37. package/dist/src/commands/score.js +63 -0
  38. package/dist/src/commands/score.js.map +1 -1
  39. package/dist/src/commands/serve.js +9 -1
  40. package/dist/src/commands/serve.js.map +1 -1
  41. package/dist/src/commands/setup-ci-conversion.d.ts +3 -1
  42. package/dist/src/commands/setup-ci-conversion.js +23 -8
  43. package/dist/src/commands/setup-ci-conversion.js.map +1 -1
  44. package/dist/src/commands/telemetry.js +20 -14
  45. package/dist/src/commands/telemetry.js.map +1 -1
  46. package/dist/src/commands/test.js +31 -2
  47. package/dist/src/commands/test.js.map +1 -1
  48. package/dist/src/findings.d.ts +1 -0
  49. package/dist/src/findings.js +42 -1
  50. package/dist/src/findings.js.map +1 -1
  51. package/dist/src/history.js +3 -2
  52. package/dist/src/history.js.map +1 -1
  53. package/dist/src/index.d.ts +4 -0
  54. package/dist/src/index.js +4 -0
  55. package/dist/src/index.js.map +1 -1
  56. package/dist/src/integrations/smithery.js +5 -1
  57. package/dist/src/integrations/smithery.js.map +1 -1
  58. package/dist/src/receipt.d.ts +100 -0
  59. package/dist/src/receipt.js +375 -0
  60. package/dist/src/receipt.js.map +1 -0
  61. package/dist/src/reporters/attack-sim.d.ts +2 -0
  62. package/dist/src/reporters/attack-sim.js +89 -0
  63. package/dist/src/reporters/attack-sim.js.map +1 -0
  64. package/dist/src/reporters/pr-comment.js +20 -6
  65. package/dist/src/reporters/pr-comment.js.map +1 -1
  66. package/dist/src/reporters/sarif.js +11 -1
  67. package/dist/src/reporters/sarif.js.map +1 -1
  68. package/dist/src/runner.d.ts +3 -0
  69. package/dist/src/runner.js +5 -0
  70. package/dist/src/runner.js.map +1 -1
  71. package/dist/src/score.js +1 -1
  72. package/dist/src/score.js.map +1 -1
  73. package/dist/src/security-profiles.d.ts +13 -0
  74. package/dist/src/security-profiles.js +59 -0
  75. package/dist/src/security-profiles.js.map +1 -0
  76. package/dist/src/storage.js +3 -2
  77. package/dist/src/storage.js.map +1 -1
  78. package/dist/src/telemetry.d.ts +10 -0
  79. package/dist/src/telemetry.js +17 -1
  80. package/dist/src/telemetry.js.map +1 -1
  81. package/dist/src/types.d.ts +1 -1
  82. package/dist/src/utils/files.d.ts +1 -0
  83. package/dist/src/utils/files.js +21 -0
  84. package/dist/src/utils/files.js.map +1 -0
  85. package/dist/src/utils/ids.js +18 -5
  86. package/dist/src/utils/ids.js.map +1 -1
  87. package/dist/src/utils/url.d.ts +2 -0
  88. package/dist/src/utils/url.js +15 -0
  89. package/dist/src/utils/url.js.map +1 -0
  90. package/dist/src/validate.js +1 -1
  91. package/dist/src/validate.js.map +1 -1
  92. package/docs/10x-agentic-growth-sprint.md +47 -0
  93. package/docs/agent-ecosystem-promotion-plan.md +244 -0
  94. package/docs/agent-tasks.md +95 -0
  95. package/docs/agentic-contributor-outreach.md +52 -0
  96. package/docs/automatic-ci-integration.md +33 -0
  97. package/docs/campaign-attribution.md +58 -0
  98. package/docs/code-scanning-demo.md +57 -0
  99. package/docs/commercial-boundary.md +83 -0
  100. package/docs/contributor-proof-cards/README.md +33 -0
  101. package/docs/contributor-recognition.md +92 -0
  102. package/docs/examples/nsa-mcp-audit-report.md +372 -0
  103. package/docs/examples/nsa-mcp-results.sarif +930 -0
  104. package/docs/examples/nsa-mcp-score.json +13 -0
  105. package/docs/feishu-lark-mcp.md +1 -1
  106. package/docs/github-code-scanning-for-mcp.md +1 -1
  107. package/docs/government-enterprise-pilot.md +93 -0
  108. package/docs/launch.md +64 -0
  109. package/docs/mcp-attack-simulator.md +57 -0
  110. package/docs/mcp-receipts.md +109 -0
  111. package/docs/mcp-server-safety-index.md +29 -22
  112. package/docs/nsa-mcp-audit-ci.md +88 -0
  113. package/docs/procurement-one-pager.md +74 -0
  114. package/docs/proof.md +5 -2
  115. package/docs/public-guidance-crosswalk.md +48 -0
  116. package/docs/receipt-graph.md +54 -0
  117. package/docs/safety-index/artifacts/antv-chart-server.json +40 -22
  118. package/docs/safety-index/artifacts/antv-chart-server.md +22 -9
  119. package/docs/safety-index/artifacts/browsermcp-server.json +36 -18
  120. package/docs/safety-index/artifacts/browsermcp-server.md +22 -9
  121. package/docs/safety-index/artifacts/context7-server.json +83 -26
  122. package/docs/safety-index/artifacts/context7-server.md +33 -20
  123. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +2438 -0
  124. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +176 -0
  125. package/docs/safety-index/artifacts/everything-server.json +150 -57
  126. package/docs/safety-index/artifacts/everything-server.md +36 -23
  127. package/docs/safety-index/artifacts/executeautomation-playwright-server.json +162 -19
  128. package/docs/safety-index/artifacts/executeautomation-playwright-server.md +25 -12
  129. package/docs/safety-index/artifacts/filesystem-server.json +221 -19
  130. package/docs/safety-index/artifacts/filesystem-server.md +24 -11
  131. package/docs/safety-index/artifacts/kubernetes-server.attack.json +1559 -0
  132. package/docs/safety-index/artifacts/kubernetes-server.attack.md +43 -0
  133. package/docs/safety-index/artifacts/kubernetes-server.attack.sarif +2857 -0
  134. package/docs/safety-index/artifacts/kubernetes-server.json +1573 -0
  135. package/docs/safety-index/artifacts/kubernetes-server.md +176 -0
  136. package/docs/safety-index/artifacts/memory-server.json +93 -32
  137. package/docs/safety-index/artifacts/memory-server.md +45 -25
  138. package/docs/safety-index/artifacts/opentofu-server.json +44 -18
  139. package/docs/safety-index/artifacts/opentofu-server.md +23 -10
  140. package/docs/safety-index/artifacts/playwright-mcp-server.json +177 -21
  141. package/docs/safety-index/artifacts/playwright-mcp-server.md +27 -14
  142. package/docs/safety-index/artifacts/promptopia-server.json +45 -19
  143. package/docs/safety-index/artifacts/promptopia-server.md +21 -8
  144. package/docs/safety-index/artifacts/puppeteer-server.json +77 -22
  145. package/docs/safety-index/artifacts/puppeteer-server.md +28 -15
  146. package/docs/safety-index/artifacts/ref-tools-server.json +36 -18
  147. package/docs/safety-index/artifacts/ref-tools-server.md +21 -8
  148. package/docs/safety-index/artifacts/sequential-thinking-server.json +38 -21
  149. package/docs/safety-index/artifacts/sequential-thinking-server.md +22 -9
  150. package/docs/safety-index/targets.json +90 -14
  151. package/docs/security-due-diligence.md +87 -0
  152. package/docs/setup-ci-doctor.md +13 -1
  153. package/docs/target-gallery.md +49 -0
  154. package/docs/target-registry.md +5 -1
  155. package/docs/tool-call-receipts.md +115 -0
  156. package/examples/insecure-mcp-server/mcp-observatory.target.json +13 -0
  157. package/examples/insecure-mcp-server/server.mjs +62 -0
  158. package/package.json +31 -2
  159. package/schemas/run-artifact.schema.json +1 -0
  160. package/scripts/postinstall.mjs +138 -0
@@ -0,0 +1,176 @@
1
+ # MCP Observatory Run Report
2
+
3
+ Generated at 2026-07-06T19:49:52.194Z
4
+
5
+ ## Target and Environment Metadata
6
+
7
+ - Target: `cyanheads-git-mcp-server`
8
+ - Adapter: `local-process`
9
+ - Command: `npx -y @cyanheads/git-mcp-server`
10
+ - Server: `@cyanheads/git-mcp-server 2.15.1`
11
+ - Platform: `darwin 25.5.0`
12
+ - Node: `v22.22.1`
13
+
14
+ ## Executive Summary
15
+
16
+ **Health Score: 84/100 (B)**
17
+
18
+ | Dimension | Score | Weight |
19
+ | --- | --- | --- |
20
+ | Protocol Compliance | 100/100 | 30% |
21
+ | Schema Quality | 60/100 | 20% |
22
+ | Security | 60/100 | 20% |
23
+ | Reliability | 100/100 | 20% |
24
+ | Performance | 100/100 | 10% |
25
+
26
+ | Gate | Total | Pass | Fail | Partial | Unsupported | Flaky | Skipped |
27
+ | --- | --- | --- | --- | --- | --- | --- | --- |
28
+ | pass | 8 | 4 | 0 | 4 | 0 | 0 | 0 |
29
+
30
+ ## At a Glance
31
+
32
+ - Safety verdict: **Needs review** — The server is usable, but caveated checks should be reviewed before agents depend on it.
33
+ - Top risks: attack-sim: Safe attack simulation found 19 finding(s): 0 high, 19 medium, 0 low.; schema-quality: Found 17 quality finding(s) across 30 item(s): 0 warnings, 17 info.; security: Found 19 security finding(s): 0 high, 19 medium, 0 low.
34
+ - Regression/schema drift: Run `mcp-observatory diff <previous-run.json> <current-run.json>` to classify regressions and schema drift.
35
+ - Failing checks: none
36
+ - Partial or flaky checks: security-lite, schema-quality, security, attack-sim
37
+ - Skipped checks: none
38
+ - Unsupported checks: none
39
+ - Suggested next step: Review the caveated checks next: security-lite, schema-quality, security, attack-sim.
40
+ - CI next step: `Add CI: npx @kryptosai/mcp-observatory setup-ci --all --command "npx -y <server-package>"`
41
+
42
+ ## Regressions and Recoveries
43
+
44
+ _Use the `diff` command against another run artifact to classify regressions and recoveries over time._
45
+
46
+ ## Full Capability Status Table
47
+
48
+ | Focus | Check | Status | Duration (ms) | Message |
49
+ | --- | --- | --- | --- | --- |
50
+ | healthy | conformance | pass | 35.62 | All 7 conformance checks passed. |
51
+ | healthy | prompts | pass | 0.65 | Advertised capability responded with the minimal expected shape (1 item). |
52
+ | healthy | resources | pass | 0.60 | Advertised capability responded with the minimal expected shape (2 items). |
53
+ | healthy | tools | pass | 27.61 | Advertised capability responded with the minimal expected shape (28 items). |
54
+ | review | attack-sim | partial | 18.08 | Safe attack simulation found 19 finding(s): 0 high, 19 medium, 0 low. |
55
+ | review | schema-quality | partial | 17.43 | Found 17 quality finding(s) across 30 item(s): 0 warnings, 17 info. |
56
+ | review | security | partial | 16.14 | Found 19 security finding(s): 0 high, 19 medium, 0 low. |
57
+ | review | security-lite | partial | 0.08 | Found 19 security finding(s): 0 high, 19 medium, 0 low. |
58
+
59
+ ## Evidence Snippets
60
+
61
+ ### conformance — pass
62
+
63
+ Summary: All 7 conformance checks passed.
64
+
65
+ - Endpoint: `conformance/check`
66
+ - Advertised: `true`
67
+ - Responded: `true`
68
+ - Minimal shape present: `true`
69
+ - Item count: `7`
70
+ - Identifiers: none
71
+ - Diagnostics: [pass] capabilities-present: Server returned capabilities object., [pass] server-info: Server provided initialization info., [pass] tools-capability-match: tools/list returned 28 tool(s). (+4 more)
72
+
73
+ ### prompts — pass
74
+
75
+ Summary: Advertised capability responded with the minimal expected shape (1 item).
76
+
77
+ - Endpoint: `prompts/list`
78
+ - Advertised: `true`
79
+ - Responded: `true`
80
+ - Minimal shape present: `true`
81
+ - Item count: `1`
82
+ - Identifiers: git_wrapup
83
+ - Diagnostics: {"level":30,"time":1783367393061,"env":"development","version":"2.15.1","pid":13590,"transport":"stdio","requestId":"A40P7-B7WJU","timestamp":"2026-07-06T19:49:53.057Z","operation":"connectStdioTransport","transportType":"Stdio","msg":"Attempting to connect stdio transport..."}, {"level":20,"time":1783367393061,"env":"development","version":"2.15.1","pid":13590,"transport":"stdio","requestId":"A40P7-B7WJU","timestamp":"2026-07-06T19:49:53.057Z","operation":"connectStdioTransport","transportType":"Stdio","msg":"Creating StdioServerTransport instance..."}, {"level":20,"time":1783367393061,"env":"development","version":"2.15.1","pid":13590,"transport":"stdio","requestId":"A40P7-B7WJU","timestamp":"2026-07-06T19:49:53.057Z","operation":"connectStdioTransport","transportType":"Stdio","msg":"Connecting McpServer instance to StdioServerTransport..."} (+2 more)
84
+
85
+ ### resources — pass
86
+
87
+ Summary: Advertised capability responded with the minimal expected shape (2 items).
88
+
89
+ - Endpoint: `resources/list`
90
+ - Advertised: `true`
91
+ - Responded: `true`
92
+ - Minimal shape present: `true`
93
+ - Item count: `1`
94
+ - Identifiers: git://working-directory
95
+ - Diagnostics: {"level":30,"time":1783367393061,"env":"development","version":"2.15.1","pid":13590,"transport":"stdio","requestId":"A40P7-B7WJU","timestamp":"2026-07-06T19:49:53.057Z","operation":"connectStdioTransport","transportType":"Stdio","msg":"Attempting to connect stdio transport..."}, {"level":20,"time":1783367393061,"env":"development","version":"2.15.1","pid":13590,"transport":"stdio","requestId":"A40P7-B7WJU","timestamp":"2026-07-06T19:49:53.057Z","operation":"connectStdioTransport","transportType":"Stdio","msg":"Creating StdioServerTransport instance..."}, {"level":20,"time":1783367393061,"env":"development","version":"2.15.1","pid":13590,"transport":"stdio","requestId":"A40P7-B7WJU","timestamp":"2026-07-06T19:49:53.057Z","operation":"connectStdioTransport","transportType":"Stdio","msg":"Connecting McpServer instance to StdioServerTransport..."} (+2 more)
96
+ - Endpoint: `resources/templates/list`
97
+ - Advertised: `true`
98
+ - Responded: `true`
99
+ - Minimal shape present: `true`
100
+ - Item count: `1`
101
+ - Identifiers: git://working-directory
102
+ - Diagnostics: {"level":30,"time":1783367393061,"env":"development","version":"2.15.1","pid":13590,"transport":"stdio","requestId":"A40P7-B7WJU","timestamp":"2026-07-06T19:49:53.057Z","operation":"connectStdioTransport","transportType":"Stdio","msg":"Attempting to connect stdio transport..."}, {"level":20,"time":1783367393061,"env":"development","version":"2.15.1","pid":13590,"transport":"stdio","requestId":"A40P7-B7WJU","timestamp":"2026-07-06T19:49:53.057Z","operation":"connectStdioTransport","transportType":"Stdio","msg":"Creating StdioServerTransport instance..."}, {"level":20,"time":1783367393061,"env":"development","version":"2.15.1","pid":13590,"transport":"stdio","requestId":"A40P7-B7WJU","timestamp":"2026-07-06T19:49:53.057Z","operation":"connectStdioTransport","transportType":"Stdio","msg":"Connecting McpServer instance to StdioServerTransport..."} (+2 more)
103
+
104
+ ### tools — pass
105
+
106
+ Summary: Advertised capability responded with the minimal expected shape (28 items).
107
+
108
+ - Endpoint: `tools/list`
109
+ - Advertised: `true`
110
+ - Responded: `true`
111
+ - Minimal shape present: `true`
112
+ - Item count: `28`
113
+ - Identifiers: git_add, git_blame, git_branch, git_changelog_analyze, git_checkout (+23 more)
114
+ - Diagnostics: none
115
+
116
+ ### attack-sim — partial
117
+
118
+ Summary: Safe attack simulation found 19 finding(s): 0 high, 19 medium, 0 low.
119
+
120
+ - Endpoint: `attack-sim/safe`
121
+ - Advertised: `true`
122
+ - Responded: `true`
123
+ - Minimal shape present: `true`
124
+ - Item count: `19`
125
+ - Identifiers: git_add, git_branch, git_checkout, git_cherry_pick, git_clean (+14 more)
126
+ - Diagnostics: [medium] Tool "git_add" combines broad parameters (path) with destructive or non-read-only behavior., [medium] Tool "git_branch" combines broad parameters (path) with destructive or non-read-only behavior., [medium] Tool "git_checkout" combines broad parameters (path) with destructive or non-read-only behavior. (+16 more)
127
+
128
+ ### schema-quality — partial
129
+
130
+ Summary: Found 17 quality finding(s) across 30 item(s): 0 warnings, 17 info.
131
+
132
+ - Endpoint: `schema-quality/scan`
133
+ - Advertised: `true`
134
+ - Responded: `true`
135
+ - Minimal shape present: `true`
136
+ - Item count: `17`
137
+ - Identifiers: git_add, git_branch, git_clean, git_diff, git_fetch (+12 more)
138
+ - Diagnostics: [info] tool "git_add": Has properties but no 'required' array declared, [info] tool "git_branch": Has properties but no 'required' array declared, [info] tool "git_clean": Has properties but no 'required' array declared (+14 more)
139
+
140
+ ### security — partial
141
+
142
+ Summary: Found 19 security finding(s): 0 high, 19 medium, 0 low.
143
+
144
+ - Endpoint: `security/scan`
145
+ - Advertised: `true`
146
+ - Responded: `true`
147
+ - Minimal shape present: `true`
148
+ - Item count: `19`
149
+ - Identifiers: git_add, git_branch, git_checkout, git_cherry_pick, git_clean (+14 more)
150
+ - Diagnostics: [medium] Tool "git_add" accepts filesystem paths and has destructive capabilities., [medium] Tool "git_branch" accepts filesystem paths and has destructive capabilities., [medium] Tool "git_checkout" accepts filesystem paths and has destructive capabilities. (+16 more)
151
+
152
+ ### security-lite — partial
153
+
154
+ Summary: Found 19 security finding(s): 0 high, 19 medium, 0 low.
155
+
156
+ - Endpoint: `security/scan-lite`
157
+ - Advertised: `true`
158
+ - Responded: `true`
159
+ - Minimal shape present: `true`
160
+ - Item count: `19`
161
+ - Identifiers: git_add, git_branch, git_checkout, git_cherry_pick, git_clean (+14 more)
162
+ - Diagnostics: [medium] Tool "git_add" accepts filesystem paths and has destructive capabilities., [medium] Tool "git_branch" accepts filesystem paths and has destructive capabilities., [medium] Tool "git_checkout" accepts filesystem paths and has destructive capabilities. (+16 more)
163
+
164
+ ## Reproduction Commands
165
+
166
+ ```bash
167
+ npm run cli -- run --target <path-to-target-config.json>
168
+ npm run cli -- report --run <path-to-run-artifact.json> --format markdown
169
+ ```
170
+
171
+ ## Artifact Provenance
172
+
173
+ - Artifact type: `run`
174
+ - Schema version: `1.0.0`
175
+ - Run ID: `run_2026-07-06T194952194Z_80b1e6dd`
176
+ - Gate: `pass`
@@ -2,9 +2,9 @@
2
2
  "artifactType": "run",
3
3
  "schemaVersion": "1.0.0",
4
4
  "gate": "pass",
5
- "runId": "run_2026-06-24T020721281Z_c337e720",
6
- "createdAt": "2026-06-24T02:07:21.282Z",
7
- "toolVersion": "0.24.0",
5
+ "runId": "run_2026-07-06T194944859Z_dd0288c3",
6
+ "createdAt": "2026-07-06T19:49:44.860Z",
7
+ "toolVersion": "0.28.0",
8
8
  "target": {
9
9
  "targetId": "everything-server",
10
10
  "adapter": "local-process",
@@ -29,8 +29,8 @@
29
29
  "nodeVersion": "v22.22.1"
30
30
  },
31
31
  "summary": {
32
- "total": 7,
33
- "pass": 6,
32
+ "total": 8,
33
+ "pass": 7,
34
34
  "fail": 0,
35
35
  "partial": 1,
36
36
  "unsupported": 0,
@@ -43,7 +43,7 @@
43
43
  "id": "tools",
44
44
  "capability": "tools",
45
45
  "status": "pass",
46
- "durationMs": 7.354332999999997,
46
+ "durationMs": 6.7089169999999285,
47
47
  "message": "Advertised capability responded with the minimal expected shape (13 items).",
48
48
  "evidence": [
49
49
  {
@@ -82,7 +82,6 @@
82
82
  "required": [
83
83
  "message"
84
84
  ],
85
- "additionalProperties": false,
86
85
  "$schema": "http://json-schema.org/draft-07/schema#"
87
86
  },
88
87
  "get-annotated-message": {
@@ -98,15 +97,14 @@
98
97
  "description": "Type of message to demonstrate different annotation patterns"
99
98
  },
100
99
  "includeImage": {
101
- "type": "boolean",
102
100
  "default": false,
103
- "description": "Whether to include an example image"
101
+ "description": "Whether to include an example image",
102
+ "type": "boolean"
104
103
  }
105
104
  },
106
105
  "required": [
107
106
  "messageType"
108
107
  ],
109
- "additionalProperties": false,
110
108
  "$schema": "http://json-schema.org/draft-07/schema#"
111
109
  },
112
110
  "get-env": {
@@ -118,34 +116,32 @@
118
116
  "type": "object",
119
117
  "properties": {
120
118
  "count": {
119
+ "default": 3,
120
+ "description": "Number of resource links to return (1-10)",
121
121
  "type": "number",
122
122
  "minimum": 1,
123
- "maximum": 10,
124
- "default": 3,
125
- "description": "Number of resource links to return (1-10)"
123
+ "maximum": 10
126
124
  }
127
125
  },
128
- "additionalProperties": false,
129
126
  "$schema": "http://json-schema.org/draft-07/schema#"
130
127
  },
131
128
  "get-resource-reference": {
132
129
  "type": "object",
133
130
  "properties": {
134
131
  "resourceType": {
132
+ "default": "Text",
135
133
  "type": "string",
136
134
  "enum": [
137
135
  "Text",
138
136
  "Blob"
139
- ],
140
- "default": "Text"
137
+ ]
141
138
  },
142
139
  "resourceId": {
143
- "type": "number",
144
140
  "default": 1,
145
- "description": "ID of the text resource to fetch"
141
+ "description": "ID of the text resource to fetch",
142
+ "type": "number"
146
143
  }
147
144
  },
148
- "additionalProperties": false,
149
145
  "$schema": "http://json-schema.org/draft-07/schema#"
150
146
  },
151
147
  "get-structured-content": {
@@ -164,7 +160,6 @@
164
160
  "required": [
165
161
  "location"
166
162
  ],
167
- "additionalProperties": false,
168
163
  "$schema": "http://json-schema.org/draft-07/schema#"
169
164
  },
170
165
  "get-sum": {
@@ -183,7 +178,6 @@
183
178
  "a",
184
179
  "b"
185
180
  ],
186
- "additionalProperties": false,
187
181
  "$schema": "http://json-schema.org/draft-07/schema#"
188
182
  },
189
183
  "get-tiny-image": {
@@ -195,27 +189,26 @@
195
189
  "type": "object",
196
190
  "properties": {
197
191
  "name": {
192
+ "default": "README.md.gz",
198
193
  "type": "string",
199
- "description": "Name of the output file",
200
- "default": "README.md.gz"
194
+ "description": "Name of the output file"
201
195
  },
202
196
  "data": {
197
+ "default": "https://raw.githubusercontent.com/modelcontextprotocol/servers/refs/heads/main/README.md",
203
198
  "type": "string",
204
199
  "format": "uri",
205
- "description": "URL or data URI of the file content to compress",
206
- "default": "https://raw.githubusercontent.com/modelcontextprotocol/servers/refs/heads/main/README.md"
200
+ "description": "URL or data URI of the file content to compress"
207
201
  },
208
202
  "outputType": {
203
+ "default": "resourceLink",
204
+ "description": "How the resulting gzipped file should be returned. 'resourceLink' returns a link to a resource that can be read later, 'resource' returns a full resource object.",
209
205
  "type": "string",
210
206
  "enum": [
211
207
  "resourceLink",
212
208
  "resource"
213
- ],
214
- "default": "resourceLink",
215
- "description": "How the resulting gzipped file should be returned. 'resourceLink' returns a link to a resource that can be read later, 'resource' returns a full resource object."
209
+ ]
216
210
  }
217
211
  },
218
- "additionalProperties": false,
219
212
  "$schema": "http://json-schema.org/draft-07/schema#"
220
213
  },
221
214
  "toggle-simulated-logging": {
@@ -232,17 +225,16 @@
232
225
  "type": "object",
233
226
  "properties": {
234
227
  "duration": {
235
- "type": "number",
236
228
  "default": 10,
237
- "description": "Duration of the operation in seconds"
229
+ "description": "Duration of the operation in seconds",
230
+ "type": "number"
238
231
  },
239
232
  "steps": {
240
- "type": "number",
241
233
  "default": 5,
242
- "description": "Number of steps in the operation"
234
+ "description": "Number of steps in the operation",
235
+ "type": "number"
243
236
  }
244
237
  },
245
- "additionalProperties": false,
246
238
  "$schema": "http://json-schema.org/draft-07/schema#"
247
239
  },
248
240
  "simulate-research-query": {
@@ -253,15 +245,14 @@
253
245
  "description": "The research topic to investigate"
254
246
  },
255
247
  "ambiguous": {
256
- "type": "boolean",
257
248
  "default": false,
258
- "description": "Simulate an ambiguous query that requires clarification (triggers input_required status)"
249
+ "description": "Simulate an ambiguous query that requires clarification (triggers input_required status)",
250
+ "type": "boolean"
259
251
  }
260
252
  },
261
253
  "required": [
262
254
  "topic"
263
255
  ],
264
- "additionalProperties": false,
265
256
  "$schema": "http://json-schema.org/draft-07/schema#"
266
257
  }
267
258
  }
@@ -272,7 +263,7 @@
272
263
  "id": "prompts",
273
264
  "capability": "prompts",
274
265
  "status": "pass",
275
- "durationMs": 0.74087499999996,
266
+ "durationMs": 0.6612079999999878,
276
267
  "message": "Advertised capability responded with the minimal expected shape (4 items).",
277
268
  "evidence": [
278
269
  {
@@ -297,7 +288,7 @@
297
288
  "id": "resources",
298
289
  "capability": "resources",
299
290
  "status": "pass",
300
- "durationMs": 1.0068340000000262,
291
+ "durationMs": 1.076082999999926,
301
292
  "message": "Advertised capability responded with the minimal expected shape (9 items).",
302
293
  "evidence": [
303
294
  {
@@ -339,15 +330,37 @@
339
330
  "id": "security-lite",
340
331
  "capability": "security-lite",
341
332
  "status": "pass",
342
- "durationMs": 0.47954200000003766,
343
- "message": "No security issues detected (lightweight scan).",
333
+ "durationMs": 0.5017080000000078,
334
+ "message": "Found 2 security finding(s): 0 high, 0 medium, 2 low.",
344
335
  "evidence": [
345
336
  {
346
337
  "endpoint": "security/scan-lite",
347
338
  "advertised": true,
348
339
  "responded": true,
349
340
  "minimalShapePresent": true,
350
- "itemCount": 0
341
+ "itemCount": 2,
342
+ "identifiers": [
343
+ "toggle-simulated-logging",
344
+ "toggle-subscriber-updates"
345
+ ],
346
+ "diagnostics": [
347
+ "[low] Tool \"toggle-simulated-logging\" has an empty schema but is marked as destructive.",
348
+ "[low] Tool \"toggle-subscriber-updates\" has an empty schema but is marked as destructive."
349
+ ],
350
+ "findings": [
351
+ {
352
+ "ruleId": "permissive-schema",
353
+ "severity": "low",
354
+ "toolName": "toggle-simulated-logging",
355
+ "message": "Tool \"toggle-simulated-logging\" has an empty schema but is marked as destructive."
356
+ },
357
+ {
358
+ "ruleId": "permissive-schema",
359
+ "severity": "low",
360
+ "toolName": "toggle-subscriber-updates",
361
+ "message": "Tool \"toggle-subscriber-updates\" has an empty schema but is marked as destructive."
362
+ }
363
+ ]
351
364
  }
352
365
  ]
353
366
  },
@@ -355,7 +368,7 @@
355
368
  "id": "conformance",
356
369
  "capability": "conformance",
357
370
  "status": "pass",
358
- "durationMs": 3.849082999999837,
371
+ "durationMs": 3.4615420000000086,
359
372
  "message": "All 7 conformance checks passed.",
360
373
  "evidence": [
361
374
  {
@@ -381,27 +394,67 @@
381
394
  "id": "schema-quality",
382
395
  "capability": "schema-quality",
383
396
  "status": "partial",
384
- "durationMs": 1.885542000000214,
385
- "message": "Found 5 quality finding(s) across 24 item(s): 0 warnings, 5 info.",
397
+ "durationMs": 1.3427919999999176,
398
+ "message": "Found 6 quality finding(s) across 24 item(s): 0 warnings, 6 info.",
386
399
  "evidence": [
387
400
  {
388
401
  "endpoint": "schema-quality/scan",
389
402
  "advertised": true,
390
403
  "responded": true,
391
404
  "minimalShapePresent": true,
392
- "itemCount": 5,
405
+ "itemCount": 6,
393
406
  "identifiers": [
394
407
  "get-resource-links",
395
408
  "get-resource-reference",
396
409
  "gzip-file-as-resource",
397
- "trigger-long-running-operation"
410
+ "trigger-long-running-operation",
411
+ "args-prompt"
398
412
  ],
399
413
  "diagnostics": [
400
414
  "[info] tool \"get-resource-links\": Has properties but no 'required' array declared",
401
415
  "[info] tool \"get-resource-reference\": Has properties but no 'required' array declared",
402
416
  "[info] tool \"get-resource-reference\": Property 'resourceType' missing description",
403
417
  "[info] tool \"gzip-file-as-resource\": Has properties but no 'required' array declared",
404
- "[info] tool \"trigger-long-running-operation\": Has properties but no 'required' array declared"
418
+ "[info] tool \"trigger-long-running-operation\": Has properties but no 'required' array declared",
419
+ "[info] prompt \"args-prompt\": Argument 'state' missing description"
420
+ ],
421
+ "findings": [
422
+ {
423
+ "itemType": "tool",
424
+ "itemName": "get-resource-links",
425
+ "issue": "Has properties but no 'required' array declared",
426
+ "severity": "info"
427
+ },
428
+ {
429
+ "itemType": "tool",
430
+ "itemName": "get-resource-reference",
431
+ "issue": "Has properties but no 'required' array declared",
432
+ "severity": "info"
433
+ },
434
+ {
435
+ "itemType": "tool",
436
+ "itemName": "get-resource-reference",
437
+ "issue": "Property 'resourceType' missing description",
438
+ "severity": "info"
439
+ },
440
+ {
441
+ "itemType": "tool",
442
+ "itemName": "gzip-file-as-resource",
443
+ "issue": "Has properties but no 'required' array declared",
444
+ "severity": "info"
445
+ },
446
+ {
447
+ "itemType": "tool",
448
+ "itemName": "trigger-long-running-operation",
449
+ "issue": "Has properties but no 'required' array declared",
450
+ "severity": "info"
451
+ },
452
+ {
453
+ "itemType": "prompt",
454
+ "itemName": "args-prompt",
455
+ "issue": "Argument 'state' missing description",
456
+ "severity": "info"
457
+ }
405
458
  ]
406
459
  }
407
460
  ]
@@ -410,15 +463,54 @@
410
463
  "id": "security",
411
464
  "capability": "security",
412
465
  "status": "pass",
413
- "durationMs": 0.8814159999999447,
414
- "message": "No security issues detected.",
466
+ "durationMs": 0.8974590000000262,
467
+ "message": "Found 2 security finding(s): 0 high, 0 medium, 2 low.",
415
468
  "evidence": [
416
469
  {
417
470
  "endpoint": "security/scan",
418
471
  "advertised": true,
419
472
  "responded": true,
420
473
  "minimalShapePresent": true,
421
- "itemCount": 0
474
+ "itemCount": 2,
475
+ "identifiers": [
476
+ "toggle-simulated-logging",
477
+ "toggle-subscriber-updates"
478
+ ],
479
+ "diagnostics": [
480
+ "[low] Tool \"toggle-simulated-logging\" has an empty schema but is marked as destructive.",
481
+ "[low] Tool \"toggle-subscriber-updates\" has an empty schema but is marked as destructive."
482
+ ],
483
+ "findings": [
484
+ {
485
+ "ruleId": "permissive-schema",
486
+ "severity": "low",
487
+ "toolName": "toggle-simulated-logging",
488
+ "message": "Tool \"toggle-simulated-logging\" has an empty schema but is marked as destructive."
489
+ },
490
+ {
491
+ "ruleId": "permissive-schema",
492
+ "severity": "low",
493
+ "toolName": "toggle-subscriber-updates",
494
+ "message": "Tool \"toggle-subscriber-updates\" has an empty schema but is marked as destructive."
495
+ }
496
+ ]
497
+ }
498
+ ]
499
+ },
500
+ {
501
+ "id": "attack-sim",
502
+ "capability": "attack-sim",
503
+ "status": "pass",
504
+ "durationMs": 2.646041999999852,
505
+ "message": "Safe attack simulation found no high-risk MCP attack-readiness findings.",
506
+ "evidence": [
507
+ {
508
+ "endpoint": "attack-sim/safe",
509
+ "advertised": true,
510
+ "responded": true,
511
+ "minimalShapePresent": true,
512
+ "itemCount": 0,
513
+ "identifiers": []
422
514
  }
423
515
  ]
424
516
  }
@@ -449,7 +541,8 @@
449
541
  "score": 100,
450
542
  "details": [
451
543
  "security-lite: pass (100/100)",
452
- "security: pass (100/100)"
544
+ "security: pass (100/100)",
545
+ "attack-sim: pass (100/100)"
453
546
  ]
454
547
  },
455
548
  {
@@ -467,16 +560,16 @@
467
560
  "weight": 0.1,
468
561
  "score": 100,
469
562
  "details": [
470
- "Connect: 846ms",
563
+ "Connect: 891ms",
471
564
  "p95 latency: 7ms (3 operations)"
472
565
  ]
473
566
  }
474
567
  ]
475
568
  },
476
569
  "performanceMetrics": {
477
- "connectMs": 845.9128340000001,
478
- "toolsListMs": 7.354332999999997,
479
- "promptsListMs": 0.74087499999996,
480
- "resourcesListMs": 1.0068340000000262
570
+ "connectMs": 890.503833,
571
+ "toolsListMs": 6.7089169999999285,
572
+ "promptsListMs": 0.6612079999999878,
573
+ "resourcesListMs": 1.076082999999926
481
574
  }
482
575
  }