@kryptosai/mcp-observatory 1.32.1 → 1.34.0

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 (409) hide show
  1. package/README.md +11 -122
  2. package/dist/src/auth.d.ts +22 -0
  3. package/dist/src/auth.js +140 -0
  4. package/dist/src/auth.js.map +1 -0
  5. package/dist/src/cli.js +55 -4
  6. package/dist/src/cli.js.map +1 -1
  7. package/dist/src/commands/audit.js +7 -1
  8. package/dist/src/commands/audit.js.map +1 -1
  9. package/dist/src/commands/demo.d.ts +2 -0
  10. package/dist/src/commands/demo.js +247 -0
  11. package/dist/src/commands/demo.js.map +1 -0
  12. package/dist/src/commands/enforce.js +14 -3
  13. package/dist/src/commands/enforce.js.map +1 -1
  14. package/dist/src/commands/helpers.d.ts +13 -0
  15. package/dist/src/commands/helpers.js +34 -1
  16. package/dist/src/commands/helpers.js.map +1 -1
  17. package/dist/src/commands/init-ci.d.ts +1 -0
  18. package/dist/src/commands/init-ci.js +157 -10
  19. package/dist/src/commands/init-ci.js.map +1 -1
  20. package/dist/src/commands/receipt.js +13 -3
  21. package/dist/src/commands/receipt.js.map +1 -1
  22. package/dist/src/commands/scan.d.ts +14 -0
  23. package/dist/src/commands/scan.js +51 -3
  24. package/dist/src/commands/scan.js.map +1 -1
  25. package/dist/src/commands/score.js +22 -1
  26. package/dist/src/commands/score.js.map +1 -1
  27. package/dist/src/commands/setup-ci-conversion.js +4 -4
  28. package/dist/src/commands/setup-ci-conversion.js.map +1 -1
  29. package/dist/src/commands/skill-scan.js +5 -3
  30. package/dist/src/commands/skill-scan.js.map +1 -1
  31. package/dist/src/commands/test.d.ts +19 -0
  32. package/dist/src/commands/test.js +77 -3
  33. package/dist/src/commands/test.js.map +1 -1
  34. package/dist/src/commercial.d.ts +3 -0
  35. package/dist/src/commercial.js +14 -3
  36. package/dist/src/commercial.js.map +1 -1
  37. package/dist/src/index.d.ts +1 -1
  38. package/dist/src/index.js +1 -1
  39. package/dist/src/index.js.map +1 -1
  40. package/dist/src/receipt.d.ts +9 -0
  41. package/dist/src/receipt.js +24 -1
  42. package/dist/src/receipt.js.map +1 -1
  43. package/dist/src/telemetry.d.ts +25 -3
  44. package/dist/src/telemetry.js +88 -19
  45. package/dist/src/telemetry.js.map +1 -1
  46. package/dist/src/utils/failure-diagnosis.d.ts +7 -0
  47. package/dist/src/utils/failure-diagnosis.js +14 -0
  48. package/dist/src/utils/failure-diagnosis.js.map +1 -1
  49. package/docs/mcp-server-safety-index.md +255 -6
  50. package/docs/safety-index/artifacts/1link-mcp.json +66 -0
  51. package/docs/safety-index/artifacts/1link-mcp.md +106 -0
  52. package/docs/safety-index/artifacts/aadhaar-mcp.json +66 -0
  53. package/docs/safety-index/artifacts/aadhaar-mcp.md +106 -0
  54. package/docs/safety-index/artifacts/aikidosec-mcp-server.json +536 -0
  55. package/docs/safety-index/artifacts/aikidosec-mcp-server.md +203 -0
  56. package/docs/safety-index/artifacts/aiou-mcp.json +66 -0
  57. package/docs/safety-index/artifacts/aiou-mcp.md +106 -0
  58. package/docs/safety-index/artifacts/airtable-mcp-server.json +66 -0
  59. package/docs/safety-index/artifacts/airtable-mcp-server.md +106 -0
  60. package/docs/safety-index/artifacts/alpaca-server.json +66 -0
  61. package/docs/safety-index/artifacts/alpaca-server.md +106 -0
  62. package/docs/safety-index/artifacts/antv-chart-server.json +21 -21
  63. package/docs/safety-index/artifacts/antv-chart-server.md +11 -11
  64. package/docs/safety-index/artifacts/apify-mcp-server.json +66 -0
  65. package/docs/safety-index/artifacts/apify-mcp-server.md +103 -0
  66. package/docs/safety-index/artifacts/apple-music-server.json +66 -0
  67. package/docs/safety-index/artifacts/apple-music-server.md +102 -0
  68. package/docs/safety-index/artifacts/appwrite-mcp.json +66 -0
  69. package/docs/safety-index/artifacts/appwrite-mcp.md +106 -0
  70. package/docs/safety-index/artifacts/aqi-india-mcp.json +66 -0
  71. package/docs/safety-index/artifacts/aqi-india-mcp.md +106 -0
  72. package/docs/safety-index/artifacts/argocd-mcp-server.json +66 -0
  73. package/docs/safety-index/artifacts/argocd-mcp-server.md +106 -0
  74. package/docs/safety-index/artifacts/arxiv-mcp-server.json +66 -0
  75. package/docs/safety-index/artifacts/arxiv-mcp-server.md +100 -0
  76. package/docs/safety-index/artifacts/aws-mcp-server.json +66 -0
  77. package/docs/safety-index/artifacts/aws-mcp-server.md +103 -0
  78. package/docs/safety-index/artifacts/azure-devops-mcp-server.json +66 -0
  79. package/docs/safety-index/artifacts/azure-devops-mcp-server.md +106 -0
  80. package/docs/safety-index/artifacts/azure-mcp-server.json +66 -0
  81. package/docs/safety-index/artifacts/azure-mcp-server.md +102 -0
  82. package/docs/safety-index/artifacts/bhuvan-mcp.json +66 -0
  83. package/docs/safety-index/artifacts/bhuvan-mcp.md +106 -0
  84. package/docs/safety-index/artifacts/brave-search-mcp-server-v2.json +66 -0
  85. package/docs/safety-index/artifacts/brave-search-mcp-server-v2.md +103 -0
  86. package/docs/safety-index/artifacts/brave-search-server.json +18 -18
  87. package/docs/safety-index/artifacts/brave-search-server.md +6 -6
  88. package/docs/safety-index/artifacts/browsermcp-server.json +18 -18
  89. package/docs/safety-index/artifacts/browsermcp-server.md +9 -9
  90. package/docs/safety-index/artifacts/cal-com-mcp.json +66 -0
  91. package/docs/safety-index/artifacts/cal-com-mcp.md +106 -0
  92. package/docs/safety-index/artifacts/canvas-server.json +66 -0
  93. package/docs/safety-index/artifacts/canvas-server.md +105 -0
  94. package/docs/safety-index/artifacts/caselaw-server.json +66 -0
  95. package/docs/safety-index/artifacts/caselaw-server.md +106 -0
  96. package/docs/safety-index/artifacts/chatwoot-mcp.json +66 -0
  97. package/docs/safety-index/artifacts/chatwoot-mcp.md +102 -0
  98. package/docs/safety-index/artifacts/chrome-devtools-mcp-server.json +23 -23
  99. package/docs/safety-index/artifacts/chrome-devtools-mcp-server.md +12 -12
  100. package/docs/safety-index/artifacts/circleci-server.json +1606 -0
  101. package/docs/safety-index/artifacts/circleci-server.md +243 -0
  102. package/docs/safety-index/artifacts/clarity-server.json +794 -0
  103. package/docs/safety-index/artifacts/clarity-server.md +201 -0
  104. package/docs/safety-index/artifacts/clay-server.json +4 -4
  105. package/docs/safety-index/artifacts/clay-server.md +3 -3
  106. package/docs/safety-index/artifacts/clickup-mcp-server.json +66 -0
  107. package/docs/safety-index/artifacts/clickup-mcp-server.md +106 -0
  108. package/docs/safety-index/artifacts/cloudflare-mcp-server-v2.json +66 -0
  109. package/docs/safety-index/artifacts/cloudflare-mcp-server-v2.md +102 -0
  110. package/docs/safety-index/artifacts/cloudflare-server.json +4 -4
  111. package/docs/safety-index/artifacts/cloudflare-server.md +4 -4
  112. package/docs/safety-index/artifacts/coinbase-cds-server.json +322 -0
  113. package/docs/safety-index/artifacts/coinbase-cds-server.md +201 -0
  114. package/docs/safety-index/artifacts/confluence-mcp-server.json +1727 -0
  115. package/docs/safety-index/artifacts/confluence-mcp-server.md +255 -0
  116. package/docs/safety-index/artifacts/context7-server.json +18 -18
  117. package/docs/safety-index/artifacts/context7-server.md +12 -12
  118. package/docs/safety-index/artifacts/contract-analysis-server.json +66 -0
  119. package/docs/safety-index/artifacts/contract-analysis-server.md +106 -0
  120. package/docs/safety-index/artifacts/cowin-mcp.json +66 -0
  121. package/docs/safety-index/artifacts/cowin-mcp.md +106 -0
  122. package/docs/safety-index/artifacts/currents-mcp-server.json +66 -0
  123. package/docs/safety-index/artifacts/currents-mcp-server.md +102 -0
  124. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.json +34 -34
  125. package/docs/safety-index/artifacts/cyanheads-git-mcp-server.md +15 -15
  126. package/docs/safety-index/artifacts/dalle-server.json +66 -0
  127. package/docs/safety-index/artifacts/dalle-server.md +104 -0
  128. package/docs/safety-index/artifacts/daraz-mcp.json +66 -0
  129. package/docs/safety-index/artifacts/daraz-mcp.md +106 -0
  130. package/docs/safety-index/artifacts/desktop-commander-mcp-server.json +2348 -0
  131. package/docs/safety-index/artifacts/desktop-commander-mcp-server.md +266 -0
  132. package/docs/safety-index/artifacts/digilocker-mcp.json +66 -0
  133. package/docs/safety-index/artifacts/digilocker-mcp.md +106 -0
  134. package/docs/safety-index/artifacts/discord-mcp-server.json +1297 -0
  135. package/docs/safety-index/artifacts/discord-mcp-server.md +169 -0
  136. package/docs/safety-index/artifacts/discord-mcp.json +1023 -0
  137. package/docs/safety-index/artifacts/discord-mcp.md +229 -0
  138. package/docs/safety-index/artifacts/docker-server.json +19 -19
  139. package/docs/safety-index/artifacts/docker-server.md +8 -8
  140. package/docs/safety-index/artifacts/dynamodb-mcp-server.json +66 -0
  141. package/docs/safety-index/artifacts/dynamodb-mcp-server.md +103 -0
  142. package/docs/safety-index/artifacts/dynatrace-mcp-server.json +66 -0
  143. package/docs/safety-index/artifacts/dynatrace-mcp-server.md +103 -0
  144. package/docs/safety-index/artifacts/easypaisa-mcp.json +553 -0
  145. package/docs/safety-index/artifacts/easypaisa-mcp.md +205 -0
  146. package/docs/safety-index/artifacts/ehsaas-mcp.json +66 -0
  147. package/docs/safety-index/artifacts/ehsaas-mcp.md +106 -0
  148. package/docs/safety-index/artifacts/epic-server.json +66 -0
  149. package/docs/safety-index/artifacts/epic-server.md +106 -0
  150. package/docs/safety-index/artifacts/eslint-mcp-server.json +320 -0
  151. package/docs/safety-index/artifacts/eslint-mcp-server.md +201 -0
  152. package/docs/safety-index/artifacts/espn-server.json +394 -0
  153. package/docs/safety-index/artifacts/espn-server.md +187 -0
  154. package/docs/safety-index/artifacts/everything-server.json +18 -18
  155. package/docs/safety-index/artifacts/everything-server.md +12 -12
  156. package/docs/safety-index/artifacts/exa-server.json +22 -22
  157. package/docs/safety-index/artifacts/exa-server.md +14 -14
  158. package/docs/safety-index/artifacts/executeautomation-playwright-server.json +19 -19
  159. package/docs/safety-index/artifacts/executeautomation-playwright-server.md +11 -11
  160. package/docs/safety-index/artifacts/fbr-mcp.json +66 -0
  161. package/docs/safety-index/artifacts/fbr-mcp.md +106 -0
  162. package/docs/safety-index/artifacts/fetch-server.json +4 -4
  163. package/docs/safety-index/artifacts/fetch-server.md +3 -3
  164. package/docs/safety-index/artifacts/fhir-server.json +66 -0
  165. package/docs/safety-index/artifacts/fhir-server.md +100 -0
  166. package/docs/safety-index/artifacts/figma-server.json +18 -18
  167. package/docs/safety-index/artifacts/figma-server.md +10 -10
  168. package/docs/safety-index/artifacts/filesystem-mcp-server.json +18 -18
  169. package/docs/safety-index/artifacts/filesystem-mcp-server.md +10 -10
  170. package/docs/safety-index/artifacts/filesystem-server.json +19 -19
  171. package/docs/safety-index/artifacts/filesystem-server.md +11 -11
  172. package/docs/safety-index/artifacts/firecrawl-server.json +18 -18
  173. package/docs/safety-index/artifacts/firecrawl-server.md +10 -10
  174. package/docs/safety-index/artifacts/flight-server.json +66 -0
  175. package/docs/safety-index/artifacts/flight-server.md +106 -0
  176. package/docs/safety-index/artifacts/foodpanda-pakistan-mcp.json +66 -0
  177. package/docs/safety-index/artifacts/foodpanda-pakistan-mcp.md +106 -0
  178. package/docs/safety-index/artifacts/gcp-mcp-server.json +66 -0
  179. package/docs/safety-index/artifacts/gcp-mcp-server.md +103 -0
  180. package/docs/safety-index/artifacts/github-mcp-server.json +18 -18
  181. package/docs/safety-index/artifacts/github-mcp-server.md +10 -10
  182. package/docs/safety-index/artifacts/gitlab-server.json +16 -16
  183. package/docs/safety-index/artifacts/gitlab-server.md +6 -6
  184. package/docs/safety-index/artifacts/gmail-server.json +4 -4
  185. package/docs/safety-index/artifacts/gmail-server.md +3 -3
  186. package/docs/safety-index/artifacts/google-calendar-server.json +4 -4
  187. package/docs/safety-index/artifacts/google-calendar-server.md +3 -3
  188. package/docs/safety-index/artifacts/google-drive-server.json +4 -4
  189. package/docs/safety-index/artifacts/google-drive-server.md +4 -4
  190. package/docs/safety-index/artifacts/google-sheets-server.json +4 -4
  191. package/docs/safety-index/artifacts/google-sheets-server.md +3 -3
  192. package/docs/safety-index/artifacts/google-tasks-server.json +4 -4
  193. package/docs/safety-index/artifacts/google-tasks-server.md +3 -3
  194. package/docs/safety-index/artifacts/gst-mcp.json +66 -0
  195. package/docs/safety-index/artifacts/gst-mcp.md +106 -0
  196. package/docs/safety-index/artifacts/gupshup-mcp.json +66 -0
  197. package/docs/safety-index/artifacts/gupshup-mcp.md +106 -0
  198. package/docs/safety-index/artifacts/hasura-mcp.json +66 -0
  199. package/docs/safety-index/artifacts/hasura-mcp.md +106 -0
  200. package/docs/safety-index/artifacts/healthcare-ayushman-bharat-mcp.json +66 -0
  201. package/docs/safety-index/artifacts/healthcare-ayushman-bharat-mcp.md +106 -0
  202. package/docs/safety-index/artifacts/hec-pakistan-mcp.json +66 -0
  203. package/docs/safety-index/artifacts/hec-pakistan-mcp.md +106 -0
  204. package/docs/safety-index/artifacts/heroku-server.json +1502 -0
  205. package/docs/safety-index/artifacts/heroku-server.md +236 -0
  206. package/docs/safety-index/artifacts/homekit-server.json +66 -0
  207. package/docs/safety-index/artifacts/homekit-server.md +106 -0
  208. package/docs/safety-index/artifacts/hotel-booking-server.json +66 -0
  209. package/docs/safety-index/artifacts/hotel-booking-server.md +106 -0
  210. package/docs/safety-index/artifacts/hubspot-mcp-server.json +66 -0
  211. package/docs/safety-index/artifacts/hubspot-mcp-server.md +106 -0
  212. package/docs/safety-index/artifacts/huggingface-server.json +4 -4
  213. package/docs/safety-index/artifacts/huggingface-server.md +3 -3
  214. package/docs/safety-index/artifacts/indian-food-nutrition-mcp.json +663 -0
  215. package/docs/safety-index/artifacts/indian-food-nutrition-mcp.md +211 -0
  216. package/docs/safety-index/artifacts/irctc-mcp.json +66 -0
  217. package/docs/safety-index/artifacts/irctc-mcp.md +106 -0
  218. package/docs/safety-index/artifacts/jazz-mcp.json +66 -0
  219. package/docs/safety-index/artifacts/jazz-mcp.md +106 -0
  220. package/docs/safety-index/artifacts/jazzcash-mcp.json +66 -0
  221. package/docs/safety-index/artifacts/jazzcash-mcp.md +102 -0
  222. package/docs/safety-index/artifacts/jina-server.json +4 -4
  223. package/docs/safety-index/artifacts/jina-server.md +3 -3
  224. package/docs/safety-index/artifacts/jira-mcp-server.json +66 -0
  225. package/docs/safety-index/artifacts/jira-mcp-server.md +104 -0
  226. package/docs/safety-index/artifacts/k2-mcp.json +66 -0
  227. package/docs/safety-index/artifacts/k2-mcp.md +106 -0
  228. package/docs/safety-index/artifacts/karachi-stock-exchange-mcp.json +67 -0
  229. package/docs/safety-index/artifacts/karachi-stock-exchange-mcp.md +114 -0
  230. package/docs/safety-index/artifacts/khan-academy-server.json +66 -0
  231. package/docs/safety-index/artifacts/khan-academy-server.md +106 -0
  232. package/docs/safety-index/artifacts/kubernetes-server.json +104 -34
  233. package/docs/safety-index/artifacts/kubernetes-server.md +25 -21
  234. package/docs/safety-index/artifacts/langfuse-mcp.json +66 -0
  235. package/docs/safety-index/artifacts/langfuse-mcp.md +106 -0
  236. package/docs/safety-index/artifacts/linear-server.json +18 -18
  237. package/docs/safety-index/artifacts/linear-server.md +8 -8
  238. package/docs/safety-index/artifacts/mapmyindia-mcp.json +66 -0
  239. package/docs/safety-index/artifacts/mapmyindia-mcp.md +106 -0
  240. package/docs/safety-index/artifacts/memory-server.json +18 -18
  241. package/docs/safety-index/artifacts/memory-server.md +11 -11
  242. package/docs/safety-index/artifacts/minecraft-server.json +592 -0
  243. package/docs/safety-index/artifacts/minecraft-server.md +186 -0
  244. package/docs/safety-index/artifacts/mls-server.json +66 -0
  245. package/docs/safety-index/artifacts/mls-server.md +106 -0
  246. package/docs/safety-index/artifacts/mongodb-server.json +4 -4
  247. package/docs/safety-index/artifacts/mongodb-server.md +4 -4
  248. package/docs/safety-index/artifacts/mui-mcp-server.json +419 -0
  249. package/docs/safety-index/artifacts/mui-mcp-server.md +208 -0
  250. package/docs/safety-index/artifacts/mysql-mcp-server.json +66 -0
  251. package/docs/safety-index/artifacts/mysql-mcp-server.md +106 -0
  252. package/docs/safety-index/artifacts/nadra-mcp.json +66 -0
  253. package/docs/safety-index/artifacts/nadra-mcp.md +106 -0
  254. package/docs/safety-index/artifacts/neon-server.json +4 -4
  255. package/docs/safety-index/artifacts/neon-server.md +3 -3
  256. package/docs/safety-index/artifacts/notion-server.json +18 -18
  257. package/docs/safety-index/artifacts/notion-server.md +10 -10
  258. package/docs/safety-index/artifacts/obsidian-mcp.json +66 -0
  259. package/docs/safety-index/artifacts/obsidian-mcp.md +106 -0
  260. package/docs/safety-index/artifacts/ola-maps-mcp.json +66 -0
  261. package/docs/safety-index/artifacts/ola-maps-mcp.md +106 -0
  262. package/docs/safety-index/artifacts/olx-pakistan-mcp.json +66 -0
  263. package/docs/safety-index/artifacts/olx-pakistan-mcp.md +106 -0
  264. package/docs/safety-index/artifacts/onesignal-server.json +4 -4
  265. package/docs/safety-index/artifacts/onesignal-server.md +3 -3
  266. package/docs/safety-index/artifacts/openai-mcp-server.json +66 -0
  267. package/docs/safety-index/artifacts/openai-mcp-server.md +106 -0
  268. package/docs/safety-index/artifacts/opentofu-server.json +19 -19
  269. package/docs/safety-index/artifacts/opentofu-server.md +10 -10
  270. package/docs/safety-index/artifacts/openweather-server.json +66 -0
  271. package/docs/safety-index/artifacts/openweather-server.md +106 -0
  272. package/docs/safety-index/artifacts/pakistan-cricket-mcp.json +66 -0
  273. package/docs/safety-index/artifacts/pakistan-cricket-mcp.md +106 -0
  274. package/docs/safety-index/artifacts/pakistan-post-mcp.json +66 -0
  275. package/docs/safety-index/artifacts/pakistan-post-mcp.md +106 -0
  276. package/docs/safety-index/artifacts/pakistan-weather-mcp.json +66 -0
  277. package/docs/safety-index/artifacts/pakistan-weather-mcp.md +106 -0
  278. package/docs/safety-index/artifacts/pakwheels-mcp.json +66 -0
  279. package/docs/safety-index/artifacts/pakwheels-mcp.md +106 -0
  280. package/docs/safety-index/artifacts/paytm-mcp.json +66 -0
  281. package/docs/safety-index/artifacts/paytm-mcp.md +106 -0
  282. package/docs/safety-index/artifacts/perplexity-mcp.json +66 -0
  283. package/docs/safety-index/artifacts/perplexity-mcp.md +106 -0
  284. package/docs/safety-index/artifacts/pims-mcp.json +66 -0
  285. package/docs/safety-index/artifacts/pims-mcp.md +106 -0
  286. package/docs/safety-index/artifacts/playwright-mcp-server.json +18 -18
  287. package/docs/safety-index/artifacts/playwright-mcp-server.md +8 -8
  288. package/docs/safety-index/artifacts/postgres-server.json +19 -19
  289. package/docs/safety-index/artifacts/postgres-server.md +9 -9
  290. package/docs/safety-index/artifacts/postman-india-region.json +66 -0
  291. package/docs/safety-index/artifacts/postman-india-region.md +102 -0
  292. package/docs/safety-index/artifacts/postman-mcp-server.json +66 -0
  293. package/docs/safety-index/artifacts/postman-mcp-server.md +102 -0
  294. package/docs/safety-index/artifacts/promptopia-server.json +21 -21
  295. package/docs/safety-index/artifacts/promptopia-server.md +11 -11
  296. package/docs/safety-index/artifacts/pubmed-mcp-server.json +58 -0
  297. package/docs/safety-index/artifacts/pubmed-mcp-server.md +96 -0
  298. package/docs/safety-index/artifacts/punjab-health-mcp.json +66 -0
  299. package/docs/safety-index/artifacts/punjab-health-mcp.md +106 -0
  300. package/docs/safety-index/artifacts/puppeteer-server.json +18 -18
  301. package/docs/safety-index/artifacts/puppeteer-server.md +9 -9
  302. package/docs/safety-index/artifacts/qase-server.json +7055 -0
  303. package/docs/safety-index/artifacts/qase-server.md +329 -0
  304. package/docs/safety-index/artifacts/qdrant-server.json +4 -4
  305. package/docs/safety-index/artifacts/qdrant-server.md +4 -4
  306. package/docs/safety-index/artifacts/raspberrypi-server.json +66 -0
  307. package/docs/safety-index/artifacts/raspberrypi-server.md +106 -0
  308. package/docs/safety-index/artifacts/razorpay-mcp.json +66 -0
  309. package/docs/safety-index/artifacts/razorpay-mcp.md +103 -0
  310. package/docs/safety-index/artifacts/reddit-server.json +4 -4
  311. package/docs/safety-index/artifacts/reddit-server.md +3 -3
  312. package/docs/safety-index/artifacts/redis-server.json +66 -0
  313. package/docs/safety-index/artifacts/redis-server.md +106 -0
  314. package/docs/safety-index/artifacts/ref-tools-server.json +18 -18
  315. package/docs/safety-index/artifacts/ref-tools-server.md +8 -8
  316. package/docs/safety-index/artifacts/resend-mcp.json +66 -0
  317. package/docs/safety-index/artifacts/resend-mcp.md +102 -0
  318. package/docs/safety-index/artifacts/rozgar-mcp.json +66 -0
  319. package/docs/safety-index/artifacts/rozgar-mcp.md +106 -0
  320. package/docs/safety-index/artifacts/s3-mcp-server.json +467 -0
  321. package/docs/safety-index/artifacts/s3-mcp-server.md +209 -0
  322. package/docs/safety-index/artifacts/salesforce-mcp-server.json +66 -0
  323. package/docs/safety-index/artifacts/salesforce-mcp-server.md +106 -0
  324. package/docs/safety-index/artifacts/sehat-sahulat-mcp.json +66 -0
  325. package/docs/safety-index/artifacts/sehat-sahulat-mcp.md +106 -0
  326. package/docs/safety-index/artifacts/sendgrid-mcp.json +66 -0
  327. package/docs/safety-index/artifacts/sendgrid-mcp.md +106 -0
  328. package/docs/safety-index/artifacts/sentry-server.json +3 -3
  329. package/docs/safety-index/artifacts/sentry-server.md +2 -2
  330. package/docs/safety-index/artifacts/sequential-thinking-server.json +18 -18
  331. package/docs/safety-index/artifacts/sequential-thinking-server.md +8 -8
  332. package/docs/safety-index/artifacts/shopify-mcp-server.json +66 -0
  333. package/docs/safety-index/artifacts/shopify-mcp-server.md +106 -0
  334. package/docs/safety-index/artifacts/shopify-mcp.json +66 -0
  335. package/docs/safety-index/artifacts/shopify-mcp.md +106 -0
  336. package/docs/safety-index/artifacts/shortcut-mcp-server.json +66 -0
  337. package/docs/safety-index/artifacts/shortcut-mcp-server.md +102 -0
  338. package/docs/safety-index/artifacts/slack-server.json +3 -3
  339. package/docs/safety-index/artifacts/slack-server.md +2 -2
  340. package/docs/safety-index/artifacts/smartbear-mcp-server.json +21483 -0
  341. package/docs/safety-index/artifacts/smartbear-mcp-server.md +900 -0
  342. package/docs/safety-index/artifacts/spotify-mcp.json +2071 -0
  343. package/docs/safety-index/artifacts/spotify-mcp.md +237 -0
  344. package/docs/safety-index/artifacts/spotify-server.json +66 -0
  345. package/docs/safety-index/artifacts/spotify-server.md +106 -0
  346. package/docs/safety-index/artifacts/sqlite-server.json +4 -4
  347. package/docs/safety-index/artifacts/sqlite-server.md +3 -3
  348. package/docs/safety-index/artifacts/stable-diffusion-server.json +66 -0
  349. package/docs/safety-index/artifacts/stable-diffusion-server.md +106 -0
  350. package/docs/safety-index/artifacts/stock-nse-india.json +66 -0
  351. package/docs/safety-index/artifacts/stock-nse-india.md +106 -0
  352. package/docs/safety-index/artifacts/storybook-mcp-server.json +66 -0
  353. package/docs/safety-index/artifacts/storybook-mcp-server.md +103 -0
  354. package/docs/safety-index/artifacts/stripe-server.json +3 -3
  355. package/docs/safety-index/artifacts/stripe-server.md +2 -2
  356. package/docs/safety-index/artifacts/supabase-server.json +3 -3
  357. package/docs/safety-index/artifacts/supabase-server.md +2 -2
  358. package/docs/safety-index/artifacts/tavily-search-server.json +4 -4
  359. package/docs/safety-index/artifacts/tavily-search-server.md +3 -3
  360. package/docs/safety-index/artifacts/telegram-mcp-server.json +66 -0
  361. package/docs/safety-index/artifacts/telegram-mcp-server.md +103 -0
  362. package/docs/safety-index/artifacts/telenor-pakistan-mcp.json +66 -0
  363. package/docs/safety-index/artifacts/telenor-pakistan-mcp.md +106 -0
  364. package/docs/safety-index/artifacts/textlocal-mcp.json +66 -0
  365. package/docs/safety-index/artifacts/textlocal-mcp.md +106 -0
  366. package/docs/safety-index/artifacts/tooljet-mcp.json +66 -0
  367. package/docs/safety-index/artifacts/tooljet-mcp.md +106 -0
  368. package/docs/safety-index/artifacts/transcend-server.json +3438 -0
  369. package/docs/safety-index/artifacts/transcend-server.md +277 -0
  370. package/docs/safety-index/artifacts/trello-mcp-server.json +916 -0
  371. package/docs/safety-index/artifacts/trello-mcp-server.md +211 -0
  372. package/docs/safety-index/artifacts/twilio-mcp.json +66 -0
  373. package/docs/safety-index/artifacts/twilio-mcp.md +106 -0
  374. package/docs/safety-index/artifacts/udyam-mcp.json +66 -0
  375. package/docs/safety-index/artifacts/udyam-mcp.md +106 -0
  376. package/docs/safety-index/artifacts/ufone-mcp.json +66 -0
  377. package/docs/safety-index/artifacts/ufone-mcp.md +106 -0
  378. package/docs/safety-index/artifacts/ui5-mcp-server.json +21 -21
  379. package/docs/safety-index/artifacts/ui5-mcp-server.md +10 -10
  380. package/docs/safety-index/artifacts/unity-server.json +66 -0
  381. package/docs/safety-index/artifacts/unity-server.md +102 -0
  382. package/docs/safety-index/artifacts/upi-mcp.json +452 -0
  383. package/docs/safety-index/artifacts/upi-mcp.md +201 -0
  384. package/docs/safety-index/artifacts/vercel-ai-server.json +4 -4
  385. package/docs/safety-index/artifacts/vercel-ai-server.md +4 -4
  386. package/docs/safety-index/artifacts/vimeo-server.json +66 -0
  387. package/docs/safety-index/artifacts/vimeo-server.md +106 -0
  388. package/docs/safety-index/artifacts/weather-server.json +66 -0
  389. package/docs/safety-index/artifacts/weather-server.md +106 -0
  390. package/docs/safety-index/artifacts/whatsapp-business-mcp.json +66 -0
  391. package/docs/safety-index/artifacts/whatsapp-business-mcp.md +106 -0
  392. package/docs/safety-index/artifacts/whatsapp-mcp-server.json +66 -0
  393. package/docs/safety-index/artifacts/whatsapp-mcp-server.md +106 -0
  394. package/docs/safety-index/artifacts/whatsapp-mcp.json +66 -0
  395. package/docs/safety-index/artifacts/whatsapp-mcp.md +106 -0
  396. package/docs/safety-index/artifacts/yahoo-finance-server.json +626 -0
  397. package/docs/safety-index/artifacts/yahoo-finance-server.md +187 -0
  398. package/docs/safety-index/artifacts/youtube-mcp-server.json +58 -0
  399. package/docs/safety-index/artifacts/youtube-mcp-server.md +96 -0
  400. package/docs/safety-index/artifacts/youtube-server.json +66 -0
  401. package/docs/safety-index/artifacts/youtube-server.md +103 -0
  402. package/docs/safety-index/artifacts/zendesk-mcp.json +66 -0
  403. package/docs/safety-index/artifacts/zendesk-mcp.md +106 -0
  404. package/docs/safety-index/artifacts/zillow-server.json +66 -0
  405. package/docs/safety-index/artifacts/zillow-server.md +102 -0
  406. package/docs/safety-index/artifacts/zong-mcp.json +66 -0
  407. package/docs/safety-index/artifacts/zong-mcp.md +106 -0
  408. package/docs/safety-index/targets.json +2145 -20
  409. package/package.json +10 -9
@@ -0,0 +1,1502 @@
1
+ {
2
+ "artifactType": "run",
3
+ "schemaVersion": "1.0.0",
4
+ "gate": "fail",
5
+ "runId": "run_2026-07-15T223409665Z_2122dd28",
6
+ "createdAt": "2026-07-15T22:34:09.665Z",
7
+ "toolVersion": "1.32.1",
8
+ "target": {
9
+ "targetId": "heroku-server",
10
+ "adapter": "local-process",
11
+ "command": "npx",
12
+ "args": [
13
+ "-y",
14
+ "@heroku/mcp-server"
15
+ ],
16
+ "cwd": ".",
17
+ "metadata": {
18
+ "package": "@heroku/mcp-server",
19
+ "purpose": "mcp-safety-index",
20
+ "riskClass": "Cloud platform control",
21
+ "failureClass": "App/dyno/addon boundary",
22
+ "whyItMatters": "Heroku MCP servers expose app management, dyno scaling, addon provisioning, and config var access — broad cloud control surface with production consequences."
23
+ },
24
+ "serverName": "Heroku MCP Server",
25
+ "serverVersion": "1.2.5"
26
+ },
27
+ "environment": {
28
+ "platform": "darwin 25.5.0",
29
+ "nodeVersion": "v22.22.1"
30
+ },
31
+ "summary": {
32
+ "total": 9,
33
+ "pass": 3,
34
+ "fail": 3,
35
+ "partial": 2,
36
+ "unsupported": 1,
37
+ "flaky": 0,
38
+ "skipped": 0,
39
+ "gate": "fail"
40
+ },
41
+ "checks": [
42
+ {
43
+ "id": "tools",
44
+ "capability": "tools",
45
+ "status": "pass",
46
+ "durationMs": 4.126125000002503,
47
+ "message": "Advertised capability responded with the minimal expected shape (33 items).",
48
+ "evidence": [
49
+ {
50
+ "endpoint": "tools/list",
51
+ "advertised": true,
52
+ "responded": true,
53
+ "minimalShapePresent": true,
54
+ "itemCount": 33,
55
+ "identifiers": [
56
+ "list_apps",
57
+ "get_app_info",
58
+ "create_app",
59
+ "rename_app",
60
+ "maintenance_on",
61
+ "maintenance_off",
62
+ "get_app_logs",
63
+ "list_private_spaces",
64
+ "list_teams",
65
+ "list_addons",
66
+ "get_addon_info",
67
+ "create_addon",
68
+ "list_addon_services",
69
+ "list_addon_plans",
70
+ "pg_psql",
71
+ "pg_info",
72
+ "pg_ps",
73
+ "pg_locks",
74
+ "pg_outliers",
75
+ "pg_credentials",
76
+ "pg_kill",
77
+ "pg_maintenance",
78
+ "pg_backups",
79
+ "pg_upgrade",
80
+ "ps_list",
81
+ "ps_scale",
82
+ "ps_restart",
83
+ "pipelines_create",
84
+ "pipelines_promote",
85
+ "pipelines_list",
86
+ "pipelines_info",
87
+ "deploy_to_heroku",
88
+ "deploy_one_off_dyno"
89
+ ],
90
+ "diagnostics": [
91
+ "[Plugin Check] @heroku/plugin-ai: NOT INSTALLED - Skipping AI tools",
92
+ "Heroku MCP Server running on stdio"
93
+ ],
94
+ "schemas": {
95
+ "list_apps": {
96
+ "type": "object",
97
+ "properties": {
98
+ "all": {
99
+ "type": "boolean",
100
+ "description": "Show owned apps and collaborator access. Default: owned only"
101
+ },
102
+ "personal": {
103
+ "type": "boolean",
104
+ "description": "List personal account apps only, ignoring default team"
105
+ },
106
+ "space": {
107
+ "type": "string",
108
+ "description": "Filter by private space name. Excludes team param"
109
+ },
110
+ "team": {
111
+ "type": "string",
112
+ "description": "Filter by team name. Excludes space param"
113
+ }
114
+ },
115
+ "additionalProperties": false,
116
+ "$schema": "http://json-schema.org/draft-07/schema#"
117
+ },
118
+ "get_app_info": {
119
+ "type": "object",
120
+ "properties": {
121
+ "app": {
122
+ "type": "string",
123
+ "description": "Target app name. Requires access permissions"
124
+ },
125
+ "json": {
126
+ "type": "boolean",
127
+ "description": "JSON output with full metadata. Default: text format"
128
+ }
129
+ },
130
+ "required": [
131
+ "app"
132
+ ],
133
+ "additionalProperties": false,
134
+ "$schema": "http://json-schema.org/draft-07/schema#"
135
+ },
136
+ "create_app": {
137
+ "type": "object",
138
+ "properties": {
139
+ "app": {
140
+ "type": "string",
141
+ "description": "App name. Auto-generated if omitted"
142
+ },
143
+ "region": {
144
+ "type": "string",
145
+ "enum": [
146
+ "us",
147
+ "eu"
148
+ ],
149
+ "description": "Region: us/eu. Default: us. Excludes space param"
150
+ },
151
+ "space": {
152
+ "type": "string",
153
+ "description": "Private space name. Inherits region. Excludes region param"
154
+ },
155
+ "team": {
156
+ "type": "string",
157
+ "description": "Team name for ownership"
158
+ }
159
+ },
160
+ "additionalProperties": false,
161
+ "$schema": "http://json-schema.org/draft-07/schema#"
162
+ },
163
+ "rename_app": {
164
+ "type": "object",
165
+ "properties": {
166
+ "app": {
167
+ "type": "string",
168
+ "description": "Current app name. Requires access"
169
+ },
170
+ "newName": {
171
+ "type": "string",
172
+ "description": "New unique app name"
173
+ }
174
+ },
175
+ "required": [
176
+ "app",
177
+ "newName"
178
+ ],
179
+ "additionalProperties": false,
180
+ "$schema": "http://json-schema.org/draft-07/schema#"
181
+ },
182
+ "maintenance_on": {
183
+ "type": "object",
184
+ "properties": {
185
+ "app": {
186
+ "type": "string",
187
+ "description": "Target Heroku app name"
188
+ }
189
+ },
190
+ "required": [
191
+ "app"
192
+ ],
193
+ "additionalProperties": false,
194
+ "$schema": "http://json-schema.org/draft-07/schema#"
195
+ },
196
+ "maintenance_off": {
197
+ "type": "object",
198
+ "properties": {
199
+ "app": {
200
+ "type": "string",
201
+ "description": "Target Heroku app name"
202
+ }
203
+ },
204
+ "required": [
205
+ "app"
206
+ ],
207
+ "additionalProperties": false,
208
+ "$schema": "http://json-schema.org/draft-07/schema#"
209
+ },
210
+ "get_app_logs": {
211
+ "type": "object",
212
+ "properties": {
213
+ "app": {
214
+ "type": "string",
215
+ "description": "Heroku app name. Requires: permissions, Cedar-gen"
216
+ },
217
+ "dynoName": {
218
+ "type": "string",
219
+ "description": "Format: web.1/worker.2. Excludes processType"
220
+ },
221
+ "source": {
222
+ "type": "string",
223
+ "description": "app=application, heroku=platform. Default: all"
224
+ },
225
+ "processType": {
226
+ "type": "string",
227
+ "description": "web|worker. All instances. Excludes dynoName"
228
+ }
229
+ },
230
+ "required": [
231
+ "app"
232
+ ],
233
+ "additionalProperties": false,
234
+ "$schema": "http://json-schema.org/draft-07/schema#"
235
+ },
236
+ "list_private_spaces": {
237
+ "type": "object",
238
+ "properties": {
239
+ "json": {
240
+ "type": "boolean",
241
+ "description": "JSON output for detailed space metadata, text output if false/omitted"
242
+ }
243
+ },
244
+ "additionalProperties": false,
245
+ "$schema": "http://json-schema.org/draft-07/schema#"
246
+ },
247
+ "list_teams": {
248
+ "type": "object",
249
+ "properties": {
250
+ "json": {
251
+ "type": "boolean",
252
+ "description": "Output format control - true for detailed JSON with team metadata, false/omitted for simplified text"
253
+ }
254
+ },
255
+ "additionalProperties": false,
256
+ "$schema": "http://json-schema.org/draft-07/schema#"
257
+ },
258
+ "list_addons": {
259
+ "type": "object",
260
+ "properties": {
261
+ "all": {
262
+ "type": "boolean",
263
+ "description": "List all add-ons across accessible apps. Overrides app param, shows full status"
264
+ },
265
+ "app": {
266
+ "type": "string",
267
+ "description": "Filter by app name. Shows add-ons and attachments. Uses Git remote default if omitted"
268
+ }
269
+ },
270
+ "additionalProperties": false,
271
+ "$schema": "http://json-schema.org/draft-07/schema#"
272
+ },
273
+ "get_addon_info": {
274
+ "type": "object",
275
+ "properties": {
276
+ "addon": {
277
+ "type": "string",
278
+ "description": "Add-on identifier: UUID, name (postgresql-curved-12345), or attachment name (DATABASE)"
279
+ },
280
+ "app": {
281
+ "type": "string",
282
+ "description": "App context for add-on lookup. Required for attachment names. Uses Git remote default"
283
+ }
284
+ },
285
+ "required": [
286
+ "addon"
287
+ ],
288
+ "additionalProperties": false,
289
+ "$schema": "http://json-schema.org/draft-07/schema#"
290
+ },
291
+ "create_addon": {
292
+ "type": "object",
293
+ "properties": {
294
+ "app": {
295
+ "type": "string",
296
+ "description": "Target app for add-on. Must have write access. Region/space affects availability"
297
+ },
298
+ "as": {
299
+ "type": "string",
300
+ "description": "Custom attachment name. Used for config vars prefix. Must be unique in app"
301
+ },
302
+ "name": {
303
+ "type": "string",
304
+ "description": "Global add-on identifier. Must be unique across all Heroku add-ons"
305
+ },
306
+ "serviceAndPlan": {
307
+ "type": "string",
308
+ "description": "Format: service_slug:plan_slug (e.g., heroku-postgresql:essential-0)"
309
+ }
310
+ },
311
+ "required": [
312
+ "app",
313
+ "serviceAndPlan"
314
+ ],
315
+ "additionalProperties": false,
316
+ "$schema": "http://json-schema.org/draft-07/schema#"
317
+ },
318
+ "list_addon_services": {
319
+ "type": "object",
320
+ "properties": {
321
+ "json": {
322
+ "type": "boolean",
323
+ "description": "JSON output with sharing options and app generation support. Default: basic text"
324
+ }
325
+ },
326
+ "additionalProperties": false,
327
+ "$schema": "http://json-schema.org/draft-07/schema#"
328
+ },
329
+ "list_addon_plans": {
330
+ "type": "object",
331
+ "properties": {
332
+ "service": {
333
+ "type": "string",
334
+ "description": "Service slug (e.g., heroku-postgresql). Get from list_addon_services"
335
+ },
336
+ "json": {
337
+ "type": "boolean",
338
+ "description": "JSON output with pricing, features, space compatibility. Default: text format"
339
+ }
340
+ },
341
+ "required": [
342
+ "service"
343
+ ],
344
+ "additionalProperties": false,
345
+ "$schema": "http://json-schema.org/draft-07/schema#"
346
+ },
347
+ "pg_psql": {
348
+ "type": "object",
349
+ "properties": {
350
+ "command": {
351
+ "type": "string",
352
+ "description": "SQL command. Single line. Ignored if file provided"
353
+ },
354
+ "file": {
355
+ "type": "string",
356
+ "description": "SQL file path. Ignored if command provided"
357
+ },
358
+ "credential": {
359
+ "type": "string",
360
+ "description": "credential to use"
361
+ },
362
+ "app": {
363
+ "type": "string",
364
+ "description": "app to run command against"
365
+ },
366
+ "database": {
367
+ "type": "string",
368
+ "description": "Database identifier: config var, name, ID, alias. Format: APP_NAME::DB for other apps. Default: DATABASE_URL"
369
+ }
370
+ },
371
+ "required": [
372
+ "app"
373
+ ],
374
+ "additionalProperties": false,
375
+ "$schema": "http://json-schema.org/draft-07/schema#"
376
+ },
377
+ "pg_info": {
378
+ "type": "object",
379
+ "properties": {
380
+ "app": {
381
+ "type": "string",
382
+ "description": "Target app name"
383
+ },
384
+ "database": {
385
+ "type": "string",
386
+ "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: all databases"
387
+ }
388
+ },
389
+ "required": [
390
+ "app"
391
+ ],
392
+ "additionalProperties": false,
393
+ "$schema": "http://json-schema.org/draft-07/schema#"
394
+ },
395
+ "pg_ps": {
396
+ "type": "object",
397
+ "properties": {
398
+ "app": {
399
+ "type": "string",
400
+ "description": "Target app name"
401
+ },
402
+ "verbose": {
403
+ "type": "boolean",
404
+ "description": "Show query plan and memory usage"
405
+ },
406
+ "database": {
407
+ "type": "string",
408
+ "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL"
409
+ }
410
+ },
411
+ "required": [
412
+ "app"
413
+ ],
414
+ "additionalProperties": false,
415
+ "$schema": "http://json-schema.org/draft-07/schema#"
416
+ },
417
+ "pg_locks": {
418
+ "type": "object",
419
+ "properties": {
420
+ "app": {
421
+ "type": "string",
422
+ "description": "Target app name"
423
+ },
424
+ "truncate": {
425
+ "type": "boolean",
426
+ "description": "Truncate queries to 40 chars"
427
+ },
428
+ "database": {
429
+ "type": "string",
430
+ "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL"
431
+ }
432
+ },
433
+ "required": [
434
+ "app"
435
+ ],
436
+ "additionalProperties": false,
437
+ "$schema": "http://json-schema.org/draft-07/schema#"
438
+ },
439
+ "pg_outliers": {
440
+ "type": "object",
441
+ "properties": {
442
+ "app": {
443
+ "type": "string",
444
+ "description": "Target app name"
445
+ },
446
+ "num": {
447
+ "type": "number",
448
+ "description": "Number of queries to show. Default: 10"
449
+ },
450
+ "reset": {
451
+ "type": "boolean",
452
+ "description": "Reset pg_stat_statements stats"
453
+ },
454
+ "truncate": {
455
+ "type": "boolean",
456
+ "description": "Truncate queries to 40 chars"
457
+ },
458
+ "database": {
459
+ "type": "string",
460
+ "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL"
461
+ }
462
+ },
463
+ "required": [
464
+ "app"
465
+ ],
466
+ "additionalProperties": false,
467
+ "$schema": "http://json-schema.org/draft-07/schema#"
468
+ },
469
+ "pg_credentials": {
470
+ "type": "object",
471
+ "properties": {
472
+ "app": {
473
+ "type": "string",
474
+ "description": "Target app name"
475
+ },
476
+ "database": {
477
+ "type": "string",
478
+ "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL"
479
+ }
480
+ },
481
+ "required": [
482
+ "app"
483
+ ],
484
+ "additionalProperties": false,
485
+ "$schema": "http://json-schema.org/draft-07/schema#"
486
+ },
487
+ "pg_kill": {
488
+ "type": "object",
489
+ "properties": {
490
+ "app": {
491
+ "type": "string",
492
+ "description": "Target app name"
493
+ },
494
+ "pid": {
495
+ "type": "number",
496
+ "description": "Process ID to terminate"
497
+ },
498
+ "force": {
499
+ "type": "boolean",
500
+ "description": "Force immediate termination"
501
+ },
502
+ "database": {
503
+ "type": "string",
504
+ "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL"
505
+ }
506
+ },
507
+ "required": [
508
+ "app",
509
+ "pid"
510
+ ],
511
+ "additionalProperties": false,
512
+ "$schema": "http://json-schema.org/draft-07/schema#"
513
+ },
514
+ "pg_maintenance": {
515
+ "type": "object",
516
+ "properties": {
517
+ "app": {
518
+ "type": "string",
519
+ "description": "Target app name"
520
+ },
521
+ "database": {
522
+ "type": "string",
523
+ "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL"
524
+ }
525
+ },
526
+ "required": [
527
+ "app"
528
+ ],
529
+ "additionalProperties": false,
530
+ "$schema": "http://json-schema.org/draft-07/schema#"
531
+ },
532
+ "pg_backups": {
533
+ "type": "object",
534
+ "properties": {
535
+ "app": {
536
+ "type": "string",
537
+ "description": "Target app name"
538
+ }
539
+ },
540
+ "required": [
541
+ "app"
542
+ ],
543
+ "additionalProperties": false,
544
+ "$schema": "http://json-schema.org/draft-07/schema#"
545
+ },
546
+ "pg_upgrade": {
547
+ "type": "object",
548
+ "properties": {
549
+ "app": {
550
+ "type": "string",
551
+ "description": "Target app name"
552
+ },
553
+ "version": {
554
+ "type": "string",
555
+ "description": "PostgreSQL version target"
556
+ },
557
+ "confirm": {
558
+ "type": "string",
559
+ "description": "Confirmation for destructive operation"
560
+ },
561
+ "database": {
562
+ "type": "string",
563
+ "description": "Database identifier. Format: APP_NAME::DB for other apps. Default: DATABASE_URL"
564
+ }
565
+ },
566
+ "required": [
567
+ "app"
568
+ ],
569
+ "additionalProperties": false,
570
+ "$schema": "http://json-schema.org/draft-07/schema#"
571
+ },
572
+ "ps_list": {
573
+ "type": "object",
574
+ "properties": {
575
+ "app": {
576
+ "type": "string",
577
+ "description": "App name to list processes for"
578
+ },
579
+ "json": {
580
+ "type": "boolean",
581
+ "description": "Output process info in JSON format"
582
+ }
583
+ },
584
+ "required": [
585
+ "app"
586
+ ],
587
+ "additionalProperties": false,
588
+ "$schema": "http://json-schema.org/draft-07/schema#"
589
+ },
590
+ "ps_scale": {
591
+ "type": "object",
592
+ "properties": {
593
+ "app": {
594
+ "type": "string",
595
+ "description": "App name to scale"
596
+ },
597
+ "dyno": {
598
+ "type": "string",
599
+ "description": "Dyno type and quantity (e.g., web=3:Standard-2X, worker+1). Omit to show current formation"
600
+ }
601
+ },
602
+ "required": [
603
+ "app"
604
+ ],
605
+ "additionalProperties": false,
606
+ "$schema": "http://json-schema.org/draft-07/schema#"
607
+ },
608
+ "ps_restart": {
609
+ "type": "object",
610
+ "properties": {
611
+ "app": {
612
+ "type": "string",
613
+ "description": "App name to restart processes for"
614
+ },
615
+ "dyno-name": {
616
+ "type": "string",
617
+ "description": "Specific dyno to restart (e.g., web.1). Omit both options to restart all"
618
+ },
619
+ "process-type": {
620
+ "type": "string",
621
+ "description": "Dyno type to restart (e.g., web). Omit both options to restart all"
622
+ }
623
+ },
624
+ "required": [
625
+ "app"
626
+ ],
627
+ "additionalProperties": false,
628
+ "$schema": "http://json-schema.org/draft-07/schema#"
629
+ },
630
+ "pipelines_create": {
631
+ "type": "object",
632
+ "properties": {
633
+ "name": {
634
+ "type": "string",
635
+ "description": "Pipeline name"
636
+ },
637
+ "stage": {
638
+ "type": "string",
639
+ "enum": [
640
+ "development",
641
+ "staging",
642
+ "production"
643
+ ],
644
+ "description": "Initial pipeline stage"
645
+ },
646
+ "app": {
647
+ "type": "string",
648
+ "description": "App to add to pipeline"
649
+ },
650
+ "team": {
651
+ "type": "string",
652
+ "description": "Team owning the pipeline"
653
+ }
654
+ },
655
+ "required": [
656
+ "name",
657
+ "stage"
658
+ ],
659
+ "additionalProperties": false,
660
+ "$schema": "http://json-schema.org/draft-07/schema#"
661
+ },
662
+ "pipelines_promote": {
663
+ "type": "object",
664
+ "properties": {
665
+ "app": {
666
+ "type": "string",
667
+ "description": "Source app for promotion"
668
+ },
669
+ "to": {
670
+ "type": "string",
671
+ "description": "Target apps for promotion (comma-separated)"
672
+ }
673
+ },
674
+ "required": [
675
+ "app"
676
+ ],
677
+ "additionalProperties": false,
678
+ "$schema": "http://json-schema.org/draft-07/schema#"
679
+ },
680
+ "pipelines_list": {
681
+ "type": "object",
682
+ "properties": {
683
+ "json": {
684
+ "type": "boolean",
685
+ "description": "Enable JSON output"
686
+ }
687
+ },
688
+ "additionalProperties": false,
689
+ "$schema": "http://json-schema.org/draft-07/schema#"
690
+ },
691
+ "pipelines_info": {
692
+ "type": "object",
693
+ "properties": {
694
+ "pipeline": {
695
+ "type": "string",
696
+ "description": "Target pipeline name"
697
+ },
698
+ "json": {
699
+ "type": "boolean",
700
+ "description": "Enable JSON output"
701
+ }
702
+ },
703
+ "required": [
704
+ "pipeline"
705
+ ],
706
+ "additionalProperties": false,
707
+ "$schema": "http://json-schema.org/draft-07/schema#"
708
+ },
709
+ "deploy_to_heroku": {
710
+ "type": "object",
711
+ "properties": {
712
+ "name": {
713
+ "type": "string",
714
+ "minLength": 5,
715
+ "maxLength": 30,
716
+ "description": "App name for deployment. Creates new app if not exists."
717
+ },
718
+ "rootUri": {
719
+ "type": "string",
720
+ "minLength": 1,
721
+ "description": "Workspace root directory path."
722
+ },
723
+ "tarballUri": {
724
+ "type": "string",
725
+ "description": "URL of deployment tarball. Creates from rootUri if not provided."
726
+ },
727
+ "teamId": {
728
+ "type": "string",
729
+ "description": "Team ID for team deployments."
730
+ },
731
+ "spaceId": {
732
+ "type": "string",
733
+ "description": "Private space ID for space deployments."
734
+ },
735
+ "internalRouting": {
736
+ "type": "boolean",
737
+ "description": "Enable internal routing in private spaces."
738
+ },
739
+ "env": {
740
+ "type": "object",
741
+ "additionalProperties": {},
742
+ "description": "Environment variables overriding app.json values"
743
+ },
744
+ "appJson": {
745
+ "type": "string",
746
+ "description": "App.json config for deployment. Must follow schema: {\"default\":{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Heroku app.json Schema\",\"description\":\"app.json is a manifest format for describing web apps. It declares environment variables, add-ons, and other information required to run an app on Heroku. Used for dynamic configurations or converted projects\",\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"pattern\":\"^[a-zA-Z-_\\\\.]+\",\"maxLength\":300},\"description\":{\"type\":\"string\"},\"keywords\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"website\":{\"$ref\":\"#/definitions/uriString\"},\"repository\":{\"$ref\":\"#/definitions/uriString\"},\"logo\":{\"$ref\":\"#/definitions/uriString\"},\"success_url\":{\"type\":\"string\"},\"scripts\":{\"$ref\":\"#/definitions/scripts\"},\"env\":{\"$ref\":\"#/definitions/env\"},\"formation\":{\"$ref\":\"#/definitions/formation\"},\"addons\":{\"$ref\":\"#/definitions/addons\"},\"buildpacks\":{\"$ref\":\"#/definitions/buildpacks\"},\"environments\":{\"$ref\":\"#/definitions/environments\"},\"stack\":{\"$ref\":\"#/definitions/stack\"},\"image\":{\"type\":\"string\"}},\"additionalProperties\":false,\"definitions\":{\"uriString\":{\"type\":\"string\",\"format\":\"uri\"},\"scripts\":{\"type\":\"object\",\"properties\":{\"postdeploy\":{\"type\":\"string\"},\"pr-predestroy\":{\"type\":\"string\"}},\"additionalProperties\":false},\"env\":{\"type\":\"object\",\"patternProperties\":{\"^[A-Z][A-Z0-9_]*$\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\"},\"value\":{\"type\":\"string\"},\"required\":{\"type\":\"boolean\"},\"generator\":{\"type\":\"string\",\"enum\":[\"secret\"]}},\"additionalProperties\":false}}},\"dynoSize\":{\"type\":\"string\",\"enum\":[\"free\",\"eco\",\"hobby\",\"basic\",\"standard-1x\",\"standard-2x\",\"performance-m\",\"performance-l\",\"private-s\",\"private-m\",\"private-l\",\"shield-s\",\"shield-m\",\"shield-l\"]},\"formation\":{\"type\":\"object\",\"patternProperties\":{\"^[a-zA-Z0-9_-]+$\":{\"type\":\"object\",\"properties\":{\"quantity\":{\"type\":\"integer\",\"minimum\":0},\"size\":{\"$ref\":\"#/definitions/dynoSize\"}},\"required\":[\"quantity\"],\"additionalProperties\":false}}},\"addons\":{\"type\":\"array\",\"items\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"properties\":{\"plan\":{\"type\":\"string\"},\"as\":{\"type\":\"string\"},\"options\":{\"type\":\"object\"}},\"required\":[\"plan\"],\"additionalProperties\":false}]}},\"buildpacks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"url\":{\"type\":\"string\"}},\"required\":[\"url\"],\"additionalProperties\":false}},\"environmentConfig\":{\"type\":\"object\",\"properties\":{\"env\":{\"type\":\"object\"},\"formation\":{\"type\":\"object\"},\"addons\":{\"type\":\"array\"},\"buildpacks\":{\"type\":\"array\"}}},\"environments\":{\"type\":\"object\",\"properties\":{\"test\":{\"allOf\":[{\"$ref\":\"#/definitions/environmentConfig\"},{\"type\":\"object\",\"properties\":{\"scripts\":{\"type\":\"object\",\"properties\":{\"test\":{\"type\":\"string\"}},\"additionalProperties\":false}}}]},\"review\":{\"$ref\":\"#/definitions/environmentConfig\"},\"production\":{\"$ref\":\"#/definitions/environmentConfig\"}},\"additionalProperties\":false},\"stack\":{\"type\":\"string\",\"enum\":[\"heroku-18\",\"heroku-20\",\"heroku-22\",\"heroku-24\"]}}}}"
747
+ }
748
+ },
749
+ "required": [
750
+ "name",
751
+ "rootUri",
752
+ "appJson"
753
+ ],
754
+ "additionalProperties": false,
755
+ "$schema": "http://json-schema.org/draft-07/schema#"
756
+ },
757
+ "deploy_one_off_dyno": {
758
+ "type": "object",
759
+ "properties": {
760
+ "name": {
761
+ "type": "string",
762
+ "minLength": 5,
763
+ "maxLength": 30,
764
+ "description": "Target Heroku app name."
765
+ },
766
+ "command": {
767
+ "type": "string",
768
+ "description": "Command to run in dyno."
769
+ },
770
+ "sources": {
771
+ "type": "array",
772
+ "items": {
773
+ "type": "object",
774
+ "properties": {
775
+ "relativePath": {
776
+ "type": "string",
777
+ "minLength": 1,
778
+ "maxLength": 512,
779
+ "description": "Relative virtual path for each staged source file (strict character set)."
780
+ },
781
+ "contents": {
782
+ "type": "string",
783
+ "description": "File contents."
784
+ }
785
+ },
786
+ "required": [
787
+ "relativePath",
788
+ "contents"
789
+ ],
790
+ "additionalProperties": false
791
+ },
792
+ "description": "Source files to include in dyno."
793
+ },
794
+ "size": {
795
+ "type": "string",
796
+ "description": "Dyno size.",
797
+ "default": "standard-1x"
798
+ },
799
+ "timeToLive": {
800
+ "type": "number",
801
+ "description": "Dyno lifetime in seconds.",
802
+ "default": 3600
803
+ },
804
+ "env": {
805
+ "type": "object",
806
+ "additionalProperties": {},
807
+ "description": "Dyno environment variables."
808
+ }
809
+ },
810
+ "required": [
811
+ "name",
812
+ "command"
813
+ ],
814
+ "additionalProperties": false,
815
+ "$schema": "http://json-schema.org/draft-07/schema#"
816
+ }
817
+ }
818
+ }
819
+ ]
820
+ },
821
+ {
822
+ "id": "prompts",
823
+ "capability": "prompts",
824
+ "status": "unsupported",
825
+ "durationMs": 0.0010420000035082921,
826
+ "message": "Prompts are not advertised by the target.",
827
+ "evidence": [
828
+ {
829
+ "endpoint": "prompts/list",
830
+ "advertised": false,
831
+ "responded": false,
832
+ "minimalShapePresent": false,
833
+ "diagnostics": []
834
+ }
835
+ ]
836
+ },
837
+ {
838
+ "id": "resources",
839
+ "capability": "resources",
840
+ "status": "pass",
841
+ "durationMs": 0.7145420000015292,
842
+ "message": "Advertised capability responded with the minimal expected shape (1 items).",
843
+ "evidence": [
844
+ {
845
+ "endpoint": "resources/list",
846
+ "advertised": true,
847
+ "responded": true,
848
+ "minimalShapePresent": true,
849
+ "itemCount": 1,
850
+ "identifiers": [
851
+ "https://devcenter.heroku.com/llms.txt"
852
+ ],
853
+ "diagnostics": [
854
+ "[Plugin Check] @heroku/plugin-ai: NOT INSTALLED - Skipping AI tools",
855
+ "Heroku MCP Server running on stdio"
856
+ ]
857
+ },
858
+ {
859
+ "endpoint": "resources/templates/list",
860
+ "advertised": true,
861
+ "responded": true,
862
+ "minimalShapePresent": true,
863
+ "itemCount": 0,
864
+ "identifiers": [],
865
+ "diagnostics": [
866
+ "[Plugin Check] @heroku/plugin-ai: NOT INSTALLED - Skipping AI tools",
867
+ "Heroku MCP Server running on stdio"
868
+ ]
869
+ }
870
+ ]
871
+ },
872
+ {
873
+ "id": "security-lite",
874
+ "capability": "security-lite",
875
+ "status": "fail",
876
+ "durationMs": 0.07500000000436557,
877
+ "message": "Found 3 security finding(s): 2 high, 1 medium, 0 low.",
878
+ "evidence": [
879
+ {
880
+ "endpoint": "security/scan-lite",
881
+ "advertised": true,
882
+ "responded": true,
883
+ "minimalShapePresent": true,
884
+ "itemCount": 3,
885
+ "identifiers": [
886
+ "pg_psql",
887
+ "deploy_one_off_dyno"
888
+ ],
889
+ "diagnostics": [
890
+ "[high] Tool \"pg_psql\" has parameter \"command\" which may allow arbitrary command execution.",
891
+ "[medium] Tool \"pg_psql\" accepts filesystem paths and has destructive capabilities.",
892
+ "[high] Tool \"deploy_one_off_dyno\" has parameter \"command\" which may allow arbitrary command execution."
893
+ ],
894
+ "findings": [
895
+ {
896
+ "ruleId": "shell-injection",
897
+ "severity": "high",
898
+ "toolName": "pg_psql",
899
+ "message": "Tool \"pg_psql\" has parameter \"command\" which may allow arbitrary command execution."
900
+ },
901
+ {
902
+ "ruleId": "broad-filesystem",
903
+ "severity": "medium",
904
+ "toolName": "pg_psql",
905
+ "message": "Tool \"pg_psql\" accepts filesystem paths and has destructive capabilities."
906
+ },
907
+ {
908
+ "ruleId": "shell-injection",
909
+ "severity": "high",
910
+ "toolName": "deploy_one_off_dyno",
911
+ "message": "Tool \"deploy_one_off_dyno\" has parameter \"command\" which may allow arbitrary command execution."
912
+ }
913
+ ]
914
+ }
915
+ ]
916
+ },
917
+ {
918
+ "id": "runtime-profile",
919
+ "capability": "runtime-profile",
920
+ "status": "partial",
921
+ "durationMs": 0.25433300000440795,
922
+ "message": "Detected 2 potential egress target(s) and 22 potential state mutation(s) with high confidence.",
923
+ "evidence": [
924
+ {
925
+ "endpoint": "runtime-profile/analyze",
926
+ "advertised": true,
927
+ "responded": true,
928
+ "minimalShapePresent": true,
929
+ "itemCount": 24,
930
+ "diagnostics": [
931
+ "Egress entries: 2",
932
+ "State mutations: 22",
933
+ "Confidence: high"
934
+ ],
935
+ "findings": [
936
+ {
937
+ "target": "URL of deployment tarball. Creates from rootUri if not provided.",
938
+ "protocol": "unknown",
939
+ "source": "description_analysis",
940
+ "confidence": "medium"
941
+ },
942
+ {
943
+ "target": "App.json config for deployment. Must follow schema: {\"default\":{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Heroku app.json Schema\",\"description\":\"app.json is a manifest format for describing web apps. It declares environment variables, add-ons, and other information required to run an app on Heroku. Used for dynamic configurations or converted projects\",\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"pattern\":\"^[a-zA-Z-_\\\\.]+\",\"maxLength\":300},\"description\":{\"type\":\"string\"},\"keywords\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"website\":{\"$ref\":\"#/definitions/uriString\"},\"repository\":{\"$ref\":\"#/definitions/uriString\"},\"logo\":{\"$ref\":\"#/definitions/uriString\"},\"success_url\":{\"type\":\"string\"},\"scripts\":{\"$ref\":\"#/definitions/scripts\"},\"env\":{\"$ref\":\"#/definitions/env\"},\"formation\":{\"$ref\":\"#/definitions/formation\"},\"addons\":{\"$ref\":\"#/definitions/addons\"},\"buildpacks\":{\"$ref\":\"#/definitions/buildpacks\"},\"environments\":{\"$ref\":\"#/definitions/environments\"},\"stack\":{\"$ref\":\"#/definitions/stack\"},\"image\":{\"type\":\"string\"}},\"additionalProperties\":false,\"definitions\":{\"uriString\":{\"type\":\"string\",\"format\":\"uri\"},\"scripts\":{\"type\":\"object\",\"properties\":{\"postdeploy\":{\"type\":\"string\"},\"pr-predestroy\":{\"type\":\"string\"}},\"additionalProperties\":false},\"env\":{\"type\":\"object\",\"patternProperties\":{\"^[A-Z][A-Z0-9_]*$\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\"},\"value\":{\"type\":\"string\"},\"required\":{\"type\":\"boolean\"},\"generator\":{\"type\":\"string\",\"enum\":[\"secret\"]}},\"additionalProperties\":false}}},\"dynoSize\":{\"type\":\"string\",\"enum\":[\"free\",\"eco\",\"hobby\",\"basic\",\"standard-1x\",\"standard-2x\",\"performance-m\",\"performance-l\",\"private-s\",\"private-m\",\"private-l\",\"shield-s\",\"shield-m\",\"shield-l\"]},\"formation\":{\"type\":\"object\",\"patternProperties\":{\"^[a-zA-Z0-9_-]+$\":{\"type\":\"object\",\"properties\":{\"quantity\":{\"type\":\"integer\",\"minimum\":0},\"size\":{\"$ref\":\"#/definitions/dynoSize\"}},\"required\":[\"quantity\"],\"additionalProperties\":false}}},\"addons\":{\"type\":\"array\",\"items\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"properties\":{\"plan\":{\"type\":\"string\"},\"as\":{\"type\":\"string\"},\"options\":{\"type\":\"object\"}},\"required\":[\"plan\"],\"additionalProperties\":false}]}},\"buildpacks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"url\":{\"type\":\"string\"}},\"required\":[\"url\"],\"additionalProperties\":false}},\"environmentConfig\":{\"type\":\"object\",\"properties\":{\"env\":{\"type\":\"object\"},\"formation\":{\"type\":\"object\"},\"addons\":{\"type\":\"array\"},\"buildpacks\":{\"type\":\"array\"}}},\"environments\":{\"type\":\"object\",\"properties\":{\"test\":{\"allOf\":[{\"$ref\":\"#/definitions/environmentConfig\"},{\"type\":\"object\",\"properties\":{\"scripts\":{\"type\":\"object\",\"properties\":{\"test\":{\"type\":\"string\"}},\"additionalProperties\":false}}}]},\"review\":{\"$ref\":\"#/definitions/environmentConfig\"},\"production\":{\"$ref\":\"#/definitions/environmentConfig\"}},\"additionalProperties\":false},\"stack\":{\"type\":\"string\",\"enum\":[\"heroku-18\",\"heroku-20\",\"heroku-22\",\"heroku-24\"]}}}}",
944
+ "protocol": "unknown",
945
+ "source": "description_analysis",
946
+ "confidence": "medium"
947
+ },
948
+ {
949
+ "resource": "filesystem",
950
+ "operation": "write",
951
+ "scope": "working_directory",
952
+ "source": "description_analysis"
953
+ },
954
+ {
955
+ "resource": "filesystem",
956
+ "operation": "write",
957
+ "scope": "working_directory",
958
+ "source": "description_analysis"
959
+ },
960
+ {
961
+ "resource": "filesystem",
962
+ "operation": "write",
963
+ "scope": "working_directory",
964
+ "source": "description_analysis"
965
+ },
966
+ {
967
+ "resource": "filesystem",
968
+ "operation": "write",
969
+ "scope": "working_directory",
970
+ "source": "description_analysis"
971
+ },
972
+ {
973
+ "resource": "filesystem",
974
+ "operation": "write",
975
+ "scope": "working_directory",
976
+ "source": "description_analysis"
977
+ },
978
+ {
979
+ "resource": "filesystem",
980
+ "operation": "write",
981
+ "scope": "working_directory",
982
+ "source": "description_analysis"
983
+ },
984
+ {
985
+ "resource": "network",
986
+ "operation": "execute",
987
+ "scope": "specific_path",
988
+ "source": "tool_schema"
989
+ },
990
+ {
991
+ "resource": "filesystem",
992
+ "operation": "write",
993
+ "scope": "working_directory",
994
+ "source": "tool_schema"
995
+ },
996
+ {
997
+ "resource": "filesystem",
998
+ "operation": "write",
999
+ "scope": "working_directory",
1000
+ "source": "description_analysis"
1001
+ },
1002
+ {
1003
+ "resource": "filesystem",
1004
+ "operation": "write",
1005
+ "scope": "working_directory",
1006
+ "source": "description_analysis"
1007
+ },
1008
+ {
1009
+ "resource": "filesystem",
1010
+ "operation": "write",
1011
+ "scope": "working_directory",
1012
+ "source": "description_analysis"
1013
+ },
1014
+ {
1015
+ "resource": "filesystem",
1016
+ "operation": "write",
1017
+ "scope": "working_directory",
1018
+ "source": "description_analysis"
1019
+ },
1020
+ {
1021
+ "resource": "filesystem",
1022
+ "operation": "write",
1023
+ "scope": "working_directory",
1024
+ "source": "description_analysis"
1025
+ },
1026
+ {
1027
+ "resource": "environment",
1028
+ "operation": "write",
1029
+ "scope": "global",
1030
+ "source": "tool_schema"
1031
+ },
1032
+ {
1033
+ "resource": "filesystem",
1034
+ "operation": "write",
1035
+ "scope": "working_directory",
1036
+ "source": "description_analysis"
1037
+ },
1038
+ {
1039
+ "resource": "filesystem",
1040
+ "operation": "write",
1041
+ "scope": "working_directory",
1042
+ "source": "description_analysis"
1043
+ },
1044
+ {
1045
+ "resource": "filesystem",
1046
+ "operation": "write",
1047
+ "scope": "working_directory",
1048
+ "source": "description_analysis"
1049
+ },
1050
+ {
1051
+ "resource": "network",
1052
+ "operation": "execute",
1053
+ "scope": "specific_path",
1054
+ "source": "tool_schema"
1055
+ },
1056
+ {
1057
+ "resource": "environment",
1058
+ "operation": "write",
1059
+ "scope": "global",
1060
+ "source": "tool_schema"
1061
+ },
1062
+ {
1063
+ "resource": "filesystem",
1064
+ "operation": "write",
1065
+ "scope": "working_directory",
1066
+ "source": "description_analysis"
1067
+ },
1068
+ {
1069
+ "resource": "filesystem",
1070
+ "operation": "write",
1071
+ "scope": "working_directory",
1072
+ "source": "description_analysis"
1073
+ },
1074
+ {
1075
+ "resource": "filesystem",
1076
+ "operation": "write",
1077
+ "scope": "working_directory",
1078
+ "source": "description_analysis"
1079
+ }
1080
+ ]
1081
+ }
1082
+ ]
1083
+ },
1084
+ {
1085
+ "id": "conformance",
1086
+ "capability": "conformance",
1087
+ "status": "pass",
1088
+ "durationMs": 1509.5354579999985,
1089
+ "message": "All 7 conformance checks passed.",
1090
+ "evidence": [
1091
+ {
1092
+ "endpoint": "conformance/check",
1093
+ "advertised": true,
1094
+ "responded": true,
1095
+ "minimalShapePresent": true,
1096
+ "itemCount": 7,
1097
+ "identifiers": [],
1098
+ "diagnostics": [
1099
+ "[pass] capabilities-present: Server returned capabilities object.",
1100
+ "[pass] server-info: Server provided initialization info.",
1101
+ "[pass] tools-capability-match: tools/list returned 33 tool(s).",
1102
+ "[pass] prompts-capability-match: Prompts not advertised — endpoint check skipped.",
1103
+ "[pass] resources-capability-match: resources/list returned 1 resource(s).",
1104
+ "[pass] tool-response-content: Tool \"list_apps\" response has valid content array.",
1105
+ "[pass] error-handling: Server returned proper error code -32601 for unknown method."
1106
+ ]
1107
+ }
1108
+ ]
1109
+ },
1110
+ {
1111
+ "id": "schema-quality",
1112
+ "capability": "schema-quality",
1113
+ "status": "partial",
1114
+ "durationMs": 4.802084000002651,
1115
+ "message": "Found 7 quality finding(s) across 34 item(s): 0 warnings, 7 info.",
1116
+ "evidence": [
1117
+ {
1118
+ "endpoint": "schema-quality/scan",
1119
+ "advertised": true,
1120
+ "responded": true,
1121
+ "minimalShapePresent": true,
1122
+ "itemCount": 7,
1123
+ "identifiers": [
1124
+ "list_apps",
1125
+ "create_app",
1126
+ "list_private_spaces",
1127
+ "list_teams",
1128
+ "list_addons",
1129
+ "list_addon_services",
1130
+ "pipelines_list"
1131
+ ],
1132
+ "diagnostics": [
1133
+ "[info] tool \"list_apps\": Has properties but no 'required' array declared",
1134
+ "[info] tool \"create_app\": Has properties but no 'required' array declared",
1135
+ "[info] tool \"list_private_spaces\": Has properties but no 'required' array declared",
1136
+ "[info] tool \"list_teams\": Has properties but no 'required' array declared",
1137
+ "[info] tool \"list_addons\": Has properties but no 'required' array declared",
1138
+ "[info] tool \"list_addon_services\": Has properties but no 'required' array declared",
1139
+ "[info] tool \"pipelines_list\": Has properties but no 'required' array declared"
1140
+ ],
1141
+ "findings": [
1142
+ {
1143
+ "itemType": "tool",
1144
+ "itemName": "list_apps",
1145
+ "issue": "Has properties but no 'required' array declared",
1146
+ "severity": "info"
1147
+ },
1148
+ {
1149
+ "itemType": "tool",
1150
+ "itemName": "create_app",
1151
+ "issue": "Has properties but no 'required' array declared",
1152
+ "severity": "info"
1153
+ },
1154
+ {
1155
+ "itemType": "tool",
1156
+ "itemName": "list_private_spaces",
1157
+ "issue": "Has properties but no 'required' array declared",
1158
+ "severity": "info"
1159
+ },
1160
+ {
1161
+ "itemType": "tool",
1162
+ "itemName": "list_teams",
1163
+ "issue": "Has properties but no 'required' array declared",
1164
+ "severity": "info"
1165
+ },
1166
+ {
1167
+ "itemType": "tool",
1168
+ "itemName": "list_addons",
1169
+ "issue": "Has properties but no 'required' array declared",
1170
+ "severity": "info"
1171
+ },
1172
+ {
1173
+ "itemType": "tool",
1174
+ "itemName": "list_addon_services",
1175
+ "issue": "Has properties but no 'required' array declared",
1176
+ "severity": "info"
1177
+ },
1178
+ {
1179
+ "itemType": "tool",
1180
+ "itemName": "pipelines_list",
1181
+ "issue": "Has properties but no 'required' array declared",
1182
+ "severity": "info"
1183
+ }
1184
+ ]
1185
+ }
1186
+ ]
1187
+ },
1188
+ {
1189
+ "id": "security",
1190
+ "capability": "security",
1191
+ "status": "fail",
1192
+ "durationMs": 1.5400000000008731,
1193
+ "message": "Found 3 security finding(s): 2 high, 1 medium, 0 low.",
1194
+ "evidence": [
1195
+ {
1196
+ "endpoint": "security/scan",
1197
+ "advertised": true,
1198
+ "responded": true,
1199
+ "minimalShapePresent": true,
1200
+ "itemCount": 3,
1201
+ "identifiers": [
1202
+ "pg_psql",
1203
+ "deploy_one_off_dyno"
1204
+ ],
1205
+ "diagnostics": [
1206
+ "[high] Tool \"pg_psql\" has parameter \"command\" which may allow arbitrary command execution.",
1207
+ "[medium] Tool \"pg_psql\" accepts filesystem paths and has destructive capabilities.",
1208
+ "[high] Tool \"deploy_one_off_dyno\" has parameter \"command\" which may allow arbitrary command execution."
1209
+ ],
1210
+ "findings": [
1211
+ {
1212
+ "ruleId": "shell-injection",
1213
+ "severity": "high",
1214
+ "toolName": "pg_psql",
1215
+ "message": "Tool \"pg_psql\" has parameter \"command\" which may allow arbitrary command execution."
1216
+ },
1217
+ {
1218
+ "ruleId": "broad-filesystem",
1219
+ "severity": "medium",
1220
+ "toolName": "pg_psql",
1221
+ "message": "Tool \"pg_psql\" accepts filesystem paths and has destructive capabilities."
1222
+ },
1223
+ {
1224
+ "ruleId": "shell-injection",
1225
+ "severity": "high",
1226
+ "toolName": "deploy_one_off_dyno",
1227
+ "message": "Tool \"deploy_one_off_dyno\" has parameter \"command\" which may allow arbitrary command execution."
1228
+ }
1229
+ ]
1230
+ }
1231
+ ]
1232
+ },
1233
+ {
1234
+ "id": "attack-sim",
1235
+ "capability": "attack-sim",
1236
+ "status": "fail",
1237
+ "durationMs": 6.474750000001222,
1238
+ "message": "Safe attack simulation found 2 finding(s): 2 high, 0 medium, 0 low.",
1239
+ "evidence": [
1240
+ {
1241
+ "endpoint": "attack-sim/safe",
1242
+ "advertised": true,
1243
+ "responded": true,
1244
+ "minimalShapePresent": true,
1245
+ "itemCount": 2,
1246
+ "identifiers": [
1247
+ "pg_psql",
1248
+ "deploy_one_off_dyno"
1249
+ ],
1250
+ "diagnostics": [
1251
+ "[high] Tool \"pg_psql\" combines broad parameters (command, file) with destructive or non-read-only behavior.",
1252
+ "[high] Tool \"deploy_one_off_dyno\" combines broad parameters (command) with destructive or non-read-only behavior."
1253
+ ],
1254
+ "findings": [
1255
+ {
1256
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
1257
+ "attackClass": "permission-boundary",
1258
+ "severity": "high",
1259
+ "itemType": "tool",
1260
+ "itemName": "pg_psql",
1261
+ "message": "Tool \"pg_psql\" combines broad parameters (command, file) with destructive or non-read-only behavior.",
1262
+ "evidence": {
1263
+ "broadParams": [
1264
+ "command",
1265
+ "file"
1266
+ ],
1267
+ "description": "Execute SQL queries: analyze, debug, modify schema, manage data"
1268
+ },
1269
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
1270
+ "recommendedAction": "quarantine"
1271
+ },
1272
+ {
1273
+ "ruleId": "attack-sim/permission-boundary/broad-destructive-tool",
1274
+ "attackClass": "permission-boundary",
1275
+ "severity": "high",
1276
+ "itemType": "tool",
1277
+ "itemName": "deploy_one_off_dyno",
1278
+ "message": "Tool \"deploy_one_off_dyno\" combines broad parameters (command) with destructive or non-read-only behavior.",
1279
+ "evidence": {
1280
+ "broadParams": [
1281
+ "command"
1282
+ ],
1283
+ "description": "\nRun code/commands in Heroku one-off dyno with network and filesystem access.\n\nRequirements:\n- Show command output\n- Use app_info for buildpack detection\n- Support shell setup commands\n- Use stdout/stderr\n\nFeatures:\n- Network/filesystem access\n- Environment variables\n- File operations\n- Temp directory handling\n\nUsage:\n1. Use Heroku runtime\n2. Proper syntax/imports\n3. Organized code structure\n4. Package management:\n - Define dependencies\n - Minimize external deps\n - Prefer native modules\n\nExample package.json:\n```json\n{\n \"type\": \"module\",\n \"dependencies\": {\n \"axios\": \"^1.6.0\"\n }\n}\n```\n"
1284
+ },
1285
+ "recommendation": "Constrain this tool with typed inputs, allowlists, explicit read-only/destructive annotations, and a harmless CI fixture.",
1286
+ "recommendedAction": "quarantine"
1287
+ }
1288
+ ]
1289
+ }
1290
+ ]
1291
+ }
1292
+ ],
1293
+ "healthScore": {
1294
+ "overall": 69,
1295
+ "grade": "D",
1296
+ "dimensions": [
1297
+ {
1298
+ "name": "Protocol Compliance",
1299
+ "weight": 0.3,
1300
+ "score": 100,
1301
+ "details": [
1302
+ "conformance: pass (100/100)"
1303
+ ]
1304
+ },
1305
+ {
1306
+ "name": "Schema Quality",
1307
+ "weight": 0.2,
1308
+ "score": 60,
1309
+ "details": [
1310
+ "schema-quality: partial (60/100)"
1311
+ ]
1312
+ },
1313
+ {
1314
+ "name": "Security",
1315
+ "weight": 0.2,
1316
+ "score": 0,
1317
+ "details": [
1318
+ "security-lite: fail (0/100)",
1319
+ "security: fail (0/100)",
1320
+ "attack-sim: fail (0/100)"
1321
+ ]
1322
+ },
1323
+ {
1324
+ "name": "Reliability",
1325
+ "weight": 0.2,
1326
+ "score": 83,
1327
+ "details": [
1328
+ "tools: pass (100/100)",
1329
+ "prompts: unsupported (50/100)",
1330
+ "resources: pass (100/100)"
1331
+ ]
1332
+ },
1333
+ {
1334
+ "name": "Performance",
1335
+ "weight": 0.1,
1336
+ "score": 100,
1337
+ "details": [
1338
+ "Connect: 930ms",
1339
+ "p95 latency: 4ms (3 operations)"
1340
+ ]
1341
+ }
1342
+ ]
1343
+ },
1344
+ "performanceMetrics": {
1345
+ "connectMs": 929.8879589999997,
1346
+ "toolsListMs": 4.126125000002503,
1347
+ "promptsListMs": 0.0010420000035082921,
1348
+ "resourcesListMs": 0.7145420000015292
1349
+ },
1350
+ "runtimeProfile": {
1351
+ "egress": [
1352
+ {
1353
+ "target": "URL of deployment tarball. Creates from rootUri if not provided.",
1354
+ "protocol": "unknown",
1355
+ "source": "description_analysis",
1356
+ "confidence": "medium"
1357
+ },
1358
+ {
1359
+ "target": "App.json config for deployment. Must follow schema: {\"default\":{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Heroku app.json Schema\",\"description\":\"app.json is a manifest format for describing web apps. It declares environment variables, add-ons, and other information required to run an app on Heroku. Used for dynamic configurations or converted projects\",\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"pattern\":\"^[a-zA-Z-_\\\\.]+\",\"maxLength\":300},\"description\":{\"type\":\"string\"},\"keywords\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"website\":{\"$ref\":\"#/definitions/uriString\"},\"repository\":{\"$ref\":\"#/definitions/uriString\"},\"logo\":{\"$ref\":\"#/definitions/uriString\"},\"success_url\":{\"type\":\"string\"},\"scripts\":{\"$ref\":\"#/definitions/scripts\"},\"env\":{\"$ref\":\"#/definitions/env\"},\"formation\":{\"$ref\":\"#/definitions/formation\"},\"addons\":{\"$ref\":\"#/definitions/addons\"},\"buildpacks\":{\"$ref\":\"#/definitions/buildpacks\"},\"environments\":{\"$ref\":\"#/definitions/environments\"},\"stack\":{\"$ref\":\"#/definitions/stack\"},\"image\":{\"type\":\"string\"}},\"additionalProperties\":false,\"definitions\":{\"uriString\":{\"type\":\"string\",\"format\":\"uri\"},\"scripts\":{\"type\":\"object\",\"properties\":{\"postdeploy\":{\"type\":\"string\"},\"pr-predestroy\":{\"type\":\"string\"}},\"additionalProperties\":false},\"env\":{\"type\":\"object\",\"patternProperties\":{\"^[A-Z][A-Z0-9_]*$\":{\"type\":\"object\",\"properties\":{\"description\":{\"type\":\"string\"},\"value\":{\"type\":\"string\"},\"required\":{\"type\":\"boolean\"},\"generator\":{\"type\":\"string\",\"enum\":[\"secret\"]}},\"additionalProperties\":false}}},\"dynoSize\":{\"type\":\"string\",\"enum\":[\"free\",\"eco\",\"hobby\",\"basic\",\"standard-1x\",\"standard-2x\",\"performance-m\",\"performance-l\",\"private-s\",\"private-m\",\"private-l\",\"shield-s\",\"shield-m\",\"shield-l\"]},\"formation\":{\"type\":\"object\",\"patternProperties\":{\"^[a-zA-Z0-9_-]+$\":{\"type\":\"object\",\"properties\":{\"quantity\":{\"type\":\"integer\",\"minimum\":0},\"size\":{\"$ref\":\"#/definitions/dynoSize\"}},\"required\":[\"quantity\"],\"additionalProperties\":false}}},\"addons\":{\"type\":\"array\",\"items\":{\"oneOf\":[{\"type\":\"string\"},{\"type\":\"object\",\"properties\":{\"plan\":{\"type\":\"string\"},\"as\":{\"type\":\"string\"},\"options\":{\"type\":\"object\"}},\"required\":[\"plan\"],\"additionalProperties\":false}]}},\"buildpacks\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"url\":{\"type\":\"string\"}},\"required\":[\"url\"],\"additionalProperties\":false}},\"environmentConfig\":{\"type\":\"object\",\"properties\":{\"env\":{\"type\":\"object\"},\"formation\":{\"type\":\"object\"},\"addons\":{\"type\":\"array\"},\"buildpacks\":{\"type\":\"array\"}}},\"environments\":{\"type\":\"object\",\"properties\":{\"test\":{\"allOf\":[{\"$ref\":\"#/definitions/environmentConfig\"},{\"type\":\"object\",\"properties\":{\"scripts\":{\"type\":\"object\",\"properties\":{\"test\":{\"type\":\"string\"}},\"additionalProperties\":false}}}]},\"review\":{\"$ref\":\"#/definitions/environmentConfig\"},\"production\":{\"$ref\":\"#/definitions/environmentConfig\"}},\"additionalProperties\":false},\"stack\":{\"type\":\"string\",\"enum\":[\"heroku-18\",\"heroku-20\",\"heroku-22\",\"heroku-24\"]}}}}",
1360
+ "protocol": "unknown",
1361
+ "source": "description_analysis",
1362
+ "confidence": "medium"
1363
+ }
1364
+ ],
1365
+ "stateMutations": [
1366
+ {
1367
+ "resource": "filesystem",
1368
+ "operation": "write",
1369
+ "scope": "working_directory",
1370
+ "source": "description_analysis"
1371
+ },
1372
+ {
1373
+ "resource": "filesystem",
1374
+ "operation": "write",
1375
+ "scope": "working_directory",
1376
+ "source": "description_analysis"
1377
+ },
1378
+ {
1379
+ "resource": "filesystem",
1380
+ "operation": "write",
1381
+ "scope": "working_directory",
1382
+ "source": "description_analysis"
1383
+ },
1384
+ {
1385
+ "resource": "filesystem",
1386
+ "operation": "write",
1387
+ "scope": "working_directory",
1388
+ "source": "description_analysis"
1389
+ },
1390
+ {
1391
+ "resource": "filesystem",
1392
+ "operation": "write",
1393
+ "scope": "working_directory",
1394
+ "source": "description_analysis"
1395
+ },
1396
+ {
1397
+ "resource": "filesystem",
1398
+ "operation": "write",
1399
+ "scope": "working_directory",
1400
+ "source": "description_analysis"
1401
+ },
1402
+ {
1403
+ "resource": "network",
1404
+ "operation": "execute",
1405
+ "scope": "specific_path",
1406
+ "source": "tool_schema"
1407
+ },
1408
+ {
1409
+ "resource": "filesystem",
1410
+ "operation": "write",
1411
+ "scope": "working_directory",
1412
+ "source": "tool_schema"
1413
+ },
1414
+ {
1415
+ "resource": "filesystem",
1416
+ "operation": "write",
1417
+ "scope": "working_directory",
1418
+ "source": "description_analysis"
1419
+ },
1420
+ {
1421
+ "resource": "filesystem",
1422
+ "operation": "write",
1423
+ "scope": "working_directory",
1424
+ "source": "description_analysis"
1425
+ },
1426
+ {
1427
+ "resource": "filesystem",
1428
+ "operation": "write",
1429
+ "scope": "working_directory",
1430
+ "source": "description_analysis"
1431
+ },
1432
+ {
1433
+ "resource": "filesystem",
1434
+ "operation": "write",
1435
+ "scope": "working_directory",
1436
+ "source": "description_analysis"
1437
+ },
1438
+ {
1439
+ "resource": "filesystem",
1440
+ "operation": "write",
1441
+ "scope": "working_directory",
1442
+ "source": "description_analysis"
1443
+ },
1444
+ {
1445
+ "resource": "environment",
1446
+ "operation": "write",
1447
+ "scope": "global",
1448
+ "source": "tool_schema"
1449
+ },
1450
+ {
1451
+ "resource": "filesystem",
1452
+ "operation": "write",
1453
+ "scope": "working_directory",
1454
+ "source": "description_analysis"
1455
+ },
1456
+ {
1457
+ "resource": "filesystem",
1458
+ "operation": "write",
1459
+ "scope": "working_directory",
1460
+ "source": "description_analysis"
1461
+ },
1462
+ {
1463
+ "resource": "filesystem",
1464
+ "operation": "write",
1465
+ "scope": "working_directory",
1466
+ "source": "description_analysis"
1467
+ },
1468
+ {
1469
+ "resource": "network",
1470
+ "operation": "execute",
1471
+ "scope": "specific_path",
1472
+ "source": "tool_schema"
1473
+ },
1474
+ {
1475
+ "resource": "environment",
1476
+ "operation": "write",
1477
+ "scope": "global",
1478
+ "source": "tool_schema"
1479
+ },
1480
+ {
1481
+ "resource": "filesystem",
1482
+ "operation": "write",
1483
+ "scope": "working_directory",
1484
+ "source": "description_analysis"
1485
+ },
1486
+ {
1487
+ "resource": "filesystem",
1488
+ "operation": "write",
1489
+ "scope": "working_directory",
1490
+ "source": "description_analysis"
1491
+ },
1492
+ {
1493
+ "resource": "filesystem",
1494
+ "operation": "write",
1495
+ "scope": "working_directory",
1496
+ "source": "description_analysis"
1497
+ }
1498
+ ],
1499
+ "analyzedAt": "2026-07-15T22:34:10.600Z",
1500
+ "confidence": "high"
1501
+ }
1502
+ }