@kryptosai/mcp-observatory 1.32.0 → 1.32.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 (117) hide show
  1. package/README.md +4 -10
  2. package/README.zh-CN.md +4 -10
  3. package/dist/src/cli.js +1 -1
  4. package/dist/src/cli.js.map +1 -1
  5. package/dist/src/commands/enforce.d.ts +2 -2
  6. package/dist/src/commands/enforce.js +5 -8
  7. package/dist/src/commands/enforce.js.map +1 -1
  8. package/dist/src/commands/scan.js.map +1 -1
  9. package/dist/src/commands/test.js +2 -2
  10. package/dist/src/commands/test.js.map +1 -1
  11. package/dist/src/telemetry.js +2 -1
  12. package/dist/src/telemetry.js.map +1 -1
  13. package/dist/src/validate.js +5 -6
  14. package/dist/src/validate.js.map +1 -1
  15. package/docs/mcp-server-safety-index.md +68 -8
  16. package/docs/safety-index/artifacts/antv-chart-server.json +1452 -19
  17. package/docs/safety-index/artifacts/antv-chart-server.md +156 -10
  18. package/docs/safety-index/artifacts/brave-search-server.json +341 -0
  19. package/docs/safety-index/artifacts/brave-search-server.md +201 -0
  20. package/docs/safety-index/artifacts/browsermcp-server.json +83 -18
  21. package/docs/safety-index/artifacts/browsermcp-server.md +46 -12
  22. package/docs/safety-index/artifacts/chrome-devtools-mcp-server.json +592 -21
  23. package/docs/safety-index/artifacts/chrome-devtools-mcp-server.md +96 -14
  24. package/docs/safety-index/artifacts/clay-server.json +66 -0
  25. package/docs/safety-index/artifacts/clay-server.md +106 -0
  26. package/docs/safety-index/artifacts/cloudflare-server.json +66 -0
  27. package/docs/safety-index/artifacts/cloudflare-server.md +106 -0
  28. package/docs/safety-index/artifacts/context7-server.json +85 -18
  29. package/docs/safety-index/artifacts/context7-server.md +52 -11
  30. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +1565 -34
  31. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +178 -17
  32. package/docs/safety-index/artifacts/docker-server.json +395 -0
  33. package/docs/safety-index/artifacts/docker-server.md +204 -0
  34. package/docs/safety-index/artifacts/everything-server.json +145 -18
  35. package/docs/safety-index/artifacts/everything-server.md +56 -11
  36. package/docs/safety-index/artifacts/exa-server.json +400 -0
  37. package/docs/safety-index/artifacts/exa-server.md +207 -0
  38. package/docs/safety-index/artifacts/executeautomation-playwright-server.json +625 -18
  39. package/docs/safety-index/artifacts/executeautomation-playwright-server.md +95 -11
  40. package/docs/safety-index/artifacts/fetch-server.json +66 -0
  41. package/docs/safety-index/artifacts/fetch-server.md +106 -0
  42. package/docs/safety-index/artifacts/figma-server.json +1766 -0
  43. package/docs/safety-index/artifacts/figma-server.md +256 -0
  44. package/docs/safety-index/artifacts/filesystem-mcp-server.json +428 -24
  45. package/docs/safety-index/artifacts/filesystem-mcp-server.md +75 -14
  46. package/docs/safety-index/artifacts/filesystem-server.json +426 -22
  47. package/docs/safety-index/artifacts/filesystem-server.md +73 -12
  48. package/docs/safety-index/artifacts/firecrawl-server.json +4056 -0
  49. package/docs/safety-index/artifacts/firecrawl-server.md +243 -0
  50. package/docs/safety-index/artifacts/github-mcp-server.json +374 -21
  51. package/docs/safety-index/artifacts/github-mcp-server.md +71 -15
  52. package/docs/safety-index/artifacts/gitlab-server.json +229 -0
  53. package/docs/safety-index/artifacts/gitlab-server.md +753 -0
  54. package/docs/safety-index/artifacts/gmail-server.json +66 -0
  55. package/docs/safety-index/artifacts/gmail-server.md +106 -0
  56. package/docs/safety-index/artifacts/google-calendar-server.json +66 -0
  57. package/docs/safety-index/artifacts/google-calendar-server.md +106 -0
  58. package/docs/safety-index/artifacts/google-drive-server.json +66 -0
  59. package/docs/safety-index/artifacts/google-drive-server.md +106 -0
  60. package/docs/safety-index/artifacts/google-sheets-server.json +66 -0
  61. package/docs/safety-index/artifacts/google-sheets-server.md +106 -0
  62. package/docs/safety-index/artifacts/google-tasks-server.json +66 -0
  63. package/docs/safety-index/artifacts/google-tasks-server.md +106 -0
  64. package/docs/safety-index/artifacts/huggingface-server.json +66 -0
  65. package/docs/safety-index/artifacts/huggingface-server.md +106 -0
  66. package/docs/safety-index/artifacts/jina-server.json +66 -0
  67. package/docs/safety-index/artifacts/jina-server.md +106 -0
  68. package/docs/safety-index/artifacts/kubernetes-server.json +1054 -27
  69. package/docs/safety-index/artifacts/kubernetes-server.md +137 -18
  70. package/docs/safety-index/artifacts/linear-server.json +1494 -0
  71. package/docs/safety-index/artifacts/linear-server.md +237 -0
  72. package/docs/safety-index/artifacts/memory-server.json +191 -18
  73. package/docs/safety-index/artifacts/memory-server.md +51 -9
  74. package/docs/safety-index/artifacts/mongodb-server.json +66 -0
  75. package/docs/safety-index/artifacts/mongodb-server.md +106 -0
  76. package/docs/safety-index/artifacts/neon-server.json +66 -0
  77. package/docs/safety-index/artifacts/neon-server.md +103 -0
  78. package/docs/safety-index/artifacts/notion-server.json +7151 -0
  79. package/docs/safety-index/artifacts/notion-server.md +236 -0
  80. package/docs/safety-index/artifacts/onesignal-server.json +66 -0
  81. package/docs/safety-index/artifacts/onesignal-server.md +106 -0
  82. package/docs/safety-index/artifacts/opentofu-server.json +31 -19
  83. package/docs/safety-index/artifacts/opentofu-server.md +28 -10
  84. package/docs/safety-index/artifacts/playwright-mcp-server.json +415 -24
  85. package/docs/safety-index/artifacts/playwright-mcp-server.md +84 -20
  86. package/docs/safety-index/artifacts/postgres-server.json +330 -0
  87. package/docs/safety-index/artifacts/postgres-server.md +208 -0
  88. package/docs/safety-index/artifacts/promptopia-server.json +96 -19
  89. package/docs/safety-index/artifacts/promptopia-server.md +43 -9
  90. package/docs/safety-index/artifacts/puppeteer-server.json +118 -29
  91. package/docs/safety-index/artifacts/puppeteer-server.md +61 -19
  92. package/docs/safety-index/artifacts/qdrant-server.json +66 -0
  93. package/docs/safety-index/artifacts/qdrant-server.md +106 -0
  94. package/docs/safety-index/artifacts/reddit-server.json +66 -0
  95. package/docs/safety-index/artifacts/reddit-server.md +106 -0
  96. package/docs/safety-index/artifacts/ref-tools-server.json +95 -18
  97. package/docs/safety-index/artifacts/ref-tools-server.md +45 -12
  98. package/docs/safety-index/artifacts/sentry-server.json +66 -0
  99. package/docs/safety-index/artifacts/sentry-server.md +106 -0
  100. package/docs/safety-index/artifacts/sequential-thinking-server.json +59 -18
  101. package/docs/safety-index/artifacts/sequential-thinking-server.md +41 -9
  102. package/docs/safety-index/artifacts/slack-server.json +66 -0
  103. package/docs/safety-index/artifacts/slack-server.md +102 -0
  104. package/docs/safety-index/artifacts/sqlite-server.json +67 -0
  105. package/docs/safety-index/artifacts/sqlite-server.md +106 -0
  106. package/docs/safety-index/artifacts/stripe-server.json +66 -0
  107. package/docs/safety-index/artifacts/stripe-server.md +106 -0
  108. package/docs/safety-index/artifacts/supabase-server.json +66 -0
  109. package/docs/safety-index/artifacts/supabase-server.md +102 -0
  110. package/docs/safety-index/artifacts/tavily-search-server.json +66 -0
  111. package/docs/safety-index/artifacts/tavily-search-server.md +106 -0
  112. package/docs/safety-index/artifacts/ui5-mcp-server.json +24 -24
  113. package/docs/safety-index/artifacts/ui5-mcp-server.md +13 -13
  114. package/docs/safety-index/artifacts/vercel-ai-server.json +66 -0
  115. package/docs/safety-index/artifacts/vercel-ai-server.md +106 -0
  116. package/docs/safety-index/targets.json +535 -0
  117. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  # MCP Observatory Run Report
2
2
 
3
- Generated at 2026-07-06T19:49:57.048Z
3
+ Generated at 2026-07-12T23:44:11.970Z
4
4
 
5
5
  ## Target and Environment Metadata
6
6
 
@@ -25,7 +25,7 @@ Generated at 2026-07-06T19:49:57.048Z
25
25
 
26
26
  | Gate | Total | Pass | Fail | Partial | Unsupported | Flaky | Skipped |
27
27
  | --- | --- | --- | --- | --- | --- | --- | --- |
28
- | pass | 8 | 6 | 0 | 0 | 2 | 0 | 0 |
28
+ | pass | 9 | 7 | 0 | 0 | 2 | 0 | 0 |
29
29
 
30
30
  ## At a Glance
31
31
 
@@ -39,6 +39,139 @@ Generated at 2026-07-06T19:49:57.048Z
39
39
  - Suggested next step: Confirm that unsupported capabilities are intentional for this target: prompts, resources.
40
40
  - CI next step: `Add CI: npx @kryptosai/mcp-observatory setup-ci --all --command "npx -y <server-package>"`
41
41
 
42
+ ## What Was Not Tested
43
+
44
+ - ℹ️ credential_access: Credential scanning was performed (see security findings)
45
+ - ℹ️ destructive_payloads: Destructive payloads were not attempted (safe-mode only)
46
+
47
+ ## Runtime Profile
48
+
49
+ ### State Mutations
50
+
51
+ The following state-modifying operations were identified from tool schemas:
52
+
53
+ | Resource | Operation | Scope | Source |
54
+ | --- | --- | --- | --- |
55
+ | filesystem | write | working_directory | description_analysis |
56
+ | filesystem | write | working_directory | description_analysis |
57
+ | filesystem | write | working_directory | description_analysis |
58
+ | filesystem | write | working_directory | description_analysis |
59
+ | filesystem | write | working_directory | description_analysis |
60
+ | filesystem | write | working_directory | description_analysis |
61
+ | filesystem | write | working_directory | description_analysis |
62
+ | filesystem | write | working_directory | description_analysis |
63
+ | filesystem | write | working_directory | description_analysis |
64
+ | filesystem | write | working_directory | description_analysis |
65
+ | filesystem | write | working_directory | description_analysis |
66
+ | filesystem | write | working_directory | description_analysis |
67
+ | filesystem | write | working_directory | description_analysis |
68
+ | filesystem | write | working_directory | description_analysis |
69
+ | filesystem | write | working_directory | description_analysis |
70
+ | filesystem | write | working_directory | description_analysis |
71
+ | filesystem | write | working_directory | description_analysis |
72
+ | filesystem | write | working_directory | description_analysis |
73
+ | filesystem | write | working_directory | description_analysis |
74
+ | filesystem | write | working_directory | description_analysis |
75
+ | filesystem | write | working_directory | description_analysis |
76
+ | filesystem | write | working_directory | description_analysis |
77
+ | filesystem | write | working_directory | description_analysis |
78
+ | filesystem | write | working_directory | description_analysis |
79
+ | filesystem | write | working_directory | description_analysis |
80
+ | filesystem | write | working_directory | description_analysis |
81
+ | filesystem | write | working_directory | description_analysis |
82
+ | filesystem | write | working_directory | description_analysis |
83
+ | filesystem | write | working_directory | description_analysis |
84
+ | filesystem | write | working_directory | description_analysis |
85
+ | filesystem | write | working_directory | description_analysis |
86
+ | filesystem | write | working_directory | description_analysis |
87
+ | filesystem | write | working_directory | description_analysis |
88
+ | filesystem | write | working_directory | description_analysis |
89
+ | filesystem | write | working_directory | description_analysis |
90
+ | filesystem | write | working_directory | description_analysis |
91
+ | filesystem | write | working_directory | description_analysis |
92
+ | filesystem | write | working_directory | description_analysis |
93
+ | filesystem | write | working_directory | description_analysis |
94
+ | filesystem | write | working_directory | description_analysis |
95
+ | filesystem | write | working_directory | description_analysis |
96
+ | filesystem | write | working_directory | description_analysis |
97
+ | filesystem | write | working_directory | description_analysis |
98
+ | filesystem | write | working_directory | description_analysis |
99
+ | filesystem | write | working_directory | description_analysis |
100
+ | filesystem | write | working_directory | description_analysis |
101
+ | filesystem | write | working_directory | description_analysis |
102
+ | filesystem | write | working_directory | description_analysis |
103
+ | filesystem | write | working_directory | description_analysis |
104
+ | filesystem | write | working_directory | description_analysis |
105
+ | filesystem | write | working_directory | description_analysis |
106
+ | filesystem | write | working_directory | description_analysis |
107
+ | filesystem | write | working_directory | description_analysis |
108
+ | filesystem | write | working_directory | description_analysis |
109
+ | filesystem | write | working_directory | description_analysis |
110
+ | filesystem | write | working_directory | description_analysis |
111
+ | filesystem | write | working_directory | description_analysis |
112
+ | filesystem | write | working_directory | description_analysis |
113
+ | filesystem | write | working_directory | description_analysis |
114
+ | filesystem | write | working_directory | description_analysis |
115
+ | filesystem | write | working_directory | description_analysis |
116
+ | filesystem | write | working_directory | description_analysis |
117
+ | filesystem | write | working_directory | description_analysis |
118
+ | filesystem | write | working_directory | description_analysis |
119
+ | filesystem | write | working_directory | description_analysis |
120
+ | filesystem | write | working_directory | description_analysis |
121
+ | filesystem | write | working_directory | description_analysis |
122
+ | filesystem | write | working_directory | description_analysis |
123
+ | filesystem | write | working_directory | description_analysis |
124
+ | filesystem | write | working_directory | description_analysis |
125
+ | filesystem | write | working_directory | description_analysis |
126
+ | filesystem | write | working_directory | description_analysis |
127
+ | filesystem | write | working_directory | description_analysis |
128
+ | filesystem | write | working_directory | description_analysis |
129
+ | filesystem | write | working_directory | description_analysis |
130
+ | filesystem | write | working_directory | description_analysis |
131
+ | filesystem | write | working_directory | description_analysis |
132
+ | filesystem | write | working_directory | description_analysis |
133
+ | filesystem | write | working_directory | description_analysis |
134
+ | filesystem | write | working_directory | description_analysis |
135
+ | filesystem | write | working_directory | description_analysis |
136
+ | filesystem | write | working_directory | description_analysis |
137
+ | filesystem | write | working_directory | description_analysis |
138
+ | filesystem | write | working_directory | description_analysis |
139
+ | filesystem | write | working_directory | description_analysis |
140
+ | filesystem | write | working_directory | description_analysis |
141
+ | filesystem | write | working_directory | description_analysis |
142
+ | filesystem | write | working_directory | description_analysis |
143
+ | filesystem | write | working_directory | description_analysis |
144
+ | filesystem | write | working_directory | description_analysis |
145
+ | filesystem | write | working_directory | description_analysis |
146
+ | filesystem | write | working_directory | description_analysis |
147
+ | filesystem | write | working_directory | description_analysis |
148
+ | filesystem | write | working_directory | description_analysis |
149
+ | filesystem | write | working_directory | description_analysis |
150
+ | filesystem | write | working_directory | description_analysis |
151
+ | filesystem | write | working_directory | description_analysis |
152
+ | filesystem | write | working_directory | description_analysis |
153
+ | filesystem | write | working_directory | description_analysis |
154
+ | filesystem | write | working_directory | description_analysis |
155
+ | filesystem | write | working_directory | description_analysis |
156
+ | filesystem | write | working_directory | description_analysis |
157
+ | filesystem | write | working_directory | description_analysis |
158
+ | filesystem | write | working_directory | description_analysis |
159
+ | filesystem | write | working_directory | description_analysis |
160
+ | filesystem | write | working_directory | description_analysis |
161
+ | filesystem | write | working_directory | description_analysis |
162
+ | filesystem | write | working_directory | description_analysis |
163
+ | filesystem | write | working_directory | description_analysis |
164
+ | filesystem | write | working_directory | description_analysis |
165
+ | filesystem | write | working_directory | description_analysis |
166
+ | filesystem | write | working_directory | description_analysis |
167
+ | filesystem | write | working_directory | description_analysis |
168
+ | filesystem | write | working_directory | description_analysis |
169
+ | filesystem | write | working_directory | description_analysis |
170
+ | filesystem | write | working_directory | description_analysis |
171
+ | filesystem | write | working_directory | description_analysis |
172
+
173
+ _Analyzed at 2026-07-12T23:44:12.944Z_
174
+
42
175
  ## Regressions and Recoveries
43
176
 
44
177
  _Use the `diff` command against another run artifact to classify regressions and recoveries over time._
@@ -47,12 +180,13 @@ _Use the `diff` command against another run artifact to classify regressions and
47
180
 
48
181
  | Focus | Check | Status | Duration (ms) | Message |
49
182
  | --- | --- | --- | --- | --- |
50
- | healthy | attack-sim | pass | 1.90 | Safe attack simulation found no high-risk MCP attack-readiness findings. |
51
- | healthy | conformance | pass | 1.36 | All 7 conformance checks passed. |
52
- | healthy | schema-quality | pass | 2.78 | All 27 item(s) have good schema quality. |
53
- | healthy | security | pass | 0.91 | No security issues detected. |
54
- | healthy | security-lite | pass | 0.07 | No security issues detected (lightweight scan). |
55
- | healthy | tools | pass | 1.71 | Advertised capability responded with the minimal expected shape (27 items). |
183
+ | healthy | attack-sim | pass | 1.62 | Safe attack simulation found no high-risk MCP attack-readiness findings. |
184
+ | healthy | conformance | pass | 1.17 | All 7 conformance checks passed. |
185
+ | healthy | runtime-profile | pass | 0.41 | Detected 0 potential egress target(s) and 117 potential state mutation(s) with low confidence. |
186
+ | healthy | schema-quality | pass | 0.73 | All 27 item(s) have good schema quality. |
187
+ | healthy | security | pass | 1.33 | No security issues detected. |
188
+ | healthy | security-lite | pass | 0.08 | No security issues detected (lightweight scan). |
189
+ | healthy | tools | pass | 1.61 | Advertised capability responded with the minimal expected shape (27 items). |
56
190
  | confirm intent | prompts | unsupported | 0.00 | Prompts are not advertised by the target. |
57
191
  | confirm intent | resources | unsupported | 0.00 | Resources are not advertised by the target. |
58
192
 
@@ -82,6 +216,18 @@ Summary: All 7 conformance checks passed.
82
216
  - Identifiers: none
83
217
  - Diagnostics: [pass] capabilities-present: Server returned capabilities object., [pass] server-info: Server provided initialization info., [pass] tools-capability-match: tools/list returned 27 tool(s). (+4 more)
84
218
 
219
+ ### runtime-profile — pass
220
+
221
+ Summary: Detected 0 potential egress target(s) and 117 potential state mutation(s) with low confidence.
222
+
223
+ - Endpoint: `runtime-profile/analyze`
224
+ - Advertised: `true`
225
+ - Responded: `true`
226
+ - Minimal shape present: `true`
227
+ - Item count: `117`
228
+ - Identifiers: none
229
+ - Diagnostics: Egress entries: 0, State mutations: 117, Confidence: medium
230
+
85
231
  ### schema-quality — pass
86
232
 
87
233
  Summary: All 27 item(s) have good schema quality.
@@ -128,7 +274,7 @@ Summary: Advertised capability responded with the minimal expected shape (27 ite
128
274
  - Minimal shape present: `true`
129
275
  - Item count: `27`
130
276
  - Identifiers: generate_area_chart, generate_bar_chart, generate_boxplot_chart, generate_column_chart, generate_district_map (+22 more)
131
- - Diagnostics: [MCP-Server-Chart] 2026-07-06T19:49:57.931Z ℹ️ setting up tool handlers..., [MCP-Server-Chart] 2026-07-06T19:49:57.932Z ℹ️ tool handlers set up, [MCP-Server-Chart] 2026-07-06T19:49:57.933Z ✅ Stdio MCP Server started
277
+ - Diagnostics: [MCP-Server-Chart] 2026-07-12T23:44:12.937Z ℹ️ setting up tool handlers..., [MCP-Server-Chart] 2026-07-12T23:44:12.938Z ℹ️ tool handlers set up, [MCP-Server-Chart] 2026-07-12T23:44:12.939Z ✅ Stdio MCP Server started
132
278
 
133
279
  ### prompts — unsupported
134
280
 
@@ -165,5 +311,5 @@ npm run cli -- report --run <path-to-run-artifact.json> --format markdown
165
311
 
166
312
  - Artifact type: `run`
167
313
  - Schema version: `1.0.0`
168
- - Run ID: `run_2026-07-06T194957048Z_8266b9f7`
314
+ - Run ID: `run_2026-07-12T234411970Z_ecbb3721`
169
315
  - Gate: `pass`
@@ -0,0 +1,341 @@
1
+ {
2
+ "artifactType": "run",
3
+ "schemaVersion": "1.0.0",
4
+ "gate": "pass",
5
+ "runId": "run_2026-07-12T234431584Z_0c1cf559",
6
+ "createdAt": "2026-07-12T23:44:31.584Z",
7
+ "toolVersion": "1.31.0",
8
+ "target": {
9
+ "targetId": "brave-search-server",
10
+ "adapter": "local-process",
11
+ "command": "npx",
12
+ "args": [
13
+ "-y",
14
+ "@modelcontextprotocol/server-brave-search"
15
+ ],
16
+ "cwd": ".",
17
+ "metadata": {
18
+ "package": "@modelcontextprotocol/server-brave-search",
19
+ "purpose": "mcp-safety-index",
20
+ "riskClass": "Untrusted content retrieval",
21
+ "failureClass": "Search result boundary",
22
+ "whyItMatters": "Brave Search MCP servers return web and local search results into agent context — untrusted content ingestion vector."
23
+ },
24
+ "serverName": "example-servers/brave-search",
25
+ "serverVersion": "0.1.0"
26
+ },
27
+ "environment": {
28
+ "platform": "darwin 25.5.0",
29
+ "nodeVersion": "v22.22.1"
30
+ },
31
+ "summary": {
32
+ "total": 9,
33
+ "pass": 7,
34
+ "fail": 0,
35
+ "partial": 0,
36
+ "unsupported": 2,
37
+ "flaky": 0,
38
+ "skipped": 0,
39
+ "gate": "pass"
40
+ },
41
+ "checks": [
42
+ {
43
+ "id": "tools",
44
+ "capability": "tools",
45
+ "status": "pass",
46
+ "durationMs": 0.4080420000027516,
47
+ "message": "Advertised capability responded with the minimal expected shape (2 items).",
48
+ "evidence": [
49
+ {
50
+ "endpoint": "tools/list",
51
+ "advertised": true,
52
+ "responded": true,
53
+ "minimalShapePresent": true,
54
+ "itemCount": 2,
55
+ "identifiers": [
56
+ "brave_web_search",
57
+ "brave_local_search"
58
+ ],
59
+ "diagnostics": [
60
+ "Brave Search MCP Server running on stdio"
61
+ ],
62
+ "schemas": {
63
+ "brave_web_search": {
64
+ "type": "object",
65
+ "properties": {
66
+ "query": {
67
+ "type": "string",
68
+ "description": "Search query (max 400 chars, 50 words)"
69
+ },
70
+ "count": {
71
+ "type": "number",
72
+ "description": "Number of results (1-20, default 10)",
73
+ "default": 10
74
+ },
75
+ "offset": {
76
+ "type": "number",
77
+ "description": "Pagination offset (max 9, default 0)",
78
+ "default": 0
79
+ }
80
+ },
81
+ "required": [
82
+ "query"
83
+ ]
84
+ },
85
+ "brave_local_search": {
86
+ "type": "object",
87
+ "properties": {
88
+ "query": {
89
+ "type": "string",
90
+ "description": "Local search query (e.g. 'pizza near Central Park')"
91
+ },
92
+ "count": {
93
+ "type": "number",
94
+ "description": "Number of results (1-20, default 5)",
95
+ "default": 5
96
+ }
97
+ },
98
+ "required": [
99
+ "query"
100
+ ]
101
+ }
102
+ }
103
+ }
104
+ ]
105
+ },
106
+ {
107
+ "id": "prompts",
108
+ "capability": "prompts",
109
+ "status": "unsupported",
110
+ "durationMs": 0.0007909999985713512,
111
+ "message": "Prompts are not advertised by the target.",
112
+ "evidence": [
113
+ {
114
+ "endpoint": "prompts/list",
115
+ "advertised": false,
116
+ "responded": false,
117
+ "minimalShapePresent": false,
118
+ "diagnostics": []
119
+ }
120
+ ]
121
+ },
122
+ {
123
+ "id": "resources",
124
+ "capability": "resources",
125
+ "status": "unsupported",
126
+ "durationMs": 0.0005840000012540258,
127
+ "message": "Resources are not advertised by the target.",
128
+ "evidence": [
129
+ {
130
+ "endpoint": "resources/list | resources/templates/list",
131
+ "advertised": false,
132
+ "responded": false,
133
+ "minimalShapePresent": false,
134
+ "diagnostics": []
135
+ }
136
+ ]
137
+ },
138
+ {
139
+ "id": "security-lite",
140
+ "capability": "security-lite",
141
+ "status": "pass",
142
+ "durationMs": 0.02145800000289455,
143
+ "message": "No security issues detected (lightweight scan).",
144
+ "evidence": [
145
+ {
146
+ "endpoint": "security/scan-lite",
147
+ "advertised": true,
148
+ "responded": true,
149
+ "minimalShapePresent": true,
150
+ "itemCount": 0
151
+ }
152
+ ]
153
+ },
154
+ {
155
+ "id": "runtime-profile",
156
+ "capability": "runtime-profile",
157
+ "status": "pass",
158
+ "durationMs": 0.05570799999986775,
159
+ "message": "Detected 2 potential egress target(s) and 0 potential state mutation(s) with low confidence.",
160
+ "evidence": [
161
+ {
162
+ "endpoint": "runtime-profile/analyze",
163
+ "advertised": true,
164
+ "responded": true,
165
+ "minimalShapePresent": true,
166
+ "itemCount": 2,
167
+ "diagnostics": [
168
+ "Egress entries: 2",
169
+ "State mutations: 0",
170
+ "Confidence: medium"
171
+ ],
172
+ "findings": [
173
+ {
174
+ "target": "brave_web_search",
175
+ "protocol": "unknown",
176
+ "source": "description_analysis",
177
+ "confidence": "low"
178
+ },
179
+ {
180
+ "target": "brave_local_search",
181
+ "protocol": "unknown",
182
+ "source": "description_analysis",
183
+ "confidence": "low"
184
+ }
185
+ ]
186
+ }
187
+ ]
188
+ },
189
+ {
190
+ "id": "conformance",
191
+ "capability": "conformance",
192
+ "status": "pass",
193
+ "durationMs": 0.5054579999996349,
194
+ "message": "All 7 conformance checks passed.",
195
+ "evidence": [
196
+ {
197
+ "endpoint": "conformance/check",
198
+ "advertised": true,
199
+ "responded": true,
200
+ "minimalShapePresent": true,
201
+ "itemCount": 7,
202
+ "identifiers": [],
203
+ "diagnostics": [
204
+ "[pass] capabilities-present: Server returned capabilities object.",
205
+ "[pass] server-info: Server provided initialization info.",
206
+ "[pass] tools-capability-match: tools/list returned 2 tool(s).",
207
+ "[pass] prompts-capability-match: Prompts not advertised — endpoint check skipped.",
208
+ "[pass] resources-capability-match: Resources not advertised — endpoint check skipped.",
209
+ "[pass] tool-response-content: No safe tool to invoke — content validation skipped.",
210
+ "[pass] error-handling: Server returned proper error code -32601 for unknown method."
211
+ ]
212
+ }
213
+ ]
214
+ },
215
+ {
216
+ "id": "schema-quality",
217
+ "capability": "schema-quality",
218
+ "status": "pass",
219
+ "durationMs": 0.21558299999742303,
220
+ "message": "All 2 item(s) have good schema quality.",
221
+ "evidence": [
222
+ {
223
+ "endpoint": "schema-quality/scan",
224
+ "advertised": true,
225
+ "responded": true,
226
+ "minimalShapePresent": true,
227
+ "itemCount": 0,
228
+ "identifiers": []
229
+ }
230
+ ]
231
+ },
232
+ {
233
+ "id": "security",
234
+ "capability": "security",
235
+ "status": "pass",
236
+ "durationMs": 0.13141600000381004,
237
+ "message": "No security issues detected.",
238
+ "evidence": [
239
+ {
240
+ "endpoint": "security/scan",
241
+ "advertised": true,
242
+ "responded": true,
243
+ "minimalShapePresent": true,
244
+ "itemCount": 0
245
+ }
246
+ ]
247
+ },
248
+ {
249
+ "id": "attack-sim",
250
+ "capability": "attack-sim",
251
+ "status": "pass",
252
+ "durationMs": 0.3077080000002752,
253
+ "message": "Safe attack simulation found no high-risk MCP attack-readiness findings.",
254
+ "evidence": [
255
+ {
256
+ "endpoint": "attack-sim/safe",
257
+ "advertised": true,
258
+ "responded": true,
259
+ "minimalShapePresent": true,
260
+ "itemCount": 0,
261
+ "identifiers": []
262
+ }
263
+ ]
264
+ }
265
+ ],
266
+ "healthScore": {
267
+ "overall": 93,
268
+ "grade": "A",
269
+ "dimensions": [
270
+ {
271
+ "name": "Protocol Compliance",
272
+ "weight": 0.3,
273
+ "score": 100,
274
+ "details": [
275
+ "conformance: pass (100/100)"
276
+ ]
277
+ },
278
+ {
279
+ "name": "Schema Quality",
280
+ "weight": 0.2,
281
+ "score": 100,
282
+ "details": [
283
+ "schema-quality: pass (100/100)"
284
+ ]
285
+ },
286
+ {
287
+ "name": "Security",
288
+ "weight": 0.2,
289
+ "score": 100,
290
+ "details": [
291
+ "security-lite: pass (100/100)",
292
+ "security: pass (100/100)",
293
+ "attack-sim: pass (100/100)"
294
+ ]
295
+ },
296
+ {
297
+ "name": "Reliability",
298
+ "weight": 0.2,
299
+ "score": 67,
300
+ "details": [
301
+ "tools: pass (100/100)",
302
+ "prompts: unsupported (50/100)",
303
+ "resources: unsupported (50/100)"
304
+ ]
305
+ },
306
+ {
307
+ "name": "Performance",
308
+ "weight": 0.1,
309
+ "score": 100,
310
+ "details": [
311
+ "Connect: 763ms",
312
+ "p95 latency: 0ms (3 operations)"
313
+ ]
314
+ }
315
+ ]
316
+ },
317
+ "performanceMetrics": {
318
+ "connectMs": 763.0463339999988,
319
+ "toolsListMs": 0.4080420000027516,
320
+ "promptsListMs": 0.0007909999985713512,
321
+ "resourcesListMs": 0.0005840000012540258
322
+ },
323
+ "runtimeProfile": {
324
+ "egress": [
325
+ {
326
+ "target": "brave_web_search",
327
+ "protocol": "unknown",
328
+ "source": "description_analysis",
329
+ "confidence": "low"
330
+ },
331
+ {
332
+ "target": "brave_local_search",
333
+ "protocol": "unknown",
334
+ "source": "description_analysis",
335
+ "confidence": "low"
336
+ }
337
+ ],
338
+ "analyzedAt": "2026-07-12T23:44:32.348Z",
339
+ "confidence": "medium"
340
+ }
341
+ }