@vibesdotdev/mcp 0.0.0-stage → 1.0.0-rc.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 (602) hide show
  1. package/LICENSE +18 -0
  2. package/README.md +96 -2
  3. package/dist/adapters/auth-middleware.d.ts +68 -0
  4. package/dist/adapters/auth-middleware.d.ts.map +1 -0
  5. package/dist/adapters/auth-middleware.js +161 -0
  6. package/dist/adapters/auth-middleware.js.map +1 -0
  7. package/dist/adapters/compatibility.d.ts +20 -0
  8. package/dist/adapters/compatibility.d.ts.map +1 -0
  9. package/dist/adapters/compatibility.js +57 -0
  10. package/dist/adapters/compatibility.js.map +1 -0
  11. package/dist/adapters/host-context.consumer.d.ts +12 -0
  12. package/dist/adapters/host-context.consumer.d.ts.map +1 -0
  13. package/dist/adapters/host-context.consumer.js +10 -0
  14. package/dist/adapters/host-context.consumer.js.map +1 -0
  15. package/dist/adapters/host-context.d.ts +32 -0
  16. package/dist/adapters/host-context.d.ts.map +1 -0
  17. package/dist/adapters/host-context.js +17 -0
  18. package/dist/adapters/host-context.js.map +1 -0
  19. package/dist/adapters/index.d.ts +12 -0
  20. package/dist/adapters/index.d.ts.map +1 -0
  21. package/dist/adapters/index.js +13 -0
  22. package/dist/adapters/index.js.map +1 -0
  23. package/dist/adapters/mcp/ambient-envelope.d.ts +26 -0
  24. package/dist/adapters/mcp/ambient-envelope.d.ts.map +1 -0
  25. package/dist/adapters/mcp/ambient-envelope.js +70 -0
  26. package/dist/adapters/mcp/ambient-envelope.js.map +1 -0
  27. package/dist/adapters/mcp/catalog.d.ts +15 -0
  28. package/dist/adapters/mcp/catalog.d.ts.map +1 -0
  29. package/dist/adapters/mcp/catalog.js +26 -0
  30. package/dist/adapters/mcp/catalog.js.map +1 -0
  31. package/dist/adapters/mcp/connection-identity.d.ts +81 -0
  32. package/dist/adapters/mcp/connection-identity.d.ts.map +1 -0
  33. package/dist/adapters/mcp/connection-identity.js +114 -0
  34. package/dist/adapters/mcp/connection-identity.js.map +1 -0
  35. package/dist/adapters/mcp/context.d.ts +137 -0
  36. package/dist/adapters/mcp/context.d.ts.map +1 -0
  37. package/dist/adapters/mcp/context.js +230 -0
  38. package/dist/adapters/mcp/context.js.map +1 -0
  39. package/dist/adapters/mcp/formatters.d.ts +41 -0
  40. package/dist/adapters/mcp/formatters.d.ts.map +1 -0
  41. package/dist/adapters/mcp/formatters.js +102 -0
  42. package/dist/adapters/mcp/formatters.js.map +1 -0
  43. package/dist/adapters/mcp/from-api-endpoint.d.ts +59 -0
  44. package/dist/adapters/mcp/from-api-endpoint.d.ts.map +1 -0
  45. package/dist/adapters/mcp/from-api-endpoint.js +206 -0
  46. package/dist/adapters/mcp/from-api-endpoint.js.map +1 -0
  47. package/dist/adapters/mcp/generation-contract.d.ts +5 -0
  48. package/dist/adapters/mcp/generation-contract.d.ts.map +1 -0
  49. package/dist/adapters/mcp/generation-contract.js +34 -0
  50. package/dist/adapters/mcp/generation-contract.js.map +1 -0
  51. package/dist/adapters/mcp/host-registry.d.ts +159 -0
  52. package/dist/adapters/mcp/host-registry.d.ts.map +1 -0
  53. package/dist/adapters/mcp/host-registry.js +237 -0
  54. package/dist/adapters/mcp/host-registry.js.map +1 -0
  55. package/dist/adapters/mcp/index.d.ts +12 -0
  56. package/dist/adapters/mcp/index.d.ts.map +1 -0
  57. package/dist/adapters/mcp/index.js +17 -0
  58. package/dist/adapters/mcp/index.js.map +1 -0
  59. package/dist/adapters/mcp/isolated-notice.d.ts +111 -0
  60. package/dist/adapters/mcp/isolated-notice.d.ts.map +1 -0
  61. package/dist/adapters/mcp/isolated-notice.js +217 -0
  62. package/dist/adapters/mcp/isolated-notice.js.map +1 -0
  63. package/dist/adapters/mcp/json-rpc.d.ts +16 -0
  64. package/dist/adapters/mcp/json-rpc.d.ts.map +1 -0
  65. package/dist/adapters/mcp/json-rpc.js +32 -0
  66. package/dist/adapters/mcp/json-rpc.js.map +1 -0
  67. package/dist/adapters/mcp/local-origin.d.ts +18 -0
  68. package/dist/adapters/mcp/local-origin.d.ts.map +1 -0
  69. package/dist/adapters/mcp/local-origin.js +37 -0
  70. package/dist/adapters/mcp/local-origin.js.map +1 -0
  71. package/dist/adapters/mcp/logging/mcp-cloud.descriptor.d.ts +11 -0
  72. package/dist/adapters/mcp/logging/mcp-cloud.descriptor.d.ts.map +1 -0
  73. package/dist/adapters/mcp/logging/mcp-cloud.descriptor.js +21 -0
  74. package/dist/adapters/mcp/logging/mcp-cloud.descriptor.js.map +1 -0
  75. package/dist/adapters/mcp/logging/mcp-http.descriptor.d.ts +10 -0
  76. package/dist/adapters/mcp/logging/mcp-http.descriptor.d.ts.map +1 -0
  77. package/dist/adapters/mcp/logging/mcp-http.descriptor.js +20 -0
  78. package/dist/adapters/mcp/logging/mcp-http.descriptor.js.map +1 -0
  79. package/dist/adapters/mcp/logging/mcp-server.descriptor.d.ts +9 -0
  80. package/dist/adapters/mcp/logging/mcp-server.descriptor.d.ts.map +1 -0
  81. package/dist/adapters/mcp/logging/mcp-server.descriptor.js +25 -0
  82. package/dist/adapters/mcp/logging/mcp-server.descriptor.js.map +1 -0
  83. package/dist/adapters/mcp/logging/mcp-stdio.descriptor.d.ts +10 -0
  84. package/dist/adapters/mcp/logging/mcp-stdio.descriptor.d.ts.map +1 -0
  85. package/dist/adapters/mcp/logging/mcp-stdio.descriptor.js +20 -0
  86. package/dist/adapters/mcp/logging/mcp-stdio.descriptor.js.map +1 -0
  87. package/dist/adapters/mcp/mcp-http-session.d.ts +140 -0
  88. package/dist/adapters/mcp/mcp-http-session.d.ts.map +1 -0
  89. package/dist/adapters/mcp/mcp-http-session.js +797 -0
  90. package/dist/adapters/mcp/mcp-http-session.js.map +1 -0
  91. package/dist/adapters/mcp/mcp-wire-name.d.ts +9 -0
  92. package/dist/adapters/mcp/mcp-wire-name.d.ts.map +1 -0
  93. package/dist/adapters/mcp/mcp-wire-name.js +52 -0
  94. package/dist/adapters/mcp/mcp-wire-name.js.map +1 -0
  95. package/dist/adapters/mcp/projection-doctor.d.ts +101 -0
  96. package/dist/adapters/mcp/projection-doctor.d.ts.map +1 -0
  97. package/dist/adapters/mcp/projection-doctor.js +285 -0
  98. package/dist/adapters/mcp/projection-doctor.js.map +1 -0
  99. package/dist/adapters/mcp/projection.d.ts +36 -0
  100. package/dist/adapters/mcp/projection.d.ts.map +1 -0
  101. package/dist/adapters/mcp/projection.js +136 -0
  102. package/dist/adapters/mcp/projection.js.map +1 -0
  103. package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.d.ts +113 -0
  104. package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.d.ts.map +1 -0
  105. package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.js +15 -0
  106. package/dist/adapters/mcp/prompts/continuity-wake.prompt.descriptor.js.map +1 -0
  107. package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.d.ts +113 -0
  108. package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.d.ts.map +1 -0
  109. package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.js +18 -0
  110. package/dist/adapters/mcp/prompts/empty-tool-kind.prompt.descriptor.js.map +1 -0
  111. package/dist/adapters/mcp/prompts/index.d.ts +113 -0
  112. package/dist/adapters/mcp/prompts/index.d.ts.map +1 -0
  113. package/dist/adapters/mcp/prompts/index.js +24 -0
  114. package/dist/adapters/mcp/prompts/index.js.map +1 -0
  115. package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.d.ts +114 -0
  116. package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.d.ts.map +1 -0
  117. package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.js +37 -0
  118. package/dist/adapters/mcp/prompts/isolated-runtime.prompt.descriptor.js.map +1 -0
  119. package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.d.ts +113 -0
  120. package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.d.ts.map +1 -0
  121. package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.js +20 -0
  122. package/dist/adapters/mcp/prompts/local-tools.prompt.descriptor.js.map +1 -0
  123. package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.d.ts +113 -0
  124. package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.d.ts.map +1 -0
  125. package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.js +20 -0
  126. package/dist/adapters/mcp/prompts/max-tools.prompt.descriptor.js.map +1 -0
  127. package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.d.ts +114 -0
  128. package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.d.ts.map +1 -0
  129. package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.js +21 -0
  130. package/dist/adapters/mcp/prompts/private-runtime.prompt.descriptor.js.map +1 -0
  131. package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.d.ts +113 -0
  132. package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.d.ts.map +1 -0
  133. package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.js +19 -0
  134. package/dist/adapters/mcp/prompts/registration-failure.prompt.descriptor.js.map +1 -0
  135. package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.d.ts +113 -0
  136. package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.d.ts.map +1 -0
  137. package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.js +18 -0
  138. package/dist/adapters/mcp/prompts/required-checklist.prompt.descriptor.js.map +1 -0
  139. package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.d.ts +113 -0
  140. package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.d.ts.map +1 -0
  141. package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.js +19 -0
  142. package/dist/adapters/mcp/prompts/required-tools-missing.prompt.descriptor.js.map +1 -0
  143. package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.d.ts +113 -0
  144. package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.d.ts.map +1 -0
  145. package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.js +18 -0
  146. package/dist/adapters/mcp/prompts/unknown-client.prompt.descriptor.js.map +1 -0
  147. package/dist/adapters/mcp/request-context.d.ts +28 -0
  148. package/dist/adapters/mcp/request-context.d.ts.map +1 -0
  149. package/dist/adapters/mcp/request-context.js +49 -0
  150. package/dist/adapters/mcp/request-context.js.map +1 -0
  151. package/dist/adapters/mcp/roster-announcer.d.ts +3 -0
  152. package/dist/adapters/mcp/roster-announcer.d.ts.map +1 -0
  153. package/dist/adapters/mcp/roster-announcer.js +22 -0
  154. package/dist/adapters/mcp/roster-announcer.js.map +1 -0
  155. package/dist/adapters/mcp/sampling-context.d.ts +12 -0
  156. package/dist/adapters/mcp/sampling-context.d.ts.map +1 -0
  157. package/dist/adapters/mcp/sampling-context.js +30 -0
  158. package/dist/adapters/mcp/sampling-context.js.map +1 -0
  159. package/dist/adapters/mcp/sampling.d.ts +17 -0
  160. package/dist/adapters/mcp/sampling.d.ts.map +1 -0
  161. package/dist/adapters/mcp/sampling.js +43 -0
  162. package/dist/adapters/mcp/sampling.js.map +1 -0
  163. package/dist/adapters/mcp/schemas/index.d.ts +37 -0
  164. package/dist/adapters/mcp/schemas/index.d.ts.map +1 -0
  165. package/dist/adapters/mcp/schemas/index.js +5 -0
  166. package/dist/adapters/mcp/schemas/index.js.map +1 -0
  167. package/dist/adapters/mcp/schemas/tool-selection.d.ts +12 -0
  168. package/dist/adapters/mcp/schemas/tool-selection.d.ts.map +1 -0
  169. package/dist/adapters/mcp/schemas/tool-selection.js +2 -0
  170. package/dist/adapters/mcp/schemas/tool-selection.js.map +1 -0
  171. package/dist/adapters/mcp/serve-identity.d.ts +64 -0
  172. package/dist/adapters/mcp/serve-identity.d.ts.map +1 -0
  173. package/dist/adapters/mcp/serve-identity.js +220 -0
  174. package/dist/adapters/mcp/serve-identity.js.map +1 -0
  175. package/dist/adapters/mcp/server.consumer.d.ts +5 -0
  176. package/dist/adapters/mcp/server.consumer.d.ts.map +1 -0
  177. package/dist/adapters/mcp/server.consumer.js +300 -0
  178. package/dist/adapters/mcp/server.consumer.js.map +1 -0
  179. package/dist/adapters/mcp/server.d.ts +56 -0
  180. package/dist/adapters/mcp/server.d.ts.map +1 -0
  181. package/dist/adapters/mcp/server.js +1423 -0
  182. package/dist/adapters/mcp/server.js.map +1 -0
  183. package/dist/adapters/mcp/stale-body.consumer.d.ts +85 -0
  184. package/dist/adapters/mcp/stale-body.consumer.d.ts.map +1 -0
  185. package/dist/adapters/mcp/stale-body.consumer.js +183 -0
  186. package/dist/adapters/mcp/stale-body.consumer.js.map +1 -0
  187. package/dist/adapters/mcp/startup-refusal.d.ts +8 -0
  188. package/dist/adapters/mcp/startup-refusal.d.ts.map +1 -0
  189. package/dist/adapters/mcp/startup-refusal.js +141 -0
  190. package/dist/adapters/mcp/startup-refusal.js.map +1 -0
  191. package/dist/adapters/mcp/stdio-relay.d.ts +232 -0
  192. package/dist/adapters/mcp/stdio-relay.d.ts.map +1 -0
  193. package/dist/adapters/mcp/stdio-relay.js +1169 -0
  194. package/dist/adapters/mcp/stdio-relay.js.map +1 -0
  195. package/dist/adapters/mcp/tool-audit-live.d.ts +109 -0
  196. package/dist/adapters/mcp/tool-audit-live.d.ts.map +1 -0
  197. package/dist/adapters/mcp/tool-audit-live.js +538 -0
  198. package/dist/adapters/mcp/tool-audit-live.js.map +1 -0
  199. package/dist/adapters/mcp/tool-audit.d.ts +44 -0
  200. package/dist/adapters/mcp/tool-audit.d.ts.map +1 -0
  201. package/dist/adapters/mcp/tool-audit.js +168 -0
  202. package/dist/adapters/mcp/tool-audit.js.map +1 -0
  203. package/dist/adapters/mcp/tool-catalog.d.ts +179 -0
  204. package/dist/adapters/mcp/tool-catalog.d.ts.map +1 -0
  205. package/dist/adapters/mcp/tool-catalog.js +330 -0
  206. package/dist/adapters/mcp/tool-catalog.js.map +1 -0
  207. package/dist/adapters/mcp/tool-selection.d.ts +77 -0
  208. package/dist/adapters/mcp/tool-selection.d.ts.map +1 -0
  209. package/dist/adapters/mcp/tool-selection.js +266 -0
  210. package/dist/adapters/mcp/tool-selection.js.map +1 -0
  211. package/dist/adapters/mcp/transport-registry.d.ts +5 -0
  212. package/dist/adapters/mcp/transport-registry.d.ts.map +1 -0
  213. package/dist/adapters/mcp/transport-registry.js +13 -0
  214. package/dist/adapters/mcp/transport-registry.js.map +1 -0
  215. package/dist/adapters/mcp/trust-tag.d.ts +69 -0
  216. package/dist/adapters/mcp/trust-tag.d.ts.map +1 -0
  217. package/dist/adapters/mcp/trust-tag.js +120 -0
  218. package/dist/adapters/mcp/trust-tag.js.map +1 -0
  219. package/dist/adapters/mcp/vibes-types.d.ts +115 -0
  220. package/dist/adapters/mcp/vibes-types.d.ts.map +1 -0
  221. package/dist/adapters/mcp/vibes-types.js +7 -0
  222. package/dist/adapters/mcp/vibes-types.js.map +1 -0
  223. package/dist/adapters/mcp/web-handler.d.ts +49 -0
  224. package/dist/adapters/mcp/web-handler.d.ts.map +1 -0
  225. package/dist/adapters/mcp/web-handler.js +129 -0
  226. package/dist/adapters/mcp/web-handler.js.map +1 -0
  227. package/dist/adapters/session-id.d.ts +3 -0
  228. package/dist/adapters/session-id.d.ts.map +1 -0
  229. package/dist/adapters/session-id.js +42 -0
  230. package/dist/adapters/session-id.js.map +1 -0
  231. package/dist/adapters/transport-bun-http.d.ts +39 -0
  232. package/dist/adapters/transport-bun-http.d.ts.map +1 -0
  233. package/dist/adapters/transport-bun-http.js +42 -0
  234. package/dist/adapters/transport-bun-http.js.map +1 -0
  235. package/dist/adapters/types.d.ts +135 -0
  236. package/dist/adapters/types.d.ts.map +1 -0
  237. package/dist/adapters/types.js +2 -0
  238. package/dist/adapters/types.js.map +1 -0
  239. package/dist/adapters/web-compatibility.d.ts +6 -0
  240. package/dist/adapters/web-compatibility.d.ts.map +1 -0
  241. package/dist/adapters/web-compatibility.js +13 -0
  242. package/dist/adapters/web-compatibility.js.map +1 -0
  243. package/dist/adapters/zod-mcp.d.ts +139 -0
  244. package/dist/adapters/zod-mcp.d.ts.map +1 -0
  245. package/dist/adapters/zod-mcp.js +617 -0
  246. package/dist/adapters/zod-mcp.js.map +1 -0
  247. package/dist/cli/mcp/audit/dev.audit.tools.descriptor.d.ts +15 -0
  248. package/dist/cli/mcp/audit/dev.audit.tools.descriptor.d.ts.map +1 -0
  249. package/dist/cli/mcp/audit/dev.audit.tools.descriptor.js +58 -0
  250. package/dist/cli/mcp/audit/dev.audit.tools.descriptor.js.map +1 -0
  251. package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.d.ts +6 -0
  252. package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.d.ts.map +1 -0
  253. package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.js +180 -0
  254. package/dist/cli/mcp/audit/dev.audit.tools.impl.consumer.js.map +1 -0
  255. package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.d.ts +22 -0
  256. package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.d.ts.map +1 -0
  257. package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.js +19 -0
  258. package/dist/cli/mcp/lifecycle/dev.mcp.restart.descriptor.js.map +1 -0
  259. package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.d.ts +23 -0
  260. package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.d.ts.map +1 -0
  261. package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.js +41 -0
  262. package/dist/cli/mcp/lifecycle/dev.mcp.restart.impl.consumer.js.map +1 -0
  263. package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.d.ts +75 -0
  264. package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.d.ts.map +1 -0
  265. package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.js +84 -0
  266. package/dist/cli/mcp/lifecycle/dev.mcp.serve.descriptor.js.map +1 -0
  267. package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.d.ts +35 -0
  268. package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.d.ts.map +1 -0
  269. package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.js +28 -0
  270. package/dist/cli/mcp/lifecycle/dev.mcp.start.descriptor.js.map +1 -0
  271. package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.d.ts +11 -0
  272. package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.d.ts.map +1 -0
  273. package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.js +47 -0
  274. package/dist/cli/mcp/lifecycle/dev.mcp.start.impl.consumer.js.map +1 -0
  275. package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.d.ts +18 -0
  276. package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.d.ts.map +1 -0
  277. package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.js +18 -0
  278. package/dist/cli/mcp/lifecycle/dev.mcp.stop.descriptor.js.map +1 -0
  279. package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.d.ts +12 -0
  280. package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.d.ts.map +1 -0
  281. package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.js +17 -0
  282. package/dist/cli/mcp/lifecycle/dev.mcp.stop.impl.consumer.js.map +1 -0
  283. package/dist/cli/mcp/management/dev.mcp.install.descriptor.d.ts +41 -0
  284. package/dist/cli/mcp/management/dev.mcp.install.descriptor.d.ts.map +1 -0
  285. package/dist/cli/mcp/management/dev.mcp.install.descriptor.js +49 -0
  286. package/dist/cli/mcp/management/dev.mcp.install.descriptor.js.map +1 -0
  287. package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.d.ts +16 -0
  288. package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.d.ts.map +1 -0
  289. package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.js +244 -0
  290. package/dist/cli/mcp/management/dev.mcp.install.impl.consumer.js.map +1 -0
  291. package/dist/cli/mcp/management/dev.mcp.list.descriptor.d.ts +22 -0
  292. package/dist/cli/mcp/management/dev.mcp.list.descriptor.d.ts.map +1 -0
  293. package/dist/cli/mcp/management/dev.mcp.list.descriptor.js +24 -0
  294. package/dist/cli/mcp/management/dev.mcp.list.descriptor.js.map +1 -0
  295. package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.d.ts +29 -0
  296. package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.d.ts.map +1 -0
  297. package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.js +127 -0
  298. package/dist/cli/mcp/management/dev.mcp.list.impl.consumer.js.map +1 -0
  299. package/dist/cli/mcp/management/dev.mcp.status.descriptor.d.ts +48 -0
  300. package/dist/cli/mcp/management/dev.mcp.status.descriptor.d.ts.map +1 -0
  301. package/dist/cli/mcp/management/dev.mcp.status.descriptor.js +56 -0
  302. package/dist/cli/mcp/management/dev.mcp.status.descriptor.js.map +1 -0
  303. package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.d.ts +9 -0
  304. package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.d.ts.map +1 -0
  305. package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.js +253 -0
  306. package/dist/cli/mcp/management/dev.mcp.status.impl.consumer.js.map +1 -0
  307. package/dist/cli/mcp/management/install-helpers.d.ts +26 -0
  308. package/dist/cli/mcp/management/install-helpers.d.ts.map +1 -0
  309. package/dist/cli/mcp/management/install-helpers.js +95 -0
  310. package/dist/cli/mcp/management/install-helpers.js.map +1 -0
  311. package/dist/cli/mcp/management/process-audit.impl.consumer.d.ts +38 -0
  312. package/dist/cli/mcp/management/process-audit.impl.consumer.d.ts.map +1 -0
  313. package/dist/cli/mcp/management/process-audit.impl.consumer.js +145 -0
  314. package/dist/cli/mcp/management/process-audit.impl.consumer.js.map +1 -0
  315. package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.d.ts +21 -0
  316. package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.d.ts.map +1 -0
  317. package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.js +82 -0
  318. package/dist/cli/mcp/management/rules-debt-summary.impl.consumer.js.map +1 -0
  319. package/dist/cli/mcp/management/status-doctor.d.ts +22 -0
  320. package/dist/cli/mcp/management/status-doctor.d.ts.map +1 -0
  321. package/dist/cli/mcp/management/status-doctor.js +153 -0
  322. package/dist/cli/mcp/management/status-doctor.js.map +1 -0
  323. package/dist/cli/mcp/schemas/status-doctor.d.ts +75 -0
  324. package/dist/cli/mcp/schemas/status-doctor.d.ts.map +1 -0
  325. package/dist/cli/mcp/schemas/status-doctor.js +2 -0
  326. package/dist/cli/mcp/schemas/status-doctor.js.map +1 -0
  327. package/dist/cli/mcp/support/host-port.d.ts +31 -0
  328. package/dist/cli/mcp/support/host-port.d.ts.map +1 -0
  329. package/dist/cli/mcp/support/host-port.js +31 -0
  330. package/dist/cli/mcp/support/host-port.js.map +1 -0
  331. package/dist/cli/mcp/support/server-process.impl.consumer.d.ts +24 -0
  332. package/dist/cli/mcp/support/server-process.impl.consumer.d.ts.map +1 -0
  333. package/dist/cli/mcp/support/server-process.impl.consumer.js +86 -0
  334. package/dist/cli/mcp/support/server-process.impl.consumer.js.map +1 -0
  335. package/dist/cli/mcp/support/status-doctor.d.ts +33 -0
  336. package/dist/cli/mcp/support/status-doctor.d.ts.map +1 -0
  337. package/dist/cli/mcp/support/status-doctor.js +104 -0
  338. package/dist/cli/mcp/support/status-doctor.js.map +1 -0
  339. package/dist/cli/print.d.ts +12 -0
  340. package/dist/cli/print.d.ts.map +1 -0
  341. package/dist/cli/print.js +25 -0
  342. package/dist/cli/print.js.map +1 -0
  343. package/dist/cli/surface-mcp/client-connection-identity.consumer.d.ts +19 -0
  344. package/dist/cli/surface-mcp/client-connection-identity.consumer.d.ts.map +1 -0
  345. package/dist/cli/surface-mcp/client-connection-identity.consumer.js +53 -0
  346. package/dist/cli/surface-mcp/client-connection-identity.consumer.js.map +1 -0
  347. package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.d.ts +7 -0
  348. package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.d.ts.map +1 -0
  349. package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.js +345 -0
  350. package/dist/cli/surface-mcp/dev.mcp.serve.impl.cloud.js.map +1 -0
  351. package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.d.ts +12 -0
  352. package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.d.ts.map +1 -0
  353. package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.js +657 -0
  354. package/dist/cli/surface-mcp/dev.mcp.serve.impl.consumer.js.map +1 -0
  355. package/dist/cli/surface-mcp/local-dev-flag.d.ts +24 -0
  356. package/dist/cli/surface-mcp/local-dev-flag.d.ts.map +1 -0
  357. package/dist/cli/surface-mcp/local-dev-flag.js +37 -0
  358. package/dist/cli/surface-mcp/local-dev-flag.js.map +1 -0
  359. package/dist/cli/surface-mcp/shared-host-startup.d.ts +14 -0
  360. package/dist/cli/surface-mcp/shared-host-startup.d.ts.map +1 -0
  361. package/dist/cli/surface-mcp/shared-host-startup.js +46 -0
  362. package/dist/cli/surface-mcp/shared-host-startup.js.map +1 -0
  363. package/dist/cli/surface-mcp/stdio-relay-transport.d.ts +2 -0
  364. package/dist/cli/surface-mcp/stdio-relay-transport.d.ts.map +1 -0
  365. package/dist/cli/surface-mcp/stdio-relay-transport.js +21 -0
  366. package/dist/cli/surface-mcp/stdio-relay-transport.js.map +1 -0
  367. package/dist/cli/surface-mcp/teardown.d.ts +17 -0
  368. package/dist/cli/surface-mcp/teardown.d.ts.map +1 -0
  369. package/dist/cli/surface-mcp/teardown.js +28 -0
  370. package/dist/cli/surface-mcp/teardown.js.map +1 -0
  371. package/dist/client.d.ts +49 -0
  372. package/dist/client.d.ts.map +1 -0
  373. package/dist/client.js +131 -0
  374. package/dist/client.js.map +1 -0
  375. package/dist/config/load.d.ts +6 -0
  376. package/dist/config/load.d.ts.map +1 -0
  377. package/dist/config/load.js +18 -0
  378. package/dist/config/load.js.map +1 -0
  379. package/dist/config/mcp.config.descriptor.d.ts +108 -0
  380. package/dist/config/mcp.config.descriptor.d.ts.map +1 -0
  381. package/dist/config/mcp.config.descriptor.js +63 -0
  382. package/dist/config/mcp.config.descriptor.js.map +1 -0
  383. package/dist/docs/mcp.docs.descriptor.d.ts +4 -0
  384. package/dist/docs/mcp.docs.descriptor.d.ts.map +1 -0
  385. package/dist/docs/mcp.docs.descriptor.js +44 -0
  386. package/dist/docs/mcp.docs.descriptor.js.map +1 -0
  387. package/dist/docs/prompts.docs.descriptor.d.ts +4 -0
  388. package/dist/docs/prompts.docs.descriptor.d.ts.map +1 -0
  389. package/dist/docs/prompts.docs.descriptor.js +130 -0
  390. package/dist/docs/prompts.docs.descriptor.js.map +1 -0
  391. package/dist/docs/resources.docs.descriptor.d.ts +4 -0
  392. package/dist/docs/resources.docs.descriptor.d.ts.map +1 -0
  393. package/dist/docs/resources.docs.descriptor.js +390 -0
  394. package/dist/docs/resources.docs.descriptor.js.map +1 -0
  395. package/dist/docs/server.docs.descriptor.d.ts +4 -0
  396. package/dist/docs/server.docs.descriptor.d.ts.map +1 -0
  397. package/dist/docs/server.docs.descriptor.js +383 -0
  398. package/dist/docs/server.docs.descriptor.js.map +1 -0
  399. package/dist/docs/tools.docs.descriptor.d.ts +4 -0
  400. package/dist/docs/tools.docs.descriptor.d.ts.map +1 -0
  401. package/dist/docs/tools.docs.descriptor.js +316 -0
  402. package/dist/docs/tools.docs.descriptor.js.map +1 -0
  403. package/dist/harness-identity.descriptors.d.ts +11 -0
  404. package/dist/harness-identity.descriptors.d.ts.map +1 -0
  405. package/dist/harness-identity.descriptors.js +41 -0
  406. package/dist/harness-identity.descriptors.js.map +1 -0
  407. package/dist/index.d.ts +36 -0
  408. package/dist/index.d.ts.map +1 -0
  409. package/dist/index.js +36 -0
  410. package/dist/index.js.map +1 -0
  411. package/dist/kinds/harness-identity.kind.d.ts +3 -0
  412. package/dist/kinds/harness-identity.kind.d.ts.map +1 -0
  413. package/dist/kinds/harness-identity.kind.js +16 -0
  414. package/dist/kinds/harness-identity.kind.js.map +1 -0
  415. package/dist/kinds/sampling.kind.d.ts +15 -0
  416. package/dist/kinds/sampling.kind.d.ts.map +1 -0
  417. package/dist/kinds/sampling.kind.js +24 -0
  418. package/dist/kinds/sampling.kind.js.map +1 -0
  419. package/dist/lifecycle-repeat.d.ts +23 -0
  420. package/dist/lifecycle-repeat.d.ts.map +1 -0
  421. package/dist/lifecycle-repeat.js +21 -0
  422. package/dist/lifecycle-repeat.js.map +1 -0
  423. package/dist/mcp/dev.mcp.descriptor.d.ts +18 -0
  424. package/dist/mcp/dev.mcp.descriptor.d.ts.map +1 -0
  425. package/dist/mcp/dev.mcp.descriptor.js +18 -0
  426. package/dist/mcp/dev.mcp.descriptor.js.map +1 -0
  427. package/dist/mcp/index.d.ts +20 -0
  428. package/dist/mcp/index.d.ts.map +1 -0
  429. package/dist/mcp/index.js +19 -0
  430. package/dist/mcp/index.js.map +1 -0
  431. package/dist/mcp/mcp.plugin.d.ts +9 -0
  432. package/dist/mcp/mcp.plugin.d.ts.map +1 -0
  433. package/dist/mcp/mcp.plugin.js +59 -0
  434. package/dist/mcp/mcp.plugin.js.map +1 -0
  435. package/dist/mcp-client.plugin.d.ts +4 -0
  436. package/dist/mcp-client.plugin.d.ts.map +1 -0
  437. package/dist/mcp-client.plugin.js +13 -0
  438. package/dist/mcp-client.plugin.js.map +1 -0
  439. package/dist/mcp.client.descriptor.d.ts +27 -0
  440. package/dist/mcp.client.descriptor.d.ts.map +1 -0
  441. package/dist/mcp.client.descriptor.js +7 -0
  442. package/dist/mcp.client.descriptor.js.map +1 -0
  443. package/dist/mcp.consumer.plugin.d.ts +4 -0
  444. package/dist/mcp.consumer.plugin.d.ts.map +1 -0
  445. package/dist/mcp.consumer.plugin.js +19 -0
  446. package/dist/mcp.consumer.plugin.js.map +1 -0
  447. package/dist/mcp.runtime.plugin.d.ts +10 -0
  448. package/dist/mcp.runtime.plugin.d.ts.map +1 -0
  449. package/dist/mcp.runtime.plugin.js +40 -0
  450. package/dist/mcp.runtime.plugin.js.map +1 -0
  451. package/dist/root-state.d.ts +3 -0
  452. package/dist/root-state.d.ts.map +1 -0
  453. package/dist/root-state.js +3 -0
  454. package/dist/root-state.js.map +1 -0
  455. package/dist/schemas/api-endpoint.d.ts +12 -0
  456. package/dist/schemas/api-endpoint.d.ts.map +1 -0
  457. package/dist/schemas/api-endpoint.js +11 -0
  458. package/dist/schemas/api-endpoint.js.map +1 -0
  459. package/dist/schemas/audit.d.ts +172 -0
  460. package/dist/schemas/audit.d.ts.map +1 -0
  461. package/dist/schemas/audit.js +82 -0
  462. package/dist/schemas/audit.js.map +1 -0
  463. package/dist/schemas/harness-identity.d.ts +41 -0
  464. package/dist/schemas/harness-identity.d.ts.map +1 -0
  465. package/dist/schemas/harness-identity.js +19 -0
  466. package/dist/schemas/harness-identity.js.map +1 -0
  467. package/dist/schemas/host-adapters.d.ts +14 -0
  468. package/dist/schemas/host-adapters.d.ts.map +1 -0
  469. package/dist/schemas/host-adapters.js +7 -0
  470. package/dist/schemas/host-adapters.js.map +1 -0
  471. package/dist/schemas/projection.d.ts +10 -0
  472. package/dist/schemas/projection.d.ts.map +1 -0
  473. package/dist/schemas/projection.js +9 -0
  474. package/dist/schemas/projection.js.map +1 -0
  475. package/dist/schemas/tool.d.ts +8 -0
  476. package/dist/schemas/tool.d.ts.map +1 -0
  477. package/dist/schemas/tool.js +8 -0
  478. package/dist/schemas/tool.js.map +1 -0
  479. package/dist/surface-mcp/build-provenance.d.ts +67 -0
  480. package/dist/surface-mcp/build-provenance.d.ts.map +1 -0
  481. package/dist/surface-mcp/build-provenance.js +287 -0
  482. package/dist/surface-mcp/build-provenance.js.map +1 -0
  483. package/dist/surface-mcp/crash-reporting.d.ts +28 -0
  484. package/dist/surface-mcp/crash-reporting.d.ts.map +1 -0
  485. package/dist/surface-mcp/crash-reporting.js +41 -0
  486. package/dist/surface-mcp/crash-reporting.js.map +1 -0
  487. package/dist/surface-mcp/executable-freshness-watch.d.ts +89 -0
  488. package/dist/surface-mcp/executable-freshness-watch.d.ts.map +1 -0
  489. package/dist/surface-mcp/executable-freshness-watch.js +225 -0
  490. package/dist/surface-mcp/executable-freshness-watch.js.map +1 -0
  491. package/dist/surface-mcp/host-provenance-banner.d.ts +49 -0
  492. package/dist/surface-mcp/host-provenance-banner.d.ts.map +1 -0
  493. package/dist/surface-mcp/host-provenance-banner.js +135 -0
  494. package/dist/surface-mcp/host-provenance-banner.js.map +1 -0
  495. package/dist/surface-mcp/index.d.ts +51 -0
  496. package/dist/surface-mcp/index.d.ts.map +1 -0
  497. package/dist/surface-mcp/index.js +92 -0
  498. package/dist/surface-mcp/index.js.map +1 -0
  499. package/dist/surface-mcp/local-tools-bootstrap.d.ts +36 -0
  500. package/dist/surface-mcp/local-tools-bootstrap.d.ts.map +1 -0
  501. package/dist/surface-mcp/local-tools-bootstrap.js +43 -0
  502. package/dist/surface-mcp/local-tools-bootstrap.js.map +1 -0
  503. package/dist/surface-mcp/mcp-serve.plugin.d.ts +9 -0
  504. package/dist/surface-mcp/mcp-serve.plugin.d.ts.map +1 -0
  505. package/dist/surface-mcp/mcp-serve.plugin.js +24 -0
  506. package/dist/surface-mcp/mcp-serve.plugin.js.map +1 -0
  507. package/dist/surface-mcp/project-config.d.ts +35 -0
  508. package/dist/surface-mcp/project-config.d.ts.map +1 -0
  509. package/dist/surface-mcp/project-config.js +74 -0
  510. package/dist/surface-mcp/project-config.js.map +1 -0
  511. package/dist/surface-mcp/serve-lifecycle.d.ts +102 -0
  512. package/dist/surface-mcp/serve-lifecycle.d.ts.map +1 -0
  513. package/dist/surface-mcp/serve-lifecycle.js +343 -0
  514. package/dist/surface-mcp/serve-lifecycle.js.map +1 -0
  515. package/dist/surface-mcp/session-bridge.d.ts +18 -0
  516. package/dist/surface-mcp/session-bridge.d.ts.map +1 -0
  517. package/dist/surface-mcp/session-bridge.js +26 -0
  518. package/dist/surface-mcp/session-bridge.js.map +1 -0
  519. package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.d.ts +13 -0
  520. package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.d.ts.map +1 -0
  521. package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.js +13 -0
  522. package/dist/surface-mcp/subscriptions/session.bound.workspace.descriptor.js.map +1 -0
  523. package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.d.ts +11 -0
  524. package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.d.ts.map +1 -0
  525. package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.js +36 -0
  526. package/dist/surface-mcp/subscriptions/session.bound.workspace.impl.consumer.js.map +1 -0
  527. package/dist/surface-mcp/workspace-warning.d.ts +16 -0
  528. package/dist/surface-mcp/workspace-warning.d.ts.map +1 -0
  529. package/dist/surface-mcp/workspace-warning.js +44 -0
  530. package/dist/surface-mcp/workspace-warning.js.map +1 -0
  531. package/dist/svelte/index.d.ts +12 -0
  532. package/dist/svelte/index.d.ts.map +1 -0
  533. package/dist/svelte/index.js +11 -0
  534. package/dist/svelte/mcp-svelte.plugin.d.ts +10 -0
  535. package/dist/svelte/mcp-svelte.plugin.d.ts.map +1 -0
  536. package/dist/svelte/mcp-svelte.plugin.js +24 -0
  537. package/dist/svelte/tool-widgets/VibesContextToolCard.svelte +91 -0
  538. package/dist/svelte/tool-widgets/VibesContextToolCard.svelte.d.ts +9 -0
  539. package/dist/svelte/tool-widgets/VibesContextToolCard.svelte.d.ts.map +1 -0
  540. package/dist/svelte/tool-widgets/index.d.ts +3 -0
  541. package/dist/svelte/tool-widgets/index.d.ts.map +1 -0
  542. package/dist/svelte/tool-widgets/index.js +2 -0
  543. package/dist/svelte/tool-widgets/summary.d.ts +48 -0
  544. package/dist/svelte/tool-widgets/summary.d.ts.map +1 -0
  545. package/dist/svelte/tool-widgets/summary.js +117 -0
  546. package/dist/tools/vibes-context/schemas.d.ts +85 -0
  547. package/dist/tools/vibes-context/schemas.d.ts.map +1 -0
  548. package/dist/tools/vibes-context/schemas.js +76 -0
  549. package/dist/tools/vibes-context/schemas.js.map +1 -0
  550. package/dist/tools/vibes-context/vibes-context.descriptor.d.ts +4 -0
  551. package/dist/tools/vibes-context/vibes-context.descriptor.d.ts.map +1 -0
  552. package/dist/tools/vibes-context/vibes-context.descriptor.js +30 -0
  553. package/dist/tools/vibes-context/vibes-context.descriptor.js.map +1 -0
  554. package/dist/tools/vibes-context/vibes-context.impl.d.ts +34 -0
  555. package/dist/tools/vibes-context/vibes-context.impl.d.ts.map +1 -0
  556. package/dist/tools/vibes-context/vibes-context.impl.js +207 -0
  557. package/dist/tools/vibes-context/vibes-context.impl.js.map +1 -0
  558. package/dist/tui/index.d.ts +4 -0
  559. package/dist/tui/index.d.ts.map +1 -0
  560. package/dist/tui/index.js +4 -0
  561. package/dist/tui/index.js.map +1 -0
  562. package/dist/tui/mcp-health.d.ts +7 -0
  563. package/dist/tui/mcp-health.d.ts.map +1 -0
  564. package/dist/tui/mcp-health.js +16 -0
  565. package/dist/tui/mcp-health.js.map +1 -0
  566. package/dist/tui/mcp-tui.plugin.d.ts +3 -0
  567. package/dist/tui/mcp-tui.plugin.d.ts.map +1 -0
  568. package/dist/tui/mcp-tui.plugin.js +18 -0
  569. package/dist/tui/mcp-tui.plugin.js.map +1 -0
  570. package/dist/tui/mcp.tui-app.descriptor.d.ts +4 -0
  571. package/dist/tui/mcp.tui-app.descriptor.d.ts.map +1 -0
  572. package/dist/tui/mcp.tui-app.descriptor.js +19 -0
  573. package/dist/tui/mcp.tui-app.descriptor.js.map +1 -0
  574. package/dist/tui/mcp.tui-app.impl.consumer.d.ts +4 -0
  575. package/dist/tui/mcp.tui-app.impl.consumer.d.ts.map +1 -0
  576. package/dist/tui/mcp.tui-app.impl.consumer.js +48 -0
  577. package/dist/tui/mcp.tui-app.impl.consumer.js.map +1 -0
  578. package/dist/tui/mcp.tui-state.descriptor.d.ts +8 -0
  579. package/dist/tui/mcp.tui-state.descriptor.d.ts.map +1 -0
  580. package/dist/tui/mcp.tui-state.descriptor.js +37 -0
  581. package/dist/tui/mcp.tui-state.descriptor.js.map +1 -0
  582. package/dist/tui/mcp.tui-state.impl.consumer.d.ts +5 -0
  583. package/dist/tui/mcp.tui-state.impl.consumer.d.ts.map +1 -0
  584. package/dist/tui/mcp.tui-state.impl.consumer.js +97 -0
  585. package/dist/tui/mcp.tui-state.impl.consumer.js.map +1 -0
  586. package/dist/tui/mcp.tui-state.key.d.ts +45 -0
  587. package/dist/tui/mcp.tui-state.key.d.ts.map +1 -0
  588. package/dist/tui/mcp.tui-state.key.js +25 -0
  589. package/dist/tui/mcp.tui-state.key.js.map +1 -0
  590. package/dist/types.core.d.ts +25 -0
  591. package/dist/types.core.d.ts.map +1 -0
  592. package/dist/types.core.js +8 -0
  593. package/dist/types.core.js.map +1 -0
  594. package/dist/types.d.ts +71 -0
  595. package/dist/types.d.ts.map +1 -0
  596. package/dist/types.js +2 -0
  597. package/dist/types.js.map +1 -0
  598. package/dist/types.registry.d.ts +93 -0
  599. package/dist/types.registry.d.ts.map +1 -0
  600. package/dist/types.registry.js +32 -0
  601. package/dist/types.registry.js.map +1 -0
  602. package/package.json +323 -4
@@ -0,0 +1,230 @@
1
+ /**
2
+ * MCP Tool Context Types and Helpers
3
+ *
4
+ * Tool-runtime context with CLI/AI/auth/PM runtime fields.
5
+ * These types compose tool-runtime context for MCP tool execution.
6
+ */
7
+ import * as z from 'zod/v4';
8
+ import { ToolError, ToolErrorCode } from '@vibesdotdev/tools/errors';
9
+ // ============================================================================
10
+ // MCP Context Input Validation Schemas
11
+ // ============================================================================
12
+ /** Valid session ID: UUID v4 format */
13
+ const SessionIdSchema = z
14
+ .string()
15
+ .regex(/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i, 'Invalid session ID format: expected UUID v4')
16
+ .max(36, 'Session ID exceeds maximum length (36 characters)');
17
+ /** Valid project ID: alphanumeric, hyphens, underscores; 1-64 chars */
18
+ const ProjectIdSchema = z
19
+ .string()
20
+ .regex(/^[a-zA-Z0-9_-]+$/, 'Invalid project ID format: only alphanumeric, hyphens, and underscores allowed')
21
+ .min(1, 'Project ID cannot be empty')
22
+ .max(64, 'Project ID exceeds maximum length (64 characters)');
23
+ /** Valid cookie name: printable ASCII except control chars, semicolon, comma, equals, space, tab */
24
+ const CookieNameSchema = z
25
+ .string()
26
+ .regex(/^[\x21-\x7E&&[^;\s,=]]+$/, 'Invalid cookie name: contains forbidden characters')
27
+ .max(128, 'Cookie name exceeds maximum length (128 characters)');
28
+ /** Valid cookie value: printable ASCII except control chars, semicolon, comma, space, tab */
29
+ const CookieValueSchema = z
30
+ .string()
31
+ .regex(/^[\x21-\x7E&&[^;\s,]]*$/, 'Invalid cookie value: contains forbidden characters')
32
+ .max(4096, 'Cookie value exceeds maximum length (4096 characters)');
33
+ /** Valid header value: printable ASCII and spaces; 1-8192 chars (HTTP spec limit) */
34
+ const HeaderValueSchema = z
35
+ .string()
36
+ .regex(/^[\x20-\x7E]*$/, 'Invalid header value: contains non-printable characters')
37
+ .max(8192, 'Header value exceeds maximum length (8192 characters)');
38
+ /** String-keyed record whose values are validated by the reader, not by the type. */
39
+ const McpRecordSchema = z.record(z.string(), z.unknown());
40
+ /** A string, or undefined for anything else. */
41
+ const OptionalStringSchema = z.string().optional().catch(undefined);
42
+ /** Transport named by the MCP environment; anything unrecognised is stdio. */
43
+ const TransportSchema = z.enum(['stdio', 'http']).catch('stdio');
44
+ /** Validation error result for structured error reporting */
45
+ const ValidationErrorSchema = z.object({
46
+ field: z.enum(['mcp-session-id', 'x-project-id', 'cookie-name', 'cookie-value']),
47
+ issue: z.string()
48
+ });
49
+ /**
50
+ * Validates a session ID and returns typed errors if invalid.
51
+ */
52
+ function validateSessionId(value) {
53
+ const result = SessionIdSchema.safeParse(value);
54
+ if (result.success) {
55
+ return { valid: true, value: result.data };
56
+ }
57
+ return {
58
+ valid: false,
59
+ errors: result.error.issues.map((issue) => ({
60
+ field: 'mcp-session-id',
61
+ issue: issue.message
62
+ }))
63
+ };
64
+ }
65
+ /**
66
+ * Validates a project ID and returns typed errors if invalid.
67
+ */
68
+ function validateProjectId(value) {
69
+ const result = ProjectIdSchema.safeParse(value);
70
+ if (result.success) {
71
+ return { valid: true, value: result.data };
72
+ }
73
+ return {
74
+ valid: false,
75
+ errors: result.error.issues.map((issue) => ({
76
+ field: 'x-project-id',
77
+ issue: issue.message
78
+ }))
79
+ };
80
+ }
81
+ /**
82
+ * Validates cookie name/value pairs and returns typed errors.
83
+ */
84
+ function validateCookies(cookies) {
85
+ const errors = [];
86
+ for (const [name, value] of Object.entries(cookies)) {
87
+ const nameResult = CookieNameSchema.safeParse(name);
88
+ if (!nameResult.success) {
89
+ errors.push(...nameResult.error.issues.map((issue) => ({
90
+ field: 'cookie-name',
91
+ issue: `Invalid cookie name: ${issue.message}`
92
+ })));
93
+ }
94
+ const valueResult = CookieValueSchema.safeParse(value);
95
+ if (!valueResult.success) {
96
+ errors.push(...valueResult.error.issues.map((issue) => ({
97
+ field: 'cookie-value',
98
+ issue: `Invalid cookie value: ${issue.message}`
99
+ })));
100
+ }
101
+ }
102
+ if (errors.length > 0) {
103
+ return { valid: false, errors };
104
+ }
105
+ return { valid: true };
106
+ }
107
+ /**
108
+ * Validates a header value and returns typed errors if invalid.
109
+ */
110
+ function validateHeaderValue(headerName, value) {
111
+ if (value === undefined) {
112
+ return { valid: true, value: undefined };
113
+ }
114
+ if (!z.string().safeParse(value).success) {
115
+ return {
116
+ valid: false,
117
+ errors: [{ field: headerName, issue: 'Header value must be a string' }]
118
+ };
119
+ }
120
+ const result = HeaderValueSchema.safeParse(value);
121
+ if (result.success) {
122
+ return { valid: true, value: result.data };
123
+ }
124
+ return {
125
+ valid: false,
126
+ errors: result.error.issues.map((issue) => ({
127
+ field: headerName,
128
+ issue: issue.message
129
+ }))
130
+ };
131
+ }
132
+ /**
133
+ * Throws a structured ToolError for validation failures.
134
+ */
135
+ function throwValidationError(errors) {
136
+ const summary = errors.map((e) => `${e.field}: ${e.issue}`).join('; ');
137
+ throw new ToolError(`MCP context validation failed: ${summary}`, ToolErrorCode.CONTEXT_INVALID, {
138
+ operation: 'prepareMcpToolExecution',
139
+ validationErrors: errors,
140
+ timestamp: new Date().toISOString()
141
+ }, 'Check that session ID is a valid UUID, project ID uses allowed characters, and headers/cookies are within size limits');
142
+ }
143
+ /**
144
+ * Resolve workspace path from context
145
+ */
146
+ function resolveWorkspaceFromContext(context, requestWorkspace) {
147
+ if (requestWorkspace)
148
+ return requestWorkspace;
149
+ if (context.workspacePath)
150
+ return context.workspacePath;
151
+ if (context.options?.workspace)
152
+ return context.options.workspace;
153
+ return null;
154
+ }
155
+ /**
156
+ * Prepare MCP tool execution from CLI context and HTTP request
157
+ * @deprecated Use prepareMcpToolExecutionAsync instead
158
+ */
159
+ export function prepareMcpToolExecution(_cliContext, _request) {
160
+ throw new Error('prepareMcpToolExecution requires runtime - use prepareMcpToolExecutionAsync');
161
+ }
162
+ /**
163
+ * Async version that accepts runtime directly
164
+ * Validates headers, cookies, session ID, and project ID before use.
165
+ */
166
+ export function prepareMcpToolExecutionAsync(runtime, cliContext, request) {
167
+ const headers = request.headers ?? {};
168
+ const cookies = request.cookies ?? {};
169
+ const parsedEnvironment = McpRecordSchema.safeParse(cliContext.environment);
170
+ const environment = parsedEnvironment.success ? parsedEnvironment.data : undefined;
171
+ // Collect all validation errors
172
+ const allValidationErrors = [];
173
+ // Validate cookies first (before we read from them)
174
+ const cookieValidation = validateCookies(cookies);
175
+ if (!cookieValidation.valid) {
176
+ allValidationErrors.push(...cookieValidation.errors);
177
+ }
178
+ // Validate header values
179
+ const mcpSessionHeaderResult = validateHeaderValue('mcp-session-id', headers['mcp-session-id']);
180
+ if (!mcpSessionHeaderResult.valid) {
181
+ allValidationErrors.push(...mcpSessionHeaderResult.errors);
182
+ }
183
+ const xProjectIdHeaderResult = validateHeaderValue('x-project-id', headers['x-project-id']);
184
+ if (!xProjectIdHeaderResult.valid) {
185
+ allValidationErrors.push(...xProjectIdHeaderResult.errors);
186
+ }
187
+ // Extract raw values (now validated as safe strings)
188
+ const rawSessionId = request.sessionId ?? readHeaderValue(headers['mcp-session-id']) ?? cookies['mcp-session-id'];
189
+ const rawProjectId = request.projectId ?? readHeaderValue(headers['x-project-id']) ?? cookies['project-id'];
190
+ // Validate session ID if present
191
+ if (rawSessionId !== undefined && rawSessionId !== null && rawSessionId !== '') {
192
+ const sessionValidation = validateSessionId(rawSessionId);
193
+ if (!sessionValidation.valid) {
194
+ allValidationErrors.push(...sessionValidation.errors);
195
+ }
196
+ }
197
+ // Validate project ID if present
198
+ if (rawProjectId !== undefined && rawProjectId !== null && rawProjectId !== '') {
199
+ const projectValidation = validateProjectId(rawProjectId);
200
+ if (!projectValidation.valid) {
201
+ allValidationErrors.push(...projectValidation.errors);
202
+ }
203
+ }
204
+ // Throw structured error if any validations failed
205
+ if (allValidationErrors.length > 0) {
206
+ throwValidationError(allValidationErrors);
207
+ }
208
+ const requestWorkspace = OptionalStringSchema.parse(request.workspacePath);
209
+ const workspacePath = resolveWorkspaceFromContext(cliContext, requestWorkspace);
210
+ const mcpConfig = McpRecordSchema.safeParse(environment?.mcp);
211
+ const transport = TransportSchema.parse(mcpConfig.success ? mcpConfig.data.mode : undefined);
212
+ const projectIdFromEnv = OptionalStringSchema.parse(environment?.projectId);
213
+ return {
214
+ callId: request.toolCallId || generateCallId(),
215
+ runtime,
216
+ workspacePath,
217
+ transport,
218
+ sessionId: rawSessionId,
219
+ projectId: rawProjectId ?? projectIdFromEnv
220
+ };
221
+ }
222
+ function generateCallId() {
223
+ return `mcp_${Date.now()}_${Math.random().toString(36).slice(2, 11)}`;
224
+ }
225
+ function readHeaderValue(value) {
226
+ if (Array.isArray(value))
227
+ return value.length === 0 ? undefined : value[value.length - 1];
228
+ return OptionalStringSchema.parse(value);
229
+ }
230
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/adapters/mcp/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAkBrE,+EAA+E;AAC/E,uCAAuC;AACvC,+EAA+E;AAE/E,uCAAuC;AACvC,MAAM,eAAe,GAAG,CAAC;KACvB,MAAM,EAAE;KACR,KAAK,CACL,wEAAwE,EACxE,6CAA6C,CAC7C;KACA,GAAG,CAAC,EAAE,EAAE,mDAAmD,CAAC,CAAC;AAE/D,uEAAuE;AACvE,MAAM,eAAe,GAAG,CAAC;KACvB,MAAM,EAAE;KACR,KAAK,CACL,kBAAkB,EAClB,gFAAgF,CAChF;KACA,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC;KACpC,GAAG,CAAC,EAAE,EAAE,mDAAmD,CAAC,CAAC;AAE/D,oGAAoG;AACpG,MAAM,gBAAgB,GAAG,CAAC;KACxB,MAAM,EAAE;KACR,KAAK,CACL,0BAA0B,EAC1B,oDAAoD,CACpD;KACA,GAAG,CAAC,GAAG,EAAE,qDAAqD,CAAC,CAAC;AAElE,6FAA6F;AAC7F,MAAM,iBAAiB,GAAG,CAAC;KACzB,MAAM,EAAE;KACR,KAAK,CACL,yBAAyB,EACzB,qDAAqD,CACrD;KACA,GAAG,CAAC,IAAI,EAAE,uDAAuD,CAAC,CAAC;AAErE,qFAAqF;AACrF,MAAM,iBAAiB,GAAG,CAAC;KACzB,MAAM,EAAE;KACR,KAAK,CACL,gBAAgB,EAChB,yDAAyD,CACzD;KACA,GAAG,CAAC,IAAI,EAAE,uDAAuD,CAAC,CAAC;AAErE,qFAAqF;AACrF,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAG1D,gDAAgD;AAChD,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAEpE,8EAA8E;AAC9E,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAKjE,6DAA6D;AAC7D,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IAChF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;CACjB,CAAC,CAAC;AAGH;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO;QACN,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3C,KAAK,EAAE,gBAAgB;YACvB,KAAK,EAAE,KAAK,CAAC,OAAO;SACpB,CAAC,CAAC;KACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACvC,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO;QACN,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3C,KAAK,EAAE,cAAc;YACrB,KAAK,EAAE,KAAK,CAAC,OAAO;SACpB,CAAC,CAAC;KACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACvB,OAA+B;IAE/B,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,UAAU,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CACV,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,CAAC;gBAC3D,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,wBAAwB,KAAK,CAAC,OAAO,EAAE;aAC9C,CAAC,CAAC,CACH,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,CAAC,IAAI,CACV,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,CAAC;gBAC5D,KAAK,EAAE,cAAc;gBACrB,KAAK,EAAE,yBAAyB,KAAK,CAAC,OAAO,EAAE;aAC/C,CAAC,CAAC,CACH,CAAC;QACH,CAAC;IACF,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC3B,UAA6C,EAC7C,KAAkB;IAElB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;QAC1C,OAAO;YACN,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC;SACvE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,OAAO;QACN,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC3C,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,KAAK,CAAC,OAAO;SACpB,CAAC,CAAC;KACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAAyB;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,MAAM,IAAI,SAAS,CAClB,kCAAkC,OAAO,EAAE,EAC3C,aAAa,CAAC,eAAe,EAC7B;QACC,SAAS,EAAE,yBAAyB;QACpC,gBAAgB,EAAE,MAAM;QACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACnC,EACD,uHAAuH,CACvH,CAAC;AACH,CAAC;AA6HD;;GAEG;AACH,SAAS,2BAA2B,CACnC,OAA0B,EAC1B,gBAAyB;IAEzB,IAAI,gBAAgB;QAAE,OAAO,gBAAgB,CAAC;IAC9C,IAAI,OAAO,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC,aAAa,CAAC;IACxD,IAAI,OAAO,CAAC,OAAO,EAAE,SAAS;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IACjE,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACtC,WAA8B,EAC9B,QAAwB;IAExB,MAAM,IAAI,KAAK,CACd,6EAA6E,CAC7E,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC3C,OAAqB,EACrB,UAA6B,EAC7B,OAAuB;IAEvB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC,MAAM,iBAAiB,GAAG,eAAe,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC5E,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAEnF,gCAAgC;IAChC,MAAM,mBAAmB,GAAsB,EAAE,CAAC;IAElD,oDAAoD;IACpD,MAAM,gBAAgB,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC7B,mBAAmB,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,yBAAyB;IACzB,MAAM,sBAAsB,GAAG,mBAAmB,CACjD,gBAAgB,EAChB,OAAO,CAAC,gBAAgB,CAAC,CACzB,CAAC;IACF,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;QACnC,mBAAmB,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,sBAAsB,GAAG,mBAAmB,CACjD,cAAc,EACd,OAAO,CAAC,cAAc,CAAC,CACvB,CAAC;IACF,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;QACnC,mBAAmB,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED,qDAAqD;IACrD,MAAM,YAAY,GACjB,OAAO,CAAC,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9F,MAAM,YAAY,GACjB,OAAO,CAAC,SAAS,IAAI,eAAe,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;IAExF,iCAAiC;IACjC,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;QAChF,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC9B,mBAAmB,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;IACF,CAAC;IAED,iCAAiC;IACjC,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;QAChF,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAC1D,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC9B,mBAAmB,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;IACF,CAAC;IAED,mDAAmD;IACnD,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,2BAA2B,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAEhF,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE7F,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IAE5E,OAAO;QACN,MAAM,EAAE,OAAO,CAAC,UAAU,IAAI,cAAc,EAAE;QAC9C,OAAO;QACP,aAAa;QACb,SAAS;QACT,SAAS,EAAE,YAAY;QACvB,SAAS,EAAE,YAAY,IAAI,gBAAgB;KAC3C,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACtB,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,eAAe,CAAC,KAAoC;IAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC1F,OAAO,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * MCP Response Formatters
3
+ *
4
+ * Response formatter functions for MCP tool results.
5
+ */
6
+ import type { JsonObject } from '@vibesdotdev/kernel/schemas/json';
7
+ import type { McpToolResult } from '@vibesdotdev/mcp/types';
8
+ /**
9
+ * JSON Schema for tool input parameters
10
+ */
11
+ export interface McpInputSchema {
12
+ type: 'object';
13
+ properties?: JsonObject;
14
+ required?: string[];
15
+ additionalProperties?: boolean;
16
+ }
17
+ /**
18
+ * Response formatter function
19
+ * Converts arbitrary data into MCP-compatible tool result
20
+ */
21
+ export type McpResponseFormatter<TData = unknown> = (data: TData) => McpToolResult | Promise<McpToolResult>;
22
+ /**
23
+ * Default response formatter - converts data to JSON text
24
+ */
25
+ export declare const defaultFormatter: <TData>(data: TData) => McpToolResult;
26
+ /**
27
+ * Table formatter - formats array data as markdown table
28
+ */
29
+ export declare const tableFormatter: <T extends JsonObject>(items: T[], options?: {
30
+ title?: string;
31
+ emptyMessage?: string;
32
+ }) => McpToolResult;
33
+ /**
34
+ * List formatter - formats array as bulleted list
35
+ */
36
+ export declare const listFormatter: <T>(items: T[], options?: {
37
+ title?: string;
38
+ emptyMessage?: string;
39
+ itemFormatter?: (item: T) => string;
40
+ }) => McpToolResult;
41
+ //# sourceMappingURL=formatters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../../src/adapters/mcp/formatters.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAa,UAAU,EAAa,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAUD;;;GAGG;AACH,MAAM,MAAM,oBAAoB,CAAC,KAAK,GAAG,OAAO,IAAI,CACnD,IAAI,EAAE,KAAK,KACP,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,EAAE,MAAM,KAAK,KAAG,aAWrD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,UAAU,EAClD,OAAO,CAAC,EAAE,EACV,UAAS;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACjB,KACJ,aA6CF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAC9B,OAAO,CAAC,EAAE,EACV,UAAS;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;CAC/B,KACJ,aA+BF,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * MCP Response Formatters
3
+ *
4
+ * Response formatter functions for MCP tool results.
5
+ */
6
+ function isText(value) {
7
+ return typeof value === 'string';
8
+ }
9
+ function isNestedJson(value) {
10
+ return typeof value === 'object' && value !== null;
11
+ }
12
+ /**
13
+ * Default response formatter - converts data to JSON text
14
+ */
15
+ export const defaultFormatter = (data) => {
16
+ const text = isText(data) ? data : JSON.stringify(data, null, 2);
17
+ return {
18
+ content: [
19
+ {
20
+ type: 'text',
21
+ text
22
+ }
23
+ ]
24
+ };
25
+ };
26
+ /**
27
+ * Table formatter - formats array data as markdown table
28
+ */
29
+ export const tableFormatter = (items, options = {}) => {
30
+ if (!items || items.length === 0) {
31
+ return {
32
+ content: [
33
+ {
34
+ type: 'text',
35
+ text: options.emptyMessage || 'No results found'
36
+ }
37
+ ]
38
+ };
39
+ }
40
+ // Get all unique keys from items
41
+ const keys = Array.from(new Set(items.flatMap((item) => Object.keys(item))));
42
+ // Build markdown table
43
+ let table = '';
44
+ if (options.title) {
45
+ table += `## ${options.title}\n\n`;
46
+ }
47
+ // Header row
48
+ table += `| ${keys.join(' | ')} |\n`;
49
+ table += `| ${keys.map(() => '---').join(' | ')} |\n`;
50
+ // Data rows
51
+ for (const item of items) {
52
+ const values = keys.map((key) => {
53
+ const value = item[key];
54
+ if (value === null || value === undefined)
55
+ return '';
56
+ if (isNestedJson(value))
57
+ return JSON.stringify(value);
58
+ return String(value);
59
+ });
60
+ table += `| ${values.join(' | ')} |\n`;
61
+ }
62
+ return {
63
+ content: [
64
+ {
65
+ type: 'text',
66
+ text: table
67
+ }
68
+ ]
69
+ };
70
+ };
71
+ /**
72
+ * List formatter - formats array as bulleted list
73
+ */
74
+ export const listFormatter = (items, options = {}) => {
75
+ if (!items || items.length === 0) {
76
+ return {
77
+ content: [
78
+ {
79
+ type: 'text',
80
+ text: options.emptyMessage || 'No results found'
81
+ }
82
+ ]
83
+ };
84
+ }
85
+ const formatter = options.itemFormatter || ((item) => String(item));
86
+ let text = '';
87
+ if (options.title) {
88
+ text += `## ${options.title}\n\n`;
89
+ }
90
+ for (const item of items) {
91
+ text += `- ${formatter(item)}\n`;
92
+ }
93
+ return {
94
+ content: [
95
+ {
96
+ type: 'text',
97
+ text
98
+ }
99
+ ]
100
+ };
101
+ };
102
+ //# sourceMappingURL=formatters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../../src/adapters/mcp/formatters.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * MCP Tool Helper: fromApiEndpoint
3
+ *
4
+ * Creates an MCP tool that directly calls a Vibes API endpoint.
5
+ * Handles request transformation, authentication, and response formatting.
6
+ */
7
+ import type { McpTool } from './vibes-types.ts';
8
+ import type { McpToolContext } from './context.ts';
9
+ import { type JsonObject, type JsonValue } from '@vibesdotdev/kernel/schemas/json';
10
+ import type { McpInputSchema, McpResponseFormatter } from './formatters.ts';
11
+ import { type RequestBody } from '@vibesdotdev/client/schemas';
12
+ /**
13
+ * Request transformer - converts MCP args to API request options
14
+ */
15
+ export interface ApiRequestTransform {
16
+ /** Query parameters */
17
+ query?: JsonObject | ((args: JsonValue) => JsonObject);
18
+ /** URL path parameters */
19
+ params?: JsonObject | ((args: JsonValue) => JsonObject);
20
+ /** Request body */
21
+ body?: RequestBody | ((args: JsonValue) => RequestBody);
22
+ /** Additional headers */
23
+ headers?: Record<string, string> | ((args: JsonValue) => Record<string, string>);
24
+ }
25
+ /**
26
+ * Configuration for fromApiEndpoint helper
27
+ */
28
+ export interface FromApiEndpointConfig<TResponse = unknown> {
29
+ /** Tool name */
30
+ name: string;
31
+ /** Tool description */
32
+ description: string;
33
+ /** HTTP method */
34
+ method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
35
+ /** API endpoint path (e.g., '/api/knowledge') */
36
+ path: string | ((args: JsonValue, context: McpToolContext) => string);
37
+ /** Whether tool requires authentication */
38
+ auth?: boolean;
39
+ /** Input parameter schema */
40
+ input?: McpInputSchema;
41
+ /** Output schema for structured, machine-parseable results (June 2025 MCP spec) */
42
+ outputSchema?: {
43
+ type: 'object';
44
+ properties?: Record<string, JsonObject>;
45
+ required?: string[];
46
+ };
47
+ /** Request transformation */
48
+ transform?: {
49
+ /** Transform MCP args to API request options */
50
+ request?: (args: JsonValue, context: McpToolContext) => ApiRequestTransform;
51
+ /** Format API response for MCP */
52
+ response?: McpResponseFormatter<TResponse>;
53
+ };
54
+ }
55
+ /**
56
+ * Create an MCP tool from an API endpoint
57
+ */
58
+ export declare function fromApiEndpoint<TResponse = unknown>(config: FromApiEndpointConfig<TResponse>): McpTool;
59
+ //# sourceMappingURL=from-api-endpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-api-endpoint.d.ts","sourceRoot":"","sources":["../../../src/adapters/mcp/from-api-endpoint.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,OAAO,EAAoB,KAAK,UAAU,EAAE,KAAK,SAAS,EAAmB,MAAM,kCAAkC,CAAC;AAEtH,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,OAAO,EAAgF,KAAK,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAuB7I;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,uBAAuB;IACvB,KAAK,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,UAAU,CAAC,CAAC;IACvD,0BAA0B;IAC1B,MAAM,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,UAAU,CAAC,CAAC;IACxD,mBAAmB;IACnB,IAAI,CAAC,EAAE,WAAW,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,WAAW,CAAC,CAAC;IACxD,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACjF;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB,CAAC,SAAS,GAAG,OAAO;IACzD,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB;IAClB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,iDAAiD;IACjD,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,KAAK,MAAM,CAAC,CAAC;IACtE,2CAA2C;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,6BAA6B;IAC7B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,mFAAmF;IACnF,YAAY,CAAC,EAAE;QACd,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACxC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,6BAA6B;IAC7B,SAAS,CAAC,EAAE;QACX,gDAAgD;QAChD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,KAAK,mBAAmB,CAAC;QAC5E,kCAAkC;QAClC,QAAQ,CAAC,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;KAC3C,CAAC;CACF;AA4DD;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,GAAG,OAAO,EAClD,MAAM,EAAE,qBAAqB,CAAC,SAAS,CAAC,GACtC,OAAO,CA+HT"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * MCP Tool Helper: fromApiEndpoint
3
+ *
4
+ * Creates an MCP tool that directly calls a Vibes API endpoint.
5
+ * Handles request transformation, authentication, and response formatting.
6
+ */
7
+ import { ApiStatusSchema } from "../../schemas/api-endpoint.js";
8
+ import { CapabilityError, CaughtFailureSchema, isCapabilityError, settle, settleNow } from '@vibesdotdev/kernel';
9
+ import { JsonObjectSchema, JsonValueSchema } from '@vibesdotdev/kernel/schemas/json';
10
+ import { McpAuthError, McpToolError } from '@vibesdotdev/mcp/errors';
11
+ import { defaultFormatter } from "./formatters.js";
12
+ import { PathParamsSchema, QuerySchema, readClientRequestBody } from '@vibesdotdev/client/schemas';
13
+ function isClientLikeError(error) {
14
+ return error instanceof Error && error.name === 'ClientError';
15
+ }
16
+ /** The capability code an API status projects to. */
17
+ function capabilityCodeForStatus(status) {
18
+ if (status === 400 || status === 422)
19
+ return 'INVALID_INPUT';
20
+ if (status === 401)
21
+ return 'AUTH_REQUIRED';
22
+ if (status === 403)
23
+ return 'PERMISSION_DENIED';
24
+ if (status === 404)
25
+ return 'NOT_FOUND';
26
+ if (status === 409)
27
+ return 'CONFLICT';
28
+ if (status === 429)
29
+ return 'RATE_LIMITED';
30
+ if (status === 408 || status === 504)
31
+ return 'TIMEOUT';
32
+ if (status >= 500)
33
+ return 'UNAVAILABLE';
34
+ return 'INTERNAL';
35
+ }
36
+ function admitQuery(value) {
37
+ const parsed = QuerySchema.safeParse(value);
38
+ if (!parsed.success) {
39
+ throw new CapabilityError('the API query is invalid', 'INVALID_INPUT', { reason: 'mcp-api-query-invalid' });
40
+ }
41
+ return parsed.data;
42
+ }
43
+ function admitParams(value) {
44
+ const parsed = PathParamsSchema.safeParse(value);
45
+ if (!parsed.success) {
46
+ throw new CapabilityError('the API params are invalid', 'INVALID_INPUT', { reason: 'mcp-api-params-invalid' });
47
+ }
48
+ return parsed.data;
49
+ }
50
+ function isArgsFunction(value) {
51
+ return typeof value === 'function';
52
+ }
53
+ function isPathFunction(path) {
54
+ return typeof path === 'function';
55
+ }
56
+ function readJsonArgs(args) {
57
+ const parsed = JsonObjectSchema.safeParse(args);
58
+ if (!parsed.success) {
59
+ throw new CapabilityError('the API arguments are invalid', 'INVALID_INPUT', { reason: 'mcp-api-args-invalid' });
60
+ }
61
+ return parsed.data;
62
+ }
63
+ function schemaProperties(properties) {
64
+ const accepted = {};
65
+ for (const [key, value] of Object.entries(properties)) {
66
+ const parsed = JsonObjectSchema.safeParse(value);
67
+ if (parsed.success)
68
+ accepted[key] = parsed.data;
69
+ }
70
+ return accepted;
71
+ }
72
+ function toolInputSchema(input) {
73
+ if (!input) {
74
+ return { type: 'object', properties: {}, additionalProperties: true };
75
+ }
76
+ const schema = {
77
+ type: 'object',
78
+ properties: input.properties ? schemaProperties(input.properties) : {}
79
+ };
80
+ if (input.required)
81
+ schema.required = input.required;
82
+ if (input.additionalProperties !== undefined)
83
+ schema.additionalProperties = input.additionalProperties;
84
+ return schema;
85
+ }
86
+ /**
87
+ * Create an MCP tool from an API endpoint
88
+ */
89
+ export function fromApiEndpoint(config) {
90
+ const { name, description, method, path, auth = true, input, transform } = config;
91
+ return {
92
+ definition: {
93
+ name,
94
+ description,
95
+ inputSchema: toolInputSchema(input),
96
+ ...(config.outputSchema && { outputSchema: config.outputSchema })
97
+ },
98
+ requiresAuth: auth,
99
+ handler: async (context, args) => {
100
+ let queryArgs;
101
+ if (method === 'GET' || method === 'DELETE') {
102
+ const admittedArgs = settleNow(() => readJsonArgs(args));
103
+ if (!admittedArgs.ok) {
104
+ throw new McpToolError('the API arguments are invalid', name, {
105
+ code: 'INVALID_INPUT',
106
+ reason: 'mcp-api-args-invalid',
107
+ cause: CaughtFailureSchema.parse(admittedArgs.cause)
108
+ });
109
+ }
110
+ queryArgs = admittedArgs.value;
111
+ }
112
+ // Check authentication
113
+ if (auth && !context.user) {
114
+ throw new McpAuthError(`Tool '${name}' requires authentication`);
115
+ }
116
+ // Check API client availability
117
+ if (!context.api) {
118
+ throw new McpToolError('API client not available. Make sure MCP server is running with CLI context.', name);
119
+ }
120
+ const api = context.api;
121
+ const attempted = await settle(async () => {
122
+ let transformArgs = null;
123
+ if (transform?.request || isPathFunction(path)) {
124
+ const admitted = settleNow(() => JsonValueSchema.parse(args));
125
+ if (!admitted.ok) {
126
+ throw new McpToolError('the API request body is invalid', name, {
127
+ code: 'INVALID_INPUT',
128
+ reason: 'mcp-api-body-invalid',
129
+ cause: CaughtFailureSchema.parse(admitted.cause)
130
+ });
131
+ }
132
+ transformArgs = admitted.value;
133
+ }
134
+ const resolvedPath = isPathFunction(path) ? path(transformArgs, context) : path;
135
+ const requestOptions = {
136
+ method,
137
+ query: {},
138
+ params: {},
139
+ headers: {}
140
+ };
141
+ if (transform?.request) {
142
+ const transformed = transform.request(transformArgs, context);
143
+ if (transformed.query) {
144
+ const query = isArgsFunction(transformed.query)
145
+ ? transformed.query(transformArgs)
146
+ : transformed.query;
147
+ requestOptions.query = admitQuery(query);
148
+ }
149
+ if (transformed.params) {
150
+ const params = isArgsFunction(transformed.params)
151
+ ? transformed.params(transformArgs)
152
+ : transformed.params;
153
+ requestOptions.params = admitParams(params);
154
+ }
155
+ if (transformed.body !== undefined) {
156
+ const body = isArgsFunction(transformed.body)
157
+ ? transformed.body(transformArgs)
158
+ : transformed.body;
159
+ requestOptions.body = readClientRequestBody(body);
160
+ }
161
+ if (transformed.headers) {
162
+ requestOptions.headers = isArgsFunction(transformed.headers)
163
+ ? transformed.headers(transformArgs)
164
+ : transformed.headers;
165
+ }
166
+ }
167
+ else if (queryArgs) {
168
+ requestOptions.query = admitQuery(queryArgs);
169
+ }
170
+ else {
171
+ requestOptions.body = readClientRequestBody(args);
172
+ }
173
+ const response = await api.request(resolvedPath, requestOptions);
174
+ const formatter = transform?.response || defaultFormatter;
175
+ return await formatter(response);
176
+ });
177
+ if (attempted.ok)
178
+ return attempted.value;
179
+ const failure = attempted.cause;
180
+ if (failure instanceof McpAuthError || failure instanceof McpToolError)
181
+ throw failure;
182
+ const caught = CaughtFailureSchema.parse(failure);
183
+ if (isCapabilityError(caught) && caught.reason === 'client-body-invalid') {
184
+ throw new McpToolError('the API request body is invalid', name, {
185
+ code: 'INVALID_INPUT', reason: 'mcp-api-body-invalid', cause: caught
186
+ });
187
+ }
188
+ if (isCapabilityError(caught) && (caught.reason === 'mcp-api-query-invalid' || caught.reason === 'mcp-api-params-invalid' || caught.reason === 'mcp-api-args-invalid')) {
189
+ throw new McpToolError('the API request is invalid', name, {
190
+ code: 'INVALID_INPUT', reason: caught.reason, cause: caught
191
+ });
192
+ }
193
+ const status = isClientLikeError(failure) ? ApiStatusSchema.safeParse(failure.status) : undefined;
194
+ if (status?.success) {
195
+ throw new McpToolError(`the API refused the request (status ${status.data})`, name, {
196
+ code: capabilityCodeForStatus(status.data),
197
+ reason: 'mcp-api-refused',
198
+ details: { status: status.data },
199
+ cause: failure
200
+ });
201
+ }
202
+ throw new McpToolError('the API request failed', name, { reason: 'mcp-api-failed', cause: failure });
203
+ }
204
+ };
205
+ }
206
+ //# sourceMappingURL=from-api-endpoint.js.map