@cubis/foundry 0.3.34 → 0.3.36

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 (594) hide show
  1. package/README.md +56 -11
  2. package/bin/cubis.js +2824 -966
  3. package/mcp/.dockerignore +5 -0
  4. package/mcp/Dockerfile +19 -0
  5. package/mcp/README.md +550 -11
  6. package/mcp/config.json +18 -0
  7. package/mcp/dist/index.d.ts +1 -0
  8. package/mcp/dist/index.js +1488 -0
  9. package/mcp/package.json +36 -0
  10. package/mcp/src/cbxConfig/index.ts +23 -0
  11. package/mcp/src/cbxConfig/paths.ts +45 -0
  12. package/mcp/src/cbxConfig/reader.ts +149 -0
  13. package/mcp/src/cbxConfig/readerWriter.test.ts +147 -0
  14. package/mcp/src/cbxConfig/serviceConfig.test.ts +42 -0
  15. package/mcp/src/cbxConfig/serviceConfig.ts +157 -0
  16. package/mcp/src/cbxConfig/types.ts +44 -0
  17. package/mcp/src/cbxConfig/writer.ts +90 -0
  18. package/mcp/src/config/index.test.ts +81 -0
  19. package/mcp/src/config/index.ts +45 -0
  20. package/mcp/src/config/schema.ts +55 -0
  21. package/mcp/src/gateway/catalog.ts +37 -0
  22. package/mcp/src/gateway/config.ts +247 -0
  23. package/mcp/src/gateway/manager.ts +255 -0
  24. package/mcp/src/gateway/types.ts +54 -0
  25. package/mcp/src/gateway/upstreamClient.ts +80 -0
  26. package/mcp/src/index.ts +211 -0
  27. package/mcp/src/server.ts +219 -0
  28. package/mcp/src/tools/configTools.test.ts +166 -0
  29. package/mcp/src/tools/future/README.md +21 -0
  30. package/mcp/src/tools/future/index.ts +8 -0
  31. package/mcp/src/tools/index.ts +76 -0
  32. package/mcp/src/tools/mcpGateway.ts +44 -0
  33. package/mcp/src/tools/postmanGetMode.ts +82 -0
  34. package/mcp/src/tools/postmanGetStatus.ts +65 -0
  35. package/mcp/src/tools/postmanModes.ts +28 -0
  36. package/mcp/src/tools/postmanSetMode.ts +71 -0
  37. package/mcp/src/tools/skillBrowseCategory.ts +54 -0
  38. package/mcp/src/tools/skillGet.ts +43 -0
  39. package/mcp/src/tools/skillListCategories.ts +40 -0
  40. package/mcp/src/tools/skillSearch.ts +72 -0
  41. package/mcp/src/tools/skillTools.test.ts +126 -0
  42. package/mcp/src/tools/stitchGetMode.ts +58 -0
  43. package/mcp/src/tools/stitchGetStatus.ts +70 -0
  44. package/mcp/src/tools/stitchSetProfile.ts +82 -0
  45. package/mcp/src/transports/stdio.ts +9 -0
  46. package/mcp/src/transports/streamableHttp.ts +43 -0
  47. package/mcp/src/upstream/passthrough.ts +273 -0
  48. package/mcp/src/utils/errors.ts +38 -0
  49. package/mcp/src/utils/logger.ts +63 -0
  50. package/mcp/src/vault/manifest.test.ts +126 -0
  51. package/mcp/src/vault/manifest.ts +99 -0
  52. package/mcp/src/vault/scanner.test.ts +70 -0
  53. package/mcp/src/vault/scanner.ts +145 -0
  54. package/mcp/src/vault/types.ts +21 -0
  55. package/package.json +9 -2
  56. package/workflows/scripts/generate-powers.mjs +27 -18
  57. package/workflows/skills/postman/SKILL.md +11 -12
  58. package/workflows/skills/skills_index.json +11 -93
  59. package/workflows/skills/stitch/SKILL.md +17 -0
  60. package/workflows/workflows/agent-environment-setup/manifest.json +0 -24
  61. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/nextjs-react-expert/SKILL.md +1 -1
  62. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/SKILL.md +9 -232
  63. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/skills_index.json +0 -102
  64. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/stitch/SKILL.md +17 -0
  65. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/nextjs-react-expert/SKILL.md +1 -1
  66. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/SKILL.md +9 -232
  67. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/skills_index.json +0 -102
  68. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/stitch/SKILL.md +17 -0
  69. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/nextjs-react-expert/SKILL.md +1 -1
  70. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/SKILL.md +9 -232
  71. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/skills_index.json +0 -102
  72. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/stitch/SKILL.md +17 -0
  73. package/mcp/catalogs/default.json +0 -14
  74. package/mcp/powers/atlassian-mcp/POWER.md +0 -91
  75. package/mcp/powers/atlassian-mcp/SKILL.md +0 -88
  76. package/mcp/powers/atlassian-mcp/steering/authentication-patterns.md +0 -520
  77. package/mcp/powers/atlassian-mcp/steering/common-workflows.md +0 -660
  78. package/mcp/powers/atlassian-mcp/steering/confluence-operations.md +0 -528
  79. package/mcp/powers/atlassian-mcp/steering/jira-queries.md +0 -421
  80. package/mcp/powers/atlassian-mcp/steering/mcp-server-setup.md +0 -292
  81. package/mcp/powers/building-mcp-server-on-cloudflare/POWER.md +0 -261
  82. package/mcp/powers/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  83. package/mcp/powers/building-mcp-server-on-cloudflare/steering/examples.md +0 -115
  84. package/mcp/powers/building-mcp-server-on-cloudflare/steering/oauth-setup.md +0 -338
  85. package/mcp/powers/building-mcp-server-on-cloudflare/steering/troubleshooting.md +0 -317
  86. package/mcp/powers/datadog-automation/POWER.md +0 -238
  87. package/mcp/powers/datadog-automation/SKILL.md +0 -235
  88. package/mcp/powers/github-automation/POWER.md +0 -230
  89. package/mcp/powers/github-automation/SKILL.md +0 -227
  90. package/mcp/powers/mcp-builder/LICENSE.txt +0 -202
  91. package/mcp/powers/mcp-builder/POWER.md +0 -179
  92. package/mcp/powers/mcp-builder/SKILL.md +0 -176
  93. package/mcp/powers/mcp-builder/reference/evaluation.md +0 -602
  94. package/mcp/powers/mcp-builder/reference/mcp_best_practices.md +0 -915
  95. package/mcp/powers/mcp-builder/reference/node_mcp_server.md +0 -916
  96. package/mcp/powers/mcp-builder/reference/python_mcp_server.md +0 -752
  97. package/mcp/powers/mcp-builder/scripts/connections.py +0 -151
  98. package/mcp/powers/mcp-builder/scripts/evaluation.py +0 -373
  99. package/mcp/powers/mcp-builder/scripts/example_evaluation.xml +0 -22
  100. package/mcp/powers/mcp-builder/scripts/requirements.txt +0 -2
  101. package/mcp/powers/mcp-developer/POWER.md +0 -88
  102. package/mcp/powers/mcp-developer/SKILL.md +0 -85
  103. package/mcp/powers/mcp-developer/steering/protocol.md +0 -244
  104. package/mcp/powers/mcp-developer/steering/python-sdk.md +0 -367
  105. package/mcp/powers/mcp-developer/steering/resources.md +0 -554
  106. package/mcp/powers/mcp-developer/steering/tools.md +0 -480
  107. package/mcp/powers/mcp-developer/steering/typescript-sdk.md +0 -350
  108. package/mcp/powers/postman/POWER.md +0 -243
  109. package/mcp/powers/postman/SKILL.md +0 -240
  110. package/mcp/powers/postman/flutter-expert/POWER.md +0 -89
  111. package/mcp/powers/postman/flutter-expert/SKILL.md +0 -77
  112. package/mcp/powers/postman/flutter-expert/steering/bloc-state.md +0 -259
  113. package/mcp/powers/postman/flutter-expert/steering/engineering-principles.md +0 -82
  114. package/mcp/powers/postman/flutter-expert/steering/gorouter-navigation.md +0 -157
  115. package/mcp/powers/postman/flutter-expert/steering/performance.md +0 -99
  116. package/mcp/powers/postman/flutter-expert/steering/project-structure.md +0 -77
  117. package/mcp/powers/postman/flutter-expert/steering/riverpod-state.md +0 -404
  118. package/mcp/powers/postman/flutter-expert/steering/widget-patterns.md +0 -123
  119. package/mcp/powers/postman/flutter-security-reviewer/POWER.md +0 -204
  120. package/mcp/powers/postman/flutter-security-reviewer/SKILL.md +0 -180
  121. package/mcp/powers/postman/flutter-security-reviewer/steering/log_redaction.md +0 -17
  122. package/mcp/powers/postman/flutter-security-reviewer/steering/network_hardening.md +0 -13
  123. package/mcp/powers/postman/flutter-security-reviewer/steering/secret-scanning.md +0 -123
  124. package/mcp/powers/postman/flutter-security-reviewer/steering/secure_storage_policy.md +0 -16
  125. package/mcp/powers/postman/flutter-security-reviewer/steering/vulnerability-patterns.md +0 -189
  126. package/mcp/powers/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  127. package/mcp/powers/postman/flutter-test-master/POWER.md +0 -527
  128. package/mcp/powers/postman/flutter-test-master/SKILL.md +0 -513
  129. package/mcp/powers/postman/flutter-test-master/steering/golden-testing.md +0 -444
  130. package/mcp/powers/postman/flutter-test-master/steering/integration-testing.md +0 -688
  131. package/mcp/powers/postman/flutter-test-master/steering/property-testing.md +0 -408
  132. package/mcp/powers/postman/flutter-test-master/steering/riverpod-testing.md +0 -606
  133. package/mcp/powers/postman/flutter-test-master/steering/test-utilities.md +0 -566
  134. package/mcp/powers/postman/flutter-test-master/steering/unit-testing.md +0 -511
  135. package/mcp/powers/postman/flutter-test-master/steering/widget-testing.md +0 -601
  136. package/mcp/powers/postman/git-commit/POWER.md +0 -47
  137. package/mcp/powers/postman/git-commit/SKILL.md +0 -46
  138. package/mcp/powers/postman/gorouter-restoration/POWER.md +0 -227
  139. package/mcp/powers/postman/gorouter-restoration/SKILL.md +0 -217
  140. package/mcp/powers/postman/gorouter-restoration/steering/guard_patterns.md +0 -14
  141. package/mcp/powers/postman/gorouter-restoration/steering/tab_preservation.md +0 -12
  142. package/mcp/powers/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  143. package/mcp/powers/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  144. package/mcp/powers/postman/mcp.json +0 -11
  145. package/mcp/powers/postman/microservices-architect/POWER.md +0 -109
  146. package/mcp/powers/postman/microservices-architect/SKILL.md +0 -93
  147. package/mcp/powers/postman/microservices-architect/steering/communication.md +0 -499
  148. package/mcp/powers/postman/microservices-architect/steering/data.md +0 -721
  149. package/mcp/powers/postman/microservices-architect/steering/decomposition.md +0 -344
  150. package/mcp/powers/postman/microservices-architect/steering/observability.md +0 -805
  151. package/mcp/powers/postman/microservices-architect/steering/patterns.md +0 -603
  152. package/mcp/powers/postman/nestjs-expert/POWER.md +0 -130
  153. package/mcp/powers/postman/nestjs-expert/SKILL.md +0 -114
  154. package/mcp/powers/postman/nestjs-expert/steering/authentication.md +0 -461
  155. package/mcp/powers/postman/nestjs-expert/steering/controllers-routing.md +0 -114
  156. package/mcp/powers/postman/nestjs-expert/steering/dtos-validation.md +0 -156
  157. package/mcp/powers/postman/nestjs-expert/steering/migration-from-express.md +0 -1240
  158. package/mcp/powers/postman/nestjs-expert/steering/secure-sessions.md +0 -56
  159. package/mcp/powers/postman/nestjs-expert/steering/services-di.md +0 -143
  160. package/mcp/powers/postman/nestjs-expert/steering/strangler-fig-pattern.md +0 -47
  161. package/mcp/powers/postman/nestjs-expert/steering/testing-patterns.md +0 -189
  162. package/mcp/powers/postman/oneup-design/POWER.md +0 -72
  163. package/mcp/powers/postman/oneup-design/SKILL.md +0 -71
  164. package/mcp/powers/postman/oneup-design/steering/colors.md +0 -41
  165. package/mcp/powers/postman/oneup-design/steering/components.md +0 -53
  166. package/mcp/powers/postman/oneup-design/steering/spacing.md +0 -84
  167. package/mcp/powers/postman/openapi-docs/POWER.md +0 -78
  168. package/mcp/powers/postman/openapi-docs/SKILL.md +0 -68
  169. package/mcp/powers/postman/openapi-docs/steering/crud-templates.md +0 -43
  170. package/mcp/powers/postman/openapi-docs/steering/framework-express.md +0 -19
  171. package/mcp/powers/postman/openapi-docs/steering/framework-fastapi.md +0 -20
  172. package/mcp/powers/postman/openapi-docs/steering/framework-nestjs.md +0 -20
  173. package/mcp/powers/postman/openapi-docs/steering/framework-raw-openapi.md +0 -14
  174. package/mcp/powers/postman/openapi-docs/steering/openapi-checklist.md +0 -33
  175. package/mcp/powers/postman/openapi-docs/steering/stoplight-ui.md +0 -21
  176. package/mcp/powers/postman/steering/steering.md +0 -26
  177. package/mcp/powers/sentry-automation/POWER.md +0 -235
  178. package/mcp/powers/sentry-automation/SKILL.md +0 -232
  179. package/mcp/skills/atlassian-mcp/SKILL.md +0 -88
  180. package/mcp/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  181. package/mcp/skills/atlassian-mcp/references/common-workflows.md +0 -660
  182. package/mcp/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  183. package/mcp/skills/atlassian-mcp/references/jira-queries.md +0 -421
  184. package/mcp/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  185. package/mcp/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  186. package/mcp/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  187. package/mcp/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  188. package/mcp/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  189. package/mcp/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  190. package/mcp/skills/datadog-automation/SKILL.md +0 -235
  191. package/mcp/skills/github-automation/SKILL.md +0 -227
  192. package/mcp/skills/mcp-builder/LICENSE.txt +0 -202
  193. package/mcp/skills/mcp-builder/SKILL.md +0 -176
  194. package/mcp/skills/mcp-builder/reference/evaluation.md +0 -602
  195. package/mcp/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  196. package/mcp/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  197. package/mcp/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  198. package/mcp/skills/mcp-builder/scripts/connections.py +0 -151
  199. package/mcp/skills/mcp-builder/scripts/evaluation.py +0 -373
  200. package/mcp/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  201. package/mcp/skills/mcp-builder/scripts/requirements.txt +0 -2
  202. package/mcp/skills/mcp-developer/SKILL.md +0 -85
  203. package/mcp/skills/mcp-developer/references/protocol.md +0 -244
  204. package/mcp/skills/mcp-developer/references/python-sdk.md +0 -367
  205. package/mcp/skills/mcp-developer/references/resources.md +0 -554
  206. package/mcp/skills/mcp-developer/references/tools.md +0 -480
  207. package/mcp/skills/mcp-developer/references/typescript-sdk.md +0 -350
  208. package/mcp/skills/postman/POWER.md +0 -242
  209. package/mcp/skills/postman/SKILL.md +0 -240
  210. package/mcp/skills/postman/flutter-expert/POWER.md +0 -89
  211. package/mcp/skills/postman/flutter-expert/SKILL.md +0 -77
  212. package/mcp/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  213. package/mcp/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  214. package/mcp/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  215. package/mcp/skills/postman/flutter-expert/references/performance.md +0 -99
  216. package/mcp/skills/postman/flutter-expert/references/project-structure.md +0 -77
  217. package/mcp/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  218. package/mcp/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  219. package/mcp/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  220. package/mcp/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  221. package/mcp/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  222. package/mcp/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  223. package/mcp/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  224. package/mcp/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  225. package/mcp/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  226. package/mcp/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  227. package/mcp/skills/postman/flutter-test-master/POWER.md +0 -527
  228. package/mcp/skills/postman/flutter-test-master/SKILL.md +0 -513
  229. package/mcp/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  230. package/mcp/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  231. package/mcp/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  232. package/mcp/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  233. package/mcp/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  234. package/mcp/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  235. package/mcp/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  236. package/mcp/skills/postman/git-commit/POWER.md +0 -47
  237. package/mcp/skills/postman/git-commit/SKILL.md +0 -46
  238. package/mcp/skills/postman/gorouter-restoration/POWER.md +0 -227
  239. package/mcp/skills/postman/gorouter-restoration/SKILL.md +0 -217
  240. package/mcp/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  241. package/mcp/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  242. package/mcp/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  243. package/mcp/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  244. package/mcp/skills/postman/mcp.json +0 -11
  245. package/mcp/skills/postman/microservices-architect/POWER.md +0 -109
  246. package/mcp/skills/postman/microservices-architect/SKILL.md +0 -93
  247. package/mcp/skills/postman/microservices-architect/references/communication.md +0 -499
  248. package/mcp/skills/postman/microservices-architect/references/data.md +0 -721
  249. package/mcp/skills/postman/microservices-architect/references/decomposition.md +0 -344
  250. package/mcp/skills/postman/microservices-architect/references/observability.md +0 -805
  251. package/mcp/skills/postman/microservices-architect/references/patterns.md +0 -603
  252. package/mcp/skills/postman/nestjs-expert/POWER.md +0 -130
  253. package/mcp/skills/postman/nestjs-expert/SKILL.md +0 -114
  254. package/mcp/skills/postman/nestjs-expert/references/authentication.md +0 -461
  255. package/mcp/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  256. package/mcp/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  257. package/mcp/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  258. package/mcp/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  259. package/mcp/skills/postman/nestjs-expert/references/services-di.md +0 -143
  260. package/mcp/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  261. package/mcp/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  262. package/mcp/skills/postman/oneup-design/POWER.md +0 -72
  263. package/mcp/skills/postman/oneup-design/SKILL.md +0 -71
  264. package/mcp/skills/postman/oneup-design/references/colors.md +0 -41
  265. package/mcp/skills/postman/oneup-design/references/components.md +0 -53
  266. package/mcp/skills/postman/oneup-design/references/spacing.md +0 -84
  267. package/mcp/skills/postman/openapi-docs/POWER.md +0 -78
  268. package/mcp/skills/postman/openapi-docs/SKILL.md +0 -68
  269. package/mcp/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  270. package/mcp/skills/postman/openapi-docs/references/framework-express.md +0 -19
  271. package/mcp/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  272. package/mcp/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  273. package/mcp/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  274. package/mcp/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  275. package/mcp/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  276. package/mcp/skills/postman/references/steering.md +0 -26
  277. package/mcp/skills/sentry-automation/SKILL.md +0 -232
  278. package/workflows/powers/atlassian-mcp/POWER.md +0 -21
  279. package/workflows/powers/atlassian-mcp/SKILL.md +0 -18
  280. package/workflows/powers/building-mcp-server-on-cloudflare/POWER.md +0 -21
  281. package/workflows/powers/building-mcp-server-on-cloudflare/SKILL.md +0 -18
  282. package/workflows/powers/datadog-automation/POWER.md +0 -21
  283. package/workflows/powers/datadog-automation/SKILL.md +0 -18
  284. package/workflows/powers/github-automation/POWER.md +0 -21
  285. package/workflows/powers/github-automation/SKILL.md +0 -18
  286. package/workflows/powers/mcp-builder/POWER.md +0 -21
  287. package/workflows/powers/mcp-builder/SKILL.md +0 -18
  288. package/workflows/powers/mcp-developer/POWER.md +0 -21
  289. package/workflows/powers/mcp-developer/SKILL.md +0 -18
  290. package/workflows/powers/postman/POWER.md +0 -21
  291. package/workflows/powers/postman/SKILL.md +0 -18
  292. package/workflows/powers/sentry-automation/POWER.md +0 -21
  293. package/workflows/powers/sentry-automation/SKILL.md +0 -18
  294. package/workflows/skills/atlassian-mcp/SKILL.md +0 -18
  295. package/workflows/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -18
  296. package/workflows/skills/datadog-automation/SKILL.md +0 -18
  297. package/workflows/skills/github-automation/SKILL.md +0 -18
  298. package/workflows/skills/mcp-builder/SKILL.md +0 -18
  299. package/workflows/skills/mcp-developer/SKILL.md +0 -18
  300. package/workflows/skills/sentry-automation/SKILL.md +0 -18
  301. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/SKILL.md +0 -88
  302. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  303. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/common-workflows.md +0 -660
  304. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  305. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/jira-queries.md +0 -421
  306. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  307. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  308. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  309. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  310. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  311. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  312. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/datadog-automation/SKILL.md +0 -235
  313. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/github-automation/SKILL.md +0 -227
  314. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/LICENSE.txt +0 -202
  315. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/SKILL.md +0 -176
  316. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/evaluation.md +0 -602
  317. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  318. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  319. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  320. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/connections.py +0 -151
  321. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/evaluation.py +0 -373
  322. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  323. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/requirements.txt +0 -2
  324. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/SKILL.md +0 -85
  325. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/protocol.md +0 -244
  326. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/python-sdk.md +0 -367
  327. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/resources.md +0 -554
  328. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/tools.md +0 -480
  329. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/typescript-sdk.md +0 -350
  330. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/POWER.md +0 -242
  331. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/POWER.md +0 -89
  332. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/SKILL.md +0 -77
  333. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  334. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  335. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  336. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/performance.md +0 -99
  337. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/project-structure.md +0 -77
  338. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  339. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  340. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  341. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  342. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  343. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  344. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  345. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  346. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  347. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  348. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/POWER.md +0 -527
  349. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/SKILL.md +0 -513
  350. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  351. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  352. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  353. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  354. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  355. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  356. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  357. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/git-commit/POWER.md +0 -47
  358. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/git-commit/SKILL.md +0 -46
  359. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/POWER.md +0 -227
  360. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/SKILL.md +0 -217
  361. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  362. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  363. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  364. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  365. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/mcp.json +0 -11
  366. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/POWER.md +0 -109
  367. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/SKILL.md +0 -93
  368. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/communication.md +0 -499
  369. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/data.md +0 -721
  370. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/decomposition.md +0 -344
  371. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/observability.md +0 -805
  372. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/patterns.md +0 -603
  373. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/POWER.md +0 -130
  374. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/SKILL.md +0 -114
  375. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/authentication.md +0 -461
  376. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  377. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  378. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  379. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  380. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/services-di.md +0 -143
  381. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  382. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  383. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/POWER.md +0 -72
  384. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/SKILL.md +0 -71
  385. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/colors.md +0 -41
  386. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/components.md +0 -53
  387. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/spacing.md +0 -84
  388. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/POWER.md +0 -78
  389. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/SKILL.md +0 -68
  390. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  391. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-express.md +0 -19
  392. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  393. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  394. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  395. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  396. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  397. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/references/steering.md +0 -26
  398. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/sentry-automation/SKILL.md +0 -232
  399. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/SKILL.md +0 -88
  400. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  401. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/common-workflows.md +0 -660
  402. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  403. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/jira-queries.md +0 -421
  404. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  405. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  406. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  407. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  408. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  409. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  410. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/datadog-automation/SKILL.md +0 -235
  411. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/github-automation/SKILL.md +0 -227
  412. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/LICENSE.txt +0 -202
  413. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/SKILL.md +0 -176
  414. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/evaluation.md +0 -602
  415. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  416. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  417. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  418. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/connections.py +0 -151
  419. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/evaluation.py +0 -373
  420. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  421. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/requirements.txt +0 -2
  422. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/SKILL.md +0 -85
  423. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/protocol.md +0 -244
  424. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/python-sdk.md +0 -367
  425. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/resources.md +0 -554
  426. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/tools.md +0 -480
  427. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/typescript-sdk.md +0 -350
  428. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/POWER.md +0 -242
  429. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/POWER.md +0 -89
  430. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/SKILL.md +0 -77
  431. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  432. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  433. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  434. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/performance.md +0 -99
  435. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/project-structure.md +0 -77
  436. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  437. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  438. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  439. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  440. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  441. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  442. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  443. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  444. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  445. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  446. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/POWER.md +0 -527
  447. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/SKILL.md +0 -513
  448. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  449. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  450. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  451. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  452. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  453. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  454. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  455. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/git-commit/POWER.md +0 -47
  456. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/git-commit/SKILL.md +0 -46
  457. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/POWER.md +0 -227
  458. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/SKILL.md +0 -217
  459. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  460. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  461. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  462. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  463. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/mcp.json +0 -11
  464. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/POWER.md +0 -109
  465. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/SKILL.md +0 -93
  466. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/communication.md +0 -499
  467. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/data.md +0 -721
  468. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/decomposition.md +0 -344
  469. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/observability.md +0 -805
  470. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/patterns.md +0 -603
  471. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/POWER.md +0 -130
  472. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/SKILL.md +0 -114
  473. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/authentication.md +0 -461
  474. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  475. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  476. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  477. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  478. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/services-di.md +0 -143
  479. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  480. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  481. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/POWER.md +0 -72
  482. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/SKILL.md +0 -71
  483. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/colors.md +0 -41
  484. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/components.md +0 -53
  485. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/spacing.md +0 -84
  486. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/POWER.md +0 -78
  487. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/SKILL.md +0 -68
  488. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  489. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-express.md +0 -19
  490. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  491. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  492. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  493. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  494. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  495. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/references/steering.md +0 -26
  496. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/sentry-automation/SKILL.md +0 -232
  497. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/SKILL.md +0 -88
  498. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  499. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/common-workflows.md +0 -660
  500. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  501. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/jira-queries.md +0 -421
  502. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  503. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  504. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  505. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  506. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  507. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  508. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/datadog-automation/SKILL.md +0 -235
  509. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/github-automation/SKILL.md +0 -227
  510. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/LICENSE.txt +0 -202
  511. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/SKILL.md +0 -176
  512. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/evaluation.md +0 -602
  513. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  514. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  515. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  516. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/connections.py +0 -151
  517. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/evaluation.py +0 -373
  518. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  519. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/requirements.txt +0 -2
  520. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/SKILL.md +0 -85
  521. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/protocol.md +0 -244
  522. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/python-sdk.md +0 -367
  523. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/resources.md +0 -554
  524. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/tools.md +0 -480
  525. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/typescript-sdk.md +0 -350
  526. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/POWER.md +0 -242
  527. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/POWER.md +0 -89
  528. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/SKILL.md +0 -77
  529. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  530. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  531. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  532. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/performance.md +0 -99
  533. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/project-structure.md +0 -77
  534. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  535. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  536. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  537. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  538. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  539. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  540. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  541. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  542. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  543. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  544. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/POWER.md +0 -527
  545. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/SKILL.md +0 -513
  546. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  547. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  548. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  549. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  550. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  551. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  552. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  553. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/git-commit/POWER.md +0 -47
  554. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/git-commit/SKILL.md +0 -46
  555. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/POWER.md +0 -227
  556. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/SKILL.md +0 -217
  557. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  558. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  559. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  560. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  561. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/mcp.json +0 -11
  562. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/POWER.md +0 -109
  563. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/SKILL.md +0 -93
  564. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/communication.md +0 -499
  565. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/data.md +0 -721
  566. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/decomposition.md +0 -344
  567. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/observability.md +0 -805
  568. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/patterns.md +0 -603
  569. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/POWER.md +0 -130
  570. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/SKILL.md +0 -114
  571. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/authentication.md +0 -461
  572. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  573. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  574. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  575. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  576. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/services-di.md +0 -143
  577. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  578. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  579. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/POWER.md +0 -72
  580. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/SKILL.md +0 -71
  581. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/colors.md +0 -41
  582. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/components.md +0 -53
  583. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/spacing.md +0 -84
  584. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/POWER.md +0 -78
  585. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/SKILL.md +0 -68
  586. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  587. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-express.md +0 -19
  588. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  589. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  590. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  591. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  592. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  593. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/references/steering.md +0 -26
  594. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/sentry-automation/SKILL.md +0 -232
@@ -0,0 +1,1488 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/config/index.ts
4
+ import { readFileSync } from "fs";
5
+ import path from "path";
6
+ import { fileURLToPath } from "url";
7
+
8
+ // src/config/schema.ts
9
+ import { z } from "zod";
10
+ var ServerConfigSchema = z.object({
11
+ server: z.object({
12
+ name: z.string(),
13
+ version: z.string(),
14
+ description: z.string().optional()
15
+ }),
16
+ vault: z.object({
17
+ roots: z.array(z.string()).min(1),
18
+ summaryMaxLength: z.number().int().positive().default(200)
19
+ }),
20
+ transport: z.object({
21
+ default: z.enum(["stdio", "streamable-http"]).default("stdio"),
22
+ http: z.object({
23
+ port: z.number().int().positive().default(3100),
24
+ host: z.string().default("127.0.0.1")
25
+ }).optional()
26
+ })
27
+ });
28
+ var FORBIDDEN_KEYS = [
29
+ "apiKey",
30
+ "api_key",
31
+ "secret",
32
+ "token",
33
+ "password",
34
+ "credential"
35
+ ];
36
+ function rejectCredentialFields(raw) {
37
+ const json = JSON.stringify(raw);
38
+ for (const key of FORBIDDEN_KEYS) {
39
+ if (json.includes(`"${key}"`)) {
40
+ throw new Error(
41
+ `Server config.json must not contain credential field "${key}". Store credentials in cbx_config.json instead.`
42
+ );
43
+ }
44
+ }
45
+ }
46
+
47
+ // src/utils/logger.ts
48
+ var LEVEL_ORDER = {
49
+ debug: 0,
50
+ info: 1,
51
+ warn: 2,
52
+ error: 3
53
+ };
54
+ var currentLevel = "info";
55
+ function setLogLevel(level) {
56
+ currentLevel = level;
57
+ }
58
+ function shouldLog(level) {
59
+ return LEVEL_ORDER[level] >= LEVEL_ORDER[currentLevel];
60
+ }
61
+ function ts() {
62
+ return (/* @__PURE__ */ new Date()).toISOString();
63
+ }
64
+ var logger = {
65
+ debug(msg, data) {
66
+ if (shouldLog("debug")) {
67
+ process.stderr.write(
68
+ `[${ts()}] DEBUG ${msg}${data ? ` ${JSON.stringify(data)}` : ""}
69
+ `
70
+ );
71
+ }
72
+ },
73
+ info(msg, data) {
74
+ if (shouldLog("info")) {
75
+ process.stderr.write(
76
+ `[${ts()}] INFO ${msg}${data ? ` ${JSON.stringify(data)}` : ""}
77
+ `
78
+ );
79
+ }
80
+ },
81
+ warn(msg, data) {
82
+ if (shouldLog("warn")) {
83
+ process.stderr.write(
84
+ `[${ts()}] WARN ${msg}${data ? ` ${JSON.stringify(data)}` : ""}
85
+ `
86
+ );
87
+ }
88
+ },
89
+ error(msg, data) {
90
+ if (shouldLog("error")) {
91
+ process.stderr.write(
92
+ `[${ts()}] ERROR ${msg}${data ? ` ${JSON.stringify(data)}` : ""}
93
+ `
94
+ );
95
+ }
96
+ },
97
+ /** Raw line to stderr (no timestamp/level prefix). Used for startup banners. */
98
+ raw(msg) {
99
+ process.stderr.write(`${msg}
100
+ `);
101
+ }
102
+ };
103
+
104
+ // src/config/index.ts
105
+ var __dirname = path.dirname(fileURLToPath(import.meta.url));
106
+ var PKG_ROOT = path.basename(__dirname) === "config" ? path.resolve(__dirname, "../..") : path.resolve(__dirname, "..");
107
+ var DEFAULT_CONFIG_PATH = path.resolve(PKG_ROOT, "config.json");
108
+ function loadServerConfig(configPath) {
109
+ const resolved = configPath ?? DEFAULT_CONFIG_PATH;
110
+ logger.debug(`Loading server config from ${resolved}`);
111
+ let raw;
112
+ try {
113
+ raw = readFileSync(resolved, "utf8");
114
+ } catch {
115
+ throw new Error(`Cannot read server config: ${resolved}`);
116
+ }
117
+ const parsed = JSON.parse(raw);
118
+ rejectCredentialFields(parsed);
119
+ const result = ServerConfigSchema.safeParse(parsed);
120
+ if (!result.success) {
121
+ throw new Error(`Invalid server config: ${result.error.message}`);
122
+ }
123
+ return result.data;
124
+ }
125
+
126
+ // src/vault/scanner.ts
127
+ import { readdir, stat } from "fs/promises";
128
+ import path2 from "path";
129
+ async function scanVaultRoots(roots, basePath) {
130
+ const skills = [];
131
+ for (const rootRel of roots) {
132
+ const rootAbs = path2.resolve(basePath, rootRel);
133
+ let entries;
134
+ try {
135
+ entries = await readdir(rootAbs);
136
+ } catch {
137
+ logger.warn(`Vault root not found, skipping: ${rootAbs}`);
138
+ continue;
139
+ }
140
+ for (const entry of entries) {
141
+ if (entry.startsWith(".")) continue;
142
+ const entryPath = path2.join(rootAbs, entry);
143
+ const entryStat = await stat(entryPath).catch(() => null);
144
+ if (!entryStat?.isDirectory()) continue;
145
+ const skillFile = path2.join(entryPath, "SKILL.md");
146
+ const skillStat = await stat(skillFile).catch(() => null);
147
+ if (!skillStat?.isFile()) continue;
148
+ skills.push({
149
+ id: entry,
150
+ category: deriveCategory(entry),
151
+ path: skillFile
152
+ });
153
+ }
154
+ }
155
+ logger.info(`Vault scan complete: ${skills.length} skills discovered`);
156
+ return skills;
157
+ }
158
+ function deriveCategory(skillId) {
159
+ const categoryMap = {
160
+ flutter: "mobile",
161
+ drift: "mobile",
162
+ gorouter: "mobile",
163
+ riverpod: "mobile",
164
+ react: "frontend",
165
+ next: "frontend",
166
+ nextjs: "frontend",
167
+ tailwind: "frontend",
168
+ vue: "frontend",
169
+ frontend: "frontend",
170
+ nestjs: "backend",
171
+ fastapi: "backend",
172
+ fastify: "backend",
173
+ nodejs: "backend",
174
+ golang: "backend",
175
+ rust: "backend",
176
+ python: "backend",
177
+ javascript: "backend",
178
+ typescript: "backend",
179
+ java: "backend",
180
+ kotlin: "backend",
181
+ csharp: "backend",
182
+ database: "data",
183
+ graphql: "data",
184
+ api: "api",
185
+ openapi: "api",
186
+ devops: "devops",
187
+ terraform: "devops",
188
+ deployment: "devops",
189
+ vercel: "devops",
190
+ security: "security",
191
+ penetration: "security",
192
+ "red-team": "security",
193
+ vulnerability: "security",
194
+ secure: "security",
195
+ test: "testing",
196
+ playwright: "testing",
197
+ qa: "testing",
198
+ tdd: "testing",
199
+ "find-bugs": "testing",
200
+ "fix-review": "testing",
201
+ monitoring: "observability",
202
+ sentry: "observability",
203
+ datadog: "observability",
204
+ performance: "performance",
205
+ "web-perf": "performance",
206
+ git: "tooling",
207
+ lint: "tooling",
208
+ cli: "tooling",
209
+ "clean-code": "practices",
210
+ plan: "practices",
211
+ brainstorm: "practices",
212
+ behavioral: "practices",
213
+ refactor: "practices",
214
+ architecture: "architecture",
215
+ microservices: "architecture",
216
+ "design-system": "design",
217
+ "mobile-design": "design",
218
+ "ui-ux": "design",
219
+ "web-design": "design",
220
+ "ux-ui": "design",
221
+ accessibility: "design",
222
+ documentation: "documentation",
223
+ "code-documenter": "documentation",
224
+ changelog: "documentation",
225
+ game: "game-dev",
226
+ seo: "marketing",
227
+ geo: "marketing",
228
+ i18n: "localization",
229
+ mcp: "mcp",
230
+ prompt: "ai",
231
+ "vercel-ai": "ai",
232
+ stripe: "payments",
233
+ saas: "saas"
234
+ };
235
+ const lower = skillId.toLowerCase();
236
+ for (const [prefix, category] of Object.entries(categoryMap)) {
237
+ if (lower.startsWith(prefix)) return category;
238
+ }
239
+ return "general";
240
+ }
241
+
242
+ // src/vault/manifest.ts
243
+ import { readFile } from "fs/promises";
244
+ function buildManifest(skills) {
245
+ const categorySet = /* @__PURE__ */ new Set();
246
+ for (const skill of skills) {
247
+ categorySet.add(skill.category);
248
+ }
249
+ return {
250
+ categories: [...categorySet].sort(),
251
+ skills
252
+ };
253
+ }
254
+ async function extractDescription(skillPath, maxLength) {
255
+ try {
256
+ const content = await readFile(skillPath, "utf8");
257
+ return parseDescriptionFromFrontmatter(content, maxLength);
258
+ } catch (err) {
259
+ logger.debug(`Failed to read description from ${skillPath}: ${err}`);
260
+ return void 0;
261
+ }
262
+ }
263
+ function parseDescriptionFromFrontmatter(content, maxLength) {
264
+ const fmMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
265
+ if (!fmMatch) return void 0;
266
+ const frontmatter = fmMatch[1];
267
+ const descMatch = frontmatter.match(/^description:\s*(.+)$/m);
268
+ if (!descMatch) return void 0;
269
+ let desc = descMatch[1].trim();
270
+ if (desc.startsWith('"') && desc.endsWith('"') || desc.startsWith("'") && desc.endsWith("'")) {
271
+ desc = desc.slice(1, -1);
272
+ }
273
+ if (desc.length > maxLength) {
274
+ return desc.slice(0, maxLength - 3) + "...";
275
+ }
276
+ return desc;
277
+ }
278
+ async function readFullSkillContent(skillPath) {
279
+ return readFile(skillPath, "utf8");
280
+ }
281
+ async function enrichWithDescriptions(skills, maxLength) {
282
+ return Promise.all(
283
+ skills.map(async (skill) => {
284
+ if (skill.description) return skill;
285
+ const description = await extractDescription(skill.path, maxLength);
286
+ return { ...skill, description };
287
+ })
288
+ );
289
+ }
290
+
291
+ // src/server.ts
292
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
293
+ import { z as z12 } from "zod";
294
+
295
+ // src/tools/skillListCategories.ts
296
+ import { z as z2 } from "zod";
297
+ var skillListCategoriesName = "skill_list_categories";
298
+ var skillListCategoriesDescription = "List all skill categories available in the vault. Returns category names and skill counts.";
299
+ var skillListCategoriesSchema = z2.object({});
300
+ function handleSkillListCategories(manifest) {
301
+ const categoryCounts = {};
302
+ for (const skill of manifest.skills) {
303
+ categoryCounts[skill.category] = (categoryCounts[skill.category] ?? 0) + 1;
304
+ }
305
+ const categories = manifest.categories.map((cat) => ({
306
+ category: cat,
307
+ skillCount: categoryCounts[cat] ?? 0
308
+ }));
309
+ return {
310
+ content: [
311
+ {
312
+ type: "text",
313
+ text: JSON.stringify(
314
+ { categories, totalSkills: manifest.skills.length },
315
+ null,
316
+ 2
317
+ )
318
+ }
319
+ ]
320
+ };
321
+ }
322
+
323
+ // src/tools/skillBrowseCategory.ts
324
+ import { z as z3 } from "zod";
325
+
326
+ // src/utils/errors.ts
327
+ import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js";
328
+ function invalidInput(message) {
329
+ throw new McpError(ErrorCode.InvalidParams, message);
330
+ }
331
+ function configNotFound() {
332
+ throw new McpError(
333
+ ErrorCode.InternalError,
334
+ "cbx_config.json not found. Run cbx workflows config --scope global --show to diagnose."
335
+ );
336
+ }
337
+ function unknownPostmanMode(url) {
338
+ throw new McpError(
339
+ ErrorCode.InvalidParams,
340
+ `Unknown Postman MCP URL in config: "${url}". Expected one of: https://mcp.postman.com/minimal, https://mcp.postman.com/code, https://mcp.postman.com/mcp`
341
+ );
342
+ }
343
+ function notFound(entity, id) {
344
+ throw new McpError(ErrorCode.InvalidParams, `${entity} not found: "${id}"`);
345
+ }
346
+
347
+ // src/tools/skillBrowseCategory.ts
348
+ var skillBrowseCategoryName = "skill_browse_category";
349
+ var skillBrowseCategoryDescription = "Browse skills within a specific category. Returns skill IDs and short descriptions.";
350
+ var skillBrowseCategorySchema = z3.object({
351
+ category: z3.string().describe("The category name to browse (from skill_list_categories)")
352
+ });
353
+ async function handleSkillBrowseCategory(args, manifest, summaryMaxLength) {
354
+ const { category } = args;
355
+ if (!manifest.categories.includes(category)) {
356
+ notFound("Category", category);
357
+ }
358
+ const matching = manifest.skills.filter((s) => s.category === category);
359
+ const enriched = await enrichWithDescriptions(matching, summaryMaxLength);
360
+ const skills = enriched.map((s) => ({
361
+ id: s.id,
362
+ description: s.description ?? "(no description)"
363
+ }));
364
+ return {
365
+ content: [
366
+ {
367
+ type: "text",
368
+ text: JSON.stringify(
369
+ { category, skills, count: skills.length },
370
+ null,
371
+ 2
372
+ )
373
+ }
374
+ ]
375
+ };
376
+ }
377
+
378
+ // src/tools/skillSearch.ts
379
+ import { z as z4 } from "zod";
380
+ var skillSearchName = "skill_search";
381
+ var skillSearchDescription = "Search skills by keyword. Matches against skill IDs and descriptions. Returns matching skills with short descriptions.";
382
+ var skillSearchSchema = z4.object({
383
+ query: z4.string().min(1).describe(
384
+ "Search keyword or phrase to match against skill IDs and descriptions"
385
+ )
386
+ });
387
+ async function handleSkillSearch(args, manifest, summaryMaxLength) {
388
+ const { query } = args;
389
+ const lower = query.toLowerCase();
390
+ let matches = manifest.skills.filter(
391
+ (s) => s.id.toLowerCase().includes(lower)
392
+ );
393
+ if (matches.length === 0) {
394
+ const enriched = await enrichWithDescriptions(
395
+ manifest.skills,
396
+ summaryMaxLength
397
+ );
398
+ matches = enriched.filter(
399
+ (s) => s.id.toLowerCase().includes(lower) || s.description && s.description.toLowerCase().includes(lower)
400
+ );
401
+ } else {
402
+ matches = await enrichWithDescriptions(matches, summaryMaxLength);
403
+ }
404
+ const results = matches.map((s) => ({
405
+ id: s.id,
406
+ category: s.category,
407
+ description: s.description ?? "(no description)"
408
+ }));
409
+ return {
410
+ content: [
411
+ {
412
+ type: "text",
413
+ text: JSON.stringify(
414
+ { query, results, count: results.length },
415
+ null,
416
+ 2
417
+ )
418
+ }
419
+ ]
420
+ };
421
+ }
422
+
423
+ // src/tools/skillGet.ts
424
+ import { z as z5 } from "zod";
425
+ var skillGetName = "skill_get";
426
+ var skillGetDescription = "Get the full content of a specific skill by ID. Returns the complete SKILL.md file content.";
427
+ var skillGetSchema = z5.object({
428
+ id: z5.string().describe("The skill ID (directory name) to retrieve")
429
+ });
430
+ async function handleSkillGet(args, manifest) {
431
+ const { id } = args;
432
+ const skill = manifest.skills.find((s) => s.id === id);
433
+ if (!skill) {
434
+ notFound("Skill", id);
435
+ }
436
+ const content = await readFullSkillContent(skill.path);
437
+ return {
438
+ content: [
439
+ {
440
+ type: "text",
441
+ text: content
442
+ }
443
+ ]
444
+ };
445
+ }
446
+
447
+ // src/tools/postmanGetMode.ts
448
+ import { z as z6 } from "zod";
449
+
450
+ // src/cbxConfig/paths.ts
451
+ import path3 from "path";
452
+ import os from "os";
453
+ import { existsSync } from "fs";
454
+ function globalConfigPath() {
455
+ return path3.join(os.homedir(), ".cbx", "cbx_config.json");
456
+ }
457
+ function projectConfigPath(workspaceRoot) {
458
+ const root = workspaceRoot ?? process.cwd();
459
+ return path3.join(root, "cbx_config.json");
460
+ }
461
+ function resolveConfigPath(scope, workspaceRoot) {
462
+ if (scope === "global") {
463
+ return { path: globalConfigPath(), scope: "global" };
464
+ }
465
+ if (scope === "project") {
466
+ return { path: projectConfigPath(workspaceRoot), scope: "project" };
467
+ }
468
+ const projectPath = projectConfigPath(workspaceRoot);
469
+ if (existsSync(projectPath)) {
470
+ return { path: projectPath, scope: "project" };
471
+ }
472
+ return { path: globalConfigPath(), scope: "global" };
473
+ }
474
+
475
+ // src/cbxConfig/reader.ts
476
+ import { readFileSync as readFileSync2, existsSync as existsSync2 } from "fs";
477
+ import { parse as parseJsonc } from "jsonc-parser";
478
+ function readConfigFile(filePath) {
479
+ if (!existsSync2(filePath)) return null;
480
+ try {
481
+ const raw = readFileSync2(filePath, "utf8");
482
+ return parseJsonc(raw);
483
+ } catch (err) {
484
+ logger.warn(`Failed to parse config at ${filePath}: ${err}`);
485
+ return null;
486
+ }
487
+ }
488
+ function mergeConfigs(base, override) {
489
+ const result = { ...base };
490
+ for (const [key, value] of Object.entries(override)) {
491
+ if (value !== void 0 && value !== null && typeof value === "object" && !Array.isArray(value)) {
492
+ result[key] = mergeConfigs(
493
+ result[key] ?? {},
494
+ value
495
+ );
496
+ } else {
497
+ result[key] = value;
498
+ }
499
+ }
500
+ return result;
501
+ }
502
+ function readScopedConfig(scope, workspaceRoot) {
503
+ const configPath = scope === "global" ? globalConfigPath() : projectConfigPath(workspaceRoot);
504
+ const config = readConfigFile(configPath);
505
+ if (!config) return null;
506
+ return { config, scope, path: configPath };
507
+ }
508
+ function readEffectiveConfig(scope, workspaceRoot) {
509
+ if (scope === "global" || scope === "project") {
510
+ return readScopedConfig(scope, workspaceRoot);
511
+ }
512
+ const globalConf = readConfigFile(globalConfigPath());
513
+ const projectPath = projectConfigPath(workspaceRoot);
514
+ const projectConf = readConfigFile(projectPath);
515
+ if (!globalConf && !projectConf) return null;
516
+ const base = globalConf ?? {};
517
+ const override = projectConf ?? {};
518
+ const config = mergeConfigs(base, override);
519
+ const resolved = resolveConfigPath("auto", workspaceRoot);
520
+ return {
521
+ config,
522
+ scope: resolved.scope,
523
+ path: resolved.path
524
+ };
525
+ }
526
+
527
+ // src/cbxConfig/writer.ts
528
+ import {
529
+ readFileSync as readFileSync3,
530
+ writeFileSync,
531
+ renameSync,
532
+ mkdirSync,
533
+ existsSync as existsSync3
534
+ } from "fs";
535
+ import path4 from "path";
536
+ import { parse as parseJsonc2 } from "jsonc-parser";
537
+ function writeConfigField(fieldPath, value, scope, workspaceRoot) {
538
+ const resolved = resolveConfigPath(scope, workspaceRoot);
539
+ const configPath = resolved.path;
540
+ let config = {};
541
+ if (existsSync3(configPath)) {
542
+ try {
543
+ const raw = readFileSync3(configPath, "utf8");
544
+ config = parseJsonc2(raw);
545
+ } catch {
546
+ logger.warn(
547
+ `Cannot parse existing config at ${configPath}, creating new`
548
+ );
549
+ }
550
+ }
551
+ const parts = fieldPath.split(".");
552
+ let current = config;
553
+ for (let i = 0; i < parts.length - 1; i++) {
554
+ const key = parts[i];
555
+ if (typeof current[key] !== "object" || current[key] === null) {
556
+ current[key] = {};
557
+ }
558
+ current = current[key];
559
+ }
560
+ current[parts[parts.length - 1]] = value;
561
+ const dir = path4.dirname(configPath);
562
+ if (!existsSync3(dir)) {
563
+ mkdirSync(dir, { recursive: true });
564
+ }
565
+ const tmpPath = `${configPath}.tmp.${Date.now()}`;
566
+ writeFileSync(tmpPath, JSON.stringify(config, null, 2) + "\n", "utf8");
567
+ renameSync(tmpPath, configPath);
568
+ logger.debug(`Config field "${fieldPath}" written to ${configPath}`);
569
+ return { writtenPath: configPath, scope: resolved.scope };
570
+ }
571
+
572
+ // src/cbxConfig/serviceConfig.ts
573
+ var DEFAULT_POSTMAN_URL = "https://mcp.postman.com/minimal";
574
+ var DEFAULT_STITCH_URL = "https://stitch.googleapis.com/mcp";
575
+ var DEFAULT_PROFILE_NAME = "default";
576
+ var DEFAULT_POSTMAN_ENV_VAR = "POSTMAN_API_KEY";
577
+ var DEFAULT_STITCH_ENV_VAR = "STITCH_API_KEY";
578
+ function asRecord(value) {
579
+ if (!value || typeof value !== "object" || Array.isArray(value)) return null;
580
+ return value;
581
+ }
582
+ function normalizeName(value, fallback = DEFAULT_PROFILE_NAME) {
583
+ const normalized = typeof value === "string" ? value.trim() : "";
584
+ return normalized || fallback;
585
+ }
586
+ function normalizeEnvVar(value, fallback) {
587
+ const normalized = typeof value === "string" ? value.trim() : "";
588
+ return normalized || fallback;
589
+ }
590
+ function normalizeOptionalString(value) {
591
+ if (value === null || value === void 0) return null;
592
+ const normalized = String(value).trim();
593
+ return normalized || null;
594
+ }
595
+ function parsePostmanState(config) {
596
+ const section = asRecord(config.postman) ?? {};
597
+ const mcpUrl = normalizeOptionalString(section.mcpUrl) ?? DEFAULT_POSTMAN_URL;
598
+ const fallbackEnvVar = normalizeEnvVar(
599
+ section.apiKeyEnvVar,
600
+ DEFAULT_POSTMAN_ENV_VAR
601
+ );
602
+ const rawProfiles = Array.isArray(section.profiles) ? section.profiles : [];
603
+ const profiles = [];
604
+ for (const rawProfile of rawProfiles) {
605
+ const profile = asRecord(rawProfile);
606
+ if (!profile) continue;
607
+ profiles.push({
608
+ name: normalizeName(profile.name, DEFAULT_PROFILE_NAME),
609
+ apiKeyEnvVar: normalizeEnvVar(profile.apiKeyEnvVar, fallbackEnvVar),
610
+ workspaceId: normalizeOptionalString(
611
+ profile.workspaceId ?? profile.defaultWorkspaceId
612
+ ),
613
+ hasInlineApiKey: typeof profile.apiKey === "string" && profile.apiKey.trim().length > 0
614
+ });
615
+ }
616
+ if (profiles.length === 0) {
617
+ profiles.push({
618
+ name: DEFAULT_PROFILE_NAME,
619
+ apiKeyEnvVar: fallbackEnvVar,
620
+ workspaceId: normalizeOptionalString(section.defaultWorkspaceId),
621
+ hasInlineApiKey: typeof section.apiKey === "string" && section.apiKey.trim().length > 0
622
+ });
623
+ }
624
+ const requestedActive = normalizeOptionalString(section.activeProfileName);
625
+ const activeProfile = profiles.find((profile) => profile.name === requestedActive) ?? profiles[0];
626
+ return {
627
+ mcpUrl,
628
+ activeProfileName: activeProfile?.name ?? null,
629
+ activeProfile: activeProfile ?? null,
630
+ profiles
631
+ };
632
+ }
633
+ function parseStitchState(config) {
634
+ const section = asRecord(config.stitch) ?? {};
635
+ const mcpUrl = normalizeOptionalString(section.mcpUrl) ?? DEFAULT_STITCH_URL;
636
+ const fallbackEnvVar = normalizeEnvVar(
637
+ section.apiKeyEnvVar,
638
+ DEFAULT_STITCH_ENV_VAR
639
+ );
640
+ const rawProfiles = section.profiles;
641
+ const profiles = [];
642
+ if (Array.isArray(rawProfiles)) {
643
+ for (const rawProfile of rawProfiles) {
644
+ const profile = asRecord(rawProfile);
645
+ if (!profile) continue;
646
+ profiles.push({
647
+ name: normalizeName(profile.name, DEFAULT_PROFILE_NAME),
648
+ apiKeyEnvVar: normalizeEnvVar(profile.apiKeyEnvVar, fallbackEnvVar),
649
+ url: normalizeOptionalString(profile.url),
650
+ hasInlineApiKey: typeof profile.apiKey === "string" && profile.apiKey.trim().length > 0
651
+ });
652
+ }
653
+ } else if (asRecord(rawProfiles)) {
654
+ for (const [profileName, rawProfile] of Object.entries(
655
+ rawProfiles
656
+ )) {
657
+ const profile = asRecord(rawProfile);
658
+ if (!profile) continue;
659
+ profiles.push({
660
+ name: normalizeName(profileName, DEFAULT_PROFILE_NAME),
661
+ apiKeyEnvVar: normalizeEnvVar(profile.apiKeyEnvVar, fallbackEnvVar),
662
+ url: normalizeOptionalString(profile.url),
663
+ hasInlineApiKey: typeof profile.apiKey === "string" && profile.apiKey.trim().length > 0
664
+ });
665
+ }
666
+ }
667
+ if (profiles.length === 0) {
668
+ profiles.push({
669
+ name: DEFAULT_PROFILE_NAME,
670
+ apiKeyEnvVar: fallbackEnvVar,
671
+ url: normalizeOptionalString(section.url) ?? mcpUrl,
672
+ hasInlineApiKey: typeof section.apiKey === "string" && section.apiKey.trim().length > 0
673
+ });
674
+ }
675
+ const requestedActive = normalizeOptionalString(section.activeProfileName);
676
+ const activeProfile = profiles.find((profile) => profile.name === requestedActive) ?? profiles[0];
677
+ return {
678
+ mcpUrl,
679
+ activeProfileName: activeProfile?.name ?? null,
680
+ activeProfile: activeProfile ?? null,
681
+ profiles,
682
+ useSystemGcloud: Boolean(section.useSystemGcloud)
683
+ };
684
+ }
685
+
686
+ // src/tools/postmanModes.ts
687
+ var POSTMAN_MODES = {
688
+ minimal: "https://mcp.postman.com/minimal",
689
+ code: "https://mcp.postman.com/code",
690
+ full: "https://mcp.postman.com/mcp"
691
+ };
692
+ var URL_TO_MODE = new Map(
693
+ Object.entries(POSTMAN_MODES).map(([mode, url]) => [
694
+ url,
695
+ mode
696
+ ])
697
+ );
698
+ function urlToMode(url) {
699
+ return URL_TO_MODE.get(url);
700
+ }
701
+ function isValidMode(mode) {
702
+ return mode in POSTMAN_MODES;
703
+ }
704
+
705
+ // src/tools/postmanGetMode.ts
706
+ var postmanGetModeName = "postman_get_mode";
707
+ var postmanGetModeDescription = "Get the current Postman MCP mode from cbx_config.json. Returns the friendly mode name and URL.";
708
+ var postmanGetModeSchema = z6.object({
709
+ scope: z6.enum(["global", "project", "auto"]).optional().describe(
710
+ "Config scope to read. Default: auto (project if exists, else global)"
711
+ )
712
+ });
713
+ function handlePostmanGetMode(args) {
714
+ const scope = args.scope ?? "auto";
715
+ const effective = readEffectiveConfig(scope);
716
+ if (!effective) {
717
+ configNotFound();
718
+ }
719
+ const postmanState = parsePostmanState(effective.config);
720
+ const url = postmanState.mcpUrl;
721
+ if (!url) {
722
+ return {
723
+ content: [
724
+ {
725
+ type: "text",
726
+ text: JSON.stringify(
727
+ {
728
+ mode: null,
729
+ url: null,
730
+ scope: effective.scope,
731
+ message: "Postman mcpUrl not configured. Use postman_set_mode to set one."
732
+ },
733
+ null,
734
+ 2
735
+ )
736
+ }
737
+ ]
738
+ };
739
+ }
740
+ const mode = urlToMode(url);
741
+ if (!mode) {
742
+ unknownPostmanMode(url);
743
+ }
744
+ return {
745
+ content: [
746
+ {
747
+ type: "text",
748
+ text: JSON.stringify(
749
+ {
750
+ mode,
751
+ url,
752
+ scope: effective.scope,
753
+ availableModes: Object.keys(POSTMAN_MODES)
754
+ },
755
+ null,
756
+ 2
757
+ )
758
+ }
759
+ ]
760
+ };
761
+ }
762
+
763
+ // src/tools/postmanSetMode.ts
764
+ import { z as z7 } from "zod";
765
+ var postmanSetModeName = "postman_set_mode";
766
+ var postmanSetModeDescription = "Set the Postman MCP mode in cbx_config.json. Modes: minimal, code, full.";
767
+ var postmanSetModeSchema = z7.object({
768
+ mode: z7.enum(["minimal", "code", "full"]).describe("Postman MCP mode to set: minimal, code, or full"),
769
+ scope: z7.enum(["global", "project", "auto"]).optional().describe(
770
+ "Config scope to write. Default: auto (project if exists, else global)"
771
+ )
772
+ });
773
+ function handlePostmanSetMode(args) {
774
+ const { mode } = args;
775
+ const scope = args.scope ?? "auto";
776
+ if (!isValidMode(mode)) {
777
+ invalidInput(
778
+ `Invalid Postman mode: "${mode}". Valid modes: minimal, code, full`
779
+ );
780
+ }
781
+ const url = POSTMAN_MODES[mode];
782
+ const result = writeConfigField(
783
+ "postman.mcpUrl",
784
+ url,
785
+ scope
786
+ );
787
+ return {
788
+ content: [
789
+ {
790
+ type: "text",
791
+ text: JSON.stringify(
792
+ {
793
+ mode,
794
+ url,
795
+ scope: result.scope,
796
+ writtenPath: result.writtenPath,
797
+ note: "Postman MCP mode updated. Restart your MCP client to pick up the change."
798
+ },
799
+ null,
800
+ 2
801
+ )
802
+ }
803
+ ]
804
+ };
805
+ }
806
+
807
+ // src/tools/postmanGetStatus.ts
808
+ import { z as z8 } from "zod";
809
+ var postmanGetStatusName = "postman_get_status";
810
+ var postmanGetStatusDescription = "Get full Postman configuration status including mode, URL, and workspace ID.";
811
+ var postmanGetStatusSchema = z8.object({
812
+ scope: z8.enum(["global", "project", "auto"]).optional().describe(
813
+ "Config scope to read. Default: auto (project if exists, else global)"
814
+ )
815
+ });
816
+ function handlePostmanGetStatus(args) {
817
+ const scope = args.scope ?? "auto";
818
+ const effective = readEffectiveConfig(scope);
819
+ if (!effective) {
820
+ configNotFound();
821
+ }
822
+ const postman = parsePostmanState(effective.config);
823
+ const activeProfile = postman.activeProfile;
824
+ const url = postman.mcpUrl ?? null;
825
+ const mode = url ? urlToMode(url) ?? "unknown" : null;
826
+ return {
827
+ content: [
828
+ {
829
+ type: "text",
830
+ text: JSON.stringify(
831
+ {
832
+ configured: !!url,
833
+ mode,
834
+ url,
835
+ defaultWorkspaceId: activeProfile?.workspaceId ?? null,
836
+ activeProfileName: postman.activeProfileName,
837
+ profileCount: postman.profiles.length,
838
+ apiKeyEnvVar: activeProfile?.apiKeyEnvVar ?? null,
839
+ scope: effective.scope,
840
+ configPath: effective.path,
841
+ availableModes: Object.keys(POSTMAN_MODES)
842
+ },
843
+ null,
844
+ 2
845
+ )
846
+ }
847
+ ]
848
+ };
849
+ }
850
+
851
+ // src/tools/stitchGetMode.ts
852
+ import { z as z9 } from "zod";
853
+ var stitchGetModeName = "stitch_get_mode";
854
+ var stitchGetModeDescription = "Get the active Stitch profile name and URL from cbx_config.json. Never exposes API keys.";
855
+ var stitchGetModeSchema = z9.object({
856
+ scope: z9.enum(["global", "project", "auto"]).optional().describe(
857
+ "Config scope to read. Default: auto (project if exists, else global)"
858
+ )
859
+ });
860
+ function handleStitchGetMode(args) {
861
+ const scope = args.scope ?? "auto";
862
+ const effective = readEffectiveConfig(scope);
863
+ if (!effective) {
864
+ configNotFound();
865
+ }
866
+ const stitch = parseStitchState(effective.config);
867
+ const activeProfileName = stitch.activeProfileName;
868
+ const profileNames = stitch.profiles.map((profile) => profile.name);
869
+ const activeUrl = stitch.activeProfile?.url ?? null;
870
+ return {
871
+ content: [
872
+ {
873
+ type: "text",
874
+ text: JSON.stringify(
875
+ {
876
+ activeProfileName,
877
+ activeUrl,
878
+ availableProfiles: profileNames,
879
+ scope: effective.scope,
880
+ note: "API keys are never exposed through this tool."
881
+ },
882
+ null,
883
+ 2
884
+ )
885
+ }
886
+ ]
887
+ };
888
+ }
889
+
890
+ // src/tools/stitchSetProfile.ts
891
+ import { z as z10 } from "zod";
892
+ var stitchSetProfileName = "stitch_set_profile";
893
+ var stitchSetProfileDescription = "Set the active Stitch profile in cbx_config.json. The profile must already exist in the config.";
894
+ var stitchSetProfileSchema = z10.object({
895
+ profileName: z10.string().min(1).describe("Name of the Stitch profile to activate"),
896
+ scope: z10.enum(["global", "project", "auto"]).optional().describe(
897
+ "Config scope to write. Default: auto (project if exists, else global)"
898
+ )
899
+ });
900
+ function handleStitchSetProfile(args) {
901
+ const { profileName } = args;
902
+ const scope = args.scope ?? "auto";
903
+ const effective = readEffectiveConfig(scope);
904
+ if (!effective) {
905
+ configNotFound();
906
+ }
907
+ const stitch = parseStitchState(effective.config);
908
+ const profileNames = stitch.profiles.map((profile) => profile.name);
909
+ const targetProfile = stitch.profiles.find((profile) => profile.name === profileName) ?? null;
910
+ if (!targetProfile) {
911
+ invalidInput(
912
+ `Stitch profile "${profileName}" not found. Available profiles: ${profileNames.join(", ") || "(none)"}`
913
+ );
914
+ }
915
+ const result = writeConfigField(
916
+ "stitch.activeProfileName",
917
+ profileName,
918
+ scope
919
+ );
920
+ return {
921
+ content: [
922
+ {
923
+ type: "text",
924
+ text: JSON.stringify(
925
+ {
926
+ activeProfileName: profileName,
927
+ url: targetProfile.url ?? null,
928
+ scope: result.scope,
929
+ writtenPath: result.writtenPath,
930
+ note: "Stitch active profile updated. Restart your MCP client to pick up the change."
931
+ },
932
+ null,
933
+ 2
934
+ )
935
+ }
936
+ ]
937
+ };
938
+ }
939
+
940
+ // src/tools/stitchGetStatus.ts
941
+ import { z as z11 } from "zod";
942
+ var stitchGetStatusName = "stitch_get_status";
943
+ var stitchGetStatusDescription = "Get full Stitch configuration status including active profile, all profile names, and URLs. Never exposes API keys.";
944
+ var stitchGetStatusSchema = z11.object({
945
+ scope: z11.enum(["global", "project", "auto"]).optional().describe(
946
+ "Config scope to read. Default: auto (project if exists, else global)"
947
+ )
948
+ });
949
+ function handleStitchGetStatus(args) {
950
+ const scope = args.scope ?? "auto";
951
+ const effective = readEffectiveConfig(scope);
952
+ if (!effective) {
953
+ configNotFound();
954
+ }
955
+ const stitch = parseStitchState(effective.config);
956
+ const activeProfileName = stitch.activeProfileName;
957
+ const profileSummaries = stitch.profiles.map((profile) => ({
958
+ name: profile.name,
959
+ url: profile.url ?? null,
960
+ apiKeyEnvVar: profile.apiKeyEnvVar,
961
+ hasApiKey: profile.hasInlineApiKey,
962
+ hasInlineApiKey: profile.hasInlineApiKey,
963
+ isActive: profile.name === activeProfileName
964
+ }));
965
+ return {
966
+ content: [
967
+ {
968
+ type: "text",
969
+ text: JSON.stringify(
970
+ {
971
+ configured: profileSummaries.length > 0,
972
+ activeProfileName,
973
+ profiles: profileSummaries,
974
+ totalProfiles: profileSummaries.length,
975
+ mcpUrl: stitch.mcpUrl,
976
+ useSystemGcloud: Boolean(stitch.useSystemGcloud),
977
+ scope: effective.scope,
978
+ configPath: effective.path,
979
+ note: "API keys are never exposed. Env-var aliases are reported for runtime configuration."
980
+ },
981
+ null,
982
+ 2
983
+ )
984
+ }
985
+ ]
986
+ };
987
+ }
988
+
989
+ // src/upstream/passthrough.ts
990
+ import { mkdir, writeFile } from "fs/promises";
991
+ import path5 from "path";
992
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
993
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
994
+ function resolveCatalogDir(configPath) {
995
+ const configDir = path5.dirname(configPath);
996
+ if (path5.basename(configDir) === ".cbx") {
997
+ return path5.join(configDir, "mcp", "catalog");
998
+ }
999
+ return path5.join(configDir, ".cbx", "mcp", "catalog");
1000
+ }
1001
+ function getServiceAuth(config, service) {
1002
+ if (service === "postman") {
1003
+ const state2 = parsePostmanState(config);
1004
+ const activeProfile2 = state2.activeProfile;
1005
+ const envVar2 = activeProfile2?.apiKeyEnvVar ?? "POSTMAN_API_KEY";
1006
+ const token2 = process.env[envVar2]?.trim();
1007
+ if (!token2) {
1008
+ return {
1009
+ mcpUrl: state2.mcpUrl,
1010
+ activeProfileName: state2.activeProfileName,
1011
+ envVar: envVar2,
1012
+ headers: {},
1013
+ configured: false,
1014
+ error: `Missing Postman key env var: ${envVar2}`
1015
+ };
1016
+ }
1017
+ return {
1018
+ mcpUrl: state2.mcpUrl,
1019
+ activeProfileName: state2.activeProfileName,
1020
+ envVar: envVar2,
1021
+ headers: { Authorization: `Bearer ${token2}` },
1022
+ configured: Boolean(state2.mcpUrl)
1023
+ };
1024
+ }
1025
+ const state = parseStitchState(config);
1026
+ const activeProfile = state.activeProfile;
1027
+ const envVar = activeProfile?.apiKeyEnvVar ?? "STITCH_API_KEY";
1028
+ const token = process.env[envVar]?.trim();
1029
+ if (!token && !state.useSystemGcloud) {
1030
+ return {
1031
+ mcpUrl: state.mcpUrl,
1032
+ activeProfileName: state.activeProfileName,
1033
+ envVar,
1034
+ headers: {},
1035
+ configured: false,
1036
+ error: `Missing Stitch key env var: ${envVar}`
1037
+ };
1038
+ }
1039
+ return {
1040
+ mcpUrl: state.mcpUrl,
1041
+ activeProfileName: state.activeProfileName,
1042
+ envVar,
1043
+ headers: token ? { "X-Goog-Api-Key": token } : {},
1044
+ configured: Boolean(state.mcpUrl)
1045
+ };
1046
+ }
1047
+ async function withUpstreamClient({
1048
+ url,
1049
+ headers,
1050
+ fn
1051
+ }) {
1052
+ const client = new Client(
1053
+ {
1054
+ name: "cubis-foundry-mcp-passthrough",
1055
+ version: "0.1.0"
1056
+ },
1057
+ {
1058
+ capabilities: {}
1059
+ }
1060
+ );
1061
+ const transport = new StreamableHTTPClientTransport(new URL(url), {
1062
+ requestInit: { headers }
1063
+ });
1064
+ await client.connect(transport);
1065
+ try {
1066
+ return await fn(client);
1067
+ } finally {
1068
+ await client.close();
1069
+ }
1070
+ }
1071
+ async function persistCatalog(catalog) {
1072
+ if (!catalog.configPath) return;
1073
+ const catalogDir = resolveCatalogDir(catalog.configPath);
1074
+ const catalogPath = path5.join(catalogDir, `${catalog.service}.json`);
1075
+ const payload = {
1076
+ schemaVersion: 1,
1077
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
1078
+ generatedBy: "cubis-foundry-mcp startup discovery",
1079
+ service: catalog.service,
1080
+ scope: catalog.scope,
1081
+ mcpUrl: catalog.mcpUrl,
1082
+ activeProfileName: catalog.activeProfileName,
1083
+ envVar: catalog.envVar,
1084
+ toolCount: catalog.toolCount,
1085
+ tools: catalog.tools.map((tool) => ({
1086
+ name: tool.name,
1087
+ description: tool.description ?? null,
1088
+ inputSchema: tool.inputSchema ?? null,
1089
+ outputSchema: tool.outputSchema ?? null
1090
+ })),
1091
+ discoveryError: catalog.discoveryError ?? null
1092
+ };
1093
+ await mkdir(catalogDir, { recursive: true });
1094
+ await writeFile(catalogPath, `${JSON.stringify(payload, null, 2)}
1095
+ `, "utf8");
1096
+ }
1097
+ async function discoverUpstreamCatalogs() {
1098
+ const effective = readEffectiveConfig("auto");
1099
+ if (!effective) {
1100
+ const missing = {
1101
+ service: "postman",
1102
+ configured: false,
1103
+ mcpUrl: null,
1104
+ activeProfileName: null,
1105
+ envVar: null,
1106
+ scope: null,
1107
+ configPath: null,
1108
+ toolCount: 0,
1109
+ tools: [],
1110
+ discoveryError: "cbx_config.json not found"
1111
+ };
1112
+ const missingStitch = { ...missing, service: "stitch" };
1113
+ return {
1114
+ postman: missing,
1115
+ stitch: missingStitch
1116
+ };
1117
+ }
1118
+ const baseInfo = {
1119
+ scope: effective.scope,
1120
+ configPath: effective.path
1121
+ };
1122
+ const discoverOne = async (service) => {
1123
+ const auth = getServiceAuth(effective.config, service);
1124
+ const catalog = {
1125
+ service,
1126
+ configured: auth.configured,
1127
+ mcpUrl: auth.mcpUrl,
1128
+ activeProfileName: auth.activeProfileName,
1129
+ envVar: auth.envVar,
1130
+ scope: baseInfo.scope,
1131
+ configPath: baseInfo.configPath,
1132
+ toolCount: 0,
1133
+ tools: [],
1134
+ discoveryError: auth.error
1135
+ };
1136
+ if (!auth.configured || !auth.mcpUrl || auth.error) {
1137
+ await persistCatalog(catalog);
1138
+ return catalog;
1139
+ }
1140
+ try {
1141
+ const listed = await withUpstreamClient({
1142
+ url: auth.mcpUrl,
1143
+ headers: auth.headers,
1144
+ fn: async (client) => client.listTools()
1145
+ });
1146
+ const rawTools = Array.isArray(listed.tools) ? listed.tools : [];
1147
+ catalog.tools = rawTools.map((tool) => {
1148
+ const name = typeof tool?.name === "string" ? tool.name.trim() : "";
1149
+ if (!name) return null;
1150
+ return {
1151
+ name,
1152
+ namespacedName: `${service}.${name}`,
1153
+ description: typeof tool?.description === "string" ? tool.description : void 0,
1154
+ inputSchema: tool?.inputSchema ?? void 0,
1155
+ outputSchema: tool?.outputSchema ?? void 0
1156
+ };
1157
+ }).filter((tool) => Boolean(tool));
1158
+ catalog.toolCount = catalog.tools.length;
1159
+ } catch (error) {
1160
+ catalog.discoveryError = `Tool discovery failed: ${String(error)}`;
1161
+ }
1162
+ await persistCatalog(catalog);
1163
+ return catalog;
1164
+ };
1165
+ return {
1166
+ postman: await discoverOne("postman"),
1167
+ stitch: await discoverOne("stitch")
1168
+ };
1169
+ }
1170
+ async function callUpstreamTool({
1171
+ service,
1172
+ name,
1173
+ argumentsValue
1174
+ }) {
1175
+ const effective = readEffectiveConfig("auto");
1176
+ if (!effective) {
1177
+ throw new Error("cbx_config.json not found");
1178
+ }
1179
+ const auth = getServiceAuth(effective.config, service);
1180
+ if (!auth.configured || !auth.mcpUrl) {
1181
+ throw new Error(auth.error || `${service} is not configured`);
1182
+ }
1183
+ if (auth.error) {
1184
+ throw new Error(auth.error);
1185
+ }
1186
+ return withUpstreamClient({
1187
+ url: auth.mcpUrl,
1188
+ headers: auth.headers,
1189
+ fn: async (client) => client.callTool({
1190
+ name,
1191
+ arguments: argumentsValue
1192
+ })
1193
+ });
1194
+ }
1195
+
1196
+ // src/server.ts
1197
+ function toolCallErrorResult({
1198
+ service,
1199
+ namespacedName,
1200
+ error
1201
+ }) {
1202
+ return {
1203
+ isError: true,
1204
+ content: [
1205
+ {
1206
+ type: "text",
1207
+ text: JSON.stringify(
1208
+ {
1209
+ service,
1210
+ tool: namespacedName,
1211
+ error: String(error)
1212
+ },
1213
+ null,
1214
+ 2
1215
+ )
1216
+ }
1217
+ ]
1218
+ };
1219
+ }
1220
+ async function createServer({
1221
+ config,
1222
+ manifest
1223
+ }) {
1224
+ const server = new McpServer({
1225
+ name: config.server.name,
1226
+ version: config.server.version
1227
+ });
1228
+ const maxLen = config.vault.summaryMaxLength;
1229
+ server.tool(
1230
+ skillListCategoriesName,
1231
+ skillListCategoriesDescription,
1232
+ skillListCategoriesSchema.shape,
1233
+ async () => handleSkillListCategories(manifest)
1234
+ );
1235
+ server.tool(
1236
+ skillBrowseCategoryName,
1237
+ skillBrowseCategoryDescription,
1238
+ skillBrowseCategorySchema.shape,
1239
+ async (args) => handleSkillBrowseCategory(args, manifest, maxLen)
1240
+ );
1241
+ server.tool(
1242
+ skillSearchName,
1243
+ skillSearchDescription,
1244
+ skillSearchSchema.shape,
1245
+ async (args) => handleSkillSearch(args, manifest, maxLen)
1246
+ );
1247
+ server.tool(
1248
+ skillGetName,
1249
+ skillGetDescription,
1250
+ skillGetSchema.shape,
1251
+ async (args) => handleSkillGet(args, manifest)
1252
+ );
1253
+ server.tool(
1254
+ postmanGetModeName,
1255
+ postmanGetModeDescription,
1256
+ postmanGetModeSchema.shape,
1257
+ async (args) => handlePostmanGetMode(args)
1258
+ );
1259
+ server.tool(
1260
+ postmanSetModeName,
1261
+ postmanSetModeDescription,
1262
+ postmanSetModeSchema.shape,
1263
+ async (args) => handlePostmanSetMode(args)
1264
+ );
1265
+ server.tool(
1266
+ postmanGetStatusName,
1267
+ postmanGetStatusDescription,
1268
+ postmanGetStatusSchema.shape,
1269
+ async (args) => handlePostmanGetStatus(args)
1270
+ );
1271
+ server.tool(
1272
+ stitchGetModeName,
1273
+ stitchGetModeDescription,
1274
+ stitchGetModeSchema.shape,
1275
+ async (args) => handleStitchGetMode(args)
1276
+ );
1277
+ server.tool(
1278
+ stitchSetProfileName,
1279
+ stitchSetProfileDescription,
1280
+ stitchSetProfileSchema.shape,
1281
+ async (args) => handleStitchSetProfile(args)
1282
+ );
1283
+ server.tool(
1284
+ stitchGetStatusName,
1285
+ stitchGetStatusDescription,
1286
+ stitchGetStatusSchema.shape,
1287
+ async (args) => handleStitchGetStatus(args)
1288
+ );
1289
+ const upstreamCatalogs = await discoverUpstreamCatalogs();
1290
+ const dynamicArgsShape = z12.object({}).passthrough().shape;
1291
+ for (const catalog of [upstreamCatalogs.postman, upstreamCatalogs.stitch]) {
1292
+ for (const tool of catalog.tools) {
1293
+ const namespaced = tool.namespacedName;
1294
+ server.tool(
1295
+ namespaced,
1296
+ `[${catalog.service} passthrough] ${tool.description || tool.name}`,
1297
+ dynamicArgsShape,
1298
+ async (args) => {
1299
+ try {
1300
+ const result = await callUpstreamTool({
1301
+ service: catalog.service,
1302
+ name: tool.name,
1303
+ argumentsValue: args && typeof args === "object" ? args : {}
1304
+ });
1305
+ return {
1306
+ content: result.content ?? [],
1307
+ structuredContent: result.structuredContent,
1308
+ isError: Boolean(result.isError)
1309
+ };
1310
+ } catch (error) {
1311
+ return toolCallErrorResult({
1312
+ service: catalog.service,
1313
+ namespacedName: namespaced,
1314
+ error
1315
+ });
1316
+ }
1317
+ }
1318
+ );
1319
+ }
1320
+ }
1321
+ return server;
1322
+ }
1323
+
1324
+ // src/transports/stdio.ts
1325
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
1326
+ function createStdioTransport() {
1327
+ return new StdioServerTransport();
1328
+ }
1329
+
1330
+ // src/transports/streamableHttp.ts
1331
+ import { createServer as createServer2 } from "http";
1332
+ import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
1333
+ function createStreamableHttpTransport(options) {
1334
+ const transport = new StreamableHTTPServerTransport({
1335
+ sessionIdGenerator: () => crypto.randomUUID()
1336
+ });
1337
+ const httpServer = createServer2(async (req, res) => {
1338
+ const url = new URL(req.url ?? "/", `http://${req.headers.host}`);
1339
+ if (url.pathname !== "/mcp") {
1340
+ res.writeHead(404, { "Content-Type": "text/plain" });
1341
+ res.end("Not Found");
1342
+ return;
1343
+ }
1344
+ await transport.handleRequest(req, res);
1345
+ });
1346
+ httpServer.listen(options.port, options.host, () => {
1347
+ logger.info(
1348
+ `Streamable HTTP transport listening on http://${options.host}:${options.port}/mcp`
1349
+ );
1350
+ });
1351
+ return { transport, httpServer };
1352
+ }
1353
+
1354
+ // src/index.ts
1355
+ import path6 from "path";
1356
+ import { fileURLToPath as fileURLToPath2 } from "url";
1357
+ var __dirname2 = path6.dirname(fileURLToPath2(import.meta.url));
1358
+ function parseArgs(argv) {
1359
+ let transport = "stdio";
1360
+ let scanOnly = false;
1361
+ let debug = false;
1362
+ let configPath;
1363
+ for (let i = 2; i < argv.length; i++) {
1364
+ const arg = argv[i];
1365
+ if (arg === "--transport" && argv[i + 1]) {
1366
+ const val = argv[++i];
1367
+ if (val === "http" || val === "streamable-http") {
1368
+ transport = "http";
1369
+ } else if (val === "stdio") {
1370
+ transport = "stdio";
1371
+ } else {
1372
+ logger.error(`Unknown transport: ${val}. Use "stdio" or "http".`);
1373
+ process.exit(1);
1374
+ }
1375
+ } else if (arg === "--scan-only") {
1376
+ scanOnly = true;
1377
+ } else if (arg === "--debug") {
1378
+ debug = true;
1379
+ } else if (arg === "--config" && argv[i + 1]) {
1380
+ configPath = argv[++i];
1381
+ }
1382
+ }
1383
+ return { transport, scanOnly, debug, configPath };
1384
+ }
1385
+ function printStartupBanner(skillCount, categoryCount, transportName) {
1386
+ logger.raw("\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510");
1387
+ logger.raw("\u2502 Cubis Foundry MCP Server \u2502");
1388
+ logger.raw("\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524");
1389
+ logger.raw(`\u2502 Vault: 2004/35/~245/~80,160/99.7% \u2502`);
1390
+ logger.raw(`\u2502 Skills loaded: ${String(skillCount).padEnd(29)}\u2502`);
1391
+ logger.raw(`\u2502 Categories: ${String(categoryCount).padEnd(32)}\u2502`);
1392
+ logger.raw(`\u2502 Transport: ${transportName.padEnd(33)}\u2502`);
1393
+ logger.raw("\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518");
1394
+ }
1395
+ function printConfigStatus() {
1396
+ try {
1397
+ const effective = readEffectiveConfig("auto");
1398
+ if (!effective) {
1399
+ logger.warn(
1400
+ "cbx_config.json not found. Postman/Stitch tools will return config-not-found errors."
1401
+ );
1402
+ return;
1403
+ }
1404
+ const config = effective.config;
1405
+ const postmanState = parsePostmanState(config);
1406
+ const postmanUrl = postmanState.mcpUrl;
1407
+ if (postmanUrl) {
1408
+ const mode = urlToMode(postmanUrl) ?? "unknown";
1409
+ logger.info(`Postman mode: ${mode} (${postmanUrl})`);
1410
+ } else {
1411
+ logger.info("Postman: not configured");
1412
+ }
1413
+ const stitchState = parseStitchState(config);
1414
+ const stitchProfile = stitchState.activeProfileName;
1415
+ if (stitchProfile && stitchState.activeProfile?.url) {
1416
+ const url = stitchState.activeProfile.url ?? "(no URL)";
1417
+ logger.info(`Stitch profile: ${stitchProfile} (${url})`);
1418
+ } else {
1419
+ logger.info("Stitch: not configured");
1420
+ }
1421
+ logger.info(`Config scope: ${effective.scope} (${effective.path})`);
1422
+ } catch {
1423
+ logger.warn("Failed to read cbx_config.json status");
1424
+ }
1425
+ }
1426
+ async function main() {
1427
+ const args = parseArgs(process.argv);
1428
+ if (args.debug) {
1429
+ setLogLevel("debug");
1430
+ }
1431
+ const serverConfig = loadServerConfig(args.configPath);
1432
+ const basePath = path6.resolve(__dirname2, "..");
1433
+ const skills = await scanVaultRoots(serverConfig.vault.roots, basePath);
1434
+ const manifest = buildManifest(skills);
1435
+ await enrichWithDescriptions(
1436
+ manifest.skills,
1437
+ serverConfig.vault.summaryMaxLength
1438
+ );
1439
+ if (args.scanOnly) {
1440
+ logger.info(
1441
+ `Scan complete: ${manifest.skills.length} skills in ${manifest.categories.length} categories`
1442
+ );
1443
+ for (const cat of manifest.categories) {
1444
+ const count = manifest.skills.filter((s) => s.category === cat).length;
1445
+ logger.info(` ${cat}: ${count} skills`);
1446
+ }
1447
+ process.exit(0);
1448
+ }
1449
+ const transportName = args.transport === "http" ? `Streamable HTTP :${serverConfig.transport.http?.port ?? 3100}` : "stdio";
1450
+ printStartupBanner(
1451
+ manifest.skills.length,
1452
+ manifest.categories.length,
1453
+ transportName
1454
+ );
1455
+ printConfigStatus();
1456
+ const mcpServer = await createServer({ config: serverConfig, manifest });
1457
+ if (args.transport === "http") {
1458
+ const httpOpts = {
1459
+ port: serverConfig.transport.http?.port ?? 3100,
1460
+ host: serverConfig.transport.http?.host ?? "127.0.0.1"
1461
+ };
1462
+ const { transport, httpServer } = createStreamableHttpTransport(httpOpts);
1463
+ await mcpServer.connect(transport);
1464
+ const shutdown = async () => {
1465
+ logger.info("Shutting down HTTP transport...");
1466
+ httpServer.close();
1467
+ await mcpServer.close();
1468
+ process.exit(0);
1469
+ };
1470
+ process.on("SIGINT", shutdown);
1471
+ process.on("SIGTERM", shutdown);
1472
+ } else {
1473
+ const transport = createStdioTransport();
1474
+ await mcpServer.connect(transport);
1475
+ const shutdown = async () => {
1476
+ logger.info("Shutting down stdio transport...");
1477
+ await mcpServer.close();
1478
+ process.exit(0);
1479
+ };
1480
+ process.on("SIGINT", shutdown);
1481
+ process.on("SIGTERM", shutdown);
1482
+ }
1483
+ logger.info("MCP server ready. Waiting for connections...");
1484
+ }
1485
+ main().catch((err) => {
1486
+ logger.error(`Fatal startup error: ${err}`);
1487
+ process.exit(1);
1488
+ });