@1mcp/agent 0.36.0 → 0.38.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 (902) hide show
  1. package/build/admin/assets/{admin-OAuthServicesWorkspace-BCGj2hP4.js → admin-OAuthServicesWorkspace-CzXIIHM0.js} +1 -1
  2. package/build/admin/assets/admin-console-Mv3xmdoU.js +3 -0
  3. package/build/admin/assets/admin-vendor-62eL-qdH.js +1 -0
  4. package/build/admin/assets/admin-vendor-BbMrl7MK.js +3 -0
  5. package/build/admin/assets/admin-vendor-DpjVwd81.js +62 -0
  6. package/build/admin/index.html +4 -1
  7. package/build/application/services/healthService.d.ts +6 -6
  8. package/build/application/services/healthService.d.ts.map +1 -1
  9. package/build/application/services/healthService.js +1 -1
  10. package/build/application/services/healthService.js.map +1 -1
  11. package/build/application/services/tokenEstimationService.d.ts +1 -1
  12. package/build/application/services/tokenEstimationService.d.ts.map +1 -1
  13. package/build/application/services/tokenEstimationService.js.map +1 -1
  14. package/build/auth/oauthAuthorizationFlow.d.ts +13 -11
  15. package/build/auth/oauthAuthorizationFlow.d.ts.map +1 -1
  16. package/build/auth/oauthAuthorizationFlow.js +4 -17
  17. package/build/auth/oauthAuthorizationFlow.js.map +1 -1
  18. package/build/auth/sdkOAuthClientProvider.d.ts +2 -97
  19. package/build/auth/sdkOAuthClientProvider.d.ts.map +1 -1
  20. package/build/auth/sdkOAuthClientProvider.js +1 -242
  21. package/build/auth/sdkOAuthClientProvider.js.map +1 -1
  22. package/build/auth/sdkOAuthServerProvider.d.ts +1 -68
  23. package/build/auth/sdkOAuthServerProvider.d.ts.map +1 -1
  24. package/build/auth/sdkOAuthServerProvider.js +1 -482
  25. package/build/auth/sdkOAuthServerProvider.js.map +1 -1
  26. package/build/auth/sessionTypes.d.ts +1 -1
  27. package/build/auth/sessionTypes.d.ts.map +1 -1
  28. package/build/auth/sessionTypes.js.map +1 -1
  29. package/build/auth/storage/authCodeRepository.js +2 -2
  30. package/build/auth/storage/authCodeRepository.js.map +1 -1
  31. package/build/auth/storage/authRequestRepository.js +2 -2
  32. package/build/auth/storage/authRequestRepository.js.map +1 -1
  33. package/build/auth/storage/clientDataRepository.d.ts +1 -1
  34. package/build/auth/storage/clientDataRepository.d.ts.map +1 -1
  35. package/build/auth/storage/clientDataRepository.js.map +1 -1
  36. package/build/auth/storage/fileStorageService.d.ts +41 -0
  37. package/build/auth/storage/fileStorageService.d.ts.map +1 -1
  38. package/build/auth/storage/fileStorageService.js +231 -44
  39. package/build/auth/storage/fileStorageService.js.map +1 -1
  40. package/build/auth/storage/oauthStorageService.d.ts +5 -0
  41. package/build/auth/storage/oauthStorageService.d.ts.map +1 -1
  42. package/build/auth/storage/oauthStorageService.js +6 -0
  43. package/build/auth/storage/oauthStorageService.js.map +1 -1
  44. package/build/commands/inspect/inspect.d.ts +1 -1
  45. package/build/commands/inspect/inspect.d.ts.map +1 -1
  46. package/build/commands/inspect/inspect.js +6 -9
  47. package/build/commands/inspect/inspect.js.map +1 -1
  48. package/build/commands/inspect/inspectUtils.d.ts +1 -1
  49. package/build/commands/inspect/inspectUtils.d.ts.map +1 -1
  50. package/build/commands/inspect/inspectUtils.js +4 -13
  51. package/build/commands/inspect/inspectUtils.js.map +1 -1
  52. package/build/commands/mcp/install.d.ts +47 -3
  53. package/build/commands/mcp/install.d.ts.map +1 -1
  54. package/build/commands/mcp/install.js +22 -14
  55. package/build/commands/mcp/install.js.map +1 -1
  56. package/build/commands/registry/options.d.ts +3 -0
  57. package/build/commands/registry/options.d.ts.map +1 -1
  58. package/build/commands/registry/options.js +27 -0
  59. package/build/commands/registry/options.js.map +1 -1
  60. package/build/commands/registry/search.d.ts.map +1 -1
  61. package/build/commands/registry/search.js +2 -10
  62. package/build/commands/registry/search.js.map +1 -1
  63. package/build/commands/registry/show.d.ts.map +1 -1
  64. package/build/commands/registry/show.js +2 -10
  65. package/build/commands/registry/show.js.map +1 -1
  66. package/build/commands/registry/status.d.ts.map +1 -1
  67. package/build/commands/registry/status.js +2 -10
  68. package/build/commands/registry/status.js.map +1 -1
  69. package/build/commands/registry/versions.d.ts.map +1 -1
  70. package/build/commands/registry/versions.js +2 -10
  71. package/build/commands/registry/versions.js.map +1 -1
  72. package/build/commands/run/run.d.ts +1 -1
  73. package/build/commands/run/run.d.ts.map +1 -1
  74. package/build/commands/run/run.js +5 -5
  75. package/build/commands/run/run.js.map +1 -1
  76. package/build/commands/run/runUtils.d.ts +1 -1
  77. package/build/commands/run/runUtils.d.ts.map +1 -1
  78. package/build/commands/run/runUtils.js.map +1 -1
  79. package/build/commands/serve/asyncLoadingOptions.d.ts +16 -0
  80. package/build/commands/serve/asyncLoadingOptions.d.ts.map +1 -1
  81. package/build/commands/serve/asyncLoadingOptions.js +29 -0
  82. package/build/commands/serve/asyncLoadingOptions.js.map +1 -1
  83. package/build/commands/serve/index.d.ts +24 -0
  84. package/build/commands/serve/index.d.ts.map +1 -1
  85. package/build/commands/serve/index.js +24 -0
  86. package/build/commands/serve/index.js.map +1 -1
  87. package/build/commands/serve/serve.d.ts +1 -83
  88. package/build/commands/serve/serve.d.ts.map +1 -1
  89. package/build/commands/serve/serve.js +1 -507
  90. package/build/commands/serve/serve.js.map +1 -1
  91. package/build/commands/serve/serveBackground.d.ts +2 -1
  92. package/build/commands/serve/serveBackground.d.ts.map +1 -1
  93. package/build/commands/serve/serveBackground.js +6 -0
  94. package/build/commands/serve/serveBackground.js.map +1 -1
  95. package/build/commands/shared/authProfileStore.d.ts.map +1 -1
  96. package/build/commands/shared/authProfileStore.js +54 -10
  97. package/build/commands/shared/authProfileStore.js.map +1 -1
  98. package/build/commands/shared/clientSurfaceAttachment.d.ts.map +1 -1
  99. package/build/commands/shared/clientSurfaceAttachment.js +16 -4
  100. package/build/commands/shared/clientSurfaceAttachment.js.map +1 -1
  101. package/build/commands/shared/connectionHelper.d.ts +4 -4
  102. package/build/commands/shared/connectionHelper.d.ts.map +1 -1
  103. package/build/commands/shared/connectionHelper.js +9 -26
  104. package/build/commands/shared/connectionHelper.js.map +1 -1
  105. package/build/commands/shared/inspectApiSchemas.d.ts +8 -8
  106. package/build/commands/shared/serveClient.d.ts +1 -69
  107. package/build/commands/shared/serveClient.d.ts.map +1 -1
  108. package/build/commands/shared/serveClient.js +1 -234
  109. package/build/commands/shared/serveClient.js.map +1 -1
  110. package/build/commands/wait/wait.js +1 -1
  111. package/build/commands/wait/wait.js.map +1 -1
  112. package/build/config/configManager.d.ts.map +1 -1
  113. package/build/config/configManager.js +19 -6
  114. package/build/config/configManager.js.map +1 -1
  115. package/build/config/configuredServerTargets.d.ts +1 -0
  116. package/build/config/configuredServerTargets.d.ts.map +1 -1
  117. package/build/config/configuredServerTargets.js +6 -0
  118. package/build/config/configuredServerTargets.js.map +1 -1
  119. package/build/config/envProcessor.d.ts.map +1 -1
  120. package/build/config/envProcessor.js +26 -1
  121. package/build/config/envProcessor.js.map +1 -1
  122. package/build/constants/auth.d.ts +7 -0
  123. package/build/constants/auth.d.ts.map +1 -1
  124. package/build/constants/auth.js +6 -1
  125. package/build/constants/auth.js.map +1 -1
  126. package/build/constants/mcp.d.ts +2 -2
  127. package/build/constants/mcp.d.ts.map +1 -1
  128. package/build/constants/mcp.js +1 -1
  129. package/build/core/capabilities/capabilityAggregator.d.ts +18 -88
  130. package/build/core/capabilities/capabilityAggregator.d.ts.map +1 -1
  131. package/build/core/capabilities/capabilityAggregator.js +75 -269
  132. package/build/core/capabilities/capabilityAggregator.js.map +1 -1
  133. package/build/core/capabilities/capabilityCatalog.d.ts +3 -4
  134. package/build/core/capabilities/capabilityCatalog.d.ts.map +1 -1
  135. package/build/core/capabilities/capabilityCatalog.js +46 -16
  136. package/build/core/capabilities/capabilityCatalog.js.map +1 -1
  137. package/build/core/capabilities/capabilityManager.d.ts +9 -32
  138. package/build/core/capabilities/capabilityManager.d.ts.map +1 -1
  139. package/build/core/capabilities/capabilityManager.js +5 -4
  140. package/build/core/capabilities/capabilityManager.js.map +1 -1
  141. package/build/core/capabilities/capabilityNotificationFacts.js +1 -1
  142. package/build/core/capabilities/capabilityNotificationFacts.js.map +1 -1
  143. package/build/core/capabilities/capabilityPagination.d.ts +2 -0
  144. package/build/core/capabilities/capabilityPagination.d.ts.map +1 -1
  145. package/build/core/capabilities/capabilityPagination.js +59 -32
  146. package/build/core/capabilities/capabilityPagination.js.map +1 -1
  147. package/build/core/capabilities/catalogGeneration.d.ts +47 -0
  148. package/build/core/capabilities/catalogGeneration.d.ts.map +1 -0
  149. package/build/core/capabilities/catalogGeneration.js +145 -0
  150. package/build/core/capabilities/catalogGeneration.js.map +1 -0
  151. package/build/core/capabilities/configuredToolSnapshot.d.ts +1 -1
  152. package/build/core/capabilities/configuredToolSnapshot.d.ts.map +1 -1
  153. package/build/core/capabilities/configuredToolSnapshot.js.map +1 -1
  154. package/build/core/capabilities/internal/discoveryTools.d.ts +1 -7
  155. package/build/core/capabilities/internal/discoveryTools.d.ts.map +1 -1
  156. package/build/core/capabilities/internal/discoveryTools.js +6 -0
  157. package/build/core/capabilities/internal/discoveryTools.js.map +1 -1
  158. package/build/core/capabilities/internal/installationTools.d.ts +1 -7
  159. package/build/core/capabilities/internal/installationTools.d.ts.map +1 -1
  160. package/build/core/capabilities/internal/installationTools.js +6 -0
  161. package/build/core/capabilities/internal/installationTools.js.map +1 -1
  162. package/build/core/capabilities/internal/lazyTools.d.ts +1 -1
  163. package/build/core/capabilities/internal/lazyTools.d.ts.map +1 -1
  164. package/build/core/capabilities/internal/lazyTools.js.map +1 -1
  165. package/build/core/capabilities/internal/managementTools.d.ts +1 -7
  166. package/build/core/capabilities/internal/managementTools.d.ts.map +1 -1
  167. package/build/core/capabilities/internal/managementTools.js +6 -0
  168. package/build/core/capabilities/internal/managementTools.js.map +1 -1
  169. package/build/core/capabilities/internalCapabilitiesProvider.d.ts +1 -1
  170. package/build/core/capabilities/internalCapabilitiesProvider.d.ts.map +1 -1
  171. package/build/core/capabilities/internalCapabilitiesProvider.js.map +1 -1
  172. package/build/core/capabilities/lazyLoadingOrchestrator.d.ts.map +1 -1
  173. package/build/core/capabilities/lazyLoadingOrchestrator.js +19 -78
  174. package/build/core/capabilities/lazyLoadingOrchestrator.js.map +1 -1
  175. package/build/core/capabilities/metaToolProvider.d.ts +1 -1
  176. package/build/core/capabilities/metaToolProvider.d.ts.map +1 -1
  177. package/build/core/capabilities/metaToolProvider.js.map +1 -1
  178. package/build/core/capabilities/runtimeCapabilityCatalog.d.ts +48 -0
  179. package/build/core/capabilities/runtimeCapabilityCatalog.d.ts.map +1 -0
  180. package/build/core/capabilities/runtimeCapabilityCatalog.js +409 -0
  181. package/build/core/capabilities/runtimeCapabilityCatalog.js.map +1 -0
  182. package/build/core/capabilities/schemaCache.d.ts +1 -1
  183. package/build/core/capabilities/schemaCache.d.ts.map +1 -1
  184. package/build/core/capabilities/schemaCache.js.map +1 -1
  185. package/build/core/capabilities/schemas/metaToolSchemas.d.ts +3 -3
  186. package/build/core/capabilities/toolRegistry.d.ts +11 -1
  187. package/build/core/capabilities/toolRegistry.d.ts.map +1 -1
  188. package/build/core/capabilities/toolRegistry.js +51 -32
  189. package/build/core/capabilities/toolRegistry.js.map +1 -1
  190. package/build/core/client/clientFactory.d.ts +1 -6
  191. package/build/core/client/clientFactory.d.ts.map +1 -1
  192. package/build/core/client/clientFactory.js +1 -35
  193. package/build/core/client/clientFactory.js.map +1 -1
  194. package/build/core/client/clientManager.d.ts +1 -89
  195. package/build/core/client/clientManager.d.ts.map +1 -1
  196. package/build/core/client/clientManager.js +1 -728
  197. package/build/core/client/clientManager.js.map +1 -1
  198. package/build/core/client/connectedClient.d.ts +1 -6
  199. package/build/core/client/connectedClient.d.ts.map +1 -1
  200. package/build/core/client/connectionHandler.d.ts +1 -8
  201. package/build/core/client/connectionHandler.d.ts.map +1 -1
  202. package/build/core/client/connectionHandler.js +1 -96
  203. package/build/core/client/connectionHandler.js.map +1 -1
  204. package/build/core/client/legacyAdapterRequest.d.ts +6 -0
  205. package/build/core/client/legacyAdapterRequest.d.ts.map +1 -0
  206. package/build/core/client/legacyAdapterRequest.js +55 -0
  207. package/build/core/client/legacyAdapterRequest.js.map +1 -0
  208. package/build/core/client/oauthFlowHandler.d.ts +1 -9
  209. package/build/core/client/oauthFlowHandler.d.ts.map +1 -1
  210. package/build/core/client/oauthFlowHandler.js +1 -80
  211. package/build/core/client/oauthFlowHandler.js.map +1 -1
  212. package/build/core/client/postAuthOAuthRecovery.d.ts +2 -2
  213. package/build/core/client/postAuthOAuthRecovery.d.ts.map +1 -1
  214. package/build/core/client/postAuthOAuthRecovery.js +4 -16
  215. package/build/core/client/postAuthOAuthRecovery.js.map +1 -1
  216. package/build/core/client/recreateHttpTransportOptions.d.ts +1 -13
  217. package/build/core/client/recreateHttpTransportOptions.d.ts.map +1 -1
  218. package/build/core/client/renderableOutboundConnection.d.ts +5 -0
  219. package/build/core/client/renderableOutboundConnection.d.ts.map +1 -0
  220. package/build/core/client/renderableOutboundConnection.js +38 -0
  221. package/build/core/client/renderableOutboundConnection.js.map +1 -0
  222. package/build/core/client/transportRecreationState.d.ts +1 -10
  223. package/build/core/client/transportRecreationState.d.ts.map +1 -1
  224. package/build/core/client/transportRecreator.d.ts +1 -13
  225. package/build/core/client/transportRecreator.d.ts.map +1 -1
  226. package/build/core/client/transportRecreator.js +1 -51
  227. package/build/core/client/transportRecreator.js.map +1 -1
  228. package/build/core/client/types.d.ts +1 -6
  229. package/build/core/client/types.d.ts.map +1 -1
  230. package/build/core/client/types.js +1 -10
  231. package/build/core/client/types.js.map +1 -1
  232. package/build/core/configChangeHandler.d.ts.map +1 -1
  233. package/build/core/configChangeHandler.js +2 -5
  234. package/build/core/configChangeHandler.js.map +1 -1
  235. package/build/core/context/templateContextTrust.d.ts.map +1 -1
  236. package/build/core/context/templateContextTrust.js +22 -4
  237. package/build/core/context/templateContextTrust.js.map +1 -1
  238. package/build/core/filtering/clientFiltering.d.ts +1 -1
  239. package/build/core/filtering/clientFiltering.d.ts.map +1 -1
  240. package/build/core/filtering/clientFiltering.js +3 -3
  241. package/build/core/filtering/clientFiltering.js.map +1 -1
  242. package/build/core/filtering/filteringService.d.ts +1 -1
  243. package/build/core/filtering/filteringService.d.ts.map +1 -1
  244. package/build/core/filtering/filteringService.js +3 -3
  245. package/build/core/filtering/filteringService.js.map +1 -1
  246. package/build/core/loading/backendLoadingPolicy.d.ts +11 -0
  247. package/build/core/loading/backendLoadingPolicy.d.ts.map +1 -0
  248. package/build/core/loading/backendLoadingPolicy.js +10 -0
  249. package/build/core/loading/backendLoadingPolicy.js.map +1 -0
  250. package/build/core/loading/mcpLoadingManager.d.ts +12 -25
  251. package/build/core/loading/mcpLoadingManager.d.ts.map +1 -1
  252. package/build/core/loading/mcpLoadingManager.js +116 -70
  253. package/build/core/loading/mcpLoadingManager.js.map +1 -1
  254. package/build/core/notifications/notificationManager.d.ts +3 -2
  255. package/build/core/notifications/notificationManager.d.ts.map +1 -1
  256. package/build/core/notifications/notificationManager.js +13 -11
  257. package/build/core/notifications/notificationManager.js.map +1 -1
  258. package/build/core/protocol/notificationHandlers.d.ts +1 -13
  259. package/build/core/protocol/notificationHandlers.d.ts.map +1 -1
  260. package/build/core/protocol/notificationHandlers.js +1 -123
  261. package/build/core/protocol/notificationHandlers.js.map +1 -1
  262. package/build/core/protocol/promptRequestHandlers.d.ts +1 -3
  263. package/build/core/protocol/promptRequestHandlers.d.ts.map +1 -1
  264. package/build/core/protocol/promptRequestHandlers.js +1 -72
  265. package/build/core/protocol/promptRequestHandlers.js.map +1 -1
  266. package/build/core/protocol/requestHandlerUtils.d.ts.map +1 -1
  267. package/build/core/protocol/requestHandlerUtils.js +5 -24
  268. package/build/core/protocol/requestHandlerUtils.js.map +1 -1
  269. package/build/core/protocol/requestHandlers.d.ts +1 -12
  270. package/build/core/protocol/requestHandlers.d.ts.map +1 -1
  271. package/build/core/protocol/requestHandlers.js +1 -92
  272. package/build/core/protocol/requestHandlers.js.map +1 -1
  273. package/build/core/protocol/resourceRequestHandlers.d.ts +1 -2
  274. package/build/core/protocol/resourceRequestHandlers.d.ts.map +1 -1
  275. package/build/core/protocol/resourceRequestHandlers.js +1 -95
  276. package/build/core/protocol/resourceRequestHandlers.js.map +1 -1
  277. package/build/core/protocol/toolRequestHandlers.d.ts +1 -3
  278. package/build/core/protocol/toolRequestHandlers.d.ts.map +1 -1
  279. package/build/core/protocol/toolRequestHandlers.js +1 -187
  280. package/build/core/protocol/toolRequestHandlers.js.map +1 -1
  281. package/build/core/server/agentConfig.d.ts +26 -0
  282. package/build/core/server/agentConfig.d.ts.map +1 -1
  283. package/build/core/server/agentConfig.js +11 -0
  284. package/build/core/server/agentConfig.js.map +1 -1
  285. package/build/core/server/clientInstanceFactory.d.ts +1 -13
  286. package/build/core/server/clientInstanceFactory.d.ts.map +1 -1
  287. package/build/core/server/clientInstanceFactory.js +1 -48
  288. package/build/core/server/clientInstanceFactory.js.map +1 -1
  289. package/build/core/server/clientInstancePool.d.ts +1 -117
  290. package/build/core/server/clientInstancePool.d.ts.map +1 -1
  291. package/build/core/server/clientInstancePool.js +1 -599
  292. package/build/core/server/clientInstancePool.js.map +1 -1
  293. package/build/core/server/clientInstancePoolTypes.d.ts +1 -59
  294. package/build/core/server/clientInstancePoolTypes.d.ts.map +1 -1
  295. package/build/core/server/clientInstancePoolTypes.js +1 -9
  296. package/build/core/server/clientInstancePoolTypes.js.map +1 -1
  297. package/build/core/server/connectionManager.d.ts +1 -79
  298. package/build/core/server/connectionManager.d.ts.map +1 -1
  299. package/build/core/server/connectionManager.js +1 -262
  300. package/build/core/server/connectionManager.js.map +1 -1
  301. package/build/core/server/disabledTools.d.ts +7 -1
  302. package/build/core/server/disabledTools.d.ts.map +1 -1
  303. package/build/core/server/disabledTools.js +13 -0
  304. package/build/core/server/disabledTools.js.map +1 -1
  305. package/build/core/server/mcpServerLifecycleManager.d.ts +1 -58
  306. package/build/core/server/mcpServerLifecycleManager.d.ts.map +1 -1
  307. package/build/core/server/mcpServerLifecycleManager.js +1 -271
  308. package/build/core/server/mcpServerLifecycleManager.js.map +1 -1
  309. package/build/core/server/requestContextPreparation.d.ts +1 -38
  310. package/build/core/server/requestContextPreparation.d.ts.map +1 -1
  311. package/build/core/server/requestContextPreparation.js +1 -48
  312. package/build/core/server/requestContextPreparation.js.map +1 -1
  313. package/build/core/server/serverManager.d.ts +1 -130
  314. package/build/core/server/serverManager.d.ts.map +1 -1
  315. package/build/core/server/serverManager.js +1 -456
  316. package/build/core/server/serverManager.js.map +1 -1
  317. package/build/core/server/templateServerCleanup.d.ts +1 -22
  318. package/build/core/server/templateServerCleanup.d.ts.map +1 -1
  319. package/build/core/server/templateServerCleanup.js +1 -160
  320. package/build/core/server/templateServerCleanup.js.map +1 -1
  321. package/build/core/server/templateServerManager.d.ts +1 -141
  322. package/build/core/server/templateServerManager.d.ts.map +1 -1
  323. package/build/core/server/templateServerManager.js +1 -548
  324. package/build/core/server/templateServerManager.js.map +1 -1
  325. package/build/core/server/toolDescriptionOverrides.d.ts +5 -1
  326. package/build/core/server/toolDescriptionOverrides.d.ts.map +1 -1
  327. package/build/core/server/toolDescriptionOverrides.js +6 -0
  328. package/build/core/server/toolDescriptionOverrides.js.map +1 -1
  329. package/build/core/tools/handlers/serverManagementHandler.d.ts +29 -21
  330. package/build/core/tools/handlers/serverManagementHandler.d.ts.map +1 -1
  331. package/build/core/tools/handlers/serverManagementHandler.js +1 -1
  332. package/build/core/tools/handlers/serverManagementHandler.js.map +1 -1
  333. package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts +2 -1
  334. package/build/core/tools/internal/adapters/helpers/configTransformers.d.ts.map +1 -1
  335. package/build/core/tools/internal/adapters/management/types.d.ts +17 -7
  336. package/build/core/tools/internal/adapters/management/types.d.ts.map +1 -1
  337. package/build/core/tools/internal/managementHandlers.d.ts.map +1 -1
  338. package/build/core/tools/internal/managementHandlers.js +11 -2
  339. package/build/core/tools/internal/managementHandlers.js.map +1 -1
  340. package/build/core/tools/internal/schemas/discovery.d.ts +5 -5
  341. package/build/core/tools/internal/schemas/index.d.ts +15 -15
  342. package/build/core/tools/internal/schemas/installation.d.ts +2 -2
  343. package/build/core/tools/internal/schemas/management.d.ts +8 -8
  344. package/build/core/types/client.d.ts +30 -17
  345. package/build/core/types/client.d.ts.map +1 -1
  346. package/build/core/types/client.js.map +1 -1
  347. package/build/core/types/server.d.ts +16 -9
  348. package/build/core/types/server.d.ts.map +1 -1
  349. package/build/core/types/server.js.map +1 -1
  350. package/build/core/types/transport.d.ts +100 -21
  351. package/build/core/types/transport.d.ts.map +1 -1
  352. package/build/core/types/transport.js +76 -0
  353. package/build/core/types/transport.js.map +1 -1
  354. package/build/core/validation/CustomJsonSchemaValidator.d.ts +1 -62
  355. package/build/core/validation/CustomJsonSchemaValidator.d.ts.map +1 -1
  356. package/build/core/validation/CustomJsonSchemaValidator.js +1 -309
  357. package/build/core/validation/CustomJsonSchemaValidator.js.map +1 -1
  358. package/build/domains/admin/adminConfiguredServerService.d.ts +146 -2
  359. package/build/domains/admin/adminConfiguredServerService.d.ts.map +1 -1
  360. package/build/domains/admin/adminConfiguredServerService.js +733 -81
  361. package/build/domains/admin/adminConfiguredServerService.js.map +1 -1
  362. package/build/domains/admin/adminDomain.d.ts +5 -0
  363. package/build/domains/admin/adminDomain.d.ts.map +1 -1
  364. package/build/domains/admin/adminDomain.js +11 -0
  365. package/build/domains/admin/adminDomain.js.map +1 -1
  366. package/build/domains/admin/adminInstructionPreviewRuntime.d.ts.map +1 -1
  367. package/build/domains/admin/adminInstructionPreviewRuntime.js +2 -9
  368. package/build/domains/admin/adminInstructionPreviewRuntime.js.map +1 -1
  369. package/build/domains/admin/adminOperationService.d.ts +1 -0
  370. package/build/domains/admin/adminOperationService.d.ts.map +1 -1
  371. package/build/domains/admin/adminOperationService.js +6 -2
  372. package/build/domains/admin/adminOperationService.js.map +1 -1
  373. package/build/domains/admin/configuredToolInventory.d.ts.map +1 -1
  374. package/build/domains/admin/configuredToolInventory.js.map +1 -1
  375. package/build/domains/admin/runtimeConfiguredToolInspectionService.d.ts.map +1 -1
  376. package/build/domains/admin/runtimeConfiguredToolInspectionService.js +6 -12
  377. package/build/domains/admin/runtimeConfiguredToolInspectionService.js.map +1 -1
  378. package/build/domains/admin/runtimeServerManagerBackendRestartService.js +1 -1
  379. package/build/domains/admin/runtimeServerManagerBackendRestartService.js.map +1 -1
  380. package/build/domains/admin/templateServerDefinitionAnalyzer.d.ts +26 -0
  381. package/build/domains/admin/templateServerDefinitionAnalyzer.d.ts.map +1 -0
  382. package/build/domains/admin/templateServerDefinitionAnalyzer.js +148 -0
  383. package/build/domains/admin/templateServerDefinitionAnalyzer.js.map +1 -0
  384. package/build/domains/config-change/configChange.d.ts +1 -1
  385. package/build/domains/config-change/configChange.d.ts.map +1 -1
  386. package/build/domains/config-change/configChange.js +168 -49
  387. package/build/domains/config-change/configChange.js.map +1 -1
  388. package/build/domains/config-change/types.d.ts +16 -2
  389. package/build/domains/config-change/types.d.ts.map +1 -1
  390. package/build/domains/registry/mcpRegistryClient.d.ts +3 -3
  391. package/build/domains/registry/mcpRegistryClient.d.ts.map +1 -1
  392. package/build/domains/registry/mcpRegistryClient.js +8 -7
  393. package/build/domains/registry/mcpRegistryClient.js.map +1 -1
  394. package/build/gateway/adapters/index.d.ts +3 -0
  395. package/build/gateway/adapters/index.d.ts.map +1 -0
  396. package/build/gateway/adapters/index.js +3 -0
  397. package/build/gateway/adapters/index.js.map +1 -0
  398. package/build/gateway/adapters/legacy/index.d.ts +3 -0
  399. package/build/gateway/adapters/legacy/index.d.ts.map +1 -0
  400. package/build/gateway/adapters/legacy/index.js +3 -0
  401. package/build/gateway/adapters/legacy/index.js.map +1 -0
  402. package/build/gateway/adapters/legacy/legacyEraPin.d.ts +3 -0
  403. package/build/gateway/adapters/legacy/legacyEraPin.d.ts.map +1 -0
  404. package/build/gateway/adapters/legacy/legacyEraPin.js +12 -0
  405. package/build/gateway/adapters/legacy/legacyEraPin.js.map +1 -0
  406. package/build/gateway/adapters/legacy/legacyInboundEraAdapter.d.ts +19 -0
  407. package/build/gateway/adapters/legacy/legacyInboundEraAdapter.d.ts.map +1 -0
  408. package/build/gateway/adapters/legacy/legacyInboundEraAdapter.js +86 -0
  409. package/build/gateway/adapters/legacy/legacyInboundEraAdapter.js.map +1 -0
  410. package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.d.ts +19 -0
  411. package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.d.ts.map +1 -0
  412. package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.js +76 -0
  413. package/build/gateway/adapters/legacy/legacyOutboundEraAdapter.js.map +1 -0
  414. package/build/gateway/adapters/modern/index.d.ts +3 -0
  415. package/build/gateway/adapters/modern/index.d.ts.map +1 -0
  416. package/build/gateway/adapters/modern/index.js +3 -0
  417. package/build/gateway/adapters/modern/index.js.map +1 -0
  418. package/build/gateway/adapters/modern/modernInboundEraAdapter.d.ts +32 -0
  419. package/build/gateway/adapters/modern/modernInboundEraAdapter.d.ts.map +1 -0
  420. package/build/gateway/adapters/modern/modernInboundEraAdapter.js +150 -0
  421. package/build/gateway/adapters/modern/modernInboundEraAdapter.js.map +1 -0
  422. package/build/gateway/adapters/modern/modernOutboundEraAdapter.d.ts +24 -0
  423. package/build/gateway/adapters/modern/modernOutboundEraAdapter.d.ts.map +1 -0
  424. package/build/gateway/adapters/modern/modernOutboundEraAdapter.js +75 -0
  425. package/build/gateway/adapters/modern/modernOutboundEraAdapter.js.map +1 -0
  426. package/build/gateway/adapters/modern/modernPin.d.ts +9 -0
  427. package/build/gateway/adapters/modern/modernPin.d.ts.map +1 -0
  428. package/build/gateway/adapters/modern/modernPin.js +14 -0
  429. package/build/gateway/adapters/modern/modernPin.js.map +1 -0
  430. package/build/gateway/contracts/effectiveRequestAuthority.d.ts +12 -0
  431. package/build/gateway/contracts/effectiveRequestAuthority.d.ts.map +1 -0
  432. package/build/gateway/contracts/effectiveRequestAuthority.js +30 -0
  433. package/build/gateway/contracts/effectiveRequestAuthority.js.map +1 -0
  434. package/build/gateway/contracts/gatewayFailure.d.ts +25 -0
  435. package/build/gateway/contracts/gatewayFailure.d.ts.map +1 -0
  436. package/build/gateway/contracts/gatewayFailure.js +72 -0
  437. package/build/gateway/contracts/gatewayFailure.js.map +1 -0
  438. package/build/gateway/contracts/gatewayRequest.d.ts +32 -0
  439. package/build/gateway/contracts/gatewayRequest.d.ts.map +1 -0
  440. package/build/gateway/contracts/gatewayRequest.js +50 -0
  441. package/build/gateway/contracts/gatewayRequest.js.map +1 -0
  442. package/build/gateway/contracts/immutableJson.d.ts +6 -0
  443. package/build/gateway/contracts/immutableJson.d.ts.map +1 -0
  444. package/build/gateway/contracts/immutableJson.js +14 -0
  445. package/build/gateway/contracts/immutableJson.js.map +1 -0
  446. package/build/gateway/contracts/index.d.ts +6 -0
  447. package/build/gateway/contracts/index.d.ts.map +1 -0
  448. package/build/gateway/contracts/index.js +6 -0
  449. package/build/gateway/contracts/index.js.map +1 -0
  450. package/build/gateway/contracts/protocolEra.d.ts +22 -0
  451. package/build/gateway/contracts/protocolEra.d.ts.map +1 -0
  452. package/build/gateway/contracts/protocolEra.js +68 -0
  453. package/build/gateway/contracts/protocolEra.js.map +1 -0
  454. package/build/gateway/core/gatewayDispatcher.d.ts +15 -0
  455. package/build/gateway/core/gatewayDispatcher.d.ts.map +1 -0
  456. package/build/gateway/core/gatewayDispatcher.js +77 -0
  457. package/build/gateway/core/gatewayDispatcher.js.map +1 -0
  458. package/build/gateway/core/gatewaySession.d.ts +13 -0
  459. package/build/gateway/core/gatewaySession.d.ts.map +1 -0
  460. package/build/gateway/core/gatewaySession.js +61 -0
  461. package/build/gateway/core/gatewaySession.js.map +1 -0
  462. package/build/gateway/core/index.d.ts +3 -0
  463. package/build/gateway/core/index.d.ts.map +1 -0
  464. package/build/gateway/core/index.js +3 -0
  465. package/build/gateway/core/index.js.map +1 -0
  466. package/build/gateway/index.d.ts +5 -0
  467. package/build/gateway/index.d.ts.map +1 -0
  468. package/build/gateway/index.js +5 -0
  469. package/build/gateway/index.js.map +1 -0
  470. package/build/gateway/ports/inboundEraAdapter.d.ts +27 -0
  471. package/build/gateway/ports/inboundEraAdapter.d.ts.map +1 -0
  472. package/build/gateway/ports/inboundEraAdapter.js +2 -0
  473. package/build/gateway/ports/inboundEraAdapter.js.map +1 -0
  474. package/build/gateway/ports/index.d.ts +3 -0
  475. package/build/gateway/ports/index.d.ts.map +1 -0
  476. package/build/gateway/ports/index.js +3 -0
  477. package/build/gateway/ports/index.js.map +1 -0
  478. package/build/gateway/ports/outboundEraAdapter.d.ts +16 -0
  479. package/build/gateway/ports/outboundEraAdapter.d.ts.map +1 -0
  480. package/build/gateway/ports/outboundEraAdapter.js +2 -0
  481. package/build/gateway/ports/outboundEraAdapter.js.map +1 -0
  482. package/build/logger/mcpLoggingEnhancer.d.ts +1 -5
  483. package/build/logger/mcpLoggingEnhancer.d.ts.map +1 -1
  484. package/build/logger/mcpLoggingEnhancer.js +1 -192
  485. package/build/logger/mcpLoggingEnhancer.js.map +1 -1
  486. package/build/logger/secureLogger.d.ts.map +1 -1
  487. package/build/logger/secureLogger.js +160 -23
  488. package/build/logger/secureLogger.js.map +1 -1
  489. package/build/sdk/contracts/index.d.ts +5 -0
  490. package/build/sdk/contracts/index.d.ts.map +1 -0
  491. package/build/sdk/contracts/index.js +5 -0
  492. package/build/sdk/contracts/index.js.map +1 -0
  493. package/build/sdk/contracts/jsonValue.d.ts +21 -0
  494. package/build/sdk/contracts/jsonValue.d.ts.map +1 -0
  495. package/build/sdk/contracts/jsonValue.js +127 -0
  496. package/build/sdk/contracts/jsonValue.js.map +1 -0
  497. package/build/sdk/contracts/legacySdkAdapter.d.ts +73 -0
  498. package/build/sdk/contracts/legacySdkAdapter.d.ts.map +1 -0
  499. package/build/sdk/contracts/legacySdkAdapter.js +7 -0
  500. package/build/sdk/contracts/legacySdkAdapter.js.map +1 -0
  501. package/build/sdk/contracts/oneMcpProtocolError.d.ts +18 -0
  502. package/build/sdk/contracts/oneMcpProtocolError.d.ts.map +1 -0
  503. package/build/sdk/contracts/oneMcpProtocolError.js +39 -0
  504. package/build/sdk/contracts/oneMcpProtocolError.js.map +1 -0
  505. package/build/sdk/contracts/protocol.d.ts +240 -0
  506. package/build/sdk/contracts/protocol.d.ts.map +1 -0
  507. package/build/sdk/contracts/protocol.js +187 -0
  508. package/build/sdk/contracts/protocol.js.map +1 -0
  509. package/build/sdk/legacy/auth/sdkOAuthClientProvider.d.ts +98 -0
  510. package/build/sdk/legacy/auth/sdkOAuthClientProvider.d.ts.map +1 -0
  511. package/build/sdk/legacy/auth/sdkOAuthClientProvider.js +243 -0
  512. package/build/sdk/legacy/auth/sdkOAuthClientProvider.js.map +1 -0
  513. package/build/sdk/legacy/auth/sdkOAuthServerProvider.d.ts +69 -0
  514. package/build/sdk/legacy/auth/sdkOAuthServerProvider.d.ts.map +1 -0
  515. package/build/sdk/legacy/auth/sdkOAuthServerProvider.js +519 -0
  516. package/build/sdk/legacy/auth/sdkOAuthServerProvider.js.map +1 -0
  517. package/build/sdk/legacy/client/auth.d.ts +2 -0
  518. package/build/sdk/legacy/client/auth.d.ts.map +1 -0
  519. package/build/sdk/legacy/client/auth.js +2 -0
  520. package/build/sdk/legacy/client/auth.js.map +1 -0
  521. package/build/sdk/legacy/client/index.d.ts +2 -0
  522. package/build/sdk/legacy/client/index.d.ts.map +1 -0
  523. package/build/sdk/legacy/client/index.js +2 -0
  524. package/build/sdk/legacy/client/index.js.map +1 -0
  525. package/build/sdk/legacy/client/runtime/clientFactory.d.ts +10 -0
  526. package/build/sdk/legacy/client/runtime/clientFactory.d.ts.map +1 -0
  527. package/build/sdk/legacy/client/runtime/clientFactory.js +56 -0
  528. package/build/sdk/legacy/client/runtime/clientFactory.js.map +1 -0
  529. package/build/sdk/legacy/client/runtime/clientManager.d.ts +94 -0
  530. package/build/sdk/legacy/client/runtime/clientManager.d.ts.map +1 -0
  531. package/build/sdk/legacy/client/runtime/clientManager.js +834 -0
  532. package/build/sdk/legacy/client/runtime/clientManager.js.map +1 -0
  533. package/build/sdk/legacy/client/runtime/connectedClient.d.ts +7 -0
  534. package/build/sdk/legacy/client/runtime/connectedClient.d.ts.map +1 -0
  535. package/build/sdk/legacy/client/runtime/connectedClient.js +2 -0
  536. package/build/sdk/legacy/client/runtime/connectedClient.js.map +1 -0
  537. package/build/sdk/legacy/client/runtime/connectionHandler.d.ts +10 -0
  538. package/build/sdk/legacy/client/runtime/connectionHandler.d.ts.map +1 -0
  539. package/build/sdk/legacy/client/runtime/connectionHandler.js +139 -0
  540. package/build/sdk/legacy/client/runtime/connectionHandler.js.map +1 -0
  541. package/build/sdk/legacy/client/runtime/legacyGatewayClientAdapter.d.ts +14 -0
  542. package/build/sdk/legacy/client/runtime/legacyGatewayClientAdapter.d.ts.map +1 -0
  543. package/build/sdk/legacy/client/runtime/legacyGatewayClientAdapter.js +66 -0
  544. package/build/sdk/legacy/client/runtime/legacyGatewayClientAdapter.js.map +1 -0
  545. package/build/sdk/legacy/client/runtime/legacyOutboundConnection.d.ts +50 -0
  546. package/build/sdk/legacy/client/runtime/legacyOutboundConnection.d.ts.map +1 -0
  547. package/build/sdk/legacy/client/runtime/legacyOutboundConnection.js +93 -0
  548. package/build/sdk/legacy/client/runtime/legacyOutboundConnection.js.map +1 -0
  549. package/build/sdk/legacy/client/runtime/legacySdkClientAdapter.d.ts +37 -0
  550. package/build/sdk/legacy/client/runtime/legacySdkClientAdapter.d.ts.map +1 -0
  551. package/build/sdk/legacy/client/runtime/legacySdkClientAdapter.js +240 -0
  552. package/build/sdk/legacy/client/runtime/legacySdkClientAdapter.js.map +1 -0
  553. package/build/sdk/legacy/client/runtime/legacyTransport.d.ts +32 -0
  554. package/build/sdk/legacy/client/runtime/legacyTransport.d.ts.map +1 -0
  555. package/build/sdk/legacy/client/runtime/legacyTransport.js +2 -0
  556. package/build/sdk/legacy/client/runtime/legacyTransport.js.map +1 -0
  557. package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.d.ts +40 -0
  558. package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.d.ts.map +1 -0
  559. package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.js +238 -0
  560. package/build/sdk/legacy/client/runtime/modernSdkClientAdapter.js.map +1 -0
  561. package/build/sdk/legacy/client/runtime/oauthFlowHandler.d.ts +12 -0
  562. package/build/sdk/legacy/client/runtime/oauthFlowHandler.d.ts.map +1 -0
  563. package/build/sdk/legacy/client/runtime/oauthFlowHandler.js +93 -0
  564. package/build/sdk/legacy/client/runtime/oauthFlowHandler.js.map +1 -0
  565. package/build/sdk/legacy/client/runtime/outboundRequestParams.d.ts +4 -0
  566. package/build/sdk/legacy/client/runtime/outboundRequestParams.d.ts.map +1 -0
  567. package/build/sdk/legacy/client/runtime/outboundRequestParams.js +8 -0
  568. package/build/sdk/legacy/client/runtime/outboundRequestParams.js.map +1 -0
  569. package/build/sdk/legacy/client/runtime/recreateHttpTransportOptions.d.ts +12 -0
  570. package/build/sdk/legacy/client/runtime/recreateHttpTransportOptions.d.ts.map +1 -0
  571. package/build/sdk/legacy/client/runtime/recreateHttpTransportOptions.js +2 -0
  572. package/build/sdk/legacy/client/runtime/recreateHttpTransportOptions.js.map +1 -0
  573. package/build/sdk/legacy/client/runtime/sdkClient.d.ts +5 -0
  574. package/build/sdk/legacy/client/runtime/sdkClient.d.ts.map +1 -0
  575. package/build/sdk/legacy/client/runtime/sdkClient.js +5 -0
  576. package/build/sdk/legacy/client/runtime/sdkClient.js.map +1 -0
  577. package/build/sdk/legacy/client/runtime/serveClient.d.ts +70 -0
  578. package/build/sdk/legacy/client/runtime/serveClient.d.ts.map +1 -0
  579. package/build/sdk/legacy/client/runtime/serveClient.js +235 -0
  580. package/build/sdk/legacy/client/runtime/serveClient.js.map +1 -0
  581. package/build/sdk/legacy/client/runtime/transportRecreationState.d.ts +14 -0
  582. package/build/sdk/legacy/client/runtime/transportRecreationState.d.ts.map +1 -0
  583. package/build/sdk/legacy/client/runtime/transportRecreationState.js +2 -0
  584. package/build/sdk/legacy/client/runtime/transportRecreationState.js.map +1 -0
  585. package/build/sdk/legacy/client/runtime/transportRecreator.d.ts +14 -0
  586. package/build/sdk/legacy/client/runtime/transportRecreator.d.ts.map +1 -0
  587. package/build/sdk/legacy/client/runtime/transportRecreator.js +89 -0
  588. package/build/sdk/legacy/client/runtime/transportRecreator.js.map +1 -0
  589. package/build/sdk/legacy/client/runtime/types.d.ts +9 -0
  590. package/build/sdk/legacy/client/runtime/types.d.ts.map +1 -0
  591. package/build/sdk/legacy/client/runtime/types.js +13 -0
  592. package/build/sdk/legacy/client/runtime/types.js.map +1 -0
  593. package/build/sdk/legacy/client/sse.d.ts +2 -0
  594. package/build/sdk/legacy/client/sse.d.ts.map +1 -0
  595. package/build/sdk/legacy/client/sse.js +2 -0
  596. package/build/sdk/legacy/client/sse.js.map +1 -0
  597. package/build/sdk/legacy/client/stdio.d.ts +2 -0
  598. package/build/sdk/legacy/client/stdio.d.ts.map +1 -0
  599. package/build/sdk/legacy/client/stdio.js +2 -0
  600. package/build/sdk/legacy/client/stdio.js.map +1 -0
  601. package/build/sdk/legacy/client/streamableHttp.d.ts +2 -0
  602. package/build/sdk/legacy/client/streamableHttp.d.ts.map +1 -0
  603. package/build/sdk/legacy/client/streamableHttp.js +2 -0
  604. package/build/sdk/legacy/client/streamableHttp.js.map +1 -0
  605. package/build/sdk/legacy/commands/serve.d.ts +90 -0
  606. package/build/sdk/legacy/commands/serve.d.ts.map +1 -0
  607. package/build/sdk/legacy/commands/serve.js +561 -0
  608. package/build/sdk/legacy/commands/serve.js.map +1 -0
  609. package/build/sdk/legacy/server/auth/clients.d.ts +2 -0
  610. package/build/sdk/legacy/server/auth/clients.d.ts.map +1 -0
  611. package/build/sdk/legacy/server/auth/clients.js +2 -0
  612. package/build/sdk/legacy/server/auth/clients.js.map +1 -0
  613. package/build/sdk/legacy/server/auth/errors.d.ts +2 -0
  614. package/build/sdk/legacy/server/auth/errors.d.ts.map +1 -0
  615. package/build/sdk/legacy/server/auth/errors.js +2 -0
  616. package/build/sdk/legacy/server/auth/errors.js.map +1 -0
  617. package/build/sdk/legacy/server/auth/middleware/bearerAuth.d.ts +2 -0
  618. package/build/sdk/legacy/server/auth/middleware/bearerAuth.d.ts.map +1 -0
  619. package/build/sdk/legacy/server/auth/middleware/bearerAuth.js +2 -0
  620. package/build/sdk/legacy/server/auth/middleware/bearerAuth.js.map +1 -0
  621. package/build/sdk/legacy/server/auth/provider.d.ts +2 -0
  622. package/build/sdk/legacy/server/auth/provider.d.ts.map +1 -0
  623. package/build/sdk/legacy/server/auth/provider.js +2 -0
  624. package/build/sdk/legacy/server/auth/provider.js.map +1 -0
  625. package/build/sdk/legacy/server/auth/router.d.ts +2 -0
  626. package/build/sdk/legacy/server/auth/router.d.ts.map +1 -0
  627. package/build/sdk/legacy/server/auth/router.js +2 -0
  628. package/build/sdk/legacy/server/auth/router.js.map +1 -0
  629. package/build/sdk/legacy/server/auth/types.d.ts +2 -0
  630. package/build/sdk/legacy/server/auth/types.d.ts.map +1 -0
  631. package/build/sdk/legacy/server/auth/types.js +2 -0
  632. package/build/sdk/legacy/server/auth/types.js.map +1 -0
  633. package/build/sdk/legacy/server/index.d.ts +2 -0
  634. package/build/sdk/legacy/server/index.d.ts.map +1 -0
  635. package/build/sdk/legacy/server/index.js +2 -0
  636. package/build/sdk/legacy/server/index.js.map +1 -0
  637. package/build/sdk/legacy/server/protocol/notificationHandlers.d.ts +15 -0
  638. package/build/sdk/legacy/server/protocol/notificationHandlers.d.ts.map +1 -0
  639. package/build/sdk/legacy/server/protocol/notificationHandlers.js +146 -0
  640. package/build/sdk/legacy/server/protocol/notificationHandlers.js.map +1 -0
  641. package/build/sdk/legacy/server/protocol/promptRequestHandlers.d.ts +5 -0
  642. package/build/sdk/legacy/server/protocol/promptRequestHandlers.d.ts.map +1 -0
  643. package/build/sdk/legacy/server/protocol/promptRequestHandlers.js +50 -0
  644. package/build/sdk/legacy/server/protocol/promptRequestHandlers.js.map +1 -0
  645. package/build/sdk/legacy/server/protocol/requestHandlers.d.ts +14 -0
  646. package/build/sdk/legacy/server/protocol/requestHandlers.d.ts.map +1 -0
  647. package/build/sdk/legacy/server/protocol/requestHandlers.js +96 -0
  648. package/build/sdk/legacy/server/protocol/requestHandlers.js.map +1 -0
  649. package/build/sdk/legacy/server/protocol/resourceRequestHandlers.d.ts +4 -0
  650. package/build/sdk/legacy/server/protocol/resourceRequestHandlers.d.ts.map +1 -0
  651. package/build/sdk/legacy/server/protocol/resourceRequestHandlers.js +62 -0
  652. package/build/sdk/legacy/server/protocol/resourceRequestHandlers.js.map +1 -0
  653. package/build/sdk/legacy/server/protocol/toolRequestHandlers.d.ts +5 -0
  654. package/build/sdk/legacy/server/protocol/toolRequestHandlers.d.ts.map +1 -0
  655. package/build/sdk/legacy/server/protocol/toolRequestHandlers.js +87 -0
  656. package/build/sdk/legacy/server/protocol/toolRequestHandlers.js.map +1 -0
  657. package/build/sdk/legacy/server/runtime/clientInstanceFactory.d.ts +14 -0
  658. package/build/sdk/legacy/server/runtime/clientInstanceFactory.d.ts.map +1 -0
  659. package/build/sdk/legacy/server/runtime/clientInstanceFactory.js +49 -0
  660. package/build/sdk/legacy/server/runtime/clientInstanceFactory.js.map +1 -0
  661. package/build/sdk/legacy/server/runtime/clientInstancePool.d.ts +116 -0
  662. package/build/sdk/legacy/server/runtime/clientInstancePool.d.ts.map +1 -0
  663. package/build/sdk/legacy/server/runtime/clientInstancePool.js +600 -0
  664. package/build/sdk/legacy/server/runtime/clientInstancePool.js.map +1 -0
  665. package/build/sdk/legacy/server/runtime/clientInstancePoolTypes.d.ts +67 -0
  666. package/build/sdk/legacy/server/runtime/clientInstancePoolTypes.d.ts.map +1 -0
  667. package/build/sdk/legacy/server/runtime/clientInstancePoolTypes.js +15 -0
  668. package/build/sdk/legacy/server/runtime/clientInstancePoolTypes.js.map +1 -0
  669. package/build/sdk/legacy/server/runtime/connectionManager.d.ts +82 -0
  670. package/build/sdk/legacy/server/runtime/connectionManager.d.ts.map +1 -0
  671. package/build/sdk/legacy/server/runtime/connectionManager.js +298 -0
  672. package/build/sdk/legacy/server/runtime/connectionManager.js.map +1 -0
  673. package/build/sdk/legacy/server/runtime/legacyInboundConnection.d.ts +17 -0
  674. package/build/sdk/legacy/server/runtime/legacyInboundConnection.d.ts.map +1 -0
  675. package/build/sdk/legacy/server/runtime/legacyInboundConnection.js +22 -0
  676. package/build/sdk/legacy/server/runtime/legacyInboundConnection.js.map +1 -0
  677. package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.d.ts +18 -0
  678. package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.d.ts.map +1 -0
  679. package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.js +82 -0
  680. package/build/sdk/legacy/server/runtime/legacySdkServerAdapter.js.map +1 -0
  681. package/build/sdk/legacy/server/runtime/mcpLoggingEnhancer.d.ts +6 -0
  682. package/build/sdk/legacy/server/runtime/mcpLoggingEnhancer.d.ts.map +1 -0
  683. package/build/sdk/legacy/server/runtime/mcpLoggingEnhancer.js +193 -0
  684. package/build/sdk/legacy/server/runtime/mcpLoggingEnhancer.js.map +1 -0
  685. package/build/sdk/legacy/server/runtime/mcpServerLifecycleManager.d.ts +60 -0
  686. package/build/sdk/legacy/server/runtime/mcpServerLifecycleManager.d.ts.map +1 -0
  687. package/build/sdk/legacy/server/runtime/mcpServerLifecycleManager.js +274 -0
  688. package/build/sdk/legacy/server/runtime/mcpServerLifecycleManager.js.map +1 -0
  689. package/build/sdk/legacy/server/runtime/requestContextPreparation.d.ts +39 -0
  690. package/build/sdk/legacy/server/runtime/requestContextPreparation.d.ts.map +1 -0
  691. package/build/sdk/legacy/server/runtime/requestContextPreparation.js +50 -0
  692. package/build/sdk/legacy/server/runtime/requestContextPreparation.js.map +1 -0
  693. package/build/sdk/legacy/server/runtime/serverManager.d.ts +132 -0
  694. package/build/sdk/legacy/server/runtime/serverManager.d.ts.map +1 -0
  695. package/build/sdk/legacy/server/runtime/serverManager.js +462 -0
  696. package/build/sdk/legacy/server/runtime/serverManager.js.map +1 -0
  697. package/build/sdk/legacy/server/runtime/templateServerCleanup.d.ts +23 -0
  698. package/build/sdk/legacy/server/runtime/templateServerCleanup.d.ts.map +1 -0
  699. package/build/sdk/legacy/server/runtime/templateServerCleanup.js +161 -0
  700. package/build/sdk/legacy/server/runtime/templateServerCleanup.js.map +1 -0
  701. package/build/sdk/legacy/server/runtime/templateServerManager.d.ts +155 -0
  702. package/build/sdk/legacy/server/runtime/templateServerManager.d.ts.map +1 -0
  703. package/build/sdk/legacy/server/runtime/templateServerManager.js +606 -0
  704. package/build/sdk/legacy/server/runtime/templateServerManager.js.map +1 -0
  705. package/build/sdk/legacy/server/sse.d.ts +2 -0
  706. package/build/sdk/legacy/server/sse.d.ts.map +1 -0
  707. package/build/sdk/legacy/server/sse.js +2 -0
  708. package/build/sdk/legacy/server/sse.js.map +1 -0
  709. package/build/sdk/legacy/server/stdio.d.ts +2 -0
  710. package/build/sdk/legacy/server/stdio.d.ts.map +1 -0
  711. package/build/sdk/legacy/server/stdio.js +2 -0
  712. package/build/sdk/legacy/server/stdio.js.map +1 -0
  713. package/build/sdk/legacy/server/streamableHttp.d.ts +2 -0
  714. package/build/sdk/legacy/server/streamableHttp.d.ts.map +1 -0
  715. package/build/sdk/legacy/server/streamableHttp.js +2 -0
  716. package/build/sdk/legacy/server/streamableHttp.js.map +1 -0
  717. package/build/sdk/legacy/shared/auth.d.ts +2 -0
  718. package/build/sdk/legacy/shared/auth.d.ts.map +1 -0
  719. package/build/sdk/legacy/shared/auth.js +2 -0
  720. package/build/sdk/legacy/shared/auth.js.map +1 -0
  721. package/build/sdk/legacy/shared/capabilityListCapture.d.ts +4 -0
  722. package/build/sdk/legacy/shared/capabilityListCapture.d.ts.map +1 -0
  723. package/build/sdk/legacy/shared/capabilityListCapture.js +30 -0
  724. package/build/sdk/legacy/shared/capabilityListCapture.js.map +1 -0
  725. package/build/sdk/legacy/shared/protocol.d.ts +2 -0
  726. package/build/sdk/legacy/shared/protocol.d.ts.map +1 -0
  727. package/build/sdk/legacy/shared/protocol.js +2 -0
  728. package/build/sdk/legacy/shared/protocol.js.map +1 -0
  729. package/build/sdk/legacy/shared/resourceTemplateRouting.d.ts +12 -0
  730. package/build/sdk/legacy/shared/resourceTemplateRouting.d.ts.map +1 -0
  731. package/build/sdk/legacy/shared/resourceTemplateRouting.js +66 -0
  732. package/build/sdk/legacy/shared/resourceTemplateRouting.js.map +1 -0
  733. package/build/sdk/legacy/shared/transport.d.ts +2 -0
  734. package/build/sdk/legacy/shared/transport.d.ts.map +1 -0
  735. package/build/sdk/legacy/shared/transport.js +2 -0
  736. package/build/sdk/legacy/shared/transport.js.map +1 -0
  737. package/build/sdk/legacy/transport/http/loggingSseTransport.d.ts +13 -0
  738. package/build/sdk/legacy/transport/http/loggingSseTransport.d.ts.map +1 -0
  739. package/build/sdk/legacy/transport/http/loggingSseTransport.js +43 -0
  740. package/build/sdk/legacy/transport/http/loggingSseTransport.js.map +1 -0
  741. package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.d.ts +91 -0
  742. package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -0
  743. package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.js +240 -0
  744. package/build/sdk/legacy/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -0
  745. package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.d.ts +14 -0
  746. package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.d.ts.map +1 -0
  747. package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.js +50 -0
  748. package/build/sdk/legacy/transport/http/modernInboundLegacyBridge.js.map +1 -0
  749. package/build/sdk/legacy/transport/http/restorableStreamableTransport.d.ts +58 -0
  750. package/build/sdk/legacy/transport/http/restorableStreamableTransport.d.ts.map +1 -0
  751. package/build/sdk/legacy/transport/http/restorableStreamableTransport.js +59 -0
  752. package/build/sdk/legacy/transport/http/restorableStreamableTransport.js.map +1 -0
  753. package/build/sdk/legacy/transport/http/routes/sseRoutes.d.ts +5 -0
  754. package/build/sdk/legacy/transport/http/routes/sseRoutes.d.ts.map +1 -0
  755. package/build/sdk/legacy/transport/http/routes/sseRoutes.js +105 -0
  756. package/build/sdk/legacy/transport/http/routes/sseRoutes.js.map +1 -0
  757. package/build/sdk/legacy/transport/http/server.d.ts +90 -0
  758. package/build/sdk/legacy/transport/http/server.d.ts.map +1 -0
  759. package/build/sdk/legacy/transport/http/server.js +487 -0
  760. package/build/sdk/legacy/transport/http/server.js.map +1 -0
  761. package/build/sdk/legacy/transport/http/streamableSessionLifecycle.d.ts +92 -0
  762. package/build/sdk/legacy/transport/http/streamableSessionLifecycle.d.ts.map +1 -0
  763. package/build/sdk/legacy/transport/http/streamableSessionLifecycle.js +372 -0
  764. package/build/sdk/legacy/transport/http/streamableSessionLifecycle.js.map +1 -0
  765. package/build/sdk/legacy/transport/restartableStdioTransport.d.ts +90 -0
  766. package/build/sdk/legacy/transport/restartableStdioTransport.d.ts.map +1 -0
  767. package/build/sdk/legacy/transport/restartableStdioTransport.js +192 -0
  768. package/build/sdk/legacy/transport/restartableStdioTransport.js.map +1 -0
  769. package/build/sdk/legacy/transport/stdioProxyTransport.d.ts +92 -0
  770. package/build/sdk/legacy/transport/stdioProxyTransport.d.ts.map +1 -0
  771. package/build/sdk/legacy/transport/stdioProxyTransport.js +388 -0
  772. package/build/sdk/legacy/transport/stdioProxyTransport.js.map +1 -0
  773. package/build/sdk/legacy/transport/transportFactory.d.ts +25 -0
  774. package/build/sdk/legacy/transport/transportFactory.d.ts.map +1 -0
  775. package/build/sdk/legacy/transport/transportFactory.js +404 -0
  776. package/build/sdk/legacy/transport/transportFactory.js.map +1 -0
  777. package/build/sdk/legacy/types.d.ts +2 -0
  778. package/build/sdk/legacy/types.d.ts.map +1 -0
  779. package/build/sdk/legacy/types.js +3 -0
  780. package/build/sdk/legacy/types.js.map +1 -0
  781. package/build/sdk/legacy/validation/CustomJsonSchemaValidator.d.ts +57 -0
  782. package/build/sdk/legacy/validation/CustomJsonSchemaValidator.d.ts.map +1 -0
  783. package/build/sdk/legacy/validation/CustomJsonSchemaValidator.js +316 -0
  784. package/build/sdk/legacy/validation/CustomJsonSchemaValidator.js.map +1 -0
  785. package/build/sdk/legacy/validation.d.ts +2 -0
  786. package/build/sdk/legacy/validation.d.ts.map +1 -0
  787. package/build/sdk/legacy/validation.js +2 -0
  788. package/build/sdk/legacy/validation.js.map +1 -0
  789. package/build/server.d.ts +2 -1
  790. package/build/server.d.ts.map +1 -1
  791. package/build/server.js +19 -9
  792. package/build/server.js.map +1 -1
  793. package/build/transport/http/loggingSseTransport.d.ts +1 -12
  794. package/build/transport/http/loggingSseTransport.d.ts.map +1 -1
  795. package/build/transport/http/loggingSseTransport.js +1 -42
  796. package/build/transport/http/loggingSseTransport.js.map +1 -1
  797. package/build/transport/http/middlewares/errorHandler.d.ts.map +1 -1
  798. package/build/transport/http/middlewares/errorHandler.js +18 -1
  799. package/build/transport/http/middlewares/errorHandler.js.map +1 -1
  800. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts +2 -90
  801. package/build/transport/http/middlewares/scopeAuthMiddleware.d.ts.map +1 -1
  802. package/build/transport/http/middlewares/scopeAuthMiddleware.js +2 -239
  803. package/build/transport/http/middlewares/scopeAuthMiddleware.js.map +1 -1
  804. package/build/transport/http/middlewares/securityMiddleware.d.ts +6 -0
  805. package/build/transport/http/middlewares/securityMiddleware.d.ts.map +1 -1
  806. package/build/transport/http/middlewares/securityMiddleware.js +35 -29
  807. package/build/transport/http/middlewares/securityMiddleware.js.map +1 -1
  808. package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
  809. package/build/transport/http/middlewares/tagsExtractor.js +1 -1
  810. package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
  811. package/build/transport/http/restorableStreamableTransport.d.ts +2 -57
  812. package/build/transport/http/restorableStreamableTransport.d.ts.map +1 -1
  813. package/build/transport/http/restorableStreamableTransport.js +1 -58
  814. package/build/transport/http/restorableStreamableTransport.js.map +1 -1
  815. package/build/transport/http/routes/adminRoutes.d.ts +17 -1
  816. package/build/transport/http/routes/adminRoutes.d.ts.map +1 -1
  817. package/build/transport/http/routes/adminRoutes.js +283 -17
  818. package/build/transport/http/routes/adminRoutes.js.map +1 -1
  819. package/build/transport/http/routes/apiRoutes.d.ts +5 -1
  820. package/build/transport/http/routes/apiRoutes.d.ts.map +1 -1
  821. package/build/transport/http/routes/apiRoutes.js +15 -3
  822. package/build/transport/http/routes/apiRoutes.js.map +1 -1
  823. package/build/transport/http/routes/healthRoutes.d.ts +6 -1
  824. package/build/transport/http/routes/healthRoutes.d.ts.map +1 -1
  825. package/build/transport/http/routes/healthRoutes.js +7 -3
  826. package/build/transport/http/routes/healthRoutes.js.map +1 -1
  827. package/build/transport/http/routes/inspectHelpers.d.ts +1 -1
  828. package/build/transport/http/routes/inspectHelpers.d.ts.map +1 -1
  829. package/build/transport/http/routes/inspectHelpers.js +9 -5
  830. package/build/transport/http/routes/inspectHelpers.js.map +1 -1
  831. package/build/transport/http/routes/inspectRoutes.d.ts.map +1 -1
  832. package/build/transport/http/routes/inspectRoutes.js +39 -25
  833. package/build/transport/http/routes/inspectRoutes.js.map +1 -1
  834. package/build/transport/http/routes/instructionsRoutes.d.ts.map +1 -1
  835. package/build/transport/http/routes/instructionsRoutes.js +2 -9
  836. package/build/transport/http/routes/instructionsRoutes.js.map +1 -1
  837. package/build/transport/http/routes/modernHttpRoutes.d.ts +29 -0
  838. package/build/transport/http/routes/modernHttpRoutes.d.ts.map +1 -0
  839. package/build/transport/http/routes/modernHttpRoutes.js +241 -0
  840. package/build/transport/http/routes/modernHttpRoutes.js.map +1 -0
  841. package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
  842. package/build/transport/http/routes/oauthRoutes.js +8 -4
  843. package/build/transport/http/routes/oauthRoutes.js.map +1 -1
  844. package/build/transport/http/routes/sseRoutes.d.ts +1 -4
  845. package/build/transport/http/routes/sseRoutes.d.ts.map +1 -1
  846. package/build/transport/http/routes/sseRoutes.js +1 -109
  847. package/build/transport/http/routes/sseRoutes.js.map +1 -1
  848. package/build/transport/http/routes/toolRoutes.d.ts.map +1 -1
  849. package/build/transport/http/routes/toolRoutes.js +21 -10
  850. package/build/transport/http/routes/toolRoutes.js.map +1 -1
  851. package/build/transport/http/server.d.ts +1 -84
  852. package/build/transport/http/server.d.ts.map +1 -1
  853. package/build/transport/http/server.js +1 -431
  854. package/build/transport/http/server.js.map +1 -1
  855. package/build/transport/http/storage/streamableSessionRepository.d.ts +1 -0
  856. package/build/transport/http/storage/streamableSessionRepository.d.ts.map +1 -1
  857. package/build/transport/http/storage/streamableSessionRepository.js +6 -3
  858. package/build/transport/http/storage/streamableSessionRepository.js.map +1 -1
  859. package/build/transport/http/streamableSessionLifecycle.d.ts +1 -91
  860. package/build/transport/http/streamableSessionLifecycle.d.ts.map +1 -1
  861. package/build/transport/http/streamableSessionLifecycle.js +1 -376
  862. package/build/transport/http/streamableSessionLifecycle.js.map +1 -1
  863. package/build/transport/http/utils/httpErrorHandler.js +1 -1
  864. package/build/transport/http/utils/httpErrorHandler.js.map +1 -1
  865. package/build/transport/http/utils/templateContextAuthority.d.ts.map +1 -1
  866. package/build/transport/http/utils/templateContextAuthority.js +19 -6
  867. package/build/transport/http/utils/templateContextAuthority.js.map +1 -1
  868. package/build/transport/restartableStdioTransport.d.ts +1 -89
  869. package/build/transport/restartableStdioTransport.d.ts.map +1 -1
  870. package/build/transport/restartableStdioTransport.js +1 -191
  871. package/build/transport/restartableStdioTransport.js.map +1 -1
  872. package/build/transport/stdioProxyTransport.d.ts +1 -82
  873. package/build/transport/stdioProxyTransport.d.ts.map +1 -1
  874. package/build/transport/stdioProxyTransport.js +1 -278
  875. package/build/transport/stdioProxyTransport.js.map +1 -1
  876. package/build/transport/transportFactory.d.ts +1 -23
  877. package/build/transport/transportFactory.d.ts.map +1 -1
  878. package/build/transport/transportFactory.js +1 -379
  879. package/build/transport/transportFactory.js.map +1 -1
  880. package/build/transport/transportFactory.testSetup.js +13 -0
  881. package/build/transport/transportFactory.testSetup.js.map +1 -1
  882. package/build/utils/client/clientInfoExtractor.d.ts +1 -1
  883. package/build/utils/client/clientInfoExtractor.d.ts.map +1 -1
  884. package/build/utils/client/clientInfoExtractor.js.map +1 -1
  885. package/build/utils/core/errorHandling.d.ts.map +1 -1
  886. package/build/utils/core/errorHandling.js +1 -1
  887. package/build/utils/core/errorHandling.js.map +1 -1
  888. package/build/utils/core/errorTypes.js +1 -1
  889. package/build/utils/core/errorTypes.js.map +1 -1
  890. package/build/utils/core/operationExecution.d.ts.map +1 -1
  891. package/build/utils/core/operationExecution.js +1 -1
  892. package/build/utils/core/operationExecution.js.map +1 -1
  893. package/build/utils/crypto.d.ts +5 -1
  894. package/build/utils/crypto.d.ts.map +1 -1
  895. package/build/utils/crypto.js +8 -3
  896. package/build/utils/crypto.js.map +1 -1
  897. package/build/utils/filePermissions.d.ts +65 -0
  898. package/build/utils/filePermissions.d.ts.map +1 -0
  899. package/build/utils/filePermissions.js +212 -0
  900. package/build/utils/filePermissions.js.map +1 -0
  901. package/package.json +18 -5
  902. package/build/admin/assets/admin-console-xbgqUjbT.js +0 -3
@@ -1,10 +1,13 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { mergeGlobalAndServerConfig } from '../../config/mcpConfigMerge.js';
3
3
  import { normalizeDisabledToolsForServer } from '../../core/server/disabledTools.js';
4
+ import { templateRuntimeHash } from '../../core/server/templateIdentity.js';
4
5
  import { GLOBAL_TRANSPORT_CONFIG_KEYS, transportConfigSchema, } from '../../core/types/index.js';
5
6
  import { fingerprintConfiguredServerConfigDocument, fingerprintConfiguredServerDefaults, fingerprintConfiguredServerSecretValue, fingerprintConfiguredServerTarget, isConfiguredServerTargetDisabled, } from '../../domains/config-change/configChange.js';
6
7
  import { createServerInstallationWorkflow, } from '../../domains/installation/serverInstallationWorkflow.js';
8
+ import Handlebars from 'handlebars';
7
9
  import { z } from 'zod';
10
+ import { analyzeTemplateServerDefinition, } from './templateServerDefinitionAnalyzer.js';
8
11
  const configuredServerCreateSecretSchema = z
9
12
  .object({
10
13
  fieldPath: z.array(z.string()).min(2),
@@ -17,6 +20,7 @@ const configuredServerCreateSecretSchema = z
17
20
  .strict();
18
21
  const configuredServerCreateDraftSchema = z
19
22
  .object({
23
+ source: z.enum(['mcpServers', 'mcpTemplates']).optional().default('mcpServers'),
20
24
  name: z.string(),
21
25
  enabled: z.boolean().optional(),
22
26
  tags: z.array(z.string()).optional(),
@@ -35,6 +39,33 @@ const configuredServerCreateDraftSchema = z
35
39
  restartOnExit: z.boolean().optional(),
36
40
  maxRestarts: z.number().optional(),
37
41
  restartDelay: z.number().optional(),
42
+ disabled: z.union([z.boolean(), z.string()]).optional(),
43
+ stderr: z.union([z.enum(['inherit', 'ignore', 'overlapped', 'pipe']), z.number().int().min(0)]).optional(),
44
+ inheritParentEnv: z.boolean().optional(),
45
+ envFilter: z.array(z.string()).optional(),
46
+ oauth: z
47
+ .object({
48
+ clientId: z.string().optional(),
49
+ clientSecret: z.string().optional(),
50
+ scopes: z.array(z.string()).optional(),
51
+ autoRegister: z.boolean().optional(),
52
+ redirectUrl: z.string().optional(),
53
+ })
54
+ .optional(),
55
+ template: z
56
+ .object({
57
+ shareable: z.boolean().optional(),
58
+ maxInstances: z.number().min(0).optional(),
59
+ idleTimeout: z.number().min(0).optional(),
60
+ perClient: z.boolean().optional(),
61
+ extractionOptions: z
62
+ .object({
63
+ includeOptional: z.boolean().optional(),
64
+ includeEnvironment: z.boolean().optional(),
65
+ })
66
+ .optional(),
67
+ })
68
+ .optional(),
38
69
  })
39
70
  .strict(),
40
71
  secrets: z.array(configuredServerCreateSecretSchema).optional(),
@@ -54,6 +85,12 @@ const CONFIGURED_SERVER_CREATE_TRANSPORT_FIELD_KEYS = new Set([
54
85
  'restartOnExit',
55
86
  'maxRestarts',
56
87
  'restartDelay',
88
+ 'disabled',
89
+ 'stderr',
90
+ 'inheritParentEnv',
91
+ 'envFilter',
92
+ 'oauth',
93
+ 'template',
57
94
  ]);
58
95
  function normalizeConfiguredServerCreateDraft(value) {
59
96
  const parsed = configuredServerCreateDraftSchema.safeParse(value);
@@ -70,6 +107,7 @@ function normalizeConfiguredServerCreateDraft(value) {
70
107
  localName: typeof record.name === 'string' ? record.name : '',
71
108
  transport: transportType,
72
109
  },
110
+ targetSource: record.source === 'mcpTemplates' ? 'mcpTemplates' : 'mcpServers',
73
111
  validation: {
74
112
  status: 'invalid',
75
113
  errors: parsed.error.issues.map((issue) => ({
@@ -82,6 +120,7 @@ function normalizeConfiguredServerCreateDraft(value) {
82
120
  }
83
121
  const { transport } = parsed.data;
84
122
  const draft = {
123
+ source: parsed.data.source,
85
124
  name: parsed.data.name,
86
125
  enabled: parsed.data.enabled,
87
126
  tags: parsed.data.tags,
@@ -109,7 +148,7 @@ function normalizeConfiguredServerCreateDraft(value) {
109
148
  maxRestarts: transport.maxRestarts,
110
149
  restartDelay: transport.restartDelay,
111
150
  };
112
- return { draft, source, validation: { status: 'valid', errors: [] } };
151
+ return { draft, source, targetSource: parsed.data.source, validation: { status: 'valid', errors: [] } };
113
152
  }
114
153
  function configuredServerCreateSecretValues(draft, container) {
115
154
  const values = {};
@@ -127,7 +166,7 @@ function mergeConfiguredServerCreateRecord(base, additions) {
127
166
  const merged = { ...base, ...additions };
128
167
  return Object.keys(merged).length > 0 ? merged : undefined;
129
168
  }
130
- function createWorkflowValidation(workflow, config) {
169
+ function createWorkflowValidation(workflow, config, source = 'mcpServers') {
131
170
  const errors = [];
132
171
  for (const [field, messages] of Object.entries(workflow.fieldErrors ?? {})) {
133
172
  for (const message of messages) {
@@ -149,6 +188,12 @@ function createWorkflowValidation(workflow, config) {
149
188
  const parsed = transportConfigSchema.safeParse(config);
150
189
  if (!parsed.success) {
151
190
  for (const issue of parsed.error.issues) {
191
+ if (source === 'mcpTemplates' &&
192
+ issue.path[0] === 'url' &&
193
+ typeof config.url === 'string' &&
194
+ config.url.includes('{{')) {
195
+ continue;
196
+ }
152
197
  errors.push({
153
198
  fieldPath: ['transport', ...issue.path.map(String)],
154
199
  code: 'invalid_transport_config',
@@ -199,7 +244,7 @@ function validateConfiguredServerCreateSecrets(draft) {
199
244
  return { status: errors.length === 0 ? 'valid' : 'invalid', errors };
200
245
  }
201
246
  function createConfiguredServerCreateContract() {
202
- const transportFields = TRANSPORT_FIELD_DEFINITIONS.filter((definition) => CONFIGURED_SERVER_CREATE_TRANSPORT_FIELD_KEYS.has(definition.key)).map((definition) => ({
247
+ const transportFields = TRANSPORT_FIELD_DEFINITIONS.filter((definition) => definition.key !== 'template' && CONFIGURED_SERVER_CREATE_TRANSPORT_FIELD_KEYS.has(definition.key)).map((definition) => ({
203
248
  fieldPath: ['transport', definition.key],
204
249
  label: definition.label,
205
250
  control: definition.control,
@@ -234,12 +279,28 @@ function createConfiguredServerCreateContract() {
234
279
  id: 'identity',
235
280
  label: 'Identity',
236
281
  fields: [
282
+ {
283
+ fieldPath: ['source'],
284
+ label: 'Definition Type',
285
+ control: 'select',
286
+ value: 'mcpServers',
287
+ options: ['mcpServers', 'mcpTemplates'],
288
+ editable: true,
289
+ },
237
290
  { fieldPath: ['name'], label: 'Server Name', control: 'text', editable: true },
238
- { fieldPath: ['enabled'], label: 'Enabled', control: 'switch', value: true, editable: true },
291
+ {
292
+ fieldPath: ['enabled'],
293
+ label: 'Enabled',
294
+ control: 'switch',
295
+ value: true,
296
+ editable: true,
297
+ applicableSources: ['mcpServers'],
298
+ },
239
299
  { fieldPath: ['tags'], label: 'Tags', control: 'tag-list', value: [], editable: true },
240
300
  ],
241
301
  },
242
302
  { id: 'transport', label: 'Transport', fields: transportFields },
303
+ { id: 'template', label: 'Template instances', fields: templateLifecycleFields() },
243
304
  ],
244
305
  };
245
306
  }
@@ -307,7 +368,7 @@ function connectivityFingerprintFacts(connectivityCheck) {
307
368
  return connectivityCheck;
308
369
  return { status: connectivityCheck.status, mode: connectivityCheck.mode };
309
370
  }
310
- function previewCreateConfigChange(targetName, workflowStatus, changed) {
371
+ function previewCreateConfigChange(targetName, workflowStatus, changed, source = 'mcpServers') {
311
372
  const status = workflowStatus === 'template_conflict'
312
373
  ? 'template_conflict'
313
374
  : workflowStatus === 'exists'
@@ -317,15 +378,17 @@ function previewCreateConfigChange(targetName, workflowStatus, changed) {
317
378
  : 'failed';
318
379
  return {
319
380
  status,
320
- operation: 'create_static',
381
+ operation: source === 'mcpTemplates' ? 'create_template' : 'create_static',
321
382
  configPath: '[redacted]',
322
383
  target: {
323
384
  name: targetName,
324
- ...(workflowStatus === 'template_conflict'
325
- ? { source: 'mcpTemplates' }
326
- : workflowStatus === 'exists'
327
- ? { source: 'mcpServers' }
328
- : {}),
385
+ ...(changed
386
+ ? { source }
387
+ : workflowStatus === 'template_conflict'
388
+ ? { source: 'mcpTemplates' }
389
+ : workflowStatus === 'exists'
390
+ ? { source: 'mcpServers' }
391
+ : {}),
329
392
  },
330
393
  changed,
331
394
  backup: { created: false },
@@ -340,6 +403,11 @@ function createDraftCandidateName(value) {
340
403
  const name = value.name;
341
404
  return typeof name === 'string' ? name : '';
342
405
  }
406
+ function createDraftCandidateSource(value) {
407
+ if (!value || typeof value !== 'object' || Array.isArray(value))
408
+ return 'mcpServers';
409
+ return value.source === 'mcpTemplates' ? 'mcpTemplates' : 'mcpServers';
410
+ }
343
411
  function sanitizeCreateConfirmationFacts(facts) {
344
412
  if (!facts)
345
413
  return undefined;
@@ -396,7 +464,7 @@ export class AdminConfiguredServerService {
396
464
  const candidateName = createDraftCandidateName(input.draft);
397
465
  const context = {
398
466
  ...input.context,
399
- target: { type: 'configured_server', id: candidateName },
467
+ target: { type: 'configured_server', id: `${createDraftCandidateSource(input.draft)}/${candidateName}` },
400
468
  confirmationFacts: sanitizeCreateConfirmationFacts(input.context.confirmationFacts),
401
469
  };
402
470
  return this.options.operationService.executeMutation({
@@ -415,7 +483,8 @@ export class AdminConfiguredServerService {
415
483
  if (!prepared.config) {
416
484
  throw new AdminConfiguredServerApplyError('configured_server_create_invalid');
417
485
  }
418
- if (prepared.enabled &&
486
+ if (prepared.targetSource === 'mcpServers' &&
487
+ prepared.enabled &&
419
488
  !wouldUseLocalStdioTransport(prepared.config) &&
420
489
  preview.connectivityCheck.status !== 'passed' &&
421
490
  !(preview.connectivityCheck.status === 'skipped' && preview.connectivityCheck.reason === 'checker_unavailable') &&
@@ -438,13 +507,21 @@ export class AdminConfiguredServerService {
438
507
  run: async () => {
439
508
  let configChange;
440
509
  try {
441
- configChange = await this.options.configChangeService.createStaticConfiguredServerTarget({
442
- targetName: prepared.targetName,
443
- serverConfig: prepared.config,
444
- operation: 'install',
445
- backup: 'skip',
446
- expectedConfigFingerprint: configFingerprint,
447
- });
510
+ configChange =
511
+ prepared.targetSource === 'mcpTemplates'
512
+ ? await this.options.configChangeService.createTemplateConfiguredServerTarget({
513
+ targetName: prepared.targetName,
514
+ serverConfig: prepared.config,
515
+ backup: 'skip',
516
+ expectedConfigFingerprint: configFingerprint,
517
+ })
518
+ : await this.options.configChangeService.createStaticConfiguredServerTarget({
519
+ targetName: prepared.targetName,
520
+ serverConfig: prepared.config,
521
+ operation: 'install',
522
+ backup: 'skip',
523
+ expectedConfigFingerprint: configFingerprint,
524
+ });
448
525
  }
449
526
  catch {
450
527
  throw new AdminConfiguredServerApplyError('configured_server_create_failed');
@@ -452,8 +529,12 @@ export class AdminConfiguredServerService {
452
529
  assertSuccessfulConfiguredServerCreate(configChange);
453
530
  return {
454
531
  targetName: prepared.targetName,
532
+ targetSource: prepared.targetSource,
455
533
  previewFingerprint: preview.previewFingerprint,
456
534
  configChange,
535
+ ...(prepared.targetSource === 'mcpTemplates'
536
+ ? { runtimeImpact: { activeInstanceCount: 0, createdInstance: false } }
537
+ : {}),
457
538
  };
458
539
  },
459
540
  };
@@ -472,14 +553,14 @@ export class AdminConfiguredServerService {
472
553
  const source = configuredState.source;
473
554
  const context = {
474
555
  ...input.context,
475
- target: { type: 'configured_server', id: `${source}:${input.targetName}` },
556
+ target: { type: 'configured_server', id: `${source}/${input.targetName}` },
476
557
  };
477
558
  return this.options.operationService.executeReadOnly({
478
559
  context,
479
560
  operationName: 'getConfiguredServerDetail',
480
561
  run: async () => {
481
- const { currentConfig, serverDefaults } = configuredState;
482
- const server = createConfiguredServerReadModel(input.targetName, mergeGlobalAndServerConfig(serverDefaults, currentConfig), source, fingerprintConfiguredServerTarget(currentConfig), Object.hasOwn(currentConfig, 'instructionOverride') ? currentConfig.instructionOverride : undefined, Object.hasOwn(currentConfig, 'instructionOverride'));
562
+ const { currentConfig, serverDefaults, collision } = configuredState;
563
+ const server = createConfiguredServerReadModel(input.targetName, mergeGlobalAndServerConfig(serverDefaults, currentConfig), source, fingerprintConfiguredServerTarget(currentConfig), Object.hasOwn(currentConfig, 'instructionOverride') ? currentConfig.instructionOverride : undefined, Object.hasOwn(currentConfig, 'instructionOverride'), collision, source === 'mcpTemplates' ? (this.options.getTemplateActiveInstanceCount?.(input.targetName) ?? 0) : 0, this.options.mutationAvailability?.available ?? true);
483
564
  return {
484
565
  server,
485
566
  editContract: createConfiguredServerEditContract(server, currentConfig, serverDefaults),
@@ -501,7 +582,7 @@ export class AdminConfiguredServerService {
501
582
  const configuredState = this.readConfiguredServerState(input.targetName, input.targetSource);
502
583
  const context = {
503
584
  ...input.context,
504
- target: { type: 'configured_server', id: `${configuredState.source}:${input.targetName}` },
585
+ target: { type: 'configured_server', id: `${configuredState.source}/${input.targetName}` },
505
586
  };
506
587
  return this.options.operationService.executeReadOnly({
507
588
  context,
@@ -533,7 +614,7 @@ export class AdminConfiguredServerService {
533
614
  const source = configuredState.source;
534
615
  const context = {
535
616
  ...input.context,
536
- target: { type: 'configured_server', id: `${source}:${input.targetName}` },
617
+ target: { type: 'configured_server', id: `${source}/${input.targetName}` },
537
618
  };
538
619
  const { currentConfig, serverDefaults } = configuredState;
539
620
  return this.options.operationService.executeDryRun({
@@ -546,7 +627,7 @@ export class AdminConfiguredServerService {
546
627
  const source = this.resolveConfiguredServerSource(input.targetName, input.targetSource);
547
628
  const context = {
548
629
  ...input.context,
549
- target: { type: 'configured_server', id: `${source}:${input.targetName}` },
630
+ target: { type: 'configured_server', id: `${source}/${input.targetName}` },
550
631
  confirmationFacts: sanitizeApplyConfirmationFacts(input.context.confirmationFacts),
551
632
  };
552
633
  return this.options.operationService.executeMutation({
@@ -571,7 +652,8 @@ export class AdminConfiguredServerService {
571
652
  if (preview.previewFingerprint !== input.previewFingerprint) {
572
653
  throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
573
654
  }
574
- if (connectionCritical &&
655
+ if (source === 'mcpServers' &&
656
+ connectionCritical &&
575
657
  !wouldUseLocalStdioTransport(proposedConfig) &&
576
658
  proposedReadModel.enabled &&
577
659
  preview.connectivityCheck.status !== 'passed' &&
@@ -595,6 +677,14 @@ export class AdminConfiguredServerService {
595
677
  : []),
596
678
  ],
597
679
  run: async () => {
680
+ const instanceIdentities = source === 'mcpTemplates'
681
+ ? (this.options.getTemplateActiveInstanceIdentities?.(input.targetName) ?? [])
682
+ : [];
683
+ const activeInstancesBefore = instanceIdentities.length > 0
684
+ ? instanceIdentities.length
685
+ : source === 'mcpTemplates'
686
+ ? (this.options.getTemplateActiveInstanceCount?.(input.targetName) ?? 0)
687
+ : 0;
598
688
  const configChange = await this.options.configChangeService.editConfiguredServerTarget({
599
689
  sourceName: input.targetName,
600
690
  targetSource: source,
@@ -604,11 +694,142 @@ export class AdminConfiguredServerService {
604
694
  expectedGlobalConfigFingerprint: fingerprintConfiguredServerDefaults(serverDefaults),
605
695
  });
606
696
  assertSuccessfulConfiguredServerEdit(configChange);
697
+ const runtimeImpact = source === 'mcpTemplates'
698
+ ? await this.observeTemplateRetirement(input.targetName, configChange, preview.runtimeImpact?.retirementRequired === true, activeInstancesBefore, instanceIdentities)
699
+ : undefined;
607
700
  return {
608
701
  originalTargetName: input.targetName,
609
702
  targetName: preview.proposedTargetName,
610
703
  previewFingerprint: preview.previewFingerprint,
611
704
  configChange,
705
+ ...(runtimeImpact ? { runtimeImpact } : {}),
706
+ };
707
+ },
708
+ };
709
+ },
710
+ });
711
+ }
712
+ async previewConfiguredServerDelete(input) {
713
+ const context = {
714
+ ...input.context,
715
+ target: { type: 'configured_server', id: `${input.targetSource}/${input.targetName}` },
716
+ };
717
+ return this.options.operationService.executeDryRun({
718
+ context,
719
+ operationName: 'previewConfiguredServerDelete',
720
+ run: async () => this.previewConfiguredServerDeleteResult(input),
721
+ });
722
+ }
723
+ async deleteConfiguredServer(input) {
724
+ const qualifiedId = `${input.targetSource}/${input.targetName}`;
725
+ const context = {
726
+ ...input.context,
727
+ target: { type: 'configured_server', id: qualifiedId },
728
+ confirmationFacts: sanitizeConfiguredServerIdentityConfirmationFacts(input.context.confirmationFacts),
729
+ };
730
+ return this.options.operationService.executeMutation({
731
+ context,
732
+ operationName: 'deleteConfiguredServer',
733
+ prepare: async () => {
734
+ let preview;
735
+ try {
736
+ preview = this.previewConfiguredServerDeleteResult(input);
737
+ }
738
+ catch (error) {
739
+ if (error instanceof AdminConfiguredServerNotFoundError) {
740
+ throw new AdminConfiguredServerApplyError('configured_server_already_removed');
741
+ }
742
+ throw error;
743
+ }
744
+ if (preview.previewFingerprint !== input.previewFingerprint) {
745
+ throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
746
+ }
747
+ return {
748
+ confirmationRequirements: [
749
+ { code: 'previewConfirmed', expected: input.previewFingerprint },
750
+ { code: 'targetIdentityConfirmed', expected: qualifiedId },
751
+ ],
752
+ run: async () => {
753
+ const instanceIdentities = input.targetSource === 'mcpTemplates'
754
+ ? (this.options.getTemplateActiveInstanceIdentities?.(input.targetName) ?? [])
755
+ : [];
756
+ const activeInstancesBefore = instanceIdentities.length > 0
757
+ ? instanceIdentities.length
758
+ : preview.runtimeImpact.kind === 'template'
759
+ ? preview.runtimeImpact.activeInstanceCount
760
+ : 0;
761
+ const configChange = await this.options.configChangeService.deleteConfiguredServerTarget({
762
+ targetName: input.targetName,
763
+ targetSource: input.targetSource,
764
+ expectedTargetFingerprint: preview.targetFingerprint,
765
+ });
766
+ assertSuccessfulConfiguredServerDelete(configChange);
767
+ const runtimeImpact = input.targetSource === 'mcpTemplates'
768
+ ? await this.observeTemplateRetirement(input.targetName, configChange, true, activeInstancesBefore, instanceIdentities)
769
+ : undefined;
770
+ return {
771
+ target: preview.target,
772
+ qualifiedId,
773
+ previewFingerprint: preview.previewFingerprint,
774
+ configChange: sanitizeConfiguredServerDeleteResult(configChange),
775
+ ...(runtimeImpact ? { runtimeImpact } : {}),
776
+ };
777
+ },
778
+ };
779
+ },
780
+ });
781
+ }
782
+ async previewConfiguredServerLifecycle(input) {
783
+ const context = {
784
+ ...input.context,
785
+ target: { type: 'configured_server', id: `${input.targetSource}/${input.targetName}` },
786
+ };
787
+ return this.options.operationService.executeDryRun({
788
+ context,
789
+ operationName: 'previewConfiguredServerLifecycle',
790
+ run: async () => this.previewConfiguredServerLifecycleResult(input),
791
+ });
792
+ }
793
+ async applyConfiguredServerLifecycle(input) {
794
+ const qualifiedId = `${input.targetSource}/${input.targetName}`;
795
+ const context = {
796
+ ...input.context,
797
+ target: { type: 'configured_server', id: qualifiedId },
798
+ confirmationFacts: sanitizeConfiguredServerIdentityConfirmationFacts(input.context.confirmationFacts),
799
+ };
800
+ return this.options.operationService.executeMutation({
801
+ context,
802
+ operationName: 'applyConfiguredServerLifecycle',
803
+ prepare: async () => {
804
+ const preview = await this.previewConfiguredServerLifecycleResult(input);
805
+ if (preview.previewFingerprint !== input.previewFingerprint) {
806
+ throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
807
+ }
808
+ return {
809
+ confirmationRequirements: [
810
+ { code: 'previewConfirmed', expected: input.previewFingerprint },
811
+ { code: 'targetIdentityConfirmed', expected: qualifiedId },
812
+ ],
813
+ run: async () => {
814
+ const instanceIdentities = this.options.getTemplateActiveInstanceIdentities?.(input.targetName) ?? [];
815
+ const activeInstancesBefore = instanceIdentities.length || this.options.getTemplateActiveInstanceCount?.(input.targetName) || 0;
816
+ const configChange = await this.options.configChangeService.setConfiguredServerTargetEnabledState({
817
+ targetName: input.targetName,
818
+ targetSource: input.targetSource,
819
+ enabled: input.enabled,
820
+ backup: 'required',
821
+ expectedTargetFingerprint: preview.targetFingerprint,
822
+ });
823
+ assertSuccessfulConfiguredServerLifecycle(configChange);
824
+ const runtimeImpact = await this.observeTemplateRetirement(input.targetName, configChange, !input.enabled && configChange.changed, activeInstancesBefore, instanceIdentities);
825
+ return {
826
+ target: preview.target,
827
+ qualifiedId,
828
+ previewFingerprint: preview.previewFingerprint,
829
+ enabled: input.enabled,
830
+ outcome: mutationOutcome(input.enabled, configChange.changed),
831
+ configChange: sanitizeConfiguredServerLifecycleResult(configChange),
832
+ runtimeImpact,
612
833
  };
613
834
  },
614
835
  };
@@ -629,7 +850,7 @@ export class AdminConfiguredServerService {
629
850
  const source = input.targetSource ?? 'mcpServers';
630
851
  const context = {
631
852
  ...input.context,
632
- target: { type: 'configured_server', id: `${source}:${input.targetName}` },
853
+ target: { type: 'configured_server', id: `${source}/${input.targetName}` },
633
854
  };
634
855
  if (input.dryRun) {
635
856
  return this.options.operationService.executeDryRun({
@@ -687,17 +908,166 @@ export class AdminConfiguredServerService {
687
908
  }
688
909
  return {
689
910
  configFingerprint: fingerprintConfiguredServerConfigDocument(parsed),
690
- servers: ['mcpServers', 'mcpTemplates'].flatMap((source) => Object.entries(parsed[source] ?? {}).map(([name, serverConfig]) => createConfiguredServerReadModel(name, mergeGlobalAndServerConfig(parsed.serverDefaults, serverConfig), source, fingerprintConfiguredServerTarget(serverConfig), Object.hasOwn(serverConfig, 'instructionOverride') ? serverConfig.instructionOverride : undefined, Object.hasOwn(serverConfig, 'instructionOverride')))),
911
+ servers: ['mcpServers', 'mcpTemplates'].flatMap((source) => Object.entries(parsed[source] ?? {}).map(([name, serverConfig]) => createConfiguredServerReadModel(name, mergeGlobalAndServerConfig(parsed.serverDefaults, serverConfig), source, fingerprintConfiguredServerTarget(serverConfig), Object.hasOwn(serverConfig, 'instructionOverride') ? serverConfig.instructionOverride : undefined, Object.hasOwn(serverConfig, 'instructionOverride'), Boolean((source === 'mcpTemplates' ? parsed.mcpServers : parsed.mcpTemplates)?.[name]), source === 'mcpTemplates' ? (this.options.getTemplateActiveInstanceCount?.(name) ?? 0) : 0, this.options.mutationAvailability?.available ?? true))),
691
912
  };
692
913
  }
693
- readConfiguredServerState(targetName, targetSource) {
694
- const parsed = this.options.readConfigDocument();
914
+ previewConfiguredServerDeleteResult(input) {
915
+ const document = this.options.readConfigDocument();
916
+ const otherSource = input.targetSource === 'mcpServers' ? 'mcpTemplates' : 'mcpServers';
917
+ if (!document?.[input.targetSource]?.[input.targetName] && document?.[otherSource]?.[input.targetName]) {
918
+ throw new AdminConfiguredServerApplyError('configured_server_source_changed');
919
+ }
920
+ const { currentConfig, serverDefaults, collision } = this.readConfiguredServerState(input.targetName, input.targetSource, document);
921
+ const targetFingerprint = fingerprintConfiguredServerTarget(currentConfig);
922
+ const activeInstanceCount = input.targetSource === 'mcpTemplates'
923
+ ? (this.options.getTemplateActiveInstanceCount?.(input.targetName) ?? 0)
924
+ : 0;
925
+ const definition = createConfiguredServerReadModel(input.targetName, mergeGlobalAndServerConfig(serverDefaults, currentConfig), input.targetSource, targetFingerprint, Object.hasOwn(currentConfig, 'instructionOverride') ? currentConfig.instructionOverride : undefined, Object.hasOwn(currentConfig, 'instructionOverride'), collision, activeInstanceCount, this.options.mutationAvailability?.available ?? true);
926
+ const qualifiedId = definition.definition?.qualifiedId ?? `${input.targetSource}/${input.targetName}`;
927
+ const authority = definition.definition?.authority ?? 'sole';
928
+ const runtimeImpact = input.targetSource === 'mcpTemplates'
929
+ ? { kind: 'template', activeInstanceCount, retirement: 'reload_scheduled' }
930
+ : { kind: 'static', configuredBackendRemoval: 'after_reload' };
931
+ const warnings = [
932
+ 'Deletion removes only this source-qualified definition and does not cascade to presets, filters, credentials, registry state, or individually selected live instances.',
933
+ ...(collision
934
+ ? [`The same name in ${input.targetSource === 'mcpServers' ? 'mcpTemplates' : 'mcpServers'} is preserved.`]
935
+ : []),
936
+ ...(input.targetSource === 'mcpTemplates' && activeInstanceCount > 0
937
+ ? [
938
+ `Reload schedules retirement of ${activeInstanceCount} active Template Server instance${activeInstanceCount === 1 ? '' : 's'}.`,
939
+ ]
940
+ : []),
941
+ ];
942
+ const previewFingerprint = `delete_preview_${createHash('sha256')
943
+ .update(stableStringify({
944
+ schemaVersion: 1,
945
+ qualifiedId,
946
+ targetFingerprint,
947
+ authority,
948
+ collision,
949
+ runtimeImpact,
950
+ warnings,
951
+ }))
952
+ .digest('hex')}`;
953
+ return {
954
+ target: definition.target,
955
+ qualifiedId,
956
+ targetFingerprint,
957
+ previewFingerprint,
958
+ authority,
959
+ removal: { definition, preservesSameNamedOtherSource: collision, cascades: false },
960
+ configChange: previewDeleteConfigChange(input.targetName, input.targetSource),
961
+ expectedBackup: { policy: 'required', recoveryCopy: true },
962
+ expectedReload: {
963
+ policy: 'observe_after_write',
964
+ possibleStatuses: ['observed', 'runtime_not_running', 'reload_disabled', 'failed'],
965
+ },
966
+ runtimeImpact,
967
+ warnings,
968
+ };
969
+ }
970
+ async previewConfiguredServerLifecycleResult(input) {
971
+ const document = this.options.readConfigDocument();
972
+ const currentConfig = document?.mcpTemplates?.[input.targetName];
973
+ if (!currentConfig) {
974
+ if (document?.mcpServers?.[input.targetName]) {
975
+ throw new AdminConfiguredServerApplyError('configured_server_source_changed');
976
+ }
977
+ throw new AdminConfiguredServerNotFoundError(input.targetName);
978
+ }
979
+ const targetFingerprint = fingerprintConfiguredServerTarget(currentConfig);
980
+ const qualifiedId = `mcpTemplates/${input.targetName}`;
981
+ const disabled = currentConfig.disabled;
982
+ const currentEnabled = !isConfiguredServerTargetDisabled(disabled);
983
+ const disabledValueKind = disabled === undefined
984
+ ? 'absent'
985
+ : typeof disabled === 'string' && disabled.includes('{{')
986
+ ? 'context_expression'
987
+ : 'literal';
988
+ const expressionReplacement = {
989
+ occurs: disabledValueKind === 'context_expression' && !input.enabled,
990
+ replacement: input.enabled ? 'enabled_absent' : 'disabled_true',
991
+ };
992
+ const activeInstanceCount = this.options.getTemplateActiveInstanceCount?.(input.targetName) ?? 0;
993
+ const configChange = await this.options.configChangeService.previewConfiguredServerTargetEnabledState({
994
+ targetName: input.targetName,
995
+ targetSource: input.targetSource,
996
+ enabled: input.enabled,
997
+ backup: 'skip',
998
+ });
999
+ if (configChange.status === 'not_found' || configChange.status === 'source_conflict') {
1000
+ throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
1001
+ }
1002
+ if (configChange.status === 'failed') {
1003
+ throw new AdminConfiguredServerApplyError('configured_server_apply_failed');
1004
+ }
1005
+ const warnings = [
1006
+ ...(expressionReplacement.occurs
1007
+ ? [
1008
+ 'The context-rendered disabled expression will be replaced with literal true without evaluating Request Context.',
1009
+ ]
1010
+ : []),
1011
+ ...(input.enabled
1012
+ ? [
1013
+ 'Re-enable restores eligibility only; instances and Request Sessions are created lazily by future matching requests.',
1014
+ ]
1015
+ : activeInstanceCount > 0
1016
+ ? [
1017
+ `Successful reload retires ${activeInstanceCount} active Template Server instance${activeInstanceCount === 1 ? '' : 's'} and removes their Request Session memberships.`,
1018
+ ]
1019
+ : []),
1020
+ ];
1021
+ const runtimeImpact = {
1022
+ activeInstanceCount,
1023
+ retirement: !input.enabled && configChange.changed ? 'after_successful_reload' : 'not_required',
1024
+ recreation: 'lazy_future_match_only',
1025
+ };
1026
+ const previewFingerprint = `lifecycle_preview_${createHash('sha256')
1027
+ .update(stableStringify({
1028
+ schemaVersion: 1,
1029
+ qualifiedId,
1030
+ targetFingerprint,
1031
+ currentEnabled,
1032
+ proposedEnabled: input.enabled,
1033
+ disabledValueKind,
1034
+ expressionReplacement,
1035
+ changed: configChange.changed,
1036
+ runtimeImpact,
1037
+ warnings,
1038
+ }))
1039
+ .digest('hex')}`;
1040
+ return {
1041
+ target: { type: 'configured_server', id: input.targetName, source: input.targetSource },
1042
+ qualifiedId,
1043
+ targetFingerprint,
1044
+ previewFingerprint,
1045
+ current: { enabled: currentEnabled, disabledValueKind },
1046
+ proposed: { enabled: input.enabled, disabledValueKind: input.enabled ? 'absent' : 'literal' },
1047
+ expressionReplacement,
1048
+ configChange: sanitizeConfiguredServerLifecycleResult(configChange),
1049
+ expectedBackup: { policy: 'required', recoveryCopy: true },
1050
+ expectedReload: {
1051
+ policy: 'observe_after_write',
1052
+ possibleStatuses: ['observed', 'runtime_not_running', 'reload_disabled', 'failed'],
1053
+ },
1054
+ runtimeImpact,
1055
+ warnings,
1056
+ };
1057
+ }
1058
+ readConfiguredServerState(targetName, targetSource, document = this.options.readConfigDocument()) {
1059
+ const parsed = document;
695
1060
  const source = this.resolveConfiguredServerSource(targetName, targetSource, parsed);
696
1061
  const currentConfig = parsed?.[source]?.[targetName];
697
1062
  if (!currentConfig) {
698
1063
  throw new AdminConfiguredServerNotFoundError(targetName);
699
1064
  }
700
- return { currentConfig, serverDefaults: parsed?.serverDefaults, source };
1065
+ return {
1066
+ currentConfig,
1067
+ serverDefaults: parsed?.serverDefaults,
1068
+ source,
1069
+ collision: Boolean((source === 'mcpTemplates' ? parsed?.mcpServers : parsed?.mcpTemplates)?.[targetName]),
1070
+ };
701
1071
  }
702
1072
  resolveConfiguredServerSource(targetName, targetSource, document = this.options.readConfigDocument()) {
703
1073
  if (targetSource)
@@ -715,6 +1085,9 @@ export class AdminConfiguredServerService {
715
1085
  async previewConfiguredServerEditResult(input, currentConfig, serverDefaults, requireCriticalConnectivity = false, source = 'mcpServers') {
716
1086
  const normalizedEdit = normalizeEditDraft(input.edit);
717
1087
  const sourceValidation = validateEditForSource(source, normalizedEdit.edit);
1088
+ const rawTemplateHeaderValidation = source === 'mcpTemplates'
1089
+ ? validateRawTemplateHeaderEdit(input.edit)
1090
+ : { status: 'valid', errors: [] };
718
1091
  const currentReadModel = createConfiguredServerReadModel(input.targetName, mergeGlobalAndServerConfig(serverDefaults, currentConfig), source);
719
1092
  const secretValidation = validateSecretEditCapabilities(normalizedEdit.edit, currentReadModel.secretInputs);
720
1093
  const transportApplicabilityValidation = validateTransportFieldApplicability(currentConfig, normalizedEdit.edit);
@@ -724,7 +1097,10 @@ export class AdminConfiguredServerService {
724
1097
  const proposedConfig = applyEditDraft(currentConfig, applicableEdit, serverDefaults, input.targetName);
725
1098
  const proposedReadModel = createConfiguredServerReadModel(proposedTargetName, mergeGlobalAndServerConfig(serverDefaults, proposedConfig), source);
726
1099
  const proposedTransportType = configuredTransportType(proposedConfig);
727
- const serverValidation = validatePreviewServerConfig(proposedConfig);
1100
+ const serverValidation = validatePreviewServerConfig(proposedConfig, source);
1101
+ const templateValidation = source === 'mcpTemplates'
1102
+ ? templateDefinitionValidation(proposedConfig)
1103
+ : { status: 'valid', errors: [] };
728
1104
  const currentToolInventory = this.options.readToolInventory
729
1105
  ? await this.options.readToolInventory({
730
1106
  targetName: input.targetName,
@@ -734,7 +1110,7 @@ export class AdminConfiguredServerService {
734
1110
  })
735
1111
  : undefined;
736
1112
  const toolEditValidation = validateConfiguredToolEdit(applicableEdit, currentToolInventory);
737
- const validation = mergeValidation(mergeValidation(mergeValidation(mergeValidation(normalizedEdit.validation, secretValidation), transportApplicabilityValidation), overrideValidation), mergeValidation(mergeValidation(serverValidation, sourceValidation), toolEditValidation));
1113
+ const validation = mergeValidation(mergeValidation(mergeValidation(mergeValidation(normalizedEdit.validation, secretValidation), transportApplicabilityValidation), overrideValidation), mergeValidation(mergeValidation(mergeValidation(mergeValidation(serverValidation, sourceValidation), toolEditValidation), rawTemplateHeaderValidation), templateValidation));
738
1114
  const diff = createPreviewDiff(currentReadModel, proposedReadModel, applicableEdit);
739
1115
  pushDiff(diff, ['disabledTools'], currentConfig.disabledTools ?? [], proposedConfig.disabledTools ?? [], [
740
1116
  'tool_visibility',
@@ -742,6 +1118,9 @@ export class AdminConfiguredServerService {
742
1118
  pushDiff(diff, ['toolDescriptionOverrides'], currentConfig.toolDescriptionOverrides ?? {}, proposedConfig.toolDescriptionOverrides ?? {}, ['tool_metadata']);
743
1119
  appendClearedOverrideDiff(diff, currentReadModel, proposedReadModel, applicableEdit);
744
1120
  const changed = validation.status === 'valid' && diff.length > 0;
1121
+ const retirementRequired = source === 'mcpTemplates' &&
1122
+ (proposedTargetName !== input.targetName ||
1123
+ templateRuntimeHash(currentConfig) !== templateRuntimeHash(proposedConfig));
745
1124
  const endpointChangedWithPreservedSecrets = endpointAuthorityChanged(currentConfig, proposedConfig) &&
746
1125
  hasPreservedSecretInputs(currentReadModel.secretInputs.filter((input) => !proposedTransportType || transportFieldAppliesToType(input.fieldPath[0], proposedTransportType)), applicableEdit);
747
1126
  const proposedToolInventory = this.options.readToolInventory
@@ -773,17 +1152,32 @@ export class AdminConfiguredServerService {
773
1152
  validation,
774
1153
  diff,
775
1154
  configChange: previewConfigChange(input.targetName, changed, source),
776
- connectivityCheck: await this.previewConnectivityCheck({
777
- targetName: proposedTargetName,
778
- serverConfig: proposedConfig,
779
- enabled: proposedReadModel.enabled,
780
- validationStatus: validation.status,
781
- connectionCriticalChanged: diff.some((entry) => entry.riskFlags.includes('connection_critical')),
782
- force: input.connectivityCheck === 'manual' ||
783
- (requireCriticalConnectivity && diff.some((entry) => entry.riskFlags.includes('connection_critical'))),
784
- endpointChangedWithPreservedSecrets,
785
- }),
1155
+ connectivityCheck: source === 'mcpTemplates'
1156
+ ? { status: 'skipped', reason: 'template_structural_preview' }
1157
+ : await this.previewConnectivityCheck({
1158
+ targetName: proposedTargetName,
1159
+ serverConfig: proposedConfig,
1160
+ enabled: proposedReadModel.enabled,
1161
+ validationStatus: validation.status,
1162
+ connectionCriticalChanged: diff.some((entry) => entry.riskFlags.includes('connection_critical')),
1163
+ force: input.connectivityCheck === 'manual' ||
1164
+ (requireCriticalConnectivity && diff.some((entry) => entry.riskFlags.includes('connection_critical'))),
1165
+ endpointChangedWithPreservedSecrets,
1166
+ }),
786
1167
  ...(toolSelection ? { toolSelection } : {}),
1168
+ ...(source === 'mcpTemplates'
1169
+ ? {
1170
+ templateAnalysis: analyzeTemplateServerDefinition(proposedConfig),
1171
+ runtimeImpact: {
1172
+ activeInstanceCount: this.options.getTemplateActiveInstanceCount?.(input.targetName) ?? 0,
1173
+ retirementRequired: changed && retirementRequired,
1174
+ createsInstance: false,
1175
+ },
1176
+ }
1177
+ : {}),
1178
+ warnings: source === 'mcpTemplates'
1179
+ ? ['Structural preview only: Request Context values are not rendered and no backend is contacted.']
1180
+ : [],
787
1181
  };
788
1182
  }
789
1183
  async previewConnectivityCheck(input) {
@@ -810,6 +1204,42 @@ export class AdminConfiguredServerService {
810
1204
  serverConfig: input.serverConfig,
811
1205
  });
812
1206
  }
1207
+ async observeTemplateRetirement(templateName, configChange, retirementRequired, activeInstancesBefore, instanceIdentities) {
1208
+ if (!retirementRequired) {
1209
+ return {
1210
+ activeInstancesBefore,
1211
+ retiredInstances: 0,
1212
+ activeInstancesAfter: activeInstancesBefore,
1213
+ retirementObserved: true,
1214
+ };
1215
+ }
1216
+ if (configChange.reload.status === 'failed' || !this.options.observeTemplateDefinitionRetirement) {
1217
+ const activeInstancesAfter = this.options.getTemplateActiveInstanceCount?.(templateName) ?? activeInstancesBefore;
1218
+ return {
1219
+ activeInstancesBefore,
1220
+ retiredInstances: Math.max(0, activeInstancesBefore - activeInstancesAfter),
1221
+ activeInstancesAfter,
1222
+ retirementObserved: activeInstancesAfter === 0,
1223
+ };
1224
+ }
1225
+ try {
1226
+ const observed = await this.options.observeTemplateDefinitionRetirement(templateName, instanceIdentities);
1227
+ return {
1228
+ ...observed,
1229
+ activeInstancesBefore,
1230
+ retiredInstances: Math.max(0, activeInstancesBefore - observed.activeInstancesAfter),
1231
+ };
1232
+ }
1233
+ catch {
1234
+ return {
1235
+ activeInstancesBefore,
1236
+ retiredInstances: 0,
1237
+ activeInstancesAfter: this.options.getTemplateActiveInstanceCount?.(templateName) ?? activeInstancesBefore,
1238
+ retirementObserved: false,
1239
+ error: 'Template instance retirement could not be confirmed.',
1240
+ };
1241
+ }
1242
+ }
813
1243
  async previewConfiguredServerCreateResult(input, forceConnectivity = false, document = this.options.readConfigDocument() ?? {}) {
814
1244
  const prepared = await this.resolveConfiguredServerCreate(input.draft, document);
815
1245
  const proposedReadModel = prepared.config
@@ -818,17 +1248,19 @@ export class AdminConfiguredServerService {
818
1248
  const validation = prepared.validation;
819
1249
  const diff = proposedReadModel ? createConfiguredServerCreateDiff(proposedReadModel, prepared.draft) : [];
820
1250
  const changed = validation.status === 'valid' && prepared.workflow.status === 'preview';
821
- const connectivityCheck = prepared.config
822
- ? await this.previewConnectivityCheck({
823
- targetName: prepared.targetName,
824
- serverConfig: prepared.config,
825
- enabled: prepared.enabled,
826
- validationStatus: validation.status,
827
- connectionCriticalChanged: true,
828
- force: forceConnectivity || input.connectivityCheck === 'manual',
829
- endpointChangedWithPreservedSecrets: false,
830
- })
831
- : { status: 'skipped', reason: 'validation_failed' };
1251
+ const connectivityCheck = prepared.targetSource === 'mcpTemplates'
1252
+ ? { status: 'skipped', reason: 'template_structural_preview' }
1253
+ : prepared.config
1254
+ ? await this.previewConnectivityCheck({
1255
+ targetName: prepared.targetName,
1256
+ serverConfig: prepared.config,
1257
+ enabled: prepared.enabled,
1258
+ validationStatus: validation.status,
1259
+ connectionCriticalChanged: true,
1260
+ force: forceConnectivity || input.connectivityCheck === 'manual',
1261
+ endpointChangedWithPreservedSecrets: false,
1262
+ })
1263
+ : { status: 'skipped', reason: 'validation_failed' };
832
1264
  const preview = {
833
1265
  targetName: prepared.targetName,
834
1266
  previewFingerprint: configuredServerCreatePreviewFingerprint({
@@ -841,12 +1273,25 @@ export class AdminConfiguredServerService {
841
1273
  }),
842
1274
  validation,
843
1275
  diff,
844
- configChange: previewCreateConfigChange(prepared.targetName, prepared.workflow.status, changed),
1276
+ configChange: previewCreateConfigChange(prepared.targetName, prepared.workflow.status, changed, prepared.targetSource),
845
1277
  connectivityCheck,
846
1278
  expectedReload: {
847
1279
  policy: 'observe_after_write',
848
1280
  possibleStatuses: ['observed', 'runtime_not_running', 'reload_disabled', 'failed'],
849
1281
  },
1282
+ ...(prepared.targetSource === 'mcpTemplates' && prepared.config
1283
+ ? {
1284
+ templateAnalysis: analyzeTemplateServerDefinition(prepared.config),
1285
+ runtimeImpact: {
1286
+ activeInstanceCount: 0,
1287
+ retirementRequired: false,
1288
+ createsInstance: false,
1289
+ },
1290
+ }
1291
+ : {}),
1292
+ warnings: prepared.targetSource === 'mcpTemplates'
1293
+ ? ['Creating a Template Server definition does not create a runtime instance.']
1294
+ : [],
850
1295
  };
851
1296
  return preview;
852
1297
  }
@@ -862,8 +1307,11 @@ export class AdminConfiguredServerService {
862
1307
  },
863
1308
  });
864
1309
  const workflowResult = await workflow.run({ mode: 'preview', source: normalized.source });
865
- const config = workflowResult.config;
866
- const validation = mergeValidation(mergeValidation(normalized.validation, validateConfiguredServerCreateSecrets(normalized.draft)), createWorkflowValidation(workflowResult, config));
1310
+ const config = normalized.targetSource === 'mcpTemplates' ? createTemplateServerConfig(normalized.draft) : workflowResult.config;
1311
+ const templateValidation = normalized.targetSource === 'mcpTemplates' && config
1312
+ ? templateDefinitionValidation(config)
1313
+ : { status: 'valid', errors: [] };
1314
+ const validation = mergeValidation(mergeValidation(mergeValidation(normalized.validation, validateConfiguredServerCreateSecrets(normalized.draft)), createWorkflowValidation(workflowResult, config, normalized.targetSource)), templateValidation);
867
1315
  return {
868
1316
  draft: normalized.draft,
869
1317
  source: normalized.source,
@@ -872,20 +1320,71 @@ export class AdminConfiguredServerService {
872
1320
  workflow: workflowResult,
873
1321
  config,
874
1322
  validation,
1323
+ targetSource: normalized.targetSource,
875
1324
  };
876
1325
  }
877
1326
  }
1327
+ function createTemplateServerConfig(draft) {
1328
+ if (!draft.transport)
1329
+ return undefined;
1330
+ const config = cloneUnknown(draft.transport);
1331
+ if (draft.tags?.length)
1332
+ config.tags = [...draft.tags];
1333
+ const secretContainer = config.type === 'stdio' ? 'env' : 'headers';
1334
+ const secrets = configuredServerCreateSecretValues(draft, secretContainer);
1335
+ if (Object.keys(secrets).length > 0) {
1336
+ const current = config[secretContainer];
1337
+ const currentRecord = current && !Array.isArray(current) ? current : {};
1338
+ config[secretContainer] = { ...currentRecord, ...secrets };
1339
+ }
1340
+ return config;
1341
+ }
1342
+ function templateDefinitionValidation(config) {
1343
+ const analysis = analyzeTemplateServerDefinition(config);
1344
+ const headerErrors = Object.entries(config.headers ?? {}).flatMap(([name, value]) => typeof value === 'string' && value.includes('{{')
1345
+ ? [
1346
+ {
1347
+ fieldPath: ['transport', 'headers', name],
1348
+ code: 'template_header_not_rendered',
1349
+ message: 'Template expressions are not supported in headers because the runtime does not render them.',
1350
+ },
1351
+ ]
1352
+ : []);
1353
+ const errors = [...analysis.syntax.errors, ...headerErrors];
1354
+ return {
1355
+ status: errors.length === 0 ? 'valid' : 'invalid',
1356
+ errors,
1357
+ };
1358
+ }
1359
+ function validateRawTemplateHeaderEdit(value) {
1360
+ const record = value && typeof value === 'object' && !Array.isArray(value) ? value : {};
1361
+ const transport = record.transport && typeof record.transport === 'object' && !Array.isArray(record.transport)
1362
+ ? record.transport
1363
+ : {};
1364
+ const headers = transport.headers && typeof transport.headers === 'object' && !Array.isArray(transport.headers)
1365
+ ? transport.headers
1366
+ : {};
1367
+ const errors = Object.entries(headers).flatMap(([name, entry]) => typeof entry === 'string' && entry.includes('{{')
1368
+ ? [
1369
+ {
1370
+ fieldPath: ['transport', 'headers', name],
1371
+ code: 'template_header_not_rendered',
1372
+ message: 'Template expressions are not supported in headers because the runtime does not render them.',
1373
+ },
1374
+ ]
1375
+ : []);
1376
+ return { status: errors.length === 0 ? 'valid' : 'invalid', errors };
1377
+ }
878
1378
  function validateEditForSource(source, edit) {
879
1379
  if (source !== 'mcpTemplates')
880
1380
  return { status: 'valid', errors: [] };
881
- const supportedTemplateMetadata = new Set(['instructionOverride', 'disabledTools', 'toolDescriptionOverrides']);
882
- const unsupported = Object.keys(edit).filter((key) => !supportedTemplateMetadata.has(key));
1381
+ const unsupported = Object.keys(edit).filter((key) => key === 'enabled');
883
1382
  return {
884
1383
  status: unsupported.length === 0 ? 'valid' : 'invalid',
885
1384
  errors: unsupported.map((key) => ({
886
1385
  fieldPath: [key],
887
1386
  code: 'template_edit_field_unsupported',
888
- message: 'Template Server edits may only change instruction and tool metadata.',
1387
+ message: 'Template Server definitions do not support enable or disable operations.',
889
1388
  })),
890
1389
  };
891
1390
  }
@@ -928,6 +1427,57 @@ function assertSuccessfulConfiguredServerEdit(configChange) {
928
1427
  throw new AdminConfiguredServerApplyError('configured_server_apply_failed');
929
1428
  }
930
1429
  }
1430
+ function assertSuccessfulConfiguredServerDelete(configChange) {
1431
+ switch (configChange.status) {
1432
+ case 'changed':
1433
+ return;
1434
+ case 'source_conflict':
1435
+ throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
1436
+ case 'not_found':
1437
+ throw new AdminConfiguredServerApplyError('configured_server_already_removed');
1438
+ default:
1439
+ throw new AdminConfiguredServerApplyError('configured_server_delete_failed');
1440
+ }
1441
+ }
1442
+ function assertSuccessfulConfiguredServerLifecycle(configChange) {
1443
+ switch (configChange.status) {
1444
+ case 'changed':
1445
+ case 'unchanged':
1446
+ return;
1447
+ case 'source_conflict':
1448
+ case 'not_found':
1449
+ throw new AdminConfiguredServerApplyError('configured_server_stale_preview');
1450
+ default:
1451
+ throw new AdminConfiguredServerApplyError('configured_server_apply_failed');
1452
+ }
1453
+ }
1454
+ function sanitizeConfiguredServerDeleteResult(configChange) {
1455
+ return sanitizeConfiguredServerMutationResult(configChange, 'Runtime reload failed after the configuration was deleted.');
1456
+ }
1457
+ function sanitizeConfiguredServerLifecycleResult(configChange) {
1458
+ return sanitizeConfiguredServerMutationResult(configChange, 'Runtime reload failed after the lifecycle configuration was persisted.');
1459
+ }
1460
+ function sanitizeConfiguredServerMutationResult(configChange, reloadFailureMessage) {
1461
+ return {
1462
+ ...configChange,
1463
+ configPath: '[redacted]',
1464
+ backup: configChange.backup.created ? { created: true, path: '[redacted]' } : { created: false },
1465
+ retentionCleanup: {
1466
+ attempted: configChange.retentionCleanup.attempted,
1467
+ deletedPaths: configChange.retentionCleanup.deletedPaths.map(() => '[redacted]'),
1468
+ warnings: configChange.retentionCleanup.warnings.map(() => 'A recovery backup retention cleanup failed.'),
1469
+ },
1470
+ reload: configChange.reload.status === 'failed' ? { status: 'failed', error: reloadFailureMessage } : configChange.reload,
1471
+ warnings: configChange.warnings.map(() => 'A recovery backup retention cleanup failed.'),
1472
+ };
1473
+ }
1474
+ function sanitizeConfiguredServerIdentityConfirmationFacts(facts) {
1475
+ if (!facts)
1476
+ return undefined;
1477
+ const allowed = ['previewConfirmed', 'targetIdentityConfirmed'];
1478
+ const sanitized = Object.fromEntries(allowed.filter((key) => key in facts).map((key) => [key, facts[key]]));
1479
+ return Object.keys(sanitized).length > 0 ? sanitized : undefined;
1480
+ }
931
1481
  function sanitizeApplyConfirmationFacts(facts) {
932
1482
  if (!facts)
933
1483
  return undefined;
@@ -1149,9 +1699,13 @@ function isSecretCapableRawTransportEdit(key, value) {
1149
1699
  if (key === 'url') {
1150
1700
  return isSecretCapableUrlEdit(value);
1151
1701
  }
1152
- if (key === 'headers' || key === 'env') {
1702
+ if (key === 'headers') {
1153
1703
  return true;
1154
1704
  }
1705
+ if (key === 'env' && value && typeof value === 'object' && !Array.isArray(value)) {
1706
+ return Object.entries(value).some(([name, entry]) => !(typeof entry === 'string' && isSafeTemplateExpressionValue(entry)) &&
1707
+ (isSecretLikeKey(name) || containsSecretLikeField(entry)));
1708
+ }
1155
1709
  if (key === 'oauth' && value && typeof value === 'object' && !Array.isArray(value)) {
1156
1710
  return containsStringOrSecretLikeField(value);
1157
1711
  }
@@ -1774,7 +2328,7 @@ function deleteNestedValue(target, fieldPath) {
1774
2328
  }
1775
2329
  delete cursor[fieldPath[fieldPath.length - 1]];
1776
2330
  }
1777
- function validatePreviewServerConfig(serverConfig) {
2331
+ function validatePreviewServerConfig(serverConfig, source = 'mcpServers') {
1778
2332
  const errors = [];
1779
2333
  const type = typeof serverConfig.type === 'string' ? serverConfig.type : undefined;
1780
2334
  const url = typeof serverConfig.url === 'string' ? serverConfig.url : undefined;
@@ -1815,7 +2369,7 @@ function validatePreviewServerConfig(serverConfig) {
1815
2369
  message: 'Transport type must be stdio, http, sse, or streamableHttp.',
1816
2370
  });
1817
2371
  }
1818
- if (url !== undefined && !isValidUrlOrEnvReference(url)) {
2372
+ if (url !== undefined && !isValidUrlOrEnvReference(url, source === 'mcpTemplates')) {
1819
2373
  errors.push({
1820
2374
  fieldPath: ['transport', 'url'],
1821
2375
  code: 'invalid_url',
@@ -1849,7 +2403,9 @@ function mergeValidation(editValidation, serverValidation) {
1849
2403
  errors,
1850
2404
  };
1851
2405
  }
1852
- function isValidUrlOrEnvReference(value) {
2406
+ function isValidUrlOrEnvReference(value, allowHandlebars = false) {
2407
+ if (value.includes('{{'))
2408
+ return allowHandlebars && /\{\{[^}]+\}\}/u.test(value);
1853
2409
  if (/\$\{[^}]+\}|\$[A-Za-z_][A-Za-z0-9_]*/u.test(value)) {
1854
2410
  return true;
1855
2411
  }
@@ -1874,6 +2430,19 @@ function previewConfigChange(targetName, changed, source = 'mcpServers') {
1874
2430
  warnings: [],
1875
2431
  };
1876
2432
  }
2433
+ function previewDeleteConfigChange(targetName, source) {
2434
+ return {
2435
+ status: 'changed',
2436
+ operation: 'remove',
2437
+ configPath: '[redacted]',
2438
+ target: { name: targetName, source },
2439
+ changed: true,
2440
+ backup: { created: false },
2441
+ retentionCleanup: { attempted: false, deletedPaths: [], warnings: [] },
2442
+ reload: { status: 'skipped' },
2443
+ warnings: [],
2444
+ };
2445
+ }
1877
2446
  function previewFingerprint(input) {
1878
2447
  return `preview_${createHash('sha256')
1879
2448
  .update(stableStringify({
@@ -2086,9 +2655,11 @@ function stableStringify(value) {
2086
2655
  }
2087
2656
  return JSON.stringify(value);
2088
2657
  }
2089
- function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServers', revision = fingerprintConfiguredServerTarget(serverConfig), instructionOverride = serverConfig.instructionOverride, hasInstructionOverride = Object.hasOwn(serverConfig, 'instructionOverride')) {
2658
+ function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServers', revision = fingerprintConfiguredServerTarget(serverConfig), instructionOverride = serverConfig.instructionOverride, hasInstructionOverride = Object.hasOwn(serverConfig, 'instructionOverride'), collision = false, activeInstanceCount = 0, mutationAvailable = true) {
2090
2659
  const secretInputs = [];
2091
2660
  const transport = {};
2661
+ const templateAnalysis = source === 'mcpTemplates' ? analyzeTemplateServerDefinition(serverConfig) : undefined;
2662
+ const invalidTemplateFields = new Set(templateAnalysis?.syntax.errors.map((error) => fieldKey(error.fieldPath)) ?? []);
2092
2663
  for (const [key, value] of Object.entries(serverConfig)) {
2093
2664
  if (key === 'disabled' ||
2094
2665
  key === 'tags' ||
@@ -2098,7 +2669,7 @@ function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServer
2098
2669
  continue;
2099
2670
  }
2100
2671
  if (key === 'env') {
2101
- transport.env = redactNamedSecretRecord(value, ['env'], secretInputs);
2672
+ transport.env = redactNamedSecretRecord(value, ['env'], secretInputs, source === 'mcpTemplates', invalidTemplateFields);
2102
2673
  continue;
2103
2674
  }
2104
2675
  if (key === 'headers') {
@@ -2107,6 +2678,9 @@ function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServer
2107
2678
  }
2108
2679
  if (key === 'args') {
2109
2680
  transport.args = sanitizeCommandArgs(value, secretInputs);
2681
+ if (Array.isArray(transport.args)) {
2682
+ transport.args = transport.args.map((entry, index) => invalidTemplateFields.has(fieldKey(['transport', 'args', String(index)])) ? redactedValue() : entry);
2683
+ }
2110
2684
  continue;
2111
2685
  }
2112
2686
  if (key === 'oauth') {
@@ -2114,7 +2688,13 @@ function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServer
2114
2688
  continue;
2115
2689
  }
2116
2690
  if (key === 'url' && typeof value === 'string') {
2117
- transport.url = redactUrlQuerySecrets(value, secretInputs);
2691
+ transport.url = invalidTemplateFields.has(fieldKey(['transport', 'url']))
2692
+ ? redactedValue()
2693
+ : redactUrlQuerySecrets(value, secretInputs);
2694
+ continue;
2695
+ }
2696
+ if (invalidTemplateFields.has(fieldKey(['transport', key]))) {
2697
+ transport[key] = redactedValue();
2118
2698
  continue;
2119
2699
  }
2120
2700
  transport[key] = sanitizeUnknownValue(value, [key], secretInputs);
@@ -2133,15 +2713,11 @@ function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServer
2133
2713
  tags: normalizeTags(serverConfig.tags),
2134
2714
  transportSummary: createTransportSummary(serverConfig, transport),
2135
2715
  mutationAvailability: {
2136
- available: source === 'mcpServers',
2137
- operations: source === 'mcpServers' ? ['enable', 'disable'] : [],
2716
+ available: mutationAvailable,
2717
+ operations: ['enable', 'disable'],
2718
+ deleteAvailable: mutationAvailable,
2138
2719
  },
2139
- actionState: source === 'mcpServers'
2140
- ? createActionState(name, enabled)
2141
- : {
2142
- enable: { available: false, label: `Enable ${name}`, disabledReason: 'already_enabled' },
2143
- disable: { available: false, label: `Disable ${name}`, disabledReason: 'already_disabled' },
2144
- },
2720
+ actionState: createActionState(name, enabled),
2145
2721
  transport,
2146
2722
  secretInputs,
2147
2723
  instructionOverride: !hasInstructionOverride
@@ -2149,6 +2725,16 @@ function createConfiguredServerReadModel(name, serverConfig, source = 'mcpServer
2149
2725
  : instructionOverride === ''
2150
2726
  ? { state: 'suppress', value: '' }
2151
2727
  : { state: 'replace', value: instructionOverride },
2728
+ definition: {
2729
+ kind: source === 'mcpTemplates' ? 'template' : 'static',
2730
+ qualifiedId: `${source}/${name}`,
2731
+ authority: collision ? (source === 'mcpTemplates' ? 'authoritative' : 'shadowed') : 'sole',
2732
+ },
2733
+ ...(templateAnalysis ? { templateAnalysis } : {}),
2734
+ runtime: {
2735
+ objectKind: 'definition',
2736
+ activeInstanceCount: source === 'mcpTemplates' ? activeInstanceCount : 0,
2737
+ },
2152
2738
  };
2153
2739
  }
2154
2740
  const STDIO_TRANSPORT_TYPES = ['stdio'];
@@ -2257,7 +2843,7 @@ const TRANSPORT_FIELD_DEFINITIONS = [
2257
2843
  const TRANSPORT_FIELD_DEFINITION_BY_KEY = new Map(TRANSPORT_FIELD_DEFINITIONS.map((definition) => [definition.key, definition]));
2258
2844
  function createConfiguredServerEditContract(server, rawServerConfig, serverDefaults) {
2259
2845
  const secretFieldKeys = new Set(server.secretInputs.map((input) => fieldKey(input.fieldPath)));
2260
- const transportFields = TRANSPORT_FIELD_DEFINITIONS.map((definition) => {
2846
+ const transportFields = TRANSPORT_FIELD_DEFINITIONS.filter((definition) => definition.key !== 'template').map((definition) => {
2261
2847
  const value = Object.prototype.hasOwnProperty.call(server.transport, definition.key)
2262
2848
  ? server.transport[definition.key]
2263
2849
  : definition.defaultValue;
@@ -2276,7 +2862,7 @@ function createConfiguredServerEditContract(server, rawServerConfig, serverDefau
2276
2862
  singleTargetEdit: true,
2277
2863
  rename: { supported: true },
2278
2864
  create: { supported: false },
2279
- delete: { supported: false },
2865
+ delete: { supported: server.mutationAvailability.deleteAvailable === true },
2280
2866
  bulkEdit: { supported: false },
2281
2867
  rawJson: { supported: false },
2282
2868
  preview: { supported: true },
@@ -2299,7 +2885,7 @@ function createConfiguredServerEditContract(server, rawServerConfig, serverDefau
2299
2885
  label: 'Enabled',
2300
2886
  control: 'switch',
2301
2887
  value: server.enabled,
2302
- editable: true,
2888
+ editable: server.source === 'mcpServers',
2303
2889
  },
2304
2890
  {
2305
2891
  fieldPath: ['tags'],
@@ -2315,6 +2901,15 @@ function createConfiguredServerEditContract(server, rawServerConfig, serverDefau
2315
2901
  label: 'Transport',
2316
2902
  fields: transportFields,
2317
2903
  },
2904
+ ...(server.source === 'mcpTemplates'
2905
+ ? [
2906
+ {
2907
+ id: 'template',
2908
+ label: 'Template instances',
2909
+ fields: templateLifecycleFields(server.transport.template, rawServerConfig.disabled),
2910
+ },
2911
+ ]
2912
+ : []),
2318
2913
  {
2319
2914
  id: 'secrets',
2320
2915
  label: 'Secrets',
@@ -2323,6 +2918,31 @@ function createConfiguredServerEditContract(server, rawServerConfig, serverDefau
2323
2918
  ],
2324
2919
  };
2325
2920
  }
2921
+ function templateLifecycleFields(value, disabled) {
2922
+ const template = value && typeof value === 'object' && !Array.isArray(value) ? value : {};
2923
+ const extraction = template.extractionOptions && typeof template.extractionOptions === 'object'
2924
+ ? template.extractionOptions
2925
+ : {};
2926
+ return [
2927
+ templateField(['disabled'], 'Disabled expression', 'text', disabled ?? ''),
2928
+ templateField(['shareable'], 'Share instances', 'switch', template.shareable ?? true),
2929
+ templateField(['perClient'], 'One instance per client', 'switch', template.perClient ?? false),
2930
+ templateField(['maxInstances'], 'Maximum instances', 'number', template.maxInstances),
2931
+ templateField(['idleTimeout'], 'Idle timeout (ms)', 'number', template.idleTimeout),
2932
+ templateField(['extractionOptions', 'includeOptional'], 'Include optional context', 'switch', extraction.includeOptional ?? false),
2933
+ templateField(['extractionOptions', 'includeEnvironment'], 'Include environment context', 'switch', extraction.includeEnvironment ?? false),
2934
+ ];
2935
+ }
2936
+ function templateField(nestedPath, label, control, value) {
2937
+ return {
2938
+ fieldPath: nestedPath[0] === 'disabled' ? ['transport', 'disabled'] : ['transport', 'template', ...nestedPath],
2939
+ label,
2940
+ control,
2941
+ value,
2942
+ editable: true,
2943
+ applicableSources: ['mcpTemplates'],
2944
+ };
2945
+ }
2326
2946
  function omitSecretValues(value, fieldPath, secretFieldKeys) {
2327
2947
  if (secretFieldKeys.has(fieldKey(fieldPath))) {
2328
2948
  return undefined;
@@ -2567,7 +3187,7 @@ function wouldUseLocalStdioTransport(serverConfig) {
2567
3187
  function normalizeTags(tags) {
2568
3188
  return Array.isArray(tags) ? tags.filter((tag) => typeof tag === 'string') : [];
2569
3189
  }
2570
- function redactNamedSecretRecord(value, basePath, secretInputs) {
3190
+ function redactNamedSecretRecord(value, basePath, secretInputs, exposeTemplateExpressions = false, invalidTemplateFields = new Set()) {
2571
3191
  if (Array.isArray(value)) {
2572
3192
  return value.map((entry, index) => {
2573
3193
  const label = typeof entry === 'string' && entry.includes('=') ? entry.split('=')[0] : String(index);
@@ -2579,12 +3199,44 @@ function redactNamedSecretRecord(value, basePath, secretInputs) {
2579
3199
  return {};
2580
3200
  }
2581
3201
  const redacted = {};
2582
- for (const key of Object.keys(value)) {
3202
+ for (const [key, entry] of Object.entries(value)) {
3203
+ if (invalidTemplateFields.has(fieldKey(['transport', ...basePath, key]))) {
3204
+ redacted[key] = redactedValue();
3205
+ continue;
3206
+ }
3207
+ if (exposeTemplateExpressions &&
3208
+ typeof entry === 'string' &&
3209
+ isSafeTemplateExpressionValue(entry) &&
3210
+ !containsSecretLikeString(entry)) {
3211
+ redacted[key] = entry;
3212
+ continue;
3213
+ }
2583
3214
  redacted[key] = redactedValue();
2584
3215
  secretInputs.push(secretInput([...basePath, key], key));
2585
3216
  }
2586
3217
  return redacted;
2587
3218
  }
3219
+ function isSafeTemplateExpressionValue(value) {
3220
+ if (!value.includes('{{'))
3221
+ return false;
3222
+ const withoutExpressions = value.replace(/\{\{\{?[\s\S]*?\}\}\}?/gu, '');
3223
+ if (!/^[\s,;:|/_.-]*$/u.test(withoutExpressions))
3224
+ return false;
3225
+ try {
3226
+ return !templateAstContainsStringLiteral(Handlebars.parse(value));
3227
+ }
3228
+ catch {
3229
+ return false;
3230
+ }
3231
+ }
3232
+ function templateAstContainsStringLiteral(value) {
3233
+ if (!value || typeof value !== 'object')
3234
+ return false;
3235
+ if (Array.isArray(value))
3236
+ return value.some(templateAstContainsStringLiteral);
3237
+ const node = value;
3238
+ return node.type === 'StringLiteral' || Object.values(node).some(templateAstContainsStringLiteral);
3239
+ }
2588
3240
  function redactOAuthConfig(value, secretInputs) {
2589
3241
  if (!value || typeof value !== 'object' || Array.isArray(value)) {
2590
3242
  return {};