@sonordev/site-kit 4.2.3 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/agent-manifest.json +11 -1
  2. package/dist/AnalyticsProvider-WRAJE62B.js +31 -0
  3. package/dist/{AnalyticsProvider-VSTTYP4W.js.map → AnalyticsProvider-WRAJE62B.js.map} +1 -1
  4. package/dist/AnalyticsProvider-YZAOPVAY.mjs +10 -0
  5. package/dist/{AnalyticsProvider-NW3UZYL5.mjs.map → AnalyticsProvider-YZAOPVAY.mjs.map} +1 -1
  6. package/dist/ChatWidget-NMZGPP7A.js +20 -0
  7. package/dist/{ChatWidget-BJOE2OSI.js.map → ChatWidget-NMZGPP7A.js.map} +1 -1
  8. package/dist/ChatWidget-ZI34F7JU.mjs +11 -0
  9. package/dist/{ChatWidget-EWQ7LRD4.mjs.map → ChatWidget-ZI34F7JU.mjs.map} +1 -1
  10. package/dist/EngageWidget-2U4EN7OP.js +18 -0
  11. package/dist/{EngageWidget-CZMNLFWI.js.map → EngageWidget-2U4EN7OP.js.map} +1 -1
  12. package/dist/EngageWidget-NI2BN6GO.mjs +9 -0
  13. package/dist/{EngageWidget-F427CI6Y.mjs.map → EngageWidget-NI2BN6GO.mjs.map} +1 -1
  14. package/dist/{FileField-5RVBU3Z4.mjs → FileField-I4UICUJF.mjs} +5 -5
  15. package/dist/{FileField-5RVBU3Z4.mjs.map → FileField-I4UICUJF.mjs.map} +1 -1
  16. package/dist/{FileField-Y4ZA7DST.js → FileField-UI6DAB3K.js} +6 -6
  17. package/dist/{FileField-Y4ZA7DST.js.map → FileField-UI6DAB3K.js.map} +1 -1
  18. package/dist/{FormSpotlight-MAEV6SZK.js → FormSpotlight-LO4BU6FY.js} +15 -15
  19. package/dist/{FormSpotlight-MAEV6SZK.js.map → FormSpotlight-LO4BU6FY.js.map} +1 -1
  20. package/dist/{FormSpotlight-CJPI2MRJ.mjs → FormSpotlight-RGFZMYPT.mjs} +3 -3
  21. package/dist/{FormSpotlight-CJPI2MRJ.mjs.map → FormSpotlight-RGFZMYPT.mjs.map} +1 -1
  22. package/dist/{FormStage-D42NAHSN.js → FormStage-NT5ZAH5Y.js} +13 -13
  23. package/dist/{FormStage-D42NAHSN.js.map → FormStage-NT5ZAH5Y.js.map} +1 -1
  24. package/dist/{FormStage-Z7WW3DNA.mjs → FormStage-RBXMNWM3.mjs} +3 -3
  25. package/dist/{FormStage-Z7WW3DNA.mjs.map → FormStage-RBXMNWM3.mjs.map} +1 -1
  26. package/dist/ManagedForm-CJOFGQK6.mjs +14 -0
  27. package/dist/{ManagedForm-A7BROQIN.mjs.map → ManagedForm-CJOFGQK6.mjs.map} +1 -1
  28. package/dist/ManagedForm-MKV5RM54.js +23 -0
  29. package/dist/{ManagedForm-Z3Z5Z6OL.js.map → ManagedForm-MKV5RM54.js.map} +1 -1
  30. package/dist/{SignalCore-77UH6PZ4.mjs → SignalCore-B2ZSLEXI.mjs} +5 -5
  31. package/dist/{SignalCore-77UH6PZ4.mjs.map → SignalCore-B2ZSLEXI.mjs.map} +1 -1
  32. package/dist/{SignalCore-NA6TJFVE.js → SignalCore-IX4L2TYS.js} +11 -11
  33. package/dist/{SignalCore-NA6TJFVE.js.map → SignalCore-IX4L2TYS.js.map} +1 -1
  34. package/dist/SitemapSync-2LLNO24P.mjs +8 -0
  35. package/dist/{SitemapSync-EY33A6P4.mjs.map → SitemapSync-2LLNO24P.mjs.map} +1 -1
  36. package/dist/SitemapSync-B2CY2JYM.js +17 -0
  37. package/dist/{SitemapSync-62F6HVAW.js.map → SitemapSync-B2CY2JYM.js.map} +1 -1
  38. package/dist/analytics/index.js +9 -9
  39. package/dist/analytics/index.mjs +4 -4
  40. package/dist/{chunk-NEIUWAAL.js → chunk-2EA4DC2G.js} +5 -5
  41. package/dist/{chunk-NEIUWAAL.js.map → chunk-2EA4DC2G.js.map} +1 -1
  42. package/dist/chunk-2X5ZB5D7.mjs +6 -0
  43. package/dist/{chunk-XCFCG46K.mjs.map → chunk-2X5ZB5D7.mjs.map} +1 -1
  44. package/dist/{chunk-RDISSFEH.js → chunk-3AAFSXFC.js} +15 -15
  45. package/dist/{chunk-RDISSFEH.js.map → chunk-3AAFSXFC.js.map} +1 -1
  46. package/dist/{chunk-KL4MV6HK.mjs → chunk-3DFYFDGC.mjs} +3 -3
  47. package/dist/{chunk-KL4MV6HK.mjs.map → chunk-3DFYFDGC.mjs.map} +1 -1
  48. package/dist/{chunk-HVDKAR77.js → chunk-3KVG2PSJ.js} +7 -7
  49. package/dist/{chunk-HVDKAR77.js.map → chunk-3KVG2PSJ.js.map} +1 -1
  50. package/dist/{chunk-FZAAQE4Y.mjs → chunk-3ZD2XCLE.mjs} +4 -4
  51. package/dist/{chunk-FZAAQE4Y.mjs.map → chunk-3ZD2XCLE.mjs.map} +1 -1
  52. package/dist/{chunk-RRR6Y6Y5.mjs → chunk-5PBJ42NC.mjs} +4 -4
  53. package/dist/{chunk-RRR6Y6Y5.mjs.map → chunk-5PBJ42NC.mjs.map} +1 -1
  54. package/dist/{chunk-3P4HJAZA.mjs → chunk-5S735BSH.mjs} +4 -4
  55. package/dist/{chunk-3P4HJAZA.mjs.map → chunk-5S735BSH.mjs.map} +1 -1
  56. package/dist/{chunk-535HXGDU.mjs → chunk-6SN3ABID.mjs} +3 -3
  57. package/dist/{chunk-535HXGDU.mjs.map → chunk-6SN3ABID.mjs.map} +1 -1
  58. package/dist/{chunk-OHA43BNK.js → chunk-7X4LKAYJ.js} +14 -14
  59. package/dist/{chunk-OHA43BNK.js.map → chunk-7X4LKAYJ.js.map} +1 -1
  60. package/dist/{chunk-RCRDDMUO.mjs → chunk-ACL5FDJI.mjs} +3 -3
  61. package/dist/{chunk-RCRDDMUO.mjs.map → chunk-ACL5FDJI.mjs.map} +1 -1
  62. package/dist/{chunk-SL6ZGJVN.mjs → chunk-ANJBOE46.mjs} +4 -4
  63. package/dist/{chunk-SL6ZGJVN.mjs.map → chunk-ANJBOE46.mjs.map} +1 -1
  64. package/dist/{chunk-BN4AL7XB.js → chunk-BGIT5M27.js} +4 -4
  65. package/dist/{chunk-BN4AL7XB.js.map → chunk-BGIT5M27.js.map} +1 -1
  66. package/dist/{chunk-TFAYDIWM.mjs → chunk-DYDJ6NCM.mjs} +3 -3
  67. package/dist/{chunk-TFAYDIWM.mjs.map → chunk-DYDJ6NCM.mjs.map} +1 -1
  68. package/dist/{chunk-M2SEYO5J.js → chunk-F3MOVBEE.js} +7 -7
  69. package/dist/{chunk-M2SEYO5J.js.map → chunk-F3MOVBEE.js.map} +1 -1
  70. package/dist/{chunk-XA7RBHKT.js → chunk-FIVPS4Z6.js} +4 -4
  71. package/dist/{chunk-XA7RBHKT.js.map → chunk-FIVPS4Z6.js.map} +1 -1
  72. package/dist/{chunk-TKVADZFD.mjs → chunk-G5EETWKH.mjs} +4 -4
  73. package/dist/{chunk-TKVADZFD.mjs.map → chunk-G5EETWKH.mjs.map} +1 -1
  74. package/dist/{chunk-BX6FFL2Y.js → chunk-HXHDOIV6.js} +5 -5
  75. package/dist/{chunk-BX6FFL2Y.js.map → chunk-HXHDOIV6.js.map} +1 -1
  76. package/dist/{chunk-UDNXM6RB.mjs → chunk-IDSTSLMM.mjs} +3 -3
  77. package/dist/{chunk-UDNXM6RB.mjs.map → chunk-IDSTSLMM.mjs.map} +1 -1
  78. package/dist/{chunk-DZUOLOYS.mjs → chunk-IT76CWZ2.mjs} +3 -3
  79. package/dist/{chunk-DZUOLOYS.mjs.map → chunk-IT76CWZ2.mjs.map} +1 -1
  80. package/dist/{chunk-7BVZLSUJ.js → chunk-IW6S62NR.js} +8 -8
  81. package/dist/{chunk-7BVZLSUJ.js.map → chunk-IW6S62NR.js.map} +1 -1
  82. package/dist/{chunk-EHNUPEFY.mjs → chunk-IWFQPGA2.mjs} +7 -7
  83. package/dist/{chunk-EHNUPEFY.mjs.map → chunk-IWFQPGA2.mjs.map} +1 -1
  84. package/dist/{chunk-S5UATBC7.js → chunk-IWV72YOE.js} +14 -14
  85. package/dist/{chunk-S5UATBC7.js.map → chunk-IWV72YOE.js.map} +1 -1
  86. package/dist/{chunk-WCTOQFAN.js → chunk-IZVV36RT.js} +14 -14
  87. package/dist/{chunk-WCTOQFAN.js.map → chunk-IZVV36RT.js.map} +1 -1
  88. package/dist/{chunk-T3HGONNE.mjs → chunk-JBX6KV46.mjs} +4 -4
  89. package/dist/{chunk-T3HGONNE.mjs.map → chunk-JBX6KV46.mjs.map} +1 -1
  90. package/dist/{chunk-J6HWSJT7.mjs → chunk-JJTCVH4Q.mjs} +3 -3
  91. package/dist/{chunk-J6HWSJT7.mjs.map → chunk-JJTCVH4Q.mjs.map} +1 -1
  92. package/dist/{chunk-GDMOAGVS.js → chunk-K7QBRZLN.js} +18 -18
  93. package/dist/{chunk-GDMOAGVS.js.map → chunk-K7QBRZLN.js.map} +1 -1
  94. package/dist/{chunk-6D3HZKTZ.mjs → chunk-L4FHGCQ2.mjs} +3 -3
  95. package/dist/{chunk-6D3HZKTZ.mjs.map → chunk-L4FHGCQ2.mjs.map} +1 -1
  96. package/dist/{chunk-N5RTJNMN.js → chunk-LTALFZX7.js} +6 -6
  97. package/dist/{chunk-N5RTJNMN.js.map → chunk-LTALFZX7.js.map} +1 -1
  98. package/dist/{chunk-ZASFY4NR.mjs → chunk-LVMPYAOQ.mjs} +4 -4
  99. package/dist/{chunk-ZASFY4NR.mjs.map → chunk-LVMPYAOQ.mjs.map} +1 -1
  100. package/dist/{chunk-XOJYGBYF.js → chunk-NGAKS4WG.js} +3 -3
  101. package/dist/{chunk-XOJYGBYF.js.map → chunk-NGAKS4WG.js.map} +1 -1
  102. package/dist/{chunk-MP7ZYKMM.js → chunk-O4TMBV54.js} +8 -8
  103. package/dist/{chunk-MP7ZYKMM.js.map → chunk-O4TMBV54.js.map} +1 -1
  104. package/dist/{chunk-T6T5IQMN.mjs → chunk-OBRGUSGB.mjs} +3 -3
  105. package/dist/{chunk-T6T5IQMN.mjs.map → chunk-OBRGUSGB.mjs.map} +1 -1
  106. package/dist/{chunk-3DSGMX7P.js → chunk-OOBEJZJ5.js} +3 -3
  107. package/dist/{chunk-3DSGMX7P.js.map → chunk-OOBEJZJ5.js.map} +1 -1
  108. package/dist/{chunk-JJDY5XXG.js → chunk-PJZHIISA.js} +3 -3
  109. package/dist/{chunk-JJDY5XXG.js.map → chunk-PJZHIISA.js.map} +1 -1
  110. package/dist/{chunk-XWFUQMU6.mjs → chunk-QEHPIQYN.mjs} +3 -3
  111. package/dist/{chunk-XWFUQMU6.mjs.map → chunk-QEHPIQYN.mjs.map} +1 -1
  112. package/dist/{chunk-QJK2X3UK.js → chunk-R2O5VDNJ.js} +12 -12
  113. package/dist/{chunk-QJK2X3UK.js.map → chunk-R2O5VDNJ.js.map} +1 -1
  114. package/dist/{chunk-INA4NW3Y.mjs → chunk-RW76CJBS.mjs} +3 -3
  115. package/dist/{chunk-INA4NW3Y.mjs.map → chunk-RW76CJBS.mjs.map} +1 -1
  116. package/dist/{chunk-2XRGCDDG.js → chunk-SABYEM57.js} +9 -9
  117. package/dist/{chunk-2XRGCDDG.js.map → chunk-SABYEM57.js.map} +1 -1
  118. package/dist/{chunk-ZAVNGZJZ.js → chunk-SACGTFCK.js} +22 -6
  119. package/dist/chunk-SACGTFCK.js.map +1 -0
  120. package/dist/{chunk-SAR473OC.js → chunk-SM27DPML.js} +12 -12
  121. package/dist/{chunk-SAR473OC.js.map → chunk-SM27DPML.js.map} +1 -1
  122. package/dist/{chunk-HTLWSCUQ.mjs → chunk-SRJSR6YP.mjs} +22 -6
  123. package/dist/chunk-SRJSR6YP.mjs.map +1 -0
  124. package/dist/{chunk-NB4MK2Q5.js → chunk-SWIKKSKL.js} +3 -2
  125. package/dist/chunk-SWIKKSKL.js.map +1 -0
  126. package/dist/{chunk-GJKO2TZN.js → chunk-T6YDAJ5F.js} +4 -4
  127. package/dist/{chunk-GJKO2TZN.js.map → chunk-T6YDAJ5F.js.map} +1 -1
  128. package/dist/{chunk-MF6XLEX5.js → chunk-TBIWQQVF.js} +15 -15
  129. package/dist/{chunk-MF6XLEX5.js.map → chunk-TBIWQQVF.js.map} +1 -1
  130. package/dist/chunk-U3P4WF2A.js +8 -0
  131. package/dist/{chunk-S5L73KZQ.js.map → chunk-U3P4WF2A.js.map} +1 -1
  132. package/dist/{chunk-YWXZ4YLU.js → chunk-UDXWBLBH.js} +4 -4
  133. package/dist/{chunk-YWXZ4YLU.js.map → chunk-UDXWBLBH.js.map} +1 -1
  134. package/dist/{chunk-I7ORAWYT.mjs → chunk-UFT7IKDN.mjs} +4 -4
  135. package/dist/{chunk-I7ORAWYT.mjs.map → chunk-UFT7IKDN.mjs.map} +1 -1
  136. package/dist/{chunk-GU5OTUQS.mjs → chunk-VS67QHNX.mjs} +3 -3
  137. package/dist/{chunk-GU5OTUQS.mjs.map → chunk-VS67QHNX.mjs.map} +1 -1
  138. package/dist/{chunk-XR3MDDQT.mjs → chunk-XPNOM353.mjs} +3 -3
  139. package/dist/{chunk-XR3MDDQT.mjs.map → chunk-XPNOM353.mjs.map} +1 -1
  140. package/dist/{chunk-PTZB4ES3.mjs → chunk-YSLGMCQH.mjs} +8 -8
  141. package/dist/{chunk-PTZB4ES3.mjs.map → chunk-YSLGMCQH.mjs.map} +1 -1
  142. package/dist/{chunk-NI7OY4FW.mjs → chunk-ZN4HBK5C.mjs} +3 -2
  143. package/dist/chunk-ZN4HBK5C.mjs.map +1 -0
  144. package/dist/cli/index.js +36 -23
  145. package/dist/cli/index.js.map +1 -1
  146. package/dist/cli/index.mjs +29 -16
  147. package/dist/cli/index.mjs.map +1 -1
  148. package/dist/client/index.js +5 -5
  149. package/dist/client/index.mjs +4 -4
  150. package/dist/commerce/index.js +56 -56
  151. package/dist/commerce/index.mjs +5 -5
  152. package/dist/engage/index.js +13 -13
  153. package/dist/engage/index.mjs +7 -7
  154. package/dist/fleet/index.js +8 -8
  155. package/dist/fleet/index.mjs +4 -4
  156. package/dist/forms/index.js +21 -21
  157. package/dist/forms/index.mjs +10 -10
  158. package/dist/forms/server.js +10 -10
  159. package/dist/forms/server.mjs +8 -8
  160. package/dist/forms/static.js +7 -7
  161. package/dist/forms/static.mjs +6 -6
  162. package/dist/images/index.js +11 -11
  163. package/dist/images/index.mjs +4 -4
  164. package/dist/index.js +63 -63
  165. package/dist/index.mjs +9 -9
  166. package/dist/layout/client.js +9 -9
  167. package/dist/layout/client.mjs +8 -8
  168. package/dist/layout/index.js +11 -11
  169. package/dist/layout/index.mjs +9 -9
  170. package/dist/maps/index.js +5 -5
  171. package/dist/maps/index.mjs +3 -3
  172. package/dist/mcp/WebMcpTools.d.ts +60 -0
  173. package/dist/mcp/WebMcpTools.d.ts.map +1 -0
  174. package/dist/mcp/client.d.ts +9 -0
  175. package/dist/mcp/client.d.ts.map +1 -0
  176. package/dist/mcp/client.js +132 -0
  177. package/dist/mcp/client.js.map +1 -0
  178. package/dist/mcp/client.mjs +129 -0
  179. package/dist/mcp/client.mjs.map +1 -0
  180. package/dist/mcp/declarative.d.ts +77 -0
  181. package/dist/mcp/declarative.d.ts.map +1 -0
  182. package/dist/mcp/handlers.d.ts +92 -0
  183. package/dist/mcp/handlers.d.ts.map +1 -0
  184. package/dist/mcp/index.d.ts +29 -0
  185. package/dist/mcp/index.d.ts.map +1 -0
  186. package/dist/mcp/index.js +537 -0
  187. package/dist/mcp/index.js.map +1 -0
  188. package/dist/mcp/index.mjs +509 -0
  189. package/dist/mcp/index.mjs.map +1 -0
  190. package/dist/mcp/protocol.d.ts +140 -0
  191. package/dist/mcp/protocol.d.ts.map +1 -0
  192. package/dist/mcp/protocol.test.d.ts +2 -0
  193. package/dist/mcp/protocol.test.d.ts.map +1 -0
  194. package/dist/mcp/serverCard.d.ts +77 -0
  195. package/dist/mcp/serverCard.d.ts.map +1 -0
  196. package/dist/mcp/types.d.ts +154 -0
  197. package/dist/mcp/types.d.ts.map +1 -0
  198. package/dist/og/config.d.ts +11 -1
  199. package/dist/og/config.d.ts.map +1 -1
  200. package/dist/og/index.js +5 -5
  201. package/dist/og/index.mjs +1 -1
  202. package/dist/og/pages.d.ts.map +1 -1
  203. package/dist/og/template.d.ts.map +1 -1
  204. package/dist/search/index.js +4 -4
  205. package/dist/search/index.mjs +3 -3
  206. package/dist/seo/client.js +5 -5
  207. package/dist/seo/client.mjs +4 -4
  208. package/dist/seo/index.js +5 -5
  209. package/dist/seo/index.mjs +4 -4
  210. package/dist/seo-pages/contract.js +6 -6
  211. package/dist/seo-pages/contract.mjs +2 -2
  212. package/dist/server/index.js +3 -3
  213. package/dist/server/index.mjs +2 -2
  214. package/dist/shared/build-entries.d.ts +4 -1
  215. package/dist/shared/build-entries.d.ts.map +1 -1
  216. package/dist/shared/version.d.ts +1 -1
  217. package/dist/signal/index.js +11 -11
  218. package/dist/signal/index.mjs +2 -2
  219. package/dist/sites/contract.js +9 -9
  220. package/dist/sites/contract.mjs +2 -2
  221. package/dist/sites/normalize.d.ts +2 -1
  222. package/dist/sites/normalize.d.ts.map +1 -1
  223. package/dist/sync/index.js +16 -16
  224. package/dist/sync/index.mjs +4 -4
  225. package/package.json +11 -1
  226. package/dist/AnalyticsProvider-NW3UZYL5.mjs +0 -10
  227. package/dist/AnalyticsProvider-VSTTYP4W.js +0 -31
  228. package/dist/ChatWidget-BJOE2OSI.js +0 -20
  229. package/dist/ChatWidget-EWQ7LRD4.mjs +0 -11
  230. package/dist/EngageWidget-CZMNLFWI.js +0 -18
  231. package/dist/EngageWidget-F427CI6Y.mjs +0 -9
  232. package/dist/ManagedForm-A7BROQIN.mjs +0 -14
  233. package/dist/ManagedForm-Z3Z5Z6OL.js +0 -23
  234. package/dist/SitemapSync-62F6HVAW.js +0 -17
  235. package/dist/SitemapSync-EY33A6P4.mjs +0 -8
  236. package/dist/chunk-HTLWSCUQ.mjs.map +0 -1
  237. package/dist/chunk-NB4MK2Q5.js.map +0 -1
  238. package/dist/chunk-NI7OY4FW.mjs.map +0 -1
  239. package/dist/chunk-S5L73KZQ.js +0 -8
  240. package/dist/chunk-XCFCG46K.mjs +0 -6
  241. package/dist/chunk-ZAVNGZJZ.js.map +0 -1
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @sonordev/site-kit/mcp — Main entry point
3
+ *
4
+ * WebMCP + Model Context Protocol for marketing sites: make a site something
5
+ * an AI agent can *use*, not just read.
6
+ *
7
+ * Three surfaces, one tool definition:
8
+ *
9
+ * 1. Remote MCP endpoint — `createMcpHandler`. Streamable HTTP, dual-era
10
+ * (2026-07-28 modern + the `initialize` handshake older clients speak).
11
+ * 2. Discovery — `createMcpServerCardHandler`, the SEP-2127 card served at
12
+ * `/.well-known/mcp-server-card` and `/.well-known/mcp.json`.
13
+ * 3. In-page WebMCP — `<WebMcpTools>` (imperative) and
14
+ * `declarativeToolForm` (declarative), for browser-driving agents.
15
+ *
16
+ * @see https://modelcontextprotocol.io/specification/2026-07-28
17
+ * @see https://github.com/webmachinelearning/webmcp
18
+ */
19
+ export type { JsonSchemaNode, JsonSchemaObject, McpContent, McpTextContent, McpResourceLinkContent, McpToolResult, McpToolHandlerResult, McpToolAnnotations, McpToolContext, McpToolHandler, SiteKitMcpTool, McpServerInfo, McpServerIcon, } from './types';
20
+ export { defineMcpTool } from './types';
21
+ export { MCP_PROTOCOL_VERSION_MODERN, MCP_PROTOCOL_VERSIONS_LEGACY, MCP_SUPPORTED_PROTOCOL_VERSIONS, META_PROTOCOL_VERSION, META_CLIENT_INFO, META_SERVER_INFO, MCP_ERROR_HEADER_MISMATCH, MCP_ERROR_UNSUPPORTED_PROTOCOL_VERSION, JSONRPC_METHOD_NOT_FOUND, dispatch, toToolResult, toolErrorResult, toToolDescriptor, validateArgs, isSupportedVersion, } from './protocol';
22
+ export type { JsonRpcRequest, JsonRpcResponse, JsonRpcError, DispatchOutcome, DispatchOptions, McpServerDefinition, McpToolDescriptor, } from './protocol';
23
+ export { buildMcpServerCard, validateMcpServerCard, MCP_SERVER_CARD_SCHEMA, MCP_SERVER_CARD_PATH, MCP_SERVER_CARD_LEGACY_PATH, SITE_KIT_CARD_META_KEY, } from './serverCard';
24
+ export type { McpServerCard, McpRemote, BuildMcpServerCardOptions, } from './serverCard';
25
+ export { createMcpHandler, createMcpServerCardHandler, decodeHeaderValue, } from './handlers';
26
+ export type { McpHandlerOptions, McpRouteHandlers, McpServerCardHandlerOptions, McpServerCardRouteHandlers, } from './handlers';
27
+ export { declarativeToolForm, declarativeToolField } from './declarative';
28
+ export type { DeclarativeToolFormOptions, DeclarativeToolFormAttributes, DeclarativeToolFieldAttributes, } from './declarative';
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,aAAa,EACb,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,GACd,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAKvC,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,+BAA+B,EAC/B,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,sCAAsC,EACtC,wBAAwB,EACxB,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,GACnB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,cAAc,EACd,eAAe,EACf,YAAY,EACZ,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAA;AAKnB,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,aAAa,EACb,SAAS,EACT,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AAKrB,OAAO,EACL,gBAAgB,EAChB,0BAA0B,EAC1B,iBAAiB,GAClB,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,YAAY,CAAA;AAKnB,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACzE,YAAY,EACV,0BAA0B,EAC1B,6BAA6B,EAC7B,8BAA8B,GAC/B,MAAM,eAAe,CAAA"}
@@ -0,0 +1,537 @@
1
+ 'use strict';
2
+
3
+ require('../chunk-SNAQBZPT.js');
4
+
5
+ // src/mcp/types.ts
6
+ function defineMcpTool(tool) {
7
+ return tool;
8
+ }
9
+
10
+ // src/mcp/protocol.ts
11
+ var MCP_PROTOCOL_VERSION_MODERN = "2026-07-28";
12
+ var MCP_PROTOCOL_VERSIONS_LEGACY = ["2025-11-25", "2025-06-18", "2025-03-26"];
13
+ var MCP_SUPPORTED_PROTOCOL_VERSIONS = [
14
+ MCP_PROTOCOL_VERSION_MODERN,
15
+ ...MCP_PROTOCOL_VERSIONS_LEGACY
16
+ ];
17
+ var META_PROTOCOL_VERSION = "io.modelcontextprotocol/protocolVersion";
18
+ var META_CLIENT_INFO = "io.modelcontextprotocol/clientInfo";
19
+ var META_SERVER_INFO = "io.modelcontextprotocol/serverInfo";
20
+ var JSONRPC_PARSE_ERROR = -32700;
21
+ var JSONRPC_INVALID_REQUEST = -32600;
22
+ var JSONRPC_METHOD_NOT_FOUND = -32601;
23
+ var JSONRPC_INVALID_PARAMS = -32602;
24
+ var MCP_ERROR_HEADER_MISMATCH = -32020;
25
+ var MCP_ERROR_UNSUPPORTED_PROTOCOL_VERSION = -32022;
26
+ var MAX_JSON_TEXT = 6e4;
27
+ function isToolResult(value) {
28
+ return typeof value === "object" && value !== null && Array.isArray(value.content);
29
+ }
30
+ function toToolResult(value) {
31
+ if (isToolResult(value)) return value;
32
+ if (typeof value === "string") {
33
+ return { content: [{ type: "text", text: value }] };
34
+ }
35
+ if (value === void 0 || value === null) {
36
+ return { content: [{ type: "text", text: "(no result)" }] };
37
+ }
38
+ let text;
39
+ try {
40
+ text = JSON.stringify(value, null, 2);
41
+ } catch {
42
+ text = String(value);
43
+ }
44
+ if (text.length > MAX_JSON_TEXT) {
45
+ text = `${text.slice(0, MAX_JSON_TEXT)}
46
+ \u2026 (truncated)`;
47
+ }
48
+ return {
49
+ content: [{ type: "text", text }],
50
+ structuredContent: value
51
+ };
52
+ }
53
+ function toolErrorResult(message) {
54
+ return { content: [{ type: "text", text: message }], isError: true };
55
+ }
56
+ function toToolDescriptor(tool) {
57
+ const descriptor = {
58
+ name: tool.name,
59
+ description: tool.description,
60
+ inputSchema: tool.inputSchema
61
+ };
62
+ if (tool.title) descriptor.title = tool.title;
63
+ if (tool.outputSchema) descriptor.outputSchema = tool.outputSchema;
64
+ if (tool.annotations) descriptor.annotations = tool.annotations;
65
+ return descriptor;
66
+ }
67
+ function validateArgs(tool, args) {
68
+ const required = tool.inputSchema.required ?? [];
69
+ const missing = required.filter((key) => {
70
+ const value = args[key];
71
+ return value === void 0 || value === null || value === "";
72
+ });
73
+ if (missing.length > 0) {
74
+ return `Missing required argument${missing.length > 1 ? "s" : ""}: ${missing.join(", ")}.`;
75
+ }
76
+ for (const [key, schema] of Object.entries(tool.inputSchema.properties ?? {})) {
77
+ const value = args[key];
78
+ if (value === void 0 || value === null) continue;
79
+ if (schema.enum && !schema.enum.includes(value)) {
80
+ return `Invalid value for "${key}": ${JSON.stringify(value)}. Expected one of: ${schema.enum.map((v) => JSON.stringify(v)).join(", ")}.`;
81
+ }
82
+ }
83
+ return null;
84
+ }
85
+ function capabilities() {
86
+ return { tools: { listChanged: false } };
87
+ }
88
+ function serverInfoBlock(info) {
89
+ return { name: info.name, version: info.version, ...info.title ? { title: info.title } : {} };
90
+ }
91
+ function isSupportedVersion(version) {
92
+ return MCP_SUPPORTED_PROTOCOL_VERSIONS.includes(version);
93
+ }
94
+ function unsupportedVersionError(id, requested) {
95
+ return {
96
+ status: 400,
97
+ response: {
98
+ jsonrpc: "2.0",
99
+ id,
100
+ error: {
101
+ code: MCP_ERROR_UNSUPPORTED_PROTOCOL_VERSION,
102
+ message: "Unsupported protocol version",
103
+ data: { supported: [...MCP_SUPPORTED_PROTOCOL_VERSIONS], requested }
104
+ }
105
+ }
106
+ };
107
+ }
108
+ function errorOutcome(id, code, message, status, data) {
109
+ return {
110
+ status,
111
+ response: { jsonrpc: "2.0", id, error: { code, message, ...data ? { data } : {} } }
112
+ };
113
+ }
114
+ async function dispatch(message, options) {
115
+ const { server } = options;
116
+ const id = message.id ?? null;
117
+ const isNotification = message.id === void 0;
118
+ const params = message.params ?? {};
119
+ const meta = params._meta ?? {};
120
+ const bodyVersion = typeof meta[META_PROTOCOL_VERSION] === "string" ? meta[META_PROTOCOL_VERSION] : null;
121
+ const headerVersion = options.headerProtocolVersion || null;
122
+ if (bodyVersion && headerVersion && bodyVersion !== headerVersion) {
123
+ return errorOutcome(
124
+ id,
125
+ MCP_ERROR_HEADER_MISMATCH,
126
+ `Header mismatch: MCP-Protocol-Version header value '${headerVersion}' does not match body value '${bodyVersion}'`,
127
+ 400
128
+ );
129
+ }
130
+ const requestedVersion = bodyVersion || headerVersion;
131
+ if (requestedVersion && !isSupportedVersion(requestedVersion)) {
132
+ return unsupportedVersionError(id, requestedVersion);
133
+ }
134
+ if (options.headerMethod && options.headerMethod !== message.method) {
135
+ return errorOutcome(
136
+ id,
137
+ MCP_ERROR_HEADER_MISMATCH,
138
+ `Header mismatch: Mcp-Method header value '${options.headerMethod}' does not match body value '${message.method}'`,
139
+ 400
140
+ );
141
+ }
142
+ if (options.headerName) {
143
+ const bodyName = typeof params.name === "string" ? params.name : typeof params.uri === "string" ? params.uri : null;
144
+ if (bodyName && options.headerName !== bodyName) {
145
+ return errorOutcome(
146
+ id,
147
+ MCP_ERROR_HEADER_MISMATCH,
148
+ `Header mismatch: Mcp-Name header value '${options.headerName}' does not match body value '${bodyName}'`,
149
+ 400
150
+ );
151
+ }
152
+ }
153
+ if (options.strictHeaders && bodyVersion) {
154
+ if (!headerVersion) {
155
+ return errorOutcome(
156
+ id,
157
+ MCP_ERROR_HEADER_MISMATCH,
158
+ "Header mismatch: required MCP-Protocol-Version header is missing",
159
+ 400
160
+ );
161
+ }
162
+ if (!options.headerMethod) {
163
+ return errorOutcome(
164
+ id,
165
+ MCP_ERROR_HEADER_MISMATCH,
166
+ "Header mismatch: required Mcp-Method header is missing",
167
+ 400
168
+ );
169
+ }
170
+ }
171
+ const negotiated = requestedVersion || MCP_PROTOCOL_VERSION_MODERN;
172
+ switch (message.method) {
173
+ // ── Modern discovery (MUST implement) ──────────────────────────────────
174
+ case "server/discover": {
175
+ return {
176
+ status: 200,
177
+ response: {
178
+ jsonrpc: "2.0",
179
+ id,
180
+ result: {
181
+ resultType: "complete",
182
+ supportedVersions: [...MCP_SUPPORTED_PROTOCOL_VERSIONS],
183
+ capabilities: capabilities(),
184
+ ...server.info.instructions ? { instructions: server.info.instructions } : {},
185
+ ttlMs: server.discoverTtlMs ?? 36e5,
186
+ cacheScope: "public",
187
+ _meta: { [META_SERVER_INFO]: serverInfoBlock(server.info) }
188
+ }
189
+ }
190
+ };
191
+ }
192
+ // ── Legacy handshake ───────────────────────────────────────────────────
193
+ case "initialize": {
194
+ const asked = typeof params.protocolVersion === "string" ? params.protocolVersion : "";
195
+ const agreed = isSupportedVersion(asked) ? asked : MCP_PROTOCOL_VERSIONS_LEGACY[0];
196
+ return {
197
+ status: 200,
198
+ response: {
199
+ jsonrpc: "2.0",
200
+ id,
201
+ result: {
202
+ protocolVersion: agreed,
203
+ capabilities: capabilities(),
204
+ serverInfo: serverInfoBlock(server.info),
205
+ ...server.info.instructions ? { instructions: server.info.instructions } : {}
206
+ }
207
+ }
208
+ };
209
+ }
210
+ case "notifications/initialized":
211
+ case "initialized":
212
+ return { status: 202, response: null };
213
+ case "ping":
214
+ return { status: 200, response: { jsonrpc: "2.0", id, result: {} } };
215
+ // ── Tools ──────────────────────────────────────────────────────────────
216
+ case "tools/list": {
217
+ const tools = server.tools.filter((t) => t.exposeToHttp !== false).map((t) => toToolDescriptor(t));
218
+ return { status: 200, response: { jsonrpc: "2.0", id, result: { tools } } };
219
+ }
220
+ case "tools/call": {
221
+ const name = typeof params.name === "string" ? params.name : "";
222
+ const tool = server.tools.find((t) => t.name === name && t.exposeToHttp !== false);
223
+ if (!tool) {
224
+ return errorOutcome(
225
+ id,
226
+ JSONRPC_INVALID_PARAMS,
227
+ `Unknown tool: ${name || "(none)"}`,
228
+ 400,
229
+ {
230
+ available: server.tools.filter((t) => t.exposeToHttp !== false).map((t) => t.name)
231
+ }
232
+ );
233
+ }
234
+ const args = params.arguments ?? {};
235
+ const invalid = validateArgs(tool, args);
236
+ if (invalid) {
237
+ return {
238
+ status: 200,
239
+ response: { jsonrpc: "2.0", id, result: toolErrorResult(invalid) }
240
+ };
241
+ }
242
+ try {
243
+ const raw = await tool.handler(args, {
244
+ ...options.context,
245
+ surface: "http",
246
+ protocolVersion: negotiated
247
+ });
248
+ return { status: 200, response: { jsonrpc: "2.0", id, result: toToolResult(raw) } };
249
+ } catch (error) {
250
+ const detail = error instanceof Error ? error.message : String(error);
251
+ return {
252
+ status: 200,
253
+ response: {
254
+ jsonrpc: "2.0",
255
+ id,
256
+ result: toolErrorResult(`Tool "${tool.name}" failed: ${detail}`)
257
+ }
258
+ };
259
+ }
260
+ }
261
+ // Declared unsupported rather than left to fall through, so the error names
262
+ // the reason instead of looking like a typo'd method.
263
+ case "resources/list":
264
+ return { status: 200, response: { jsonrpc: "2.0", id, result: { resources: [] } } };
265
+ case "prompts/list":
266
+ return { status: 200, response: { jsonrpc: "2.0", id, result: { prompts: [] } } };
267
+ default: {
268
+ if (isNotification) return { status: 202, response: null };
269
+ return errorOutcome(id, JSONRPC_METHOD_NOT_FOUND, `Method not found: ${message.method}`, 404);
270
+ }
271
+ }
272
+ }
273
+
274
+ // src/mcp/serverCard.ts
275
+ var MCP_SERVER_CARD_SCHEMA = "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json";
276
+ var MCP_SERVER_CARD_PATH = "/.well-known/mcp-server-card";
277
+ var MCP_SERVER_CARD_LEGACY_PATH = "/.well-known/mcp.json";
278
+ var SITE_KIT_CARD_META_KEY = "io.sonor.site-kit/tools";
279
+ function buildMcpServerCard(options) {
280
+ const base = options.baseUrl.replace(/\/$/, "");
281
+ const path = options.mcpPath ?? "/api/mcp";
282
+ const mcpUrl = `${base}${path.startsWith("/") ? path : `/${path}`}`;
283
+ const card = {
284
+ $schema: MCP_SERVER_CARD_SCHEMA,
285
+ name: options.info.name,
286
+ version: options.info.version,
287
+ description: options.info.description,
288
+ remotes: [
289
+ {
290
+ type: "streamable-http",
291
+ url: mcpUrl,
292
+ supportedProtocolVersions: [...MCP_SUPPORTED_PROTOCOL_VERSIONS]
293
+ },
294
+ ...options.additionalRemotes ?? []
295
+ ]
296
+ };
297
+ if (options.info.title) card.title = options.info.title;
298
+ if (options.info.websiteUrl || base) card.websiteUrl = options.info.websiteUrl || base;
299
+ if (options.icons?.length) card.icons = options.icons;
300
+ const meta = {};
301
+ if (options.info.instructions) {
302
+ meta["io.sonor.site-kit/instructions"] = options.info.instructions;
303
+ }
304
+ if (options.tools?.length) {
305
+ meta[SITE_KIT_CARD_META_KEY] = options.tools.filter((t) => t.exposeToHttp !== false).map((t) => ({
306
+ name: t.name,
307
+ ...t.title ? { title: t.title } : {},
308
+ description: t.description,
309
+ readOnly: t.annotations?.readOnlyHint ?? false
310
+ }));
311
+ }
312
+ if (Object.keys(meta).length > 0) card._meta = meta;
313
+ return card;
314
+ }
315
+ function validateMcpServerCard(card) {
316
+ const problems = [];
317
+ if (card.$schema !== MCP_SERVER_CARD_SCHEMA) {
318
+ problems.push(`$schema should be "${MCP_SERVER_CARD_SCHEMA}"`);
319
+ }
320
+ if (!/^[^/\s]+\/[^/\s]+$/.test(card.name)) {
321
+ problems.push(
322
+ `name "${card.name}" must be reverse-DNS with exactly one forward slash, e.g. "io.example/server"`
323
+ );
324
+ }
325
+ if (!/^\d+\.\d+\.\d+(?:[-+].+)?$/.test(card.version)) {
326
+ problems.push(`version "${card.version}" should be a concrete semver (no ranges)`);
327
+ }
328
+ if (!card.description?.trim()) problems.push("description is required");
329
+ for (const remote of card.remotes ?? []) {
330
+ if (!/^https:\/\//.test(remote.url) && !/^http:\/\/localhost/.test(remote.url)) {
331
+ problems.push(`remote url "${remote.url}" must be https (http allowed only on localhost)`);
332
+ }
333
+ }
334
+ return problems;
335
+ }
336
+
337
+ // src/mcp/handlers.ts
338
+ var MCP_REQUEST_HEADERS = [
339
+ "Content-Type",
340
+ "Accept",
341
+ "Authorization",
342
+ "MCP-Protocol-Version",
343
+ "Mcp-Method",
344
+ "Mcp-Name",
345
+ "Mcp-Session-Id",
346
+ "Last-Event-ID"
347
+ ];
348
+ function corsHeaders(origin) {
349
+ return {
350
+ "Access-Control-Allow-Origin": origin,
351
+ "Access-Control-Allow-Methods": "POST, OPTIONS",
352
+ "Access-Control-Allow-Headers": MCP_REQUEST_HEADERS.join(", "),
353
+ "Access-Control-Expose-Headers": "MCP-Protocol-Version",
354
+ "Access-Control-Max-Age": "86400"
355
+ };
356
+ }
357
+ function decodeHeaderValue(value) {
358
+ if (!value) return value;
359
+ const match = /^=\?base64\?(.*)\?=$/.exec(value);
360
+ if (!match) return value;
361
+ try {
362
+ if (typeof atob === "function") {
363
+ const binary = atob(match[1]);
364
+ const bytes = Uint8Array.from(binary, (c) => c.charCodeAt(0));
365
+ return new TextDecoder().decode(bytes);
366
+ }
367
+ return Buffer.from(match[1], "base64").toString("utf8");
368
+ } catch {
369
+ return value;
370
+ }
371
+ }
372
+ function resolveOrigin(request, allowed) {
373
+ const origin = request.headers.get("origin");
374
+ if (!allowed || allowed === "*") return "*";
375
+ if (!origin) return allowed[0] ?? "*";
376
+ return allowed.includes(origin) ? origin : null;
377
+ }
378
+ function json(body, status, headers) {
379
+ return new Response(JSON.stringify(body), {
380
+ status,
381
+ headers: {
382
+ "Content-Type": "application/json",
383
+ "Cache-Control": "no-store",
384
+ ...headers
385
+ }
386
+ });
387
+ }
388
+ function createMcpHandler(options) {
389
+ const { server } = options;
390
+ async function POST(request) {
391
+ const origin = resolveOrigin(request, options.allowedOrigins);
392
+ if (origin === null) {
393
+ return json(
394
+ { jsonrpc: "2.0", error: { code: JSONRPC_INVALID_REQUEST, message: "Origin not allowed" } },
395
+ 403,
396
+ {}
397
+ );
398
+ }
399
+ const cors = corsHeaders(origin);
400
+ let payload;
401
+ try {
402
+ payload = await request.json();
403
+ } catch {
404
+ return json(
405
+ { jsonrpc: "2.0", id: null, error: { code: JSONRPC_PARSE_ERROR, message: "Parse error" } },
406
+ 400,
407
+ cors
408
+ );
409
+ }
410
+ const headerProtocolVersion = request.headers.get("mcp-protocol-version");
411
+ const headerMethod = decodeHeaderValue(request.headers.get("mcp-method"));
412
+ const headerName = decodeHeaderValue(request.headers.get("mcp-name"));
413
+ const dispatchOptions = {
414
+ server,
415
+ context: {
416
+ baseUrl: options.baseUrl,
417
+ request,
418
+ signal: request.signal
419
+ },
420
+ headerProtocolVersion,
421
+ headerMethod,
422
+ headerName,
423
+ strictHeaders: options.strictHeaders
424
+ };
425
+ if (Array.isArray(payload)) {
426
+ const outcomes = await Promise.all(
427
+ payload.map((m) => dispatch(m, dispatchOptions))
428
+ );
429
+ const responses = outcomes.map((o) => o.response).filter(Boolean);
430
+ if (responses.length === 0) return new Response(null, { status: 202, headers: cors });
431
+ return json(responses, 200, {
432
+ ...cors,
433
+ "MCP-Protocol-Version": headerProtocolVersion || MCP_PROTOCOL_VERSION_MODERN
434
+ });
435
+ }
436
+ const message = payload;
437
+ if (!message || typeof message !== "object" || typeof message.method !== "string") {
438
+ const bad = errorOutcome(null, JSONRPC_INVALID_REQUEST, "Invalid Request", 400);
439
+ return json(bad.response, bad.status, cors);
440
+ }
441
+ const outcome = await dispatch(message, dispatchOptions);
442
+ if (outcome.response === null) {
443
+ return new Response(null, { status: 202, headers: cors });
444
+ }
445
+ return json(outcome.response, outcome.status, {
446
+ ...cors,
447
+ "MCP-Protocol-Version": headerProtocolVersion || MCP_PROTOCOL_VERSION_MODERN
448
+ });
449
+ }
450
+ async function methodNotAllowed(request) {
451
+ const origin = resolveOrigin(request, options.allowedOrigins) ?? "*";
452
+ return new Response(
453
+ JSON.stringify({
454
+ jsonrpc: "2.0",
455
+ error: {
456
+ code: JSONRPC_INVALID_REQUEST,
457
+ message: "This MCP endpoint is stateless and accepts POST only. The GET stream and session teardown were removed in protocol revision 2026-07-28."
458
+ }
459
+ }),
460
+ {
461
+ status: 405,
462
+ headers: {
463
+ "Content-Type": "application/json",
464
+ Allow: "POST, OPTIONS",
465
+ ...corsHeaders(origin)
466
+ }
467
+ }
468
+ );
469
+ }
470
+ async function OPTIONS(request) {
471
+ const origin = resolveOrigin(request, options.allowedOrigins);
472
+ if (origin === null) return new Response(null, { status: 403 });
473
+ return new Response(null, { status: 204, headers: corsHeaders(origin) });
474
+ }
475
+ return { POST, GET: methodNotAllowed, DELETE: methodNotAllowed, OPTIONS };
476
+ }
477
+ function createMcpServerCardHandler(options) {
478
+ const card = buildMcpServerCard(options);
479
+ const body = `${JSON.stringify(card, null, 2)}
480
+ `;
481
+ const maxAge = options.maxAge ?? 3600;
482
+ const headers = {
483
+ "Content-Type": "application/json",
484
+ "Cache-Control": `public, max-age=${maxAge}`,
485
+ // The card is a discovery document — it is meant to be fetched by anyone.
486
+ "Access-Control-Allow-Origin": "*",
487
+ "Access-Control-Allow-Methods": "GET, OPTIONS",
488
+ "Access-Control-Allow-Headers": "Content-Type"
489
+ };
490
+ return {
491
+ GET: async () => new Response(body, { status: 200, headers }),
492
+ OPTIONS: async () => new Response(null, { status: 204, headers })
493
+ };
494
+ }
495
+
496
+ // src/mcp/declarative.ts
497
+ function declarativeToolForm(options) {
498
+ const attributes = {
499
+ toolname: options.name,
500
+ tooldescription: options.description
501
+ };
502
+ if (options.autoSubmit) attributes.toolautosubmit = "";
503
+ return attributes;
504
+ }
505
+ function declarativeToolField(description) {
506
+ return { toolparamdescription: description };
507
+ }
508
+
509
+ exports.JSONRPC_METHOD_NOT_FOUND = JSONRPC_METHOD_NOT_FOUND;
510
+ exports.MCP_ERROR_HEADER_MISMATCH = MCP_ERROR_HEADER_MISMATCH;
511
+ exports.MCP_ERROR_UNSUPPORTED_PROTOCOL_VERSION = MCP_ERROR_UNSUPPORTED_PROTOCOL_VERSION;
512
+ exports.MCP_PROTOCOL_VERSIONS_LEGACY = MCP_PROTOCOL_VERSIONS_LEGACY;
513
+ exports.MCP_PROTOCOL_VERSION_MODERN = MCP_PROTOCOL_VERSION_MODERN;
514
+ exports.MCP_SERVER_CARD_LEGACY_PATH = MCP_SERVER_CARD_LEGACY_PATH;
515
+ exports.MCP_SERVER_CARD_PATH = MCP_SERVER_CARD_PATH;
516
+ exports.MCP_SERVER_CARD_SCHEMA = MCP_SERVER_CARD_SCHEMA;
517
+ exports.MCP_SUPPORTED_PROTOCOL_VERSIONS = MCP_SUPPORTED_PROTOCOL_VERSIONS;
518
+ exports.META_CLIENT_INFO = META_CLIENT_INFO;
519
+ exports.META_PROTOCOL_VERSION = META_PROTOCOL_VERSION;
520
+ exports.META_SERVER_INFO = META_SERVER_INFO;
521
+ exports.SITE_KIT_CARD_META_KEY = SITE_KIT_CARD_META_KEY;
522
+ exports.buildMcpServerCard = buildMcpServerCard;
523
+ exports.createMcpHandler = createMcpHandler;
524
+ exports.createMcpServerCardHandler = createMcpServerCardHandler;
525
+ exports.declarativeToolField = declarativeToolField;
526
+ exports.declarativeToolForm = declarativeToolForm;
527
+ exports.decodeHeaderValue = decodeHeaderValue;
528
+ exports.defineMcpTool = defineMcpTool;
529
+ exports.dispatch = dispatch;
530
+ exports.isSupportedVersion = isSupportedVersion;
531
+ exports.toToolDescriptor = toToolDescriptor;
532
+ exports.toToolResult = toToolResult;
533
+ exports.toolErrorResult = toolErrorResult;
534
+ exports.validateArgs = validateArgs;
535
+ exports.validateMcpServerCard = validateMcpServerCard;
536
+ //# sourceMappingURL=index.js.map
537
+ //# sourceMappingURL=index.js.map