@cubis/foundry 0.3.33 → 0.3.35

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 (591) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +56 -11
  3. package/bin/cubis.js +2809 -965
  4. package/mcp/.dockerignore +5 -0
  5. package/mcp/Dockerfile +19 -0
  6. package/mcp/README.md +550 -11
  7. package/mcp/config.json +18 -0
  8. package/mcp/dist/index.d.ts +1 -0
  9. package/mcp/dist/index.js +1488 -0
  10. package/mcp/package.json +36 -0
  11. package/mcp/src/cbxConfig/index.ts +23 -0
  12. package/mcp/src/cbxConfig/paths.ts +45 -0
  13. package/mcp/src/cbxConfig/reader.ts +149 -0
  14. package/mcp/src/cbxConfig/readerWriter.test.ts +147 -0
  15. package/mcp/src/cbxConfig/serviceConfig.test.ts +42 -0
  16. package/mcp/src/cbxConfig/serviceConfig.ts +157 -0
  17. package/mcp/src/cbxConfig/types.ts +44 -0
  18. package/mcp/src/cbxConfig/writer.ts +90 -0
  19. package/mcp/src/config/index.test.ts +81 -0
  20. package/mcp/src/config/index.ts +45 -0
  21. package/mcp/src/config/schema.ts +55 -0
  22. package/mcp/src/gateway/catalog.ts +37 -0
  23. package/mcp/src/gateway/config.ts +247 -0
  24. package/mcp/src/gateway/manager.ts +255 -0
  25. package/mcp/src/gateway/types.ts +54 -0
  26. package/mcp/src/gateway/upstreamClient.ts +80 -0
  27. package/mcp/src/index.ts +211 -0
  28. package/mcp/src/server.ts +219 -0
  29. package/mcp/src/tools/configTools.test.ts +166 -0
  30. package/mcp/src/tools/future/README.md +21 -0
  31. package/mcp/src/tools/future/index.ts +8 -0
  32. package/mcp/src/tools/index.ts +76 -0
  33. package/mcp/src/tools/mcpGateway.ts +44 -0
  34. package/mcp/src/tools/postmanGetMode.ts +82 -0
  35. package/mcp/src/tools/postmanGetStatus.ts +65 -0
  36. package/mcp/src/tools/postmanModes.ts +28 -0
  37. package/mcp/src/tools/postmanSetMode.ts +71 -0
  38. package/mcp/src/tools/skillBrowseCategory.ts +54 -0
  39. package/mcp/src/tools/skillGet.ts +43 -0
  40. package/mcp/src/tools/skillListCategories.ts +40 -0
  41. package/mcp/src/tools/skillSearch.ts +72 -0
  42. package/mcp/src/tools/skillTools.test.ts +126 -0
  43. package/mcp/src/tools/stitchGetMode.ts +58 -0
  44. package/mcp/src/tools/stitchGetStatus.ts +70 -0
  45. package/mcp/src/tools/stitchSetProfile.ts +82 -0
  46. package/mcp/src/transports/stdio.ts +9 -0
  47. package/mcp/src/transports/streamableHttp.ts +43 -0
  48. package/mcp/src/upstream/passthrough.ts +273 -0
  49. package/mcp/src/utils/errors.ts +38 -0
  50. package/mcp/src/utils/logger.ts +63 -0
  51. package/mcp/src/vault/manifest.test.ts +126 -0
  52. package/mcp/src/vault/manifest.ts +99 -0
  53. package/mcp/src/vault/scanner.test.ts +70 -0
  54. package/mcp/src/vault/scanner.ts +145 -0
  55. package/mcp/src/vault/types.ts +21 -0
  56. package/package.json +9 -2
  57. package/workflows/scripts/generate-powers.mjs +27 -18
  58. package/workflows/skills/skills_index.json +0 -102
  59. package/workflows/workflows/agent-environment-setup/manifest.json +0 -24
  60. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/nextjs-react-expert/SKILL.md +1 -1
  61. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/skills_index.json +0 -102
  62. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/nextjs-react-expert/SKILL.md +1 -1
  63. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/skills_index.json +0 -102
  64. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/nextjs-react-expert/SKILL.md +1 -1
  65. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/skills_index.json +0 -102
  66. package/mcp/catalogs/default.json +0 -14
  67. package/mcp/powers/atlassian-mcp/POWER.md +0 -91
  68. package/mcp/powers/atlassian-mcp/SKILL.md +0 -88
  69. package/mcp/powers/atlassian-mcp/steering/authentication-patterns.md +0 -520
  70. package/mcp/powers/atlassian-mcp/steering/common-workflows.md +0 -660
  71. package/mcp/powers/atlassian-mcp/steering/confluence-operations.md +0 -528
  72. package/mcp/powers/atlassian-mcp/steering/jira-queries.md +0 -421
  73. package/mcp/powers/atlassian-mcp/steering/mcp-server-setup.md +0 -292
  74. package/mcp/powers/building-mcp-server-on-cloudflare/POWER.md +0 -261
  75. package/mcp/powers/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  76. package/mcp/powers/building-mcp-server-on-cloudflare/steering/examples.md +0 -115
  77. package/mcp/powers/building-mcp-server-on-cloudflare/steering/oauth-setup.md +0 -338
  78. package/mcp/powers/building-mcp-server-on-cloudflare/steering/troubleshooting.md +0 -317
  79. package/mcp/powers/datadog-automation/POWER.md +0 -238
  80. package/mcp/powers/datadog-automation/SKILL.md +0 -235
  81. package/mcp/powers/github-automation/POWER.md +0 -230
  82. package/mcp/powers/github-automation/SKILL.md +0 -227
  83. package/mcp/powers/mcp-builder/LICENSE.txt +0 -202
  84. package/mcp/powers/mcp-builder/POWER.md +0 -179
  85. package/mcp/powers/mcp-builder/SKILL.md +0 -176
  86. package/mcp/powers/mcp-builder/reference/evaluation.md +0 -602
  87. package/mcp/powers/mcp-builder/reference/mcp_best_practices.md +0 -915
  88. package/mcp/powers/mcp-builder/reference/node_mcp_server.md +0 -916
  89. package/mcp/powers/mcp-builder/reference/python_mcp_server.md +0 -752
  90. package/mcp/powers/mcp-builder/scripts/connections.py +0 -151
  91. package/mcp/powers/mcp-builder/scripts/evaluation.py +0 -373
  92. package/mcp/powers/mcp-builder/scripts/example_evaluation.xml +0 -22
  93. package/mcp/powers/mcp-builder/scripts/requirements.txt +0 -2
  94. package/mcp/powers/mcp-developer/POWER.md +0 -88
  95. package/mcp/powers/mcp-developer/SKILL.md +0 -85
  96. package/mcp/powers/mcp-developer/steering/protocol.md +0 -244
  97. package/mcp/powers/mcp-developer/steering/python-sdk.md +0 -367
  98. package/mcp/powers/mcp-developer/steering/resources.md +0 -554
  99. package/mcp/powers/mcp-developer/steering/tools.md +0 -480
  100. package/mcp/powers/mcp-developer/steering/typescript-sdk.md +0 -350
  101. package/mcp/powers/postman/POWER.md +0 -243
  102. package/mcp/powers/postman/SKILL.md +0 -240
  103. package/mcp/powers/postman/flutter-expert/POWER.md +0 -89
  104. package/mcp/powers/postman/flutter-expert/SKILL.md +0 -77
  105. package/mcp/powers/postman/flutter-expert/steering/bloc-state.md +0 -259
  106. package/mcp/powers/postman/flutter-expert/steering/engineering-principles.md +0 -82
  107. package/mcp/powers/postman/flutter-expert/steering/gorouter-navigation.md +0 -157
  108. package/mcp/powers/postman/flutter-expert/steering/performance.md +0 -99
  109. package/mcp/powers/postman/flutter-expert/steering/project-structure.md +0 -77
  110. package/mcp/powers/postman/flutter-expert/steering/riverpod-state.md +0 -404
  111. package/mcp/powers/postman/flutter-expert/steering/widget-patterns.md +0 -123
  112. package/mcp/powers/postman/flutter-security-reviewer/POWER.md +0 -204
  113. package/mcp/powers/postman/flutter-security-reviewer/SKILL.md +0 -180
  114. package/mcp/powers/postman/flutter-security-reviewer/steering/log_redaction.md +0 -17
  115. package/mcp/powers/postman/flutter-security-reviewer/steering/network_hardening.md +0 -13
  116. package/mcp/powers/postman/flutter-security-reviewer/steering/secret-scanning.md +0 -123
  117. package/mcp/powers/postman/flutter-security-reviewer/steering/secure_storage_policy.md +0 -16
  118. package/mcp/powers/postman/flutter-security-reviewer/steering/vulnerability-patterns.md +0 -189
  119. package/mcp/powers/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  120. package/mcp/powers/postman/flutter-test-master/POWER.md +0 -527
  121. package/mcp/powers/postman/flutter-test-master/SKILL.md +0 -513
  122. package/mcp/powers/postman/flutter-test-master/steering/golden-testing.md +0 -444
  123. package/mcp/powers/postman/flutter-test-master/steering/integration-testing.md +0 -688
  124. package/mcp/powers/postman/flutter-test-master/steering/property-testing.md +0 -408
  125. package/mcp/powers/postman/flutter-test-master/steering/riverpod-testing.md +0 -606
  126. package/mcp/powers/postman/flutter-test-master/steering/test-utilities.md +0 -566
  127. package/mcp/powers/postman/flutter-test-master/steering/unit-testing.md +0 -511
  128. package/mcp/powers/postman/flutter-test-master/steering/widget-testing.md +0 -601
  129. package/mcp/powers/postman/git-commit/POWER.md +0 -47
  130. package/mcp/powers/postman/git-commit/SKILL.md +0 -46
  131. package/mcp/powers/postman/gorouter-restoration/POWER.md +0 -227
  132. package/mcp/powers/postman/gorouter-restoration/SKILL.md +0 -217
  133. package/mcp/powers/postman/gorouter-restoration/steering/guard_patterns.md +0 -14
  134. package/mcp/powers/postman/gorouter-restoration/steering/tab_preservation.md +0 -12
  135. package/mcp/powers/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  136. package/mcp/powers/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  137. package/mcp/powers/postman/mcp.json +0 -11
  138. package/mcp/powers/postman/microservices-architect/POWER.md +0 -109
  139. package/mcp/powers/postman/microservices-architect/SKILL.md +0 -93
  140. package/mcp/powers/postman/microservices-architect/steering/communication.md +0 -499
  141. package/mcp/powers/postman/microservices-architect/steering/data.md +0 -721
  142. package/mcp/powers/postman/microservices-architect/steering/decomposition.md +0 -344
  143. package/mcp/powers/postman/microservices-architect/steering/observability.md +0 -805
  144. package/mcp/powers/postman/microservices-architect/steering/patterns.md +0 -603
  145. package/mcp/powers/postman/nestjs-expert/POWER.md +0 -130
  146. package/mcp/powers/postman/nestjs-expert/SKILL.md +0 -114
  147. package/mcp/powers/postman/nestjs-expert/steering/authentication.md +0 -461
  148. package/mcp/powers/postman/nestjs-expert/steering/controllers-routing.md +0 -114
  149. package/mcp/powers/postman/nestjs-expert/steering/dtos-validation.md +0 -156
  150. package/mcp/powers/postman/nestjs-expert/steering/migration-from-express.md +0 -1240
  151. package/mcp/powers/postman/nestjs-expert/steering/secure-sessions.md +0 -56
  152. package/mcp/powers/postman/nestjs-expert/steering/services-di.md +0 -143
  153. package/mcp/powers/postman/nestjs-expert/steering/strangler-fig-pattern.md +0 -47
  154. package/mcp/powers/postman/nestjs-expert/steering/testing-patterns.md +0 -189
  155. package/mcp/powers/postman/oneup-design/POWER.md +0 -72
  156. package/mcp/powers/postman/oneup-design/SKILL.md +0 -71
  157. package/mcp/powers/postman/oneup-design/steering/colors.md +0 -41
  158. package/mcp/powers/postman/oneup-design/steering/components.md +0 -53
  159. package/mcp/powers/postman/oneup-design/steering/spacing.md +0 -84
  160. package/mcp/powers/postman/openapi-docs/POWER.md +0 -78
  161. package/mcp/powers/postman/openapi-docs/SKILL.md +0 -68
  162. package/mcp/powers/postman/openapi-docs/steering/crud-templates.md +0 -43
  163. package/mcp/powers/postman/openapi-docs/steering/framework-express.md +0 -19
  164. package/mcp/powers/postman/openapi-docs/steering/framework-fastapi.md +0 -20
  165. package/mcp/powers/postman/openapi-docs/steering/framework-nestjs.md +0 -20
  166. package/mcp/powers/postman/openapi-docs/steering/framework-raw-openapi.md +0 -14
  167. package/mcp/powers/postman/openapi-docs/steering/openapi-checklist.md +0 -33
  168. package/mcp/powers/postman/openapi-docs/steering/stoplight-ui.md +0 -21
  169. package/mcp/powers/postman/steering/steering.md +0 -26
  170. package/mcp/powers/sentry-automation/POWER.md +0 -235
  171. package/mcp/powers/sentry-automation/SKILL.md +0 -232
  172. package/mcp/skills/atlassian-mcp/SKILL.md +0 -88
  173. package/mcp/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  174. package/mcp/skills/atlassian-mcp/references/common-workflows.md +0 -660
  175. package/mcp/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  176. package/mcp/skills/atlassian-mcp/references/jira-queries.md +0 -421
  177. package/mcp/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  178. package/mcp/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  179. package/mcp/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  180. package/mcp/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  181. package/mcp/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  182. package/mcp/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  183. package/mcp/skills/datadog-automation/SKILL.md +0 -235
  184. package/mcp/skills/github-automation/SKILL.md +0 -227
  185. package/mcp/skills/mcp-builder/LICENSE.txt +0 -202
  186. package/mcp/skills/mcp-builder/SKILL.md +0 -176
  187. package/mcp/skills/mcp-builder/reference/evaluation.md +0 -602
  188. package/mcp/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  189. package/mcp/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  190. package/mcp/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  191. package/mcp/skills/mcp-builder/scripts/connections.py +0 -151
  192. package/mcp/skills/mcp-builder/scripts/evaluation.py +0 -373
  193. package/mcp/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  194. package/mcp/skills/mcp-builder/scripts/requirements.txt +0 -2
  195. package/mcp/skills/mcp-developer/SKILL.md +0 -85
  196. package/mcp/skills/mcp-developer/references/protocol.md +0 -244
  197. package/mcp/skills/mcp-developer/references/python-sdk.md +0 -367
  198. package/mcp/skills/mcp-developer/references/resources.md +0 -554
  199. package/mcp/skills/mcp-developer/references/tools.md +0 -480
  200. package/mcp/skills/mcp-developer/references/typescript-sdk.md +0 -350
  201. package/mcp/skills/postman/POWER.md +0 -242
  202. package/mcp/skills/postman/SKILL.md +0 -240
  203. package/mcp/skills/postman/flutter-expert/POWER.md +0 -89
  204. package/mcp/skills/postman/flutter-expert/SKILL.md +0 -77
  205. package/mcp/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  206. package/mcp/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  207. package/mcp/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  208. package/mcp/skills/postman/flutter-expert/references/performance.md +0 -99
  209. package/mcp/skills/postman/flutter-expert/references/project-structure.md +0 -77
  210. package/mcp/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  211. package/mcp/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  212. package/mcp/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  213. package/mcp/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  214. package/mcp/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  215. package/mcp/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  216. package/mcp/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  217. package/mcp/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  218. package/mcp/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  219. package/mcp/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  220. package/mcp/skills/postman/flutter-test-master/POWER.md +0 -527
  221. package/mcp/skills/postman/flutter-test-master/SKILL.md +0 -513
  222. package/mcp/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  223. package/mcp/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  224. package/mcp/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  225. package/mcp/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  226. package/mcp/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  227. package/mcp/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  228. package/mcp/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  229. package/mcp/skills/postman/git-commit/POWER.md +0 -47
  230. package/mcp/skills/postman/git-commit/SKILL.md +0 -46
  231. package/mcp/skills/postman/gorouter-restoration/POWER.md +0 -227
  232. package/mcp/skills/postman/gorouter-restoration/SKILL.md +0 -217
  233. package/mcp/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  234. package/mcp/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  235. package/mcp/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  236. package/mcp/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  237. package/mcp/skills/postman/mcp.json +0 -11
  238. package/mcp/skills/postman/microservices-architect/POWER.md +0 -109
  239. package/mcp/skills/postman/microservices-architect/SKILL.md +0 -93
  240. package/mcp/skills/postman/microservices-architect/references/communication.md +0 -499
  241. package/mcp/skills/postman/microservices-architect/references/data.md +0 -721
  242. package/mcp/skills/postman/microservices-architect/references/decomposition.md +0 -344
  243. package/mcp/skills/postman/microservices-architect/references/observability.md +0 -805
  244. package/mcp/skills/postman/microservices-architect/references/patterns.md +0 -603
  245. package/mcp/skills/postman/nestjs-expert/POWER.md +0 -130
  246. package/mcp/skills/postman/nestjs-expert/SKILL.md +0 -114
  247. package/mcp/skills/postman/nestjs-expert/references/authentication.md +0 -461
  248. package/mcp/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  249. package/mcp/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  250. package/mcp/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  251. package/mcp/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  252. package/mcp/skills/postman/nestjs-expert/references/services-di.md +0 -143
  253. package/mcp/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  254. package/mcp/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  255. package/mcp/skills/postman/oneup-design/POWER.md +0 -72
  256. package/mcp/skills/postman/oneup-design/SKILL.md +0 -71
  257. package/mcp/skills/postman/oneup-design/references/colors.md +0 -41
  258. package/mcp/skills/postman/oneup-design/references/components.md +0 -53
  259. package/mcp/skills/postman/oneup-design/references/spacing.md +0 -84
  260. package/mcp/skills/postman/openapi-docs/POWER.md +0 -78
  261. package/mcp/skills/postman/openapi-docs/SKILL.md +0 -68
  262. package/mcp/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  263. package/mcp/skills/postman/openapi-docs/references/framework-express.md +0 -19
  264. package/mcp/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  265. package/mcp/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  266. package/mcp/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  267. package/mcp/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  268. package/mcp/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  269. package/mcp/skills/postman/references/steering.md +0 -26
  270. package/mcp/skills/sentry-automation/SKILL.md +0 -232
  271. package/workflows/powers/atlassian-mcp/POWER.md +0 -21
  272. package/workflows/powers/atlassian-mcp/SKILL.md +0 -18
  273. package/workflows/powers/building-mcp-server-on-cloudflare/POWER.md +0 -21
  274. package/workflows/powers/building-mcp-server-on-cloudflare/SKILL.md +0 -18
  275. package/workflows/powers/datadog-automation/POWER.md +0 -21
  276. package/workflows/powers/datadog-automation/SKILL.md +0 -18
  277. package/workflows/powers/github-automation/POWER.md +0 -21
  278. package/workflows/powers/github-automation/SKILL.md +0 -18
  279. package/workflows/powers/mcp-builder/POWER.md +0 -21
  280. package/workflows/powers/mcp-builder/SKILL.md +0 -18
  281. package/workflows/powers/mcp-developer/POWER.md +0 -21
  282. package/workflows/powers/mcp-developer/SKILL.md +0 -18
  283. package/workflows/powers/postman/POWER.md +0 -21
  284. package/workflows/powers/postman/SKILL.md +0 -18
  285. package/workflows/powers/sentry-automation/POWER.md +0 -21
  286. package/workflows/powers/sentry-automation/SKILL.md +0 -18
  287. package/workflows/skills/atlassian-mcp/SKILL.md +0 -18
  288. package/workflows/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -18
  289. package/workflows/skills/datadog-automation/SKILL.md +0 -18
  290. package/workflows/skills/github-automation/SKILL.md +0 -18
  291. package/workflows/skills/mcp-builder/SKILL.md +0 -18
  292. package/workflows/skills/mcp-developer/SKILL.md +0 -18
  293. package/workflows/skills/postman/SKILL.md +0 -18
  294. package/workflows/skills/sentry-automation/SKILL.md +0 -18
  295. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/SKILL.md +0 -88
  296. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  297. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/common-workflows.md +0 -660
  298. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  299. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/jira-queries.md +0 -421
  300. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  301. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  302. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  303. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  304. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  305. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  306. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/datadog-automation/SKILL.md +0 -235
  307. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/github-automation/SKILL.md +0 -227
  308. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/LICENSE.txt +0 -202
  309. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/SKILL.md +0 -176
  310. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/evaluation.md +0 -602
  311. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  312. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  313. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  314. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/connections.py +0 -151
  315. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/evaluation.py +0 -373
  316. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  317. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-builder/scripts/requirements.txt +0 -2
  318. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/SKILL.md +0 -85
  319. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/protocol.md +0 -244
  320. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/python-sdk.md +0 -367
  321. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/resources.md +0 -554
  322. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/tools.md +0 -480
  323. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/mcp-developer/references/typescript-sdk.md +0 -350
  324. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/POWER.md +0 -242
  325. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/SKILL.md +0 -240
  326. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/POWER.md +0 -89
  327. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/SKILL.md +0 -77
  328. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  329. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  330. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  331. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/performance.md +0 -99
  332. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/project-structure.md +0 -77
  333. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  334. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  335. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  336. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  337. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  338. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  339. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  340. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  341. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  342. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  343. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/POWER.md +0 -527
  344. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/SKILL.md +0 -513
  345. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  346. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  347. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  348. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  349. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  350. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  351. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  352. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/git-commit/POWER.md +0 -47
  353. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/git-commit/SKILL.md +0 -46
  354. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/POWER.md +0 -227
  355. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/SKILL.md +0 -217
  356. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  357. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  358. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  359. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  360. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/mcp.json +0 -11
  361. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/POWER.md +0 -109
  362. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/SKILL.md +0 -93
  363. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/communication.md +0 -499
  364. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/data.md +0 -721
  365. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/decomposition.md +0 -344
  366. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/observability.md +0 -805
  367. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/microservices-architect/references/patterns.md +0 -603
  368. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/POWER.md +0 -130
  369. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/SKILL.md +0 -114
  370. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/authentication.md +0 -461
  371. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  372. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  373. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  374. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  375. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/services-di.md +0 -143
  376. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  377. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  378. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/POWER.md +0 -72
  379. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/SKILL.md +0 -71
  380. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/colors.md +0 -41
  381. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/components.md +0 -53
  382. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/oneup-design/references/spacing.md +0 -84
  383. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/POWER.md +0 -78
  384. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/SKILL.md +0 -68
  385. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  386. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-express.md +0 -19
  387. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  388. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  389. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  390. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  391. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  392. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/postman/references/steering.md +0 -26
  393. package/workflows/workflows/agent-environment-setup/platforms/copilot/skills/sentry-automation/SKILL.md +0 -232
  394. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/SKILL.md +0 -88
  395. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  396. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/common-workflows.md +0 -660
  397. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  398. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/jira-queries.md +0 -421
  399. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  400. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  401. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  402. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  403. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  404. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  405. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/datadog-automation/SKILL.md +0 -235
  406. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/github-automation/SKILL.md +0 -227
  407. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/LICENSE.txt +0 -202
  408. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/SKILL.md +0 -176
  409. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/evaluation.md +0 -602
  410. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  411. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  412. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  413. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/connections.py +0 -151
  414. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/evaluation.py +0 -373
  415. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  416. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-builder/scripts/requirements.txt +0 -2
  417. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/SKILL.md +0 -85
  418. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/protocol.md +0 -244
  419. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/python-sdk.md +0 -367
  420. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/resources.md +0 -554
  421. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/tools.md +0 -480
  422. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/mcp-developer/references/typescript-sdk.md +0 -350
  423. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/POWER.md +0 -242
  424. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/SKILL.md +0 -240
  425. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/POWER.md +0 -89
  426. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/SKILL.md +0 -77
  427. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  428. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  429. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  430. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/performance.md +0 -99
  431. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/project-structure.md +0 -77
  432. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  433. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  434. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  435. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  436. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  437. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  438. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  439. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  440. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  441. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  442. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/POWER.md +0 -527
  443. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/SKILL.md +0 -513
  444. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  445. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  446. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  447. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  448. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  449. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  450. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  451. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/git-commit/POWER.md +0 -47
  452. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/git-commit/SKILL.md +0 -46
  453. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/POWER.md +0 -227
  454. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/SKILL.md +0 -217
  455. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  456. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  457. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  458. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  459. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/mcp.json +0 -11
  460. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/POWER.md +0 -109
  461. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/SKILL.md +0 -93
  462. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/communication.md +0 -499
  463. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/data.md +0 -721
  464. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/decomposition.md +0 -344
  465. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/observability.md +0 -805
  466. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/microservices-architect/references/patterns.md +0 -603
  467. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/POWER.md +0 -130
  468. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/SKILL.md +0 -114
  469. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/authentication.md +0 -461
  470. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  471. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  472. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  473. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  474. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/services-di.md +0 -143
  475. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  476. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  477. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/POWER.md +0 -72
  478. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/SKILL.md +0 -71
  479. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/colors.md +0 -41
  480. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/components.md +0 -53
  481. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/oneup-design/references/spacing.md +0 -84
  482. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/POWER.md +0 -78
  483. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/SKILL.md +0 -68
  484. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  485. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-express.md +0 -19
  486. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  487. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  488. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  489. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  490. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  491. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/postman/references/steering.md +0 -26
  492. package/workflows/workflows/agent-environment-setup/platforms/cursor/skills/sentry-automation/SKILL.md +0 -232
  493. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/SKILL.md +0 -88
  494. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/authentication-patterns.md +0 -520
  495. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/common-workflows.md +0 -660
  496. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/confluence-operations.md +0 -528
  497. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/jira-queries.md +0 -421
  498. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/atlassian-mcp/references/mcp-server-setup.md +0 -292
  499. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/SKILL.md +0 -258
  500. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/examples.md +0 -115
  501. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/oauth-setup.md +0 -338
  502. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/tool-patterns.md +0 -29
  503. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/building-mcp-server-on-cloudflare/references/troubleshooting.md +0 -317
  504. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/datadog-automation/SKILL.md +0 -235
  505. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/github-automation/SKILL.md +0 -227
  506. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/LICENSE.txt +0 -202
  507. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/SKILL.md +0 -176
  508. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/evaluation.md +0 -602
  509. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/mcp_best_practices.md +0 -915
  510. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/node_mcp_server.md +0 -916
  511. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/reference/python_mcp_server.md +0 -752
  512. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/connections.py +0 -151
  513. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/evaluation.py +0 -373
  514. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/example_evaluation.xml +0 -22
  515. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-builder/scripts/requirements.txt +0 -2
  516. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/SKILL.md +0 -85
  517. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/protocol.md +0 -244
  518. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/python-sdk.md +0 -367
  519. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/resources.md +0 -554
  520. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/tools.md +0 -480
  521. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/mcp-developer/references/typescript-sdk.md +0 -350
  522. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/POWER.md +0 -242
  523. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/SKILL.md +0 -240
  524. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/POWER.md +0 -89
  525. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/SKILL.md +0 -77
  526. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/bloc-state.md +0 -259
  527. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/engineering-principles.md +0 -82
  528. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/gorouter-navigation.md +0 -157
  529. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/performance.md +0 -99
  530. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/project-structure.md +0 -77
  531. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/riverpod-state.md +0 -404
  532. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-expert/references/widget-patterns.md +0 -123
  533. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/POWER.md +0 -204
  534. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/SKILL.md +0 -180
  535. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/log_redaction.md +0 -17
  536. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/network_hardening.md +0 -13
  537. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/secret-scanning.md +0 -123
  538. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/secure_storage_policy.md +0 -16
  539. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/references/vulnerability-patterns.md +0 -189
  540. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-security-reviewer/templates/security_review_response.md +0 -31
  541. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/POWER.md +0 -527
  542. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/SKILL.md +0 -513
  543. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/golden-testing.md +0 -444
  544. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/integration-testing.md +0 -688
  545. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/property-testing.md +0 -408
  546. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/riverpod-testing.md +0 -606
  547. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/test-utilities.md +0 -566
  548. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/unit-testing.md +0 -511
  549. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/flutter-test-master/references/widget-testing.md +0 -601
  550. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/git-commit/POWER.md +0 -47
  551. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/git-commit/SKILL.md +0 -46
  552. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/POWER.md +0 -227
  553. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/SKILL.md +0 -217
  554. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/references/guard_patterns.md +0 -14
  555. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/references/tab_preservation.md +0 -12
  556. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/templates/guard_redirect.md +0 -30
  557. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/gorouter-restoration/templates/stateful_shell_skeleton.md +0 -40
  558. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/mcp.json +0 -11
  559. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/POWER.md +0 -109
  560. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/SKILL.md +0 -93
  561. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/communication.md +0 -499
  562. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/data.md +0 -721
  563. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/decomposition.md +0 -344
  564. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/observability.md +0 -805
  565. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/microservices-architect/references/patterns.md +0 -603
  566. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/POWER.md +0 -130
  567. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/SKILL.md +0 -114
  568. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/authentication.md +0 -461
  569. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/controllers-routing.md +0 -114
  570. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/dtos-validation.md +0 -156
  571. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/migration-from-express.md +0 -1240
  572. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/secure-sessions.md +0 -56
  573. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/services-di.md +0 -143
  574. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/strangler-fig-pattern.md +0 -47
  575. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/nestjs-expert/references/testing-patterns.md +0 -189
  576. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/POWER.md +0 -72
  577. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/SKILL.md +0 -71
  578. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/colors.md +0 -41
  579. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/components.md +0 -53
  580. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/oneup-design/references/spacing.md +0 -84
  581. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/POWER.md +0 -78
  582. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/SKILL.md +0 -68
  583. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/crud-templates.md +0 -43
  584. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-express.md +0 -19
  585. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-fastapi.md +0 -20
  586. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-nestjs.md +0 -20
  587. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/framework-raw-openapi.md +0 -14
  588. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/openapi-checklist.md +0 -33
  589. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/openapi-docs/references/stoplight-ui.md +0 -21
  590. package/workflows/workflows/agent-environment-setup/platforms/windsurf/skills/postman/references/steering.md +0 -26
  591. 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
+ });