@shrkcrft/mcp-server 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (501) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +15 -0
  3. package/dist/index.d.ts +8 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +6 -0
  6. package/dist/main.d.ts +3 -0
  7. package/dist/main.d.ts.map +1 -0
  8. package/dist/main.js +43 -0
  9. package/dist/resources/build-resource-list.d.ts +14 -0
  10. package/dist/resources/build-resource-list.d.ts.map +1 -0
  11. package/dist/resources/build-resource-list.js +56 -0
  12. package/dist/resources/index.d.ts +4 -0
  13. package/dist/resources/index.d.ts.map +1 -0
  14. package/dist/resources/index.js +3 -0
  15. package/dist/resources/read-resource.d.ts +16 -0
  16. package/dist/resources/read-resource.d.ts.map +1 -0
  17. package/dist/resources/read-resource.js +97 -0
  18. package/dist/resources/resource-uris.d.ts +14 -0
  19. package/dist/resources/resource-uris.d.ts.map +1 -0
  20. package/dist/resources/resource-uris.js +38 -0
  21. package/dist/server/create-mcp-server.d.ts +55 -0
  22. package/dist/server/create-mcp-server.d.ts.map +1 -0
  23. package/dist/server/create-mcp-server.js +209 -0
  24. package/dist/server/http-transport.d.ts +29 -0
  25. package/dist/server/http-transport.d.ts.map +1 -0
  26. package/dist/server/http-transport.js +75 -0
  27. package/dist/server/mcp-server-config.d.ts +10 -0
  28. package/dist/server/mcp-server-config.d.ts.map +1 -0
  29. package/dist/server/mcp-server-config.js +3 -0
  30. package/dist/server/sharkcraft-watcher.d.ts +18 -0
  31. package/dist/server/sharkcraft-watcher.d.ts.map +1 -0
  32. package/dist/server/sharkcraft-watcher.js +60 -0
  33. package/dist/server/tool-definition.d.ts +56 -0
  34. package/dist/server/tool-definition.d.ts.map +1 -0
  35. package/dist/server/tool-definition.js +1 -0
  36. package/dist/server/tool-input-validators.d.ts +18 -0
  37. package/dist/server/tool-input-validators.d.ts.map +1 -0
  38. package/dist/server/tool-input-validators.js +115 -0
  39. package/dist/tools/acceptance-replay.tool.d.ts +3 -0
  40. package/dist/tools/acceptance-replay.tool.d.ts.map +1 -0
  41. package/dist/tools/acceptance-replay.tool.js +53 -0
  42. package/dist/tools/adoption-checkpoint.tool.d.ts +3 -0
  43. package/dist/tools/adoption-checkpoint.tool.d.ts.map +1 -0
  44. package/dist/tools/adoption-checkpoint.tool.js +49 -0
  45. package/dist/tools/agent-brief-chunks.tool.d.ts +6 -0
  46. package/dist/tools/agent-brief-chunks.tool.d.ts.map +1 -0
  47. package/dist/tools/agent-brief-chunks.tool.js +326 -0
  48. package/dist/tools/agent-brief.tool.d.ts +3 -0
  49. package/dist/tools/agent-brief.tool.d.ts.map +1 -0
  50. package/dist/tools/agent-brief.tool.js +44 -0
  51. package/dist/tools/all-tools.d.ts +3 -0
  52. package/dist/tools/all-tools.d.ts.map +1 -0
  53. package/dist/tools/all-tools.js +403 -0
  54. package/dist/tools/architecture-map.tool.d.ts +3 -0
  55. package/dist/tools/architecture-map.tool.d.ts.map +1 -0
  56. package/dist/tools/architecture-map.tool.js +22 -0
  57. package/dist/tools/area-explore.tool.d.ts +3 -0
  58. package/dist/tools/area-explore.tool.d.ts.map +1 -0
  59. package/dist/tools/area-explore.tool.js +32 -0
  60. package/dist/tools/area-map.tool.d.ts +3 -0
  61. package/dist/tools/area-map.tool.d.ts.map +1 -0
  62. package/dist/tools/area-map.tool.js +9 -0
  63. package/dist/tools/bundle-diff.tool.d.ts +3 -0
  64. package/dist/tools/bundle-diff.tool.d.ts.map +1 -0
  65. package/dist/tools/bundle-diff.tool.js +37 -0
  66. package/dist/tools/bundle-replay.tool.d.ts +3 -0
  67. package/dist/tools/bundle-replay.tool.d.ts.map +1 -0
  68. package/dist/tools/bundle-replay.tool.js +19 -0
  69. package/dist/tools/change-intent.tool.d.ts +3 -0
  70. package/dist/tools/change-intent.tool.d.ts.map +1 -0
  71. package/dist/tools/change-intent.tool.js +18 -0
  72. package/dist/tools/check-boundaries.tool.d.ts +3 -0
  73. package/dist/tools/check-boundaries.tool.d.ts.map +1 -0
  74. package/dist/tools/check-boundaries.tool.js +37 -0
  75. package/dist/tools/ci-permissions-fix.tool.d.ts +3 -0
  76. package/dist/tools/ci-permissions-fix.tool.d.ts.map +1 -0
  77. package/dist/tools/ci-permissions-fix.tool.js +32 -0
  78. package/dist/tools/ci-permissions.tool.d.ts +3 -0
  79. package/dist/tools/ci-permissions.tool.d.ts.map +1 -0
  80. package/dist/tools/ci-permissions.tool.js +26 -0
  81. package/dist/tools/ci-scaffold-preview.tool.d.ts +3 -0
  82. package/dist/tools/ci-scaffold-preview.tool.d.ts.map +1 -0
  83. package/dist/tools/ci-scaffold-preview.tool.js +63 -0
  84. package/dist/tools/command-catalog.tool.d.ts +27 -0
  85. package/dist/tools/command-catalog.tool.d.ts.map +1 -0
  86. package/dist/tools/command-catalog.tool.js +147 -0
  87. package/dist/tools/construct-adoption-diff.tool.d.ts +3 -0
  88. package/dist/tools/construct-adoption-diff.tool.d.ts.map +1 -0
  89. package/dist/tools/construct-adoption-diff.tool.js +26 -0
  90. package/dist/tools/construct-adoption.tool.d.ts +4 -0
  91. package/dist/tools/construct-adoption.tool.d.ts.map +1 -0
  92. package/dist/tools/construct-adoption.tool.js +37 -0
  93. package/dist/tools/construct-inference.tool.d.ts +3 -0
  94. package/dist/tools/construct-inference.tool.d.ts.map +1 -0
  95. package/dist/tools/construct-inference.tool.js +26 -0
  96. package/dist/tools/constructs.tool.d.ts +7 -0
  97. package/dist/tools/constructs.tool.d.ts.map +1 -0
  98. package/dist/tools/constructs.tool.js +79 -0
  99. package/dist/tools/create-generation-plan.tool.d.ts +3 -0
  100. package/dist/tools/create-generation-plan.tool.d.ts.map +1 -0
  101. package/dist/tools/create-generation-plan.tool.js +48 -0
  102. package/dist/tools/create-pipeline-plan.tool.d.ts +3 -0
  103. package/dist/tools/create-pipeline-plan.tool.d.ts.map +1 -0
  104. package/dist/tools/create-pipeline-plan.tool.js +41 -0
  105. package/dist/tools/dashboard-summary.tool.d.ts +3 -0
  106. package/dist/tools/dashboard-summary.tool.d.ts.map +1 -0
  107. package/dist/tools/dashboard-summary.tool.js +182 -0
  108. package/dist/tools/dev-session.tool.d.ts +14 -0
  109. package/dist/tools/dev-session.tool.d.ts.map +1 -0
  110. package/dist/tools/dev-session.tool.js +167 -0
  111. package/dist/tools/diagnostics.tool.d.ts +4 -0
  112. package/dist/tools/diagnostics.tool.d.ts.map +1 -0
  113. package/dist/tools/diagnostics.tool.js +40 -0
  114. package/dist/tools/docs-check.tool.d.ts +4 -0
  115. package/dist/tools/docs-check.tool.d.ts.map +1 -0
  116. package/dist/tools/docs-check.tool.js +17 -0
  117. package/dist/tools/doctor-packs.tool.d.ts +3 -0
  118. package/dist/tools/doctor-packs.tool.d.ts.map +1 -0
  119. package/dist/tools/doctor-packs.tool.js +30 -0
  120. package/dist/tools/explain-generation-target.tool.d.ts +3 -0
  121. package/dist/tools/explain-generation-target.tool.d.ts.map +1 -0
  122. package/dist/tools/explain-generation-target.tool.js +49 -0
  123. package/dist/tools/feature-bundle.tool.d.ts +4 -0
  124. package/dist/tools/feature-bundle.tool.d.ts.map +1 -0
  125. package/dist/tools/feature-bundle.tool.js +36 -0
  126. package/dist/tools/get-action-hints.tool.d.ts +3 -0
  127. package/dist/tools/get-action-hints.tool.d.ts.map +1 -0
  128. package/dist/tools/get-action-hints.tool.js +43 -0
  129. package/dist/tools/get-agent-instructions.tool.d.ts +3 -0
  130. package/dist/tools/get-agent-instructions.tool.d.ts.map +1 -0
  131. package/dist/tools/get-agent-instructions.tool.js +9 -0
  132. package/dist/tools/get-ai-readiness-report.tool.d.ts +3 -0
  133. package/dist/tools/get-ai-readiness-report.tool.d.ts.map +1 -0
  134. package/dist/tools/get-ai-readiness-report.tool.js +10 -0
  135. package/dist/tools/get-architecture-constraints.tool.d.ts +3 -0
  136. package/dist/tools/get-architecture-constraints.tool.d.ts.map +1 -0
  137. package/dist/tools/get-architecture-constraints.tool.js +20 -0
  138. package/dist/tools/get-boundary-rule.tool.d.ts +3 -0
  139. package/dist/tools/get-boundary-rule.tool.d.ts.map +1 -0
  140. package/dist/tools/get-boundary-rule.tool.js +22 -0
  141. package/dist/tools/get-coverage-report.tool.d.ts +3 -0
  142. package/dist/tools/get-coverage-report.tool.d.ts.map +1 -0
  143. package/dist/tools/get-coverage-report.tool.js +9 -0
  144. package/dist/tools/get-current-tasks.tool.d.ts +3 -0
  145. package/dist/tools/get-current-tasks.tool.d.ts.map +1 -0
  146. package/dist/tools/get-current-tasks.tool.js +19 -0
  147. package/dist/tools/get-drift-report.tool.d.ts +3 -0
  148. package/dist/tools/get-drift-report.tool.d.ts.map +1 -0
  149. package/dist/tools/get-drift-report.tool.js +16 -0
  150. package/dist/tools/get-graph-node.tool.d.ts +3 -0
  151. package/dist/tools/get-graph-node.tool.d.ts.map +1 -0
  152. package/dist/tools/get-graph-node.tool.js +23 -0
  153. package/dist/tools/get-import-graph-summary.tool.d.ts +3 -0
  154. package/dist/tools/get-import-graph-summary.tool.d.ts.map +1 -0
  155. package/dist/tools/get-import-graph-summary.tool.js +10 -0
  156. package/dist/tools/get-knowledge-graph.tool.d.ts +3 -0
  157. package/dist/tools/get-knowledge-graph.tool.d.ts.map +1 -0
  158. package/dist/tools/get-knowledge-graph.tool.js +10 -0
  159. package/dist/tools/get-knowledge.tool.d.ts +3 -0
  160. package/dist/tools/get-knowledge.tool.d.ts.map +1 -0
  161. package/dist/tools/get-knowledge.tool.js +18 -0
  162. package/dist/tools/get-pack.tool.d.ts +3 -0
  163. package/dist/tools/get-pack.tool.d.ts.map +1 -0
  164. package/dist/tools/get-pack.tool.js +33 -0
  165. package/dist/tools/get-path-convention.tool.d.ts +3 -0
  166. package/dist/tools/get-path-convention.tool.d.ts.map +1 -0
  167. package/dist/tools/get-path-convention.tool.js +17 -0
  168. package/dist/tools/get-pipeline-context.tool.d.ts +3 -0
  169. package/dist/tools/get-pipeline-context.tool.d.ts.map +1 -0
  170. package/dist/tools/get-pipeline-context.tool.js +48 -0
  171. package/dist/tools/get-pipeline.tool.d.ts +3 -0
  172. package/dist/tools/get-pipeline.tool.d.ts.map +1 -0
  173. package/dist/tools/get-pipeline.tool.js +17 -0
  174. package/dist/tools/get-preset.tool.d.ts +3 -0
  175. package/dist/tools/get-preset.tool.d.ts.map +1 -0
  176. package/dist/tools/get-preset.tool.js +22 -0
  177. package/dist/tools/get-project-overview.tool.d.ts +3 -0
  178. package/dist/tools/get-project-overview.tool.d.ts.map +1 -0
  179. package/dist/tools/get-project-overview.tool.js +10 -0
  180. package/dist/tools/get-relevant-context.tool.d.ts +3 -0
  181. package/dist/tools/get-relevant-context.tool.d.ts.map +1 -0
  182. package/dist/tools/get-relevant-context.tool.js +55 -0
  183. package/dist/tools/get-relevant-rules.tool.d.ts +3 -0
  184. package/dist/tools/get-relevant-rules.tool.d.ts.map +1 -0
  185. package/dist/tools/get-relevant-rules.tool.js +37 -0
  186. package/dist/tools/get-repository-commands.tool.d.ts +3 -0
  187. package/dist/tools/get-repository-commands.tool.d.ts.map +1 -0
  188. package/dist/tools/get-repository-commands.tool.js +22 -0
  189. package/dist/tools/get-review-packet.tool.d.ts +3 -0
  190. package/dist/tools/get-review-packet.tool.d.ts.map +1 -0
  191. package/dist/tools/get-review-packet.tool.js +26 -0
  192. package/dist/tools/get-rule.tool.d.ts +3 -0
  193. package/dist/tools/get-rule.tool.d.ts.map +1 -0
  194. package/dist/tools/get-rule.tool.js +18 -0
  195. package/dist/tools/get-security-guidelines.tool.d.ts +3 -0
  196. package/dist/tools/get-security-guidelines.tool.d.ts.map +1 -0
  197. package/dist/tools/get-security-guidelines.tool.js +23 -0
  198. package/dist/tools/get-sessions.tool.d.ts +4 -0
  199. package/dist/tools/get-sessions.tool.d.ts.map +1 -0
  200. package/dist/tools/get-sessions.tool.js +41 -0
  201. package/dist/tools/get-task-packet.tool.d.ts +3 -0
  202. package/dist/tools/get-task-packet.tool.d.ts.map +1 -0
  203. package/dist/tools/get-task-packet.tool.js +48 -0
  204. package/dist/tools/get-template.tool.d.ts +3 -0
  205. package/dist/tools/get-template.tool.d.ts.map +1 -0
  206. package/dist/tools/get-template.tool.js +29 -0
  207. package/dist/tools/get-testing-guidelines.tool.d.ts +3 -0
  208. package/dist/tools/get-testing-guidelines.tool.d.ts.map +1 -0
  209. package/dist/tools/get-testing-guidelines.tool.js +22 -0
  210. package/dist/tools/graph-why.tool.d.ts +3 -0
  211. package/dist/tools/graph-why.tool.d.ts.map +1 -0
  212. package/dist/tools/graph-why.tool.js +25 -0
  213. package/dist/tools/impact-analysis.tool.d.ts +3 -0
  214. package/dist/tools/impact-analysis.tool.d.ts.map +1 -0
  215. package/dist/tools/impact-analysis.tool.js +43 -0
  216. package/dist/tools/import-graph-analysis.tool.d.ts +3 -0
  217. package/dist/tools/import-graph-analysis.tool.d.ts.map +1 -0
  218. package/dist/tools/import-graph-analysis.tool.js +9 -0
  219. package/dist/tools/index.d.ts +10 -0
  220. package/dist/tools/index.d.ts.map +1 -0
  221. package/dist/tools/index.js +9 -0
  222. package/dist/tools/inspect-packs.tool.d.ts +3 -0
  223. package/dist/tools/inspect-packs.tool.d.ts.map +1 -0
  224. package/dist/tools/inspect-packs.tool.js +31 -0
  225. package/dist/tools/inspect-sharkcraft-setup.tool.d.ts +3 -0
  226. package/dist/tools/inspect-sharkcraft-setup.tool.d.ts.map +1 -0
  227. package/dist/tools/inspect-sharkcraft-setup.tool.js +10 -0
  228. package/dist/tools/inspect-workspace.tool.d.ts +3 -0
  229. package/dist/tools/inspect-workspace.tool.d.ts.map +1 -0
  230. package/dist/tools/inspect-workspace.tool.js +23 -0
  231. package/dist/tools/install-smoke.tool.d.ts +3 -0
  232. package/dist/tools/install-smoke.tool.d.ts.map +1 -0
  233. package/dist/tools/install-smoke.tool.js +15 -0
  234. package/dist/tools/list-boundary-rules.tool.d.ts +3 -0
  235. package/dist/tools/list-boundary-rules.tool.d.ts.map +1 -0
  236. package/dist/tools/list-boundary-rules.tool.js +20 -0
  237. package/dist/tools/list-knowledge.tool.d.ts +3 -0
  238. package/dist/tools/list-knowledge.tool.d.ts.map +1 -0
  239. package/dist/tools/list-knowledge.tool.js +46 -0
  240. package/dist/tools/list-packs.tool.d.ts +3 -0
  241. package/dist/tools/list-packs.tool.d.ts.map +1 -0
  242. package/dist/tools/list-packs.tool.js +19 -0
  243. package/dist/tools/list-path-conventions.tool.d.ts +3 -0
  244. package/dist/tools/list-path-conventions.tool.d.ts.map +1 -0
  245. package/dist/tools/list-path-conventions.tool.js +20 -0
  246. package/dist/tools/list-pipelines.tool.d.ts +3 -0
  247. package/dist/tools/list-pipelines.tool.d.ts.map +1 -0
  248. package/dist/tools/list-pipelines.tool.js +19 -0
  249. package/dist/tools/list-presets.tool.d.ts +3 -0
  250. package/dist/tools/list-presets.tool.d.ts.map +1 -0
  251. package/dist/tools/list-presets.tool.js +26 -0
  252. package/dist/tools/list-rules.tool.d.ts +3 -0
  253. package/dist/tools/list-rules.tool.d.ts.map +1 -0
  254. package/dist/tools/list-rules.tool.js +19 -0
  255. package/dist/tools/list-templates.tool.d.ts +3 -0
  256. package/dist/tools/list-templates.tool.d.ts.map +1 -0
  257. package/dist/tools/list-templates.tool.js +19 -0
  258. package/dist/tools/onboard-adoption-diff.tool.d.ts +3 -0
  259. package/dist/tools/onboard-adoption-diff.tool.d.ts.map +1 -0
  260. package/dist/tools/onboard-adoption-diff.tool.js +29 -0
  261. package/dist/tools/onboarding.tool.d.ts +7 -0
  262. package/dist/tools/onboarding.tool.d.ts.map +1 -0
  263. package/dist/tools/onboarding.tool.js +253 -0
  264. package/dist/tools/orchestration.tool.d.ts +4 -0
  265. package/dist/tools/orchestration.tool.d.ts.map +1 -0
  266. package/dist/tools/orchestration.tool.js +57 -0
  267. package/dist/tools/ownership.tool.d.ts +4 -0
  268. package/dist/tools/ownership.tool.d.ts.map +1 -0
  269. package/dist/tools/ownership.tool.js +31 -0
  270. package/dist/tools/pack-compat.tool.d.ts +3 -0
  271. package/dist/tools/pack-compat.tool.d.ts.map +1 -0
  272. package/dist/tools/pack-compat.tool.js +27 -0
  273. package/dist/tools/pack-doctor-release.tool.d.ts +3 -0
  274. package/dist/tools/pack-doctor-release.tool.d.ts.map +1 -0
  275. package/dist/tools/pack-doctor-release.tool.js +21 -0
  276. package/dist/tools/pack-release-check.tool.d.ts +3 -0
  277. package/dist/tools/pack-release-check.tool.d.ts.map +1 -0
  278. package/dist/tools/pack-release-check.tool.js +17 -0
  279. package/dist/tools/playbook-script.tool.d.ts +3 -0
  280. package/dist/tools/playbook-script.tool.d.ts.map +1 -0
  281. package/dist/tools/playbook-script.tool.js +25 -0
  282. package/dist/tools/playbooks.tool.d.ts +5 -0
  283. package/dist/tools/playbooks.tool.d.ts.map +1 -0
  284. package/dist/tools/playbooks.tool.js +43 -0
  285. package/dist/tools/policy-report.tool.d.ts +3 -0
  286. package/dist/tools/policy-report.tool.d.ts.map +1 -0
  287. package/dist/tools/policy-report.tool.js +10 -0
  288. package/dist/tools/preview-knowledge-propose.tool.d.ts +3 -0
  289. package/dist/tools/preview-knowledge-propose.tool.d.ts.map +1 -0
  290. package/dist/tools/preview-knowledge-propose.tool.js +44 -0
  291. package/dist/tools/preview-preset-application.tool.d.ts +3 -0
  292. package/dist/tools/preview-preset-application.tool.d.ts.map +1 -0
  293. package/dist/tools/preview-preset-application.tool.js +64 -0
  294. package/dist/tools/quality-baseline-diff.tool.d.ts +3 -0
  295. package/dist/tools/quality-baseline-diff.tool.d.ts.map +1 -0
  296. package/dist/tools/quality-baseline-diff.tool.js +18 -0
  297. package/dist/tools/quality-baseline.tool.d.ts +3 -0
  298. package/dist/tools/quality-baseline.tool.d.ts.map +1 -0
  299. package/dist/tools/quality-baseline.tool.js +22 -0
  300. package/dist/tools/quality-report.tool.d.ts +3 -0
  301. package/dist/tools/quality-report.tool.d.ts.map +1 -0
  302. package/dist/tools/quality-report.tool.js +62 -0
  303. package/dist/tools/r18-extras.tool.d.ts +15 -0
  304. package/dist/tools/r18-extras.tool.d.ts.map +1 -0
  305. package/dist/tools/r18-extras.tool.js +209 -0
  306. package/dist/tools/r19-extras.tool.d.ts +10 -0
  307. package/dist/tools/r19-extras.tool.d.ts.map +1 -0
  308. package/dist/tools/r19-extras.tool.js +117 -0
  309. package/dist/tools/r20-extras.tool.d.ts +4 -0
  310. package/dist/tools/r20-extras.tool.d.ts.map +1 -0
  311. package/dist/tools/r20-extras.tool.js +65 -0
  312. package/dist/tools/r22-extras.tool.d.ts +4 -0
  313. package/dist/tools/r22-extras.tool.d.ts.map +1 -0
  314. package/dist/tools/r22-extras.tool.js +42 -0
  315. package/dist/tools/r23-extras.tool.d.ts +10 -0
  316. package/dist/tools/r23-extras.tool.d.ts.map +1 -0
  317. package/dist/tools/r23-extras.tool.js +239 -0
  318. package/dist/tools/r24-extras.tool.d.ts +9 -0
  319. package/dist/tools/r24-extras.tool.d.ts.map +1 -0
  320. package/dist/tools/r24-extras.tool.js +144 -0
  321. package/dist/tools/r25-extras.tool.d.ts +11 -0
  322. package/dist/tools/r25-extras.tool.d.ts.map +1 -0
  323. package/dist/tools/r25-extras.tool.js +186 -0
  324. package/dist/tools/r26-ingest.tool.d.ts +10 -0
  325. package/dist/tools/r26-ingest.tool.d.ts.map +1 -0
  326. package/dist/tools/r26-ingest.tool.js +174 -0
  327. package/dist/tools/r26-task-context.tool.d.ts +5 -0
  328. package/dist/tools/r26-task-context.tool.d.ts.map +1 -0
  329. package/dist/tools/r26-task-context.tool.js +121 -0
  330. package/dist/tools/r27-polyglot.tool.d.ts +7 -0
  331. package/dist/tools/r27-polyglot.tool.d.ts.map +1 -0
  332. package/dist/tools/r27-polyglot.tool.js +139 -0
  333. package/dist/tools/r28-changed-boundary.tool.d.ts +3 -0
  334. package/dist/tools/r28-changed-boundary.tool.d.ts.map +1 -0
  335. package/dist/tools/r28-changed-boundary.tool.js +77 -0
  336. package/dist/tools/r28-helpers.tool.d.ts +5 -0
  337. package/dist/tools/r28-helpers.tool.d.ts.map +1 -0
  338. package/dist/tools/r28-helpers.tool.js +72 -0
  339. package/dist/tools/r28-pack-author.tool.d.ts +4 -0
  340. package/dist/tools/r28-pack-author.tool.d.ts.map +1 -0
  341. package/dist/tools/r28-pack-author.tool.js +67 -0
  342. package/dist/tools/r28-plugin-lifecycle.tool.d.ts +4 -0
  343. package/dist/tools/r28-plugin-lifecycle.tool.d.ts.map +1 -0
  344. package/dist/tools/r28-plugin-lifecycle.tool.js +94 -0
  345. package/dist/tools/r28-registry-lifecycle.tool.d.ts +3 -0
  346. package/dist/tools/r28-registry-lifecycle.tool.d.ts.map +1 -0
  347. package/dist/tools/r28-registry-lifecycle.tool.js +29 -0
  348. package/dist/tools/r28-runner-policy.tool.d.ts +3 -0
  349. package/dist/tools/r28-runner-policy.tool.d.ts.map +1 -0
  350. package/dist/tools/r28-runner-policy.tool.js +16 -0
  351. package/dist/tools/r29-doctor-suppressions.tool.d.ts +4 -0
  352. package/dist/tools/r29-doctor-suppressions.tool.d.ts.map +1 -0
  353. package/dist/tools/r29-doctor-suppressions.tool.js +66 -0
  354. package/dist/tools/r29-feedback.tool.d.ts +3 -0
  355. package/dist/tools/r29-feedback.tool.d.ts.map +1 -0
  356. package/dist/tools/r29-feedback.tool.js +26 -0
  357. package/dist/tools/r29-knowledge-rename.tool.d.ts +3 -0
  358. package/dist/tools/r29-knowledge-rename.tool.d.ts.map +1 -0
  359. package/dist/tools/r29-knowledge-rename.tool.js +51 -0
  360. package/dist/tools/r29-knowledge-stale.tool.d.ts +4 -0
  361. package/dist/tools/r29-knowledge-stale.tool.d.ts.map +1 -0
  362. package/dist/tools/r29-knowledge-stale.tool.js +68 -0
  363. package/dist/tools/r29-query-resolver.tool.d.ts +4 -0
  364. package/dist/tools/r29-query-resolver.tool.d.ts.map +1 -0
  365. package/dist/tools/r29-query-resolver.tool.js +38 -0
  366. package/dist/tools/r29-template-drift.tool.d.ts +3 -0
  367. package/dist/tools/r29-template-drift.tool.d.ts.map +1 -0
  368. package/dist/tools/r29-template-drift.tool.js +29 -0
  369. package/dist/tools/r30-feedback-rules.tool.d.ts +4 -0
  370. package/dist/tools/r30-feedback-rules.tool.d.ts.map +1 -0
  371. package/dist/tools/r30-feedback-rules.tool.js +47 -0
  372. package/dist/tools/r30-fuzzy-impact.tool.d.ts +3 -0
  373. package/dist/tools/r30-fuzzy-impact.tool.d.ts.map +1 -0
  374. package/dist/tools/r30-fuzzy-impact.tool.js +44 -0
  375. package/dist/tools/r31-changes-pr-ci.tool.d.ts +5 -0
  376. package/dist/tools/r31-changes-pr-ci.tool.d.ts.map +1 -0
  377. package/dist/tools/r31-changes-pr-ci.tool.js +82 -0
  378. package/dist/tools/r31-command-discovery.tool.d.ts +5 -0
  379. package/dist/tools/r31-command-discovery.tool.d.ts.map +1 -0
  380. package/dist/tools/r31-command-discovery.tool.js +126 -0
  381. package/dist/tools/r31-fix-preview.tool.d.ts +4 -0
  382. package/dist/tools/r31-fix-preview.tool.d.ts.map +1 -0
  383. package/dist/tools/r31-fix-preview.tool.js +58 -0
  384. package/dist/tools/r31-ranker-explain.tool.d.ts +4 -0
  385. package/dist/tools/r31-ranker-explain.tool.d.ts.map +1 -0
  386. package/dist/tools/r31-ranker-explain.tool.js +69 -0
  387. package/dist/tools/r31-scaffold-coverage.tool.d.ts +3 -0
  388. package/dist/tools/r31-scaffold-coverage.tool.d.ts.map +1 -0
  389. package/dist/tools/r31-scaffold-coverage.tool.js +31 -0
  390. package/dist/tools/r32-profiles.tool.d.ts +8 -0
  391. package/dist/tools/r32-profiles.tool.d.ts.map +1 -0
  392. package/dist/tools/r32-profiles.tool.js +107 -0
  393. package/dist/tools/r32-project-coupling.tool.d.ts +3 -0
  394. package/dist/tools/r32-project-coupling.tool.d.ts.map +1 -0
  395. package/dist/tools/r32-project-coupling.tool.js +38 -0
  396. package/dist/tools/r33-agent-task-prep.tool.d.ts +3 -0
  397. package/dist/tools/r33-agent-task-prep.tool.d.ts.map +1 -0
  398. package/dist/tools/r33-agent-task-prep.tool.js +34 -0
  399. package/dist/tools/r33-conventions.tool.d.ts +5 -0
  400. package/dist/tools/r33-conventions.tool.d.ts.map +1 -0
  401. package/dist/tools/r33-conventions.tool.js +48 -0
  402. package/dist/tools/r33-dev-cycle-ci-predict.tool.d.ts +4 -0
  403. package/dist/tools/r33-dev-cycle-ci-predict.tool.d.ts.map +1 -0
  404. package/dist/tools/r33-dev-cycle-ci-predict.tool.js +44 -0
  405. package/dist/tools/r33-pack-contributions.tool.d.ts +4 -0
  406. package/dist/tools/r33-pack-contributions.tool.d.ts.map +1 -0
  407. package/dist/tools/r33-pack-contributions.tool.js +42 -0
  408. package/dist/tools/r33-pack-signature.tool.d.ts +3 -0
  409. package/dist/tools/r33-pack-signature.tool.d.ts.map +1 -0
  410. package/dist/tools/r33-pack-signature.tool.js +12 -0
  411. package/dist/tools/r33-routing-helpers.tool.d.ts +6 -0
  412. package/dist/tools/r33-routing-helpers.tool.d.ts.map +1 -0
  413. package/dist/tools/r33-routing-helpers.tool.js +63 -0
  414. package/dist/tools/r33-self-config.tool.d.ts +4 -0
  415. package/dist/tools/r33-self-config.tool.d.ts.map +1 -0
  416. package/dist/tools/r33-self-config.tool.js +20 -0
  417. package/dist/tools/r34-search-unified.tool.d.ts +3 -0
  418. package/dist/tools/r34-search-unified.tool.d.ts.map +1 -0
  419. package/dist/tools/r34-search-unified.tool.js +38 -0
  420. package/dist/tools/r35-registration-hints.tool.d.ts +5 -0
  421. package/dist/tools/r35-registration-hints.tool.d.ts.map +1 -0
  422. package/dist/tools/r35-registration-hints.tool.js +69 -0
  423. package/dist/tools/r57-specs.tool.d.ts +12 -0
  424. package/dist/tools/r57-specs.tool.d.ts.map +1 -0
  425. package/dist/tools/r57-specs.tool.js +115 -0
  426. package/dist/tools/r58-grounding.tool.d.ts +14 -0
  427. package/dist/tools/r58-grounding.tool.d.ts.map +1 -0
  428. package/dist/tools/r58-grounding.tool.js +135 -0
  429. package/dist/tools/recommend-presets.tool.d.ts +3 -0
  430. package/dist/tools/recommend-presets.tool.d.ts.map +1 -0
  431. package/dist/tools/recommend-presets.tool.js +31 -0
  432. package/dist/tools/release-readiness.tool.d.ts +3 -0
  433. package/dist/tools/release-readiness.tool.d.ts.map +1 -0
  434. package/dist/tools/release-readiness.tool.js +28 -0
  435. package/dist/tools/release-smoke.tool.d.ts +3 -0
  436. package/dist/tools/release-smoke.tool.d.ts.map +1 -0
  437. package/dist/tools/release-smoke.tool.js +22 -0
  438. package/dist/tools/render-template-preview.tool.d.ts +3 -0
  439. package/dist/tools/render-template-preview.tool.d.ts.map +1 -0
  440. package/dist/tools/render-template-preview.tool.js +40 -0
  441. package/dist/tools/report-site-preview.tool.d.ts +3 -0
  442. package/dist/tools/report-site-preview.tool.d.ts.map +1 -0
  443. package/dist/tools/report-site-preview.tool.js +28 -0
  444. package/dist/tools/repository-map.tool.d.ts +3 -0
  445. package/dist/tools/repository-map.tool.d.ts.map +1 -0
  446. package/dist/tools/repository-map.tool.js +17 -0
  447. package/dist/tools/repository-stats.tool.d.ts +3 -0
  448. package/dist/tools/repository-stats.tool.d.ts.map +1 -0
  449. package/dist/tools/repository-stats.tool.js +28 -0
  450. package/dist/tools/review-generation-plan.tool.d.ts +3 -0
  451. package/dist/tools/review-generation-plan.tool.d.ts.map +1 -0
  452. package/dist/tools/review-generation-plan.tool.js +24 -0
  453. package/dist/tools/review-packet-v2.tool.d.ts +3 -0
  454. package/dist/tools/review-packet-v2.tool.d.ts.map +1 -0
  455. package/dist/tools/review-packet-v2.tool.js +27 -0
  456. package/dist/tools/run-agent-test.tool.d.ts +4 -0
  457. package/dist/tools/run-agent-test.tool.d.ts.map +1 -0
  458. package/dist/tools/run-agent-test.tool.js +28 -0
  459. package/dist/tools/run-context-test.tool.d.ts +4 -0
  460. package/dist/tools/run-context-test.tool.d.ts.map +1 -0
  461. package/dist/tools/run-context-test.tool.js +28 -0
  462. package/dist/tools/runtime-reports.tool.d.ts +9 -0
  463. package/dist/tools/runtime-reports.tool.d.ts.map +1 -0
  464. package/dist/tools/runtime-reports.tool.js +175 -0
  465. package/dist/tools/safety-audit.tool.d.ts +3 -0
  466. package/dist/tools/safety-audit.tool.d.ts.map +1 -0
  467. package/dist/tools/safety-audit.tool.js +42 -0
  468. package/dist/tools/scaffold-patterns.tool.d.ts +5 -0
  469. package/dist/tools/scaffold-patterns.tool.d.ts.map +1 -0
  470. package/dist/tools/scaffold-patterns.tool.js +59 -0
  471. package/dist/tools/schema-inventory.tool.d.ts +3 -0
  472. package/dist/tools/schema-inventory.tool.d.ts.map +1 -0
  473. package/dist/tools/schema-inventory.tool.js +23 -0
  474. package/dist/tools/search-knowledge.tool.d.ts +3 -0
  475. package/dist/tools/search-knowledge.tool.d.ts.map +1 -0
  476. package/dist/tools/search-knowledge.tool.js +42 -0
  477. package/dist/tools/search-path-conventions.tool.d.ts +3 -0
  478. package/dist/tools/search-path-conventions.tool.d.ts.map +1 -0
  479. package/dist/tools/search-path-conventions.tool.js +30 -0
  480. package/dist/tools/search-templates.tool.d.ts +3 -0
  481. package/dist/tools/search-templates.tool.d.ts.map +1 -0
  482. package/dist/tools/search-templates.tool.js +21 -0
  483. package/dist/tools/search-tuning-explain.tool.d.ts +3 -0
  484. package/dist/tools/search-tuning-explain.tool.d.ts.map +1 -0
  485. package/dist/tools/search-tuning-explain.tool.js +17 -0
  486. package/dist/tools/search-tuning.tool.d.ts +3 -0
  487. package/dist/tools/search-tuning.tool.d.ts.map +1 -0
  488. package/dist/tools/search-tuning.tool.js +10 -0
  489. package/dist/tools/search.tool.d.ts +3 -0
  490. package/dist/tools/search.tool.d.ts.map +1 -0
  491. package/dist/tools/search.tool.js +45 -0
  492. package/dist/tools/self-audit.tool.d.ts +3 -0
  493. package/dist/tools/self-audit.tool.d.ts.map +1 -0
  494. package/dist/tools/self-audit.tool.js +28 -0
  495. package/dist/tools/start-here.tool.d.ts +4 -0
  496. package/dist/tools/start-here.tool.d.ts.map +1 -0
  497. package/dist/tools/start-here.tool.js +27 -0
  498. package/dist/tools/test-impact.tool.d.ts +3 -0
  499. package/dist/tools/test-impact.tool.d.ts.map +1 -0
  500. package/dist/tools/test-impact.tool.js +23 -0
  501. package/package.json +66 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 SharkCraft contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # @shrkcrft/mcp-server
2
+
3
+ SharkCraft MCP server: 25 tools over @modelcontextprotocol/sdk's stdio transport.
4
+
5
+ Part of [SharkCraft](https://github.com/sharkcraft/sharkcraft) — a deterministic, local-first toolkit that gives AI coding agents durable project context. See the main repo for documentation, examples, and the `shrk` CLI.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ bun add @shrkcrft/mcp-server
11
+ ```
12
+
13
+ ## License
14
+
15
+ MIT — see [LICENSE](./LICENSE).
@@ -0,0 +1,8 @@
1
+ export { startMcpServer, createSharkcraftServer, resolveTargetRoot, type StartMcpServerOptions, type CreateSharkcraftServerOptions, } from './server/create-mcp-server.js';
2
+ export { startHttpServer, type HttpServerHandle } from './server/http-transport.js';
3
+ export { startSharkcraftWatcher } from './server/sharkcraft-watcher.js';
4
+ export { ALL_TOOLS } from './tools/index.js';
5
+ export type { IToolDefinition, IToolResponse, IToolContext, IMcpGateDecision, McpGateResolver, } from './server/tool-definition.js';
6
+ export { MCP_PROTOCOL_VERSION, MCP_SERVER_NAME, MCP_SERVER_VERSION, } from './server/mcp-server-config.js';
7
+ export { buildResourceList, readResource, parseResourceUri, knowledgeUri, templateUri, docUri, OVERVIEW_URI, AGENT_INSTRUCTIONS_URI, URI_SCHEME, } from './resources/index.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,KAAK,qBAAqB,EAC1B,KAAK,6BAA6B,GACnC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAK7C,YAAY,EACV,eAAe,EACf,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,kBAAkB,GACnB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,MAAM,EACN,YAAY,EACZ,sBAAsB,EACtB,UAAU,GACX,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export { startMcpServer, createSharkcraftServer, resolveTargetRoot, } from "./server/create-mcp-server.js";
2
+ export { startHttpServer } from "./server/http-transport.js";
3
+ export { startSharkcraftWatcher } from "./server/sharkcraft-watcher.js";
4
+ export { ALL_TOOLS } from "./tools/index.js";
5
+ export { MCP_PROTOCOL_VERSION, MCP_SERVER_NAME, MCP_SERVER_VERSION, } from "./server/mcp-server-config.js";
6
+ export { buildResourceList, readResource, parseResourceUri, knowledgeUri, templateUri, docUri, OVERVIEW_URI, AGENT_INSTRUCTIONS_URI, URI_SCHEME, } from "./resources/index.js";
package/dist/main.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bun
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":""}
package/dist/main.js ADDED
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env bun
2
+ import { startMcpServer } from "./server/create-mcp-server.js";
3
+ function extractFlag(argv, name) {
4
+ for (let i = 0; i < argv.length; i += 1) {
5
+ const arg = argv[i];
6
+ if (arg === `--${name}`) {
7
+ const next = argv[i + 1];
8
+ if (next !== undefined && !next.startsWith('-'))
9
+ return next;
10
+ return undefined;
11
+ }
12
+ if (arg.startsWith(`--${name}=`))
13
+ return arg.slice(name.length + 3);
14
+ }
15
+ return undefined;
16
+ }
17
+ function hasFlag(argv, name) {
18
+ return argv.includes(`--${name}`);
19
+ }
20
+ const argv = process.argv.slice(2);
21
+ const verbose = hasFlag(argv, 'verbose') || process.env.SHARKCRAFT_MCP_VERBOSE === '1';
22
+ const watch = hasFlag(argv, 'watch');
23
+ const cliCwd = extractFlag(argv, 'cwd');
24
+ const useHttp = hasFlag(argv, 'http');
25
+ const host = extractFlag(argv, 'host');
26
+ const portStr = extractFlag(argv, 'port');
27
+ const port = portStr ? Number(portStr) : undefined;
28
+ const opts = {
29
+ cwd: cliCwd,
30
+ verbose,
31
+ watch,
32
+ };
33
+ if (useHttp) {
34
+ opts.transport = 'http';
35
+ if (host)
36
+ opts.host = host;
37
+ if (port !== undefined && Number.isFinite(port))
38
+ opts.port = port;
39
+ }
40
+ startMcpServer(opts).catch((e) => {
41
+ process.stderr.write(`[mcp] fatal: ${e instanceof Error ? e.message : String(e)}\n`);
42
+ process.exit(1);
43
+ });
@@ -0,0 +1,14 @@
1
+ import type { ISharkcraftInspection } from '@shrkcrft/inspector';
2
+ export interface IResourceListItem {
3
+ uri: string;
4
+ name: string;
5
+ description?: string;
6
+ mimeType?: string;
7
+ }
8
+ /**
9
+ * Resources advertised by SharkCraft. Read-only by design — there is no
10
+ * resource-write endpoint. AI agents use these to fetch background info
11
+ * without invoking a tool call.
12
+ */
13
+ export declare function buildResourceList(inspection: ISharkcraftInspection): IResourceListItem[];
14
+ //# sourceMappingURL=build-resource-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-resource-list.d.ts","sourceRoot":"","sources":["../../src/resources/build-resource-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AASjE,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,qBAAqB,GAAG,iBAAiB,EAAE,CAqDxF"}
@@ -0,0 +1,56 @@
1
+ import { extname, basename } from 'node:path';
2
+ import { AGENT_INSTRUCTIONS_URI, docUri, knowledgeUri, OVERVIEW_URI, templateUri, } from "./resource-uris.js";
3
+ /**
4
+ * Resources advertised by SharkCraft. Read-only by design — there is no
5
+ * resource-write endpoint. AI agents use these to fetch background info
6
+ * without invoking a tool call.
7
+ */
8
+ export function buildResourceList(inspection) {
9
+ const items = [];
10
+ items.push({
11
+ uri: OVERVIEW_URI,
12
+ name: 'Project overview',
13
+ description: 'Compact project summary (name, package manager, frameworks, scripts).',
14
+ mimeType: 'text/plain',
15
+ });
16
+ items.push({
17
+ uri: AGENT_INSTRUCTIONS_URI,
18
+ name: 'Agent instructions',
19
+ description: 'How AI agents should use SharkCraft tools and resources.',
20
+ mimeType: 'text/markdown',
21
+ });
22
+ for (const entry of inspection.knowledgeEntries) {
23
+ items.push({
24
+ uri: knowledgeUri(entry.id),
25
+ name: entry.title,
26
+ description: `[${entry.type}, ${entry.priority}] ${entry.summary ?? ''}`.trim(),
27
+ mimeType: 'text/markdown',
28
+ });
29
+ }
30
+ for (const template of inspection.templates) {
31
+ items.push({
32
+ uri: templateUri(template.id),
33
+ name: `Template: ${template.name}`,
34
+ description: template.description,
35
+ mimeType: 'application/json',
36
+ });
37
+ }
38
+ // Markdown source docs — discoverable via inspection.sourceFiles, but we
39
+ // expose only .md files. The `path` field becomes the URI path component.
40
+ for (const sourceFile of inspection.sourceFiles) {
41
+ if (extname(sourceFile).toLowerCase() !== '.md')
42
+ continue;
43
+ const sharkcraftDir = inspection.sharkcraftDir;
44
+ let relPath = basename(sourceFile);
45
+ if (sharkcraftDir && sourceFile.startsWith(sharkcraftDir + '/')) {
46
+ relPath = sourceFile.slice(sharkcraftDir.length + 1);
47
+ }
48
+ items.push({
49
+ uri: docUri(relPath),
50
+ name: `Doc: ${relPath}`,
51
+ description: `Source markdown file at sharkcraft/${relPath}`,
52
+ mimeType: 'text/markdown',
53
+ });
54
+ }
55
+ return items;
56
+ }
@@ -0,0 +1,4 @@
1
+ export * from './resource-uris.js';
2
+ export * from './build-resource-list.js';
3
+ export * from './read-resource.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./resource-uris.js";
2
+ export * from "./build-resource-list.js";
3
+ export * from "./read-resource.js";
@@ -0,0 +1,16 @@
1
+ import type { ISharkcraftInspection } from '@shrkcrft/inspector';
2
+ export interface IResourceContent {
3
+ uri: string;
4
+ mimeType: string;
5
+ text: string;
6
+ }
7
+ export interface IReadResourceResult {
8
+ ok: true;
9
+ contents: IResourceContent[];
10
+ }
11
+ export interface IReadResourceError {
12
+ ok: false;
13
+ error: string;
14
+ }
15
+ export declare function readResource(inspection: ISharkcraftInspection, uri: string): IReadResourceResult | IReadResourceError;
16
+ //# sourceMappingURL=read-resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-resource.d.ts","sourceRoot":"","sources":["../../src/resources/read-resource.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAKjE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,qBAAqB,EACjC,GAAG,EAAE,MAAM,GACV,mBAAmB,GAAG,kBAAkB,CAiG1C"}
@@ -0,0 +1,97 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import * as nodePath from 'node:path';
3
+ import { buildProjectOverview, renderOverviewText, AGENT_INSTRUCTIONS } from '@shrkcrft/inspector';
4
+ import { formatEntryFull } from '@shrkcrft/knowledge';
5
+ import { parseResourceUri } from "./resource-uris.js";
6
+ export function readResource(inspection, uri) {
7
+ const parsed = parseResourceUri(uri);
8
+ if (parsed.kind === 'overview') {
9
+ const overview = buildProjectOverview(inspection.workspace, inspection.config?.projectName);
10
+ return {
11
+ ok: true,
12
+ contents: [
13
+ {
14
+ uri,
15
+ mimeType: 'text/plain',
16
+ text: renderOverviewText(overview),
17
+ },
18
+ ],
19
+ };
20
+ }
21
+ if (parsed.kind === 'agent-instructions') {
22
+ return {
23
+ ok: true,
24
+ contents: [{ uri, mimeType: 'text/markdown', text: AGENT_INSTRUCTIONS }],
25
+ };
26
+ }
27
+ if (parsed.kind === 'knowledge' && parsed.id) {
28
+ const entry = inspection.index.get(parsed.id);
29
+ if (!entry)
30
+ return { ok: false, error: `No knowledge entry with id "${parsed.id}".` };
31
+ return {
32
+ ok: true,
33
+ contents: [
34
+ {
35
+ uri,
36
+ mimeType: 'text/markdown',
37
+ text: formatEntryFull(entry),
38
+ },
39
+ ],
40
+ };
41
+ }
42
+ if (parsed.kind === 'template' && parsed.id) {
43
+ const template = inspection.templateRegistry.get(parsed.id);
44
+ if (!template)
45
+ return { ok: false, error: `No template with id "${parsed.id}".` };
46
+ const safe = {
47
+ id: template.id,
48
+ name: template.name,
49
+ description: template.description,
50
+ tags: template.tags,
51
+ scope: template.scope,
52
+ appliesWhen: template.appliesWhen,
53
+ variables: template.variables,
54
+ postGenerationNotes: template.postGenerationNotes ?? [],
55
+ related: template.related ?? [],
56
+ };
57
+ return {
58
+ ok: true,
59
+ contents: [
60
+ {
61
+ uri,
62
+ mimeType: 'application/json',
63
+ text: JSON.stringify(safe, null, 2),
64
+ },
65
+ ],
66
+ };
67
+ }
68
+ if (parsed.kind === 'docs' && parsed.path) {
69
+ if (!inspection.sharkcraftDir) {
70
+ return { ok: false, error: 'No sharkcraft/ folder is available.' };
71
+ }
72
+ // Resolve and verify the doc path lives inside sharkcraftDir.
73
+ const candidate = nodePath.resolve(inspection.sharkcraftDir, parsed.path);
74
+ const relative = nodePath.relative(inspection.sharkcraftDir, candidate);
75
+ if (relative === '' || relative.startsWith('..') || nodePath.isAbsolute(relative)) {
76
+ return { ok: false, error: `Doc path escapes sharkcraft/: ${parsed.path}` };
77
+ }
78
+ if (!existsSync(candidate)) {
79
+ return { ok: false, error: `Doc file not found: ${parsed.path}` };
80
+ }
81
+ let text;
82
+ try {
83
+ text = readFileSync(candidate, 'utf8');
84
+ }
85
+ catch (e) {
86
+ return {
87
+ ok: false,
88
+ error: `Failed to read doc ${parsed.path}: ${e.message}`,
89
+ };
90
+ }
91
+ return {
92
+ ok: true,
93
+ contents: [{ uri, mimeType: 'text/markdown', text }],
94
+ };
95
+ }
96
+ return { ok: false, error: `Unsupported resource URI: ${uri}` };
97
+ }
@@ -0,0 +1,14 @@
1
+ export declare const URI_SCHEME = "sharkcraft";
2
+ export declare const OVERVIEW_URI = "sharkcraft://overview";
3
+ export declare const AGENT_INSTRUCTIONS_URI = "sharkcraft://agent-instructions";
4
+ export declare function knowledgeUri(id: string): string;
5
+ export declare function templateUri(id: string): string;
6
+ export declare function docUri(relativePath: string): string;
7
+ export interface ParsedResourceUri {
8
+ scheme: string;
9
+ kind: 'overview' | 'agent-instructions' | 'knowledge' | 'template' | 'docs' | 'unknown';
10
+ id?: string;
11
+ path?: string;
12
+ }
13
+ export declare function parseResourceUri(uri: string): ParsedResourceUri;
14
+ //# sourceMappingURL=resource-uris.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-uris.d.ts","sourceRoot":"","sources":["../../src/resources/resource-uris.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,eAAe,CAAC;AAEvC,eAAO,MAAM,YAAY,0BAA6B,CAAC;AACvD,eAAO,MAAM,sBAAsB,oCAAuC,CAAC;AAE3E,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,GAAG,oBAAoB,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;IACxF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAwB/D"}
@@ -0,0 +1,38 @@
1
+ export const URI_SCHEME = 'sharkcraft';
2
+ export const OVERVIEW_URI = `${URI_SCHEME}://overview`;
3
+ export const AGENT_INSTRUCTIONS_URI = `${URI_SCHEME}://agent-instructions`;
4
+ export function knowledgeUri(id) {
5
+ return `${URI_SCHEME}://knowledge/${encodeURIComponent(id)}`;
6
+ }
7
+ export function templateUri(id) {
8
+ return `${URI_SCHEME}://template/${encodeURIComponent(id)}`;
9
+ }
10
+ export function docUri(relativePath) {
11
+ return `${URI_SCHEME}://docs/${relativePath.split('/').map(encodeURIComponent).join('/')}`;
12
+ }
13
+ export function parseResourceUri(uri) {
14
+ if (!uri.startsWith(`${URI_SCHEME}://`)) {
15
+ return { scheme: 'unknown', kind: 'unknown' };
16
+ }
17
+ const rest = uri.slice(`${URI_SCHEME}://`.length);
18
+ if (rest === 'overview')
19
+ return { scheme: URI_SCHEME, kind: 'overview' };
20
+ if (rest === 'agent-instructions') {
21
+ return { scheme: URI_SCHEME, kind: 'agent-instructions' };
22
+ }
23
+ const [kind, ...rest2] = rest.split('/');
24
+ if (kind === 'knowledge' && rest2.length > 0) {
25
+ return { scheme: URI_SCHEME, kind: 'knowledge', id: decodeURIComponent(rest2.join('/')) };
26
+ }
27
+ if (kind === 'template' && rest2.length > 0) {
28
+ return { scheme: URI_SCHEME, kind: 'template', id: decodeURIComponent(rest2.join('/')) };
29
+ }
30
+ if (kind === 'docs' && rest2.length > 0) {
31
+ return {
32
+ scheme: URI_SCHEME,
33
+ kind: 'docs',
34
+ path: rest2.map(decodeURIComponent).join('/'),
35
+ };
36
+ }
37
+ return { scheme: URI_SCHEME, kind: 'unknown' };
38
+ }
@@ -0,0 +1,55 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { type ISharkcraftInspection } from '@shrkcrft/inspector';
3
+ import { type IMcpServerConfig } from './mcp-server-config.js';
4
+ import type { IToolDefinition, McpGateResolver } from './tool-definition.js';
5
+ export interface StartMcpServerOptions {
6
+ /** Working directory for SharkCraft project detection. */
7
+ cwd?: string;
8
+ /** Alias for cwd. If both are given, projectRoot wins. */
9
+ projectRoot?: string;
10
+ verbose?: boolean;
11
+ /** Watch sharkcraft/ for changes and emit resources/list_changed. */
12
+ watch?: boolean;
13
+ /**
14
+ * Transport selection.
15
+ * - 'stdio' (default) wires stdin/stdout (Claude Code style).
16
+ * - 'http' starts a Streamable-HTTP server on host/port.
17
+ */
18
+ transport?: 'stdio' | 'http';
19
+ /** HTTP host (when transport='http'). */
20
+ host?: string;
21
+ /** HTTP port (when transport='http'). */
22
+ port?: number;
23
+ /**
24
+ * Tier gate resolver. When provided, every CallTool invocation
25
+ * is consulted against the gate before the tool's handler runs. A
26
+ * non-null return blocks the call with the structured not-enabled
27
+ * error (mirrors the CLI behavior). Pass `null` for an open server.
28
+ */
29
+ gateResolver?: McpGateResolver;
30
+ }
31
+ export interface CreateSharkcraftServerOptions extends IMcpServerConfig {
32
+ /** Alias for cwd. If both are given, projectRoot wins. */
33
+ projectRoot?: string;
34
+ /** See {@link StartMcpServerOptions.gateResolver}. */
35
+ gateResolver?: McpGateResolver;
36
+ }
37
+ interface ServerState {
38
+ config: IMcpServerConfig;
39
+ inspection: ISharkcraftInspection | null;
40
+ toolsByName: Map<string, IToolDefinition>;
41
+ /** Optional tier-gate resolver. */
42
+ gateResolver?: McpGateResolver;
43
+ }
44
+ /**
45
+ * Resolve which directory the MCP server should treat as the target project.
46
+ * Priority: explicit option > SHARKCRAFT_PROJECT_ROOT env > process.cwd().
47
+ */
48
+ export declare function resolveTargetRoot(optionCwd: string | undefined, optionProjectRoot: string | undefined, env?: Record<string, string | undefined>): string;
49
+ export declare function createSharkcraftServer(config: CreateSharkcraftServerOptions): {
50
+ server: Server;
51
+ state: ServerState;
52
+ };
53
+ export declare function startMcpServer(options?: StartMcpServerOptions): Promise<void>;
54
+ export {};
55
+ //# sourceMappingURL=create-mcp-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-mcp-server.d.ts","sourceRoot":"","sources":["../../src/server/create-mcp-server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAQnE,OAAO,EAAqB,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEpF,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,eAAe,EAEf,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAK9B,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC7B,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC;AAED,MAAM,WAAW,6BAA8B,SAAQ,gBAAgB;IACrE,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC;AAED,UAAU,WAAW;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACzC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC1C,mCAAmC;IACnC,YAAY,CAAC,EAAE,eAAe,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,MAAM,CAIR;AAqBD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,6BAA6B,GAAG;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;CACpB,CAqHA;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA0EvF"}
@@ -0,0 +1,209 @@
1
+ import * as nodePath from 'node:path';
2
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
5
+ import { inspectSharkcraft } from '@shrkcrft/inspector';
6
+ import { initTokenizer } from '@shrkcrft/context';
7
+ import { MCP_SERVER_NAME, MCP_SERVER_VERSION, } from "./mcp-server-config.js";
8
+ import { ALL_TOOLS } from "../tools/index.js";
9
+ import { validateToolInput } from "./tool-input-validators.js";
10
+ import { buildResourceList, readResource } from "../resources/index.js";
11
+ /**
12
+ * Resolve which directory the MCP server should treat as the target project.
13
+ * Priority: explicit option > SHARKCRAFT_PROJECT_ROOT env > process.cwd().
14
+ */
15
+ export function resolveTargetRoot(optionCwd, optionProjectRoot, env = process.env) {
16
+ const raw = optionProjectRoot ?? optionCwd ?? env.SHARKCRAFT_PROJECT_ROOT ?? process.cwd();
17
+ return nodePath.resolve(raw);
18
+ }
19
+ async function loadInspection(state) {
20
+ if (state.inspection)
21
+ return state.inspection;
22
+ state.inspection = await inspectSharkcraft({ cwd: state.config.cwd });
23
+ return state.inspection;
24
+ }
25
+ function toolResponseToCallResult(response) {
26
+ const content = [];
27
+ if (response.text)
28
+ content.push({ type: 'text', text: response.text });
29
+ if (response.data !== undefined) {
30
+ content.push({ type: 'text', text: JSON.stringify(response.data, null, 2) });
31
+ }
32
+ if (content.length === 0)
33
+ content.push({ type: 'text', text: '(empty)' });
34
+ return { content, isError: response.isError ?? false };
35
+ }
36
+ export function createSharkcraftServer(config) {
37
+ const resolvedCwd = resolveTargetRoot(config.cwd, config.projectRoot);
38
+ const effectiveConfig = {
39
+ name: config.name,
40
+ version: config.version,
41
+ cwd: resolvedCwd,
42
+ verbose: config.verbose,
43
+ };
44
+ const state = {
45
+ config: effectiveConfig,
46
+ inspection: null,
47
+ toolsByName: new Map(ALL_TOOLS.map((t) => [t.name, t])),
48
+ ...(config.gateResolver ? { gateResolver: config.gateResolver } : {}),
49
+ };
50
+ const server = new Server({ name: effectiveConfig.name, version: effectiveConfig.version }, {
51
+ capabilities: {
52
+ tools: {},
53
+ resources: { listChanged: true },
54
+ },
55
+ });
56
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
57
+ tools: ALL_TOOLS.map((t) => ({
58
+ name: t.name,
59
+ description: t.description,
60
+ inputSchema: t.inputSchema,
61
+ })),
62
+ }));
63
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
64
+ const name = request.params.name;
65
+ const args = (request.params.arguments ?? {});
66
+ const tool = state.toolsByName.get(name);
67
+ if (!tool) {
68
+ return {
69
+ content: [{ type: 'text', text: `Unknown tool: ${name}` }],
70
+ isError: true,
71
+ };
72
+ }
73
+ // Tier gate. When the host wires a gateResolver, an
74
+ // experimental tool refuses with the same structured error the
75
+ // CLI emits. Bootstrap tools (no `cliCommand` field) always
76
+ // pass through.
77
+ if (state.gateResolver) {
78
+ const decision = state.gateResolver(tool);
79
+ if (decision) {
80
+ const body = {
81
+ schema: 'sharkcraft.surface.not-enabled.v1',
82
+ command: decision.command,
83
+ tier: 'experimental',
84
+ reason: decision.reason ??
85
+ `MCP tool ${name} is gated: its CLI sibling \`${decision.command}\` is experimental and not enabled.`,
86
+ enableCommand: `shrk surface enable ${decision.command}`,
87
+ explainCommand: `shrk surface explain ${decision.command}`,
88
+ };
89
+ return {
90
+ content: [
91
+ { type: 'text', text: body.reason },
92
+ { type: 'text', text: JSON.stringify(body, null, 2) },
93
+ ],
94
+ isError: true,
95
+ };
96
+ }
97
+ }
98
+ const validation = validateToolInput(name, args);
99
+ if (!validation.ok) {
100
+ return {
101
+ content: [
102
+ {
103
+ type: 'text',
104
+ text: `Invalid input for "${name}": ${validation.failure.message}`,
105
+ },
106
+ {
107
+ type: 'text',
108
+ text: JSON.stringify({ issues: validation.failure.issues }, null, 2),
109
+ },
110
+ ],
111
+ isError: true,
112
+ };
113
+ }
114
+ try {
115
+ const inspection = await loadInspection(state);
116
+ const response = await tool.handler(validation.data, { inspection, cwd: state.config.cwd });
117
+ return toolResponseToCallResult(response);
118
+ }
119
+ catch (e) {
120
+ const message = e instanceof Error ? e.message : String(e);
121
+ return {
122
+ content: [{ type: 'text', text: `Tool "${name}" failed: ${message}` }],
123
+ isError: true,
124
+ };
125
+ }
126
+ });
127
+ server.setRequestHandler(ListResourcesRequestSchema, async () => {
128
+ const inspection = await loadInspection(state);
129
+ return { resources: buildResourceList(inspection) };
130
+ });
131
+ server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
132
+ const inspection = await loadInspection(state);
133
+ const result = readResource(inspection, request.params.uri);
134
+ if (!result.ok) {
135
+ throw new Error(result.error);
136
+ }
137
+ return { contents: result.contents };
138
+ });
139
+ return { server, state };
140
+ }
141
+ export async function startMcpServer(options = {}) {
142
+ const cwd = resolveTargetRoot(options.cwd, options.projectRoot);
143
+ const verbose = options.verbose ?? false;
144
+ // Best-effort upgrade from the estimator to gpt-tokenizer. Failure leaves
145
+ // the estimator active — the server still serves requests.
146
+ if (process.env.SHARKCRAFT_NO_REAL_TOKENIZER !== '1') {
147
+ initTokenizer().catch(() => undefined);
148
+ }
149
+ const { server, state } = createSharkcraftServer({
150
+ name: MCP_SERVER_NAME,
151
+ version: MCP_SERVER_VERSION,
152
+ cwd,
153
+ verbose,
154
+ ...(options.gateResolver ? { gateResolver: options.gateResolver } : {}),
155
+ });
156
+ // Pre-warm inspection so the first tools/call is fast.
157
+ loadInspection(state).catch(() => undefined);
158
+ if (verbose) {
159
+ process.stderr.write(`[mcp] SharkCraft MCP server starting (cwd=${cwd})\n`);
160
+ process.stderr.write(`[mcp] Tools (${ALL_TOOLS.length}): ${ALL_TOOLS.map((t) => t.name).join(', ')}\n`);
161
+ }
162
+ // Optional watch — invalidates the inspection cache and notifies clients.
163
+ let watcher = null;
164
+ if (options.watch) {
165
+ const { startSharkcraftWatcher } = await import("./sharkcraft-watcher.js");
166
+ watcher = startSharkcraftWatcher({
167
+ cwd,
168
+ onChange: async () => {
169
+ state.inspection = null;
170
+ try {
171
+ await server.sendResourceListChanged();
172
+ if (verbose)
173
+ process.stderr.write('[mcp] resources/list_changed sent\n');
174
+ }
175
+ catch (e) {
176
+ if (verbose) {
177
+ process.stderr.write(`[mcp] notify failed: ${e.message}\n`);
178
+ }
179
+ }
180
+ },
181
+ log: (line) => verbose && process.stderr.write(`[mcp:watch] ${line}\n`),
182
+ });
183
+ }
184
+ const transportKind = options.transport ?? 'stdio';
185
+ if (transportKind === 'http') {
186
+ const { startHttpServer } = await import("./http-transport.js");
187
+ const handle = await startHttpServer({
188
+ server,
189
+ host: options.host,
190
+ port: options.port,
191
+ log: (line) => verbose && process.stderr.write(line + '\n'),
192
+ });
193
+ // Keep process alive until SIGINT/SIGTERM, then close.
194
+ const stop = async () => {
195
+ watcher?.stop();
196
+ await handle.close();
197
+ process.exit(0);
198
+ };
199
+ process.on('SIGINT', () => void stop());
200
+ process.on('SIGTERM', () => void stop());
201
+ // Always announce the URL on stderr so the user knows where to connect.
202
+ process.stderr.write(`[mcp] http endpoint: ${handle.url}\n`);
203
+ return;
204
+ }
205
+ const transport = new StdioServerTransport();
206
+ await server.connect(transport);
207
+ if (verbose)
208
+ process.stderr.write('[mcp] connected via stdio\n');
209
+ }