@agent-native/core 0.106.3 → 0.107.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (292) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +23 -0
  3. package/corpus/core/docs/content/integrations.mdx +597 -0
  4. package/corpus/core/docs/content/locales/ar-SA/mcp-clients.mdx +19 -1
  5. package/corpus/core/docs/content/locales/de-DE/mcp-clients.mdx +22 -1
  6. package/corpus/core/docs/content/locales/es-ES/mcp-clients.mdx +23 -1
  7. package/corpus/core/docs/content/locales/fr-FR/mcp-clients.mdx +23 -1
  8. package/corpus/core/docs/content/locales/hi-IN/mcp-clients.mdx +22 -1
  9. package/corpus/core/docs/content/locales/ja-JP/mcp-clients.mdx +21 -1
  10. package/corpus/core/docs/content/locales/ko-KR/mcp-clients.mdx +20 -1
  11. package/corpus/core/docs/content/locales/pt-BR/mcp-clients.mdx +22 -1
  12. package/corpus/core/docs/content/locales/zh-CN/mcp-clients.mdx +17 -1
  13. package/corpus/core/docs/content/locales/zh-TW/mcp-clients.mdx +17 -1
  14. package/corpus/core/docs/content/mcp-clients.mdx +51 -1
  15. package/corpus/core/docs/content/organizations-teams-permissions.mdx +413 -0
  16. package/corpus/core/package.json +1 -1
  17. package/corpus/core/src/agent/production-agent.ts +19 -0
  18. package/corpus/core/src/agent/run-store.ts +98 -2
  19. package/corpus/core/src/client/AssistantChat.tsx +26 -1
  20. package/corpus/core/src/client/CommandMenu.tsx +5 -0
  21. package/corpus/core/src/client/active-run-state.ts +34 -0
  22. package/corpus/core/src/client/agent-chat-adapter.ts +4 -0
  23. package/corpus/core/src/client/chat/message-components.tsx +41 -0
  24. package/corpus/core/src/client/composer/TiptapComposer.tsx +45 -8
  25. package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +30 -11
  26. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +270 -0
  27. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +177 -40
  28. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +478 -4
  29. package/corpus/core/src/client/resources/mcp-integration-logos.ts +108 -0
  30. package/corpus/core/src/client/sharing/ShareButton.tsx +30 -9
  31. package/corpus/core/src/client/use-agent-chat-home-handoff.ts +2 -2
  32. package/corpus/core/src/deploy/build.ts +32 -0
  33. package/corpus/core/src/extensions/html-shell.ts +33 -1
  34. package/corpus/core/src/ingestion/office.ts +1 -2
  35. package/corpus/core/src/ingestion/pptx.ts +2 -4
  36. package/corpus/core/src/localization/default-messages.ts +129 -1
  37. package/corpus/core/src/mcp/actions/call-mcp-tool.ts +1 -0
  38. package/corpus/core/src/secrets/register-framework-secrets.ts +28 -0
  39. package/corpus/core/src/server/agent-chat-plugin.ts +29 -1
  40. package/corpus/core/src/server/index.ts +4 -0
  41. package/corpus/core/src/server/org-admin.ts +28 -0
  42. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +9 -0
  43. package/corpus/core/src/templates/workspace-core/.agents/skills/extensions/references/api.md +31 -0
  44. package/corpus/core/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +9 -0
  45. package/corpus/core/src/vite/client.ts +24 -0
  46. package/corpus/templates/analytics/.agents/skills/creative-context/SKILL.md +64 -0
  47. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +29 -21
  48. package/corpus/templates/analytics/AGENTS.md +13 -0
  49. package/corpus/templates/analytics/actions/clone-creative-context-dashboard.ts +86 -0
  50. package/corpus/templates/analytics/actions/dashboard-mutation-api.ts +1 -1
  51. package/corpus/templates/analytics/actions/update-dashboard.ts +6 -2
  52. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +35 -7
  53. package/corpus/templates/analytics/app/components/layout/Layout.tsx +3 -3
  54. package/corpus/templates/analytics/app/i18n/zh-TW.ts +1 -0
  55. package/corpus/templates/analytics/app/i18n-data.ts +1 -0
  56. package/corpus/templates/analytics/app/pages/Ask.tsx +8 -4
  57. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +11 -1
  58. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/extension-slot.ts +11 -0
  59. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +86 -0
  60. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +6 -0
  61. package/corpus/templates/analytics/app/routes/agent.tsx +7 -1
  62. package/corpus/templates/analytics/changelog/2026-07-17-dashboard-extension-boxes.md +6 -0
  63. package/corpus/templates/analytics/changelog/2026-07-17-library-now-flags-published-dashboards-with-newer-versions-a.md +6 -0
  64. package/corpus/templates/analytics/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
  65. package/corpus/templates/analytics/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
  66. package/corpus/templates/analytics/package.json +1 -0
  67. package/corpus/templates/analytics/server/lib/agent-readable-resource-context.ts +8 -0
  68. package/corpus/templates/analytics/server/lib/native-creative-context.ts +158 -0
  69. package/corpus/templates/analytics/server/plugins/agent-chat.ts +1 -0
  70. package/corpus/templates/analytics/server/plugins/creative-context.ts +10 -0
  71. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +12 -3
  72. package/corpus/templates/assets/AGENTS.md +5 -0
  73. package/corpus/templates/assets/actions/clone-creative-context-asset.ts +74 -0
  74. package/corpus/templates/assets/app/hooks/use-navigation-state.ts +2 -1
  75. package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +308 -178
  76. package/corpus/templates/assets/app/routes/library.tsx +5 -11
  77. package/corpus/templates/assets/changelog/2026-07-17-library-now-flags-published-assets-with-newer-versions-and-l.md +6 -0
  78. package/corpus/templates/assets/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  79. package/corpus/templates/assets/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
  80. package/corpus/templates/assets/server/lib/native-creative-context.ts +198 -0
  81. package/corpus/templates/assets/server/plugins/creative-context.ts +4 -0
  82. package/corpus/templates/brain/actions/provider-api-request.ts +1 -0
  83. package/corpus/templates/brain/app/hooks/use-navigation-state.ts +6 -1
  84. package/corpus/templates/brain/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  85. package/corpus/templates/calendar/actions/provider-api-request.ts +1 -0
  86. package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +1 -1
  87. package/corpus/templates/calendar/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  88. package/corpus/templates/chat/app/hooks/use-navigation-state.ts +4 -1
  89. package/corpus/templates/chat/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  90. package/corpus/templates/clips/actions/get-recording-insights.ts +7 -4
  91. package/corpus/templates/clips/actions/list-recordings.ts +48 -0
  92. package/corpus/templates/clips/actions/list-viewers.ts +2 -1
  93. package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +3 -1
  94. package/corpus/templates/clips/app/components/library/library-layout.tsx +1 -1
  95. package/corpus/templates/clips/app/components/player/share-dialog.tsx +1 -3
  96. package/corpus/templates/clips/app/hooks/use-desktop-promo.ts +11 -6
  97. package/corpus/templates/clips/app/hooks/use-view-tracking.ts +6 -1
  98. package/corpus/templates/clips/app/lib/ffmpeg-export.ts +4 -2
  99. package/corpus/templates/clips/app/routes/share.$shareId.tsx +21 -3
  100. package/corpus/templates/clips/changelog/2026-07-17-dictation-keeps-sentence-spacing-and-no-longer-crashes-when-.md +6 -0
  101. package/corpus/templates/clips/changelog/2026-07-17-shared-clips-now-preserve-editor-access-and-show-editor-insi.md +6 -0
  102. package/corpus/templates/clips/changelog/2026-07-17-stitching-clips-no-longer-fails-when-editor-media-metadata-i.md +6 -0
  103. package/corpus/templates/clips/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  104. package/corpus/templates/clips/server/routes/api/public-recording.get.ts +14 -8
  105. package/corpus/templates/clips/shared/view-analytics.ts +4 -0
  106. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +12 -3
  107. package/corpus/templates/content/AGENTS.md +5 -0
  108. package/corpus/templates/content/actions/_content-space-access.ts +45 -2
  109. package/corpus/templates/content/actions/clone-creative-context-document.ts +61 -0
  110. package/corpus/templates/content/actions/create-content-database.ts +41 -7
  111. package/corpus/templates/content/actions/provider-api-request.ts +1 -0
  112. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +21 -0
  113. package/corpus/templates/content/app/components/layout/Layout.tsx +1 -1
  114. package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +29 -0
  115. package/corpus/templates/content/app/root.tsx +1 -10
  116. package/corpus/templates/content/changelog/2026-07-17-creating-a-database-now-completes-reliably-in-hosted-workspa.md +6 -0
  117. package/corpus/templates/content/changelog/2026-07-17-library-now-flags-published-documents-with-newer-versions-an.md +6 -0
  118. package/corpus/templates/content/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
  119. package/corpus/templates/content/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  120. package/corpus/templates/content/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
  121. package/corpus/templates/content/parity/matrix.md +1 -1
  122. package/corpus/templates/content/parity/matrix.ts +1 -0
  123. package/corpus/templates/content/server/lib/native-creative-context.ts +191 -0
  124. package/corpus/templates/content/server/plugins/creative-context.ts +8 -1
  125. package/corpus/templates/design/.agents/skills/creative-context/SKILL.md +11 -3
  126. package/corpus/templates/design/AGENTS.md +5 -0
  127. package/corpus/templates/design/actions/clone-creative-context-design-native.ts +111 -0
  128. package/corpus/templates/design/actions/provider-api-request.ts +1 -0
  129. package/corpus/templates/design/app/pages/Index.tsx +44 -0
  130. package/corpus/templates/design/app/pages/design-editor/types.ts +1 -0
  131. package/corpus/templates/design/changelog/2026-07-17-library-now-flags-published-designs-with-newer-versions-and-.md +6 -0
  132. package/corpus/templates/design/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
  133. package/corpus/templates/design/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
  134. package/corpus/templates/design/server/lib/native-creative-context.ts +265 -0
  135. package/corpus/templates/design/server/plugins/creative-context.ts +8 -1
  136. package/corpus/templates/dispatch/actions/provider-api-request.ts +1 -0
  137. package/corpus/templates/dispatch/app/hooks/use-navigation-state.ts +4 -1
  138. package/corpus/templates/dispatch/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  139. package/corpus/templates/forms/app/components/layout/Layout.tsx +2 -4
  140. package/corpus/templates/forms/app/components/ui/popover.tsx +25 -1
  141. package/corpus/templates/forms/app/hooks/use-navigation-state.ts +6 -1
  142. package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +13 -10
  143. package/corpus/templates/forms/app/root.tsx +6 -1
  144. package/corpus/templates/forms/changelog/2026-07-17-form-builder-popovers-stay-within-the-viewport.md +6 -0
  145. package/corpus/templates/forms/changelog/2026-07-17-form-editor-loading-matches-current-sidebar-free-layout.md +6 -0
  146. package/corpus/templates/forms/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  147. package/corpus/templates/mail/actions/provider-api-request.ts +1 -0
  148. package/corpus/templates/mail/app/components/layout/AppLayout.tsx +1 -1
  149. package/corpus/templates/mail/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  150. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +14 -3
  151. package/corpus/templates/plan/app/hooks/use-navigation-state.ts +8 -1
  152. package/corpus/templates/plan/app/root.tsx +0 -2
  153. package/corpus/templates/plan/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  154. package/corpus/templates/slides/.agents/skills/creative-context/SKILL.md +11 -3
  155. package/corpus/templates/slides/AGENTS.md +5 -0
  156. package/corpus/templates/slides/actions/clone-creative-context-deck.ts +96 -0
  157. package/corpus/templates/slides/actions/extract-pdf.ts +3 -2
  158. package/corpus/templates/slides/actions/import-file.ts +3 -2
  159. package/corpus/templates/slides/actions/provider-api-request.ts +1 -0
  160. package/corpus/templates/slides/app/components/deck/DeckCard.tsx +27 -0
  161. package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +21 -0
  162. package/corpus/templates/slides/app/components/layout/Layout.tsx +1 -1
  163. package/corpus/templates/slides/app/context/DeckContext.tsx +23 -23
  164. package/corpus/templates/slides/changelog/2026-07-17-duplicated-slides-now-stay-in-the-deck.md +6 -0
  165. package/corpus/templates/slides/changelog/2026-07-17-library-now-flags-published-decks-with-newer-versions-and-le.md +6 -0
  166. package/corpus/templates/slides/changelog/2026-07-17-pdf-and-powerpoint-imports-now-work-reliably-in-hosted-decks.md +6 -0
  167. package/corpus/templates/slides/changelog/2026-07-17-resources-can-be-added-to-creative-context-from-their-action.md +6 -0
  168. package/corpus/templates/slides/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  169. package/corpus/templates/slides/changelog/2026-07-17-you-can-add-exact-approved-artifact-versions-to-governed-cre.md +6 -0
  170. package/corpus/templates/slides/server/lib/native-creative-context.ts +288 -0
  171. package/corpus/templates/slides/server/plugins/creative-context.ts +4 -0
  172. package/corpus/templates/tasks/app/components/layout/Layout.tsx +2 -13
  173. package/corpus/templates/tasks/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it.md +6 -0
  174. package/dist/agent/production-agent.d.ts.map +1 -1
  175. package/dist/agent/production-agent.js +13 -1
  176. package/dist/agent/production-agent.js.map +1 -1
  177. package/dist/agent/run-store.d.ts +17 -0
  178. package/dist/agent/run-store.d.ts.map +1 -1
  179. package/dist/agent/run-store.js +84 -2
  180. package/dist/agent/run-store.js.map +1 -1
  181. package/dist/client/AssistantChat.d.ts.map +1 -1
  182. package/dist/client/AssistantChat.js +18 -3
  183. package/dist/client/AssistantChat.js.map +1 -1
  184. package/dist/client/CommandMenu.d.ts.map +1 -1
  185. package/dist/client/CommandMenu.js +4 -0
  186. package/dist/client/CommandMenu.js.map +1 -1
  187. package/dist/client/active-run-state.d.ts +7 -0
  188. package/dist/client/active-run-state.d.ts.map +1 -1
  189. package/dist/client/active-run-state.js +28 -0
  190. package/dist/client/active-run-state.js.map +1 -1
  191. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  192. package/dist/client/agent-chat-adapter.js +4 -1
  193. package/dist/client/agent-chat-adapter.js.map +1 -1
  194. package/dist/client/chat/message-components.d.ts.map +1 -1
  195. package/dist/client/chat/message-components.js +35 -1
  196. package/dist/client/chat/message-components.js.map +1 -1
  197. package/dist/client/composer/TiptapComposer.d.ts +7 -0
  198. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  199. package/dist/client/composer/TiptapComposer.js +37 -8
  200. package/dist/client/composer/TiptapComposer.js.map +1 -1
  201. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  202. package/dist/client/integrations/IntegrationsPanel.js +3 -2
  203. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  204. package/dist/client/resources/McpConnectionSuggestion.d.ts +9 -0
  205. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -0
  206. package/dist/client/resources/McpConnectionSuggestion.js +134 -0
  207. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -0
  208. package/dist/client/resources/McpIntegrationDialog.d.ts +2 -1
  209. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  210. package/dist/client/resources/McpIntegrationDialog.js +51 -21
  211. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  212. package/dist/client/resources/mcp-integration-catalog.d.ts +15 -0
  213. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  214. package/dist/client/resources/mcp-integration-catalog.js +420 -4
  215. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  216. package/dist/client/resources/mcp-integration-logos.d.ts +2 -0
  217. package/dist/client/resources/mcp-integration-logos.d.ts.map +1 -0
  218. package/dist/client/resources/mcp-integration-logos.js +109 -0
  219. package/dist/client/resources/mcp-integration-logos.js.map +1 -0
  220. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  221. package/dist/client/sharing/ShareButton.js +15 -12
  222. package/dist/client/sharing/ShareButton.js.map +1 -1
  223. package/dist/client/use-agent-chat-home-handoff.d.ts +1 -1
  224. package/dist/client/use-agent-chat-home-handoff.d.ts.map +1 -1
  225. package/dist/client/use-agent-chat-home-handoff.js +1 -1
  226. package/dist/client/use-agent-chat-home-handoff.js.map +1 -1
  227. package/dist/collab/routes.d.ts +1 -1
  228. package/dist/collab/struct-routes.d.ts +1 -1
  229. package/dist/deploy/build.d.ts.map +1 -1
  230. package/dist/deploy/build.js +23 -0
  231. package/dist/deploy/build.js.map +1 -1
  232. package/dist/extensions/html-shell.d.ts.map +1 -1
  233. package/dist/extensions/html-shell.js +33 -1
  234. package/dist/extensions/html-shell.js.map +1 -1
  235. package/dist/ingestion/office.d.ts.map +1 -1
  236. package/dist/ingestion/office.js +1 -2
  237. package/dist/ingestion/office.js.map +1 -1
  238. package/dist/ingestion/pptx.js +2 -4
  239. package/dist/ingestion/pptx.js.map +1 -1
  240. package/dist/localization/default-messages.d.ts +100 -0
  241. package/dist/localization/default-messages.d.ts.map +1 -1
  242. package/dist/localization/default-messages.js +101 -1
  243. package/dist/localization/default-messages.js.map +1 -1
  244. package/dist/mcp/actions/call-mcp-tool.js +1 -0
  245. package/dist/mcp/actions/call-mcp-tool.js.map +1 -1
  246. package/dist/notifications/routes.d.ts +1 -1
  247. package/dist/observability/routes.d.ts +5 -5
  248. package/dist/provider-api/corpus-jobs.d.ts +2 -2
  249. package/dist/resources/handlers.d.ts +1 -1
  250. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  251. package/dist/secrets/register-framework-secrets.js +25 -0
  252. package/dist/secrets/register-framework-secrets.js.map +1 -1
  253. package/dist/secrets/routes.d.ts +9 -9
  254. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  255. package/dist/server/agent-chat-plugin.js +23 -1
  256. package/dist/server/agent-chat-plugin.js.map +1 -1
  257. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  258. package/dist/server/index.d.ts +1 -0
  259. package/dist/server/index.d.ts.map +1 -1
  260. package/dist/server/index.js +1 -0
  261. package/dist/server/index.js.map +1 -1
  262. package/dist/server/org-admin.d.ts +3 -0
  263. package/dist/server/org-admin.d.ts.map +1 -0
  264. package/dist/server/org-admin.js +24 -0
  265. package/dist/server/org-admin.js.map +1 -0
  266. package/dist/templates/chat/app/hooks/use-navigation-state.ts +4 -1
  267. package/dist/templates/chat/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  268. package/dist/templates/workspace-core/.agents/skills/extensions/SKILL.md +9 -0
  269. package/dist/templates/workspace-core/.agents/skills/extensions/references/api.md +31 -0
  270. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +9 -0
  271. package/dist/vite/client.d.ts.map +1 -1
  272. package/dist/vite/client.js +20 -0
  273. package/dist/vite/client.js.map +1 -1
  274. package/docs/content/integrations.mdx +597 -0
  275. package/docs/content/locales/ar-SA/mcp-clients.mdx +19 -1
  276. package/docs/content/locales/de-DE/mcp-clients.mdx +22 -1
  277. package/docs/content/locales/es-ES/mcp-clients.mdx +23 -1
  278. package/docs/content/locales/fr-FR/mcp-clients.mdx +23 -1
  279. package/docs/content/locales/hi-IN/mcp-clients.mdx +22 -1
  280. package/docs/content/locales/ja-JP/mcp-clients.mdx +21 -1
  281. package/docs/content/locales/ko-KR/mcp-clients.mdx +20 -1
  282. package/docs/content/locales/pt-BR/mcp-clients.mdx +22 -1
  283. package/docs/content/locales/zh-CN/mcp-clients.mdx +17 -1
  284. package/docs/content/locales/zh-TW/mcp-clients.mdx +17 -1
  285. package/docs/content/mcp-clients.mdx +51 -1
  286. package/docs/content/organizations-teams-permissions.mdx +413 -0
  287. package/package.json +1 -1
  288. package/src/templates/chat/app/hooks/use-navigation-state.ts +4 -1
  289. package/src/templates/chat/changelog/2026-07-17-the-agent-chat-sidebar-stays-closed-until-you-open-it-or-sta.md +6 -0
  290. package/src/templates/workspace-core/.agents/skills/extensions/SKILL.md +9 -0
  291. package/src/templates/workspace-core/.agents/skills/extensions/references/api.md +31 -0
  292. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +9 -0
@@ -3,12 +3,28 @@ import {
3
3
  type McpIntegrationsConfigInput,
4
4
  type NormalizedMcpIntegrationsConfig,
5
5
  } from "../../shared/mcp-integration-config.js";
6
+ import { mcpIntegrationLogo } from "./mcp-integration-logos.js";
6
7
 
7
8
  export type McpIntegrationAuthMode = "none" | "headers" | "oauth";
9
+ export type McpIntegrationConnectionMode =
10
+ | "direct"
11
+ | "headers"
12
+ | "oauth"
13
+ | "manual";
14
+ export type McpIntegrationAvailability =
15
+ | "ready"
16
+ | "beta"
17
+ | "provider-setup"
18
+ | "client-restricted";
19
+ export type McpIntegrationVerification =
20
+ | "verified"
21
+ | "preflight-only"
22
+ | "restricted";
8
23
 
9
24
  declare const __AGENT_NATIVE_MCP_INTEGRATIONS_CONFIG__:
10
25
  | NormalizedMcpIntegrationsConfig
11
26
  | undefined;
27
+ declare const __AGENT_NATIVE_TEMPLATE__: string | undefined;
12
28
 
13
29
  export interface DefaultMcpIntegration {
14
30
  id: string;
@@ -20,8 +36,17 @@ export interface DefaultMcpIntegration {
20
36
  useCaseKey: string;
21
37
  url: string;
22
38
  authMode: McpIntegrationAuthMode;
39
+ connectionMode: McpIntegrationConnectionMode;
40
+ availability: McpIntegrationAvailability;
41
+ verification: McpIntegrationVerification;
42
+ logoUrl: string;
23
43
  docsUrl?: string;
24
44
  setupNoteKey?: string;
45
+ apiFallback?: {
46
+ secretKey: string;
47
+ docsUrl: string;
48
+ templateUses?: readonly string[];
49
+ };
25
50
  headerPlaceholder?: string;
26
51
  keywords: string[];
27
52
  }
@@ -52,6 +77,10 @@ export const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [
52
77
  useCaseKey: "mcpIntegrations.catalog.context7.useCase",
53
78
  url: "https://mcp.context7.com/mcp",
54
79
  authMode: "none",
80
+ connectionMode: "direct",
81
+ availability: "ready",
82
+ verification: "verified",
83
+ logoUrl: mcpIntegrationLogo("context7"),
55
84
  docsUrl: "https://context7.com/",
56
85
  keywords: ["docs", "documentation", "libraries", "frameworks"],
57
86
  },
@@ -65,6 +94,10 @@ export const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [
65
94
  useCaseKey: "mcpIntegrations.catalog.sentry.useCase",
66
95
  url: "https://mcp.sentry.dev/mcp",
67
96
  authMode: "headers",
97
+ connectionMode: "headers",
98
+ availability: "ready",
99
+ verification: "preflight-only",
100
+ logoUrl: mcpIntegrationLogo("sentry"),
68
101
  docsUrl: "https://docs.sentry.io/product/sentry-mcp/",
69
102
  headerPlaceholder: "Authorization: Bearer <sentry-token>",
70
103
  keywords: ["errors", "monitoring", "debugging", "issues"],
@@ -77,9 +110,14 @@ export const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [
77
110
  descriptionKey: "mcpIntegrations.catalog.notion.description",
78
111
  useCase: "documentation, knowledge management, notes, content creation",
79
112
  useCaseKey: "mcpIntegrations.catalog.notion.useCase",
80
- url: "https://mcp.notion.com/sse",
113
+ url: "https://mcp.notion.com/mcp",
81
114
  authMode: "oauth",
82
- docsUrl: "https://developers.notion.com/docs/mcp",
115
+ connectionMode: "oauth",
116
+ availability: "ready",
117
+ verification: "preflight-only",
118
+ logoUrl: mcpIntegrationLogo("notion"),
119
+ docsUrl: "https://developers.notion.com/guides/mcp/get-started-with-mcp",
120
+ setupNoteKey: "mcpIntegrations.catalog.notion.setupNote",
83
121
  keywords: ["docs", "knowledge", "notes", "pages"],
84
122
  },
85
123
  {
@@ -92,6 +130,10 @@ export const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [
92
130
  useCaseKey: "mcpIntegrations.catalog.semgrep.useCase",
93
131
  url: "https://mcp.semgrep.ai/mcp",
94
132
  authMode: "none",
133
+ connectionMode: "direct",
134
+ availability: "ready",
135
+ verification: "preflight-only",
136
+ logoUrl: mcpIntegrationLogo("semgrep"),
95
137
  docsUrl: "https://github.com/semgrep/mcp#readme",
96
138
  keywords: ["security", "sast", "code scanning", "vulnerabilities"],
97
139
  },
@@ -103,9 +145,13 @@ export const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [
103
145
  descriptionKey: "mcpIntegrations.catalog.linear.description",
104
146
  useCase: "project management, issue tracking, planning, bug reports",
105
147
  useCaseKey: "mcpIntegrations.catalog.linear.useCase",
106
- url: "https://mcp.linear.app/sse",
148
+ url: "https://mcp.linear.app/mcp",
107
149
  authMode: "oauth",
108
- docsUrl: "https://www.builder.io/c/docs/fusion-connect-to-linear",
150
+ connectionMode: "oauth",
151
+ availability: "ready",
152
+ verification: "preflight-only",
153
+ logoUrl: mcpIntegrationLogo("linear"),
154
+ docsUrl: "https://linear.app/docs/mcp",
109
155
  keywords: ["issues", "tickets", "planning", "project management"],
110
156
  },
111
157
  {
@@ -119,6 +165,10 @@ export const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [
119
165
  useCaseKey: "mcpIntegrations.catalog.atlassian.useCase",
120
166
  url: "https://mcp.atlassian.com/v1/mcp/authv2",
121
167
  authMode: "oauth",
168
+ connectionMode: "oauth",
169
+ availability: "provider-setup",
170
+ verification: "restricted",
171
+ logoUrl: mcpIntegrationLogo("atlassian"),
122
172
  docsUrl:
123
173
  "https://developer.atlassian.com/cloud/rovo-mcp/guides/getting-started/",
124
174
  setupNoteKey: "mcpIntegrations.catalog.atlassian.setupNote",
@@ -134,6 +184,10 @@ export const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [
134
184
  useCaseKey: "mcpIntegrations.catalog.supabase.useCase",
135
185
  url: "https://mcp.supabase.com/mcp",
136
186
  authMode: "oauth",
187
+ connectionMode: "oauth",
188
+ availability: "ready",
189
+ verification: "preflight-only",
190
+ logoUrl: mcpIntegrationLogo("supabase"),
137
191
  docsUrl: "https://www.builder.io/c/docs/fusion-connect-to-supabase",
138
192
  keywords: ["database", "auth", "postgres", "storage"],
139
193
  },
@@ -147,6 +201,10 @@ export const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [
147
201
  useCaseKey: "mcpIntegrations.catalog.neon.useCase",
148
202
  url: "https://mcp.neon.tech/sse",
149
203
  authMode: "oauth",
204
+ connectionMode: "oauth",
205
+ availability: "ready",
206
+ verification: "preflight-only",
207
+ logoUrl: mcpIntegrationLogo("neon"),
150
208
  docsUrl: "https://www.builder.io/c/docs/fusion-connect-to-neon",
151
209
  keywords: ["database", "postgres", "serverless", "backend"],
152
210
  },
@@ -160,9 +218,317 @@ export const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [
160
218
  useCaseKey: "mcpIntegrations.catalog.stripe.useCase",
161
219
  url: "https://mcp.stripe.com",
162
220
  authMode: "oauth",
221
+ connectionMode: "oauth",
222
+ availability: "ready",
223
+ verification: "preflight-only",
224
+ logoUrl: mcpIntegrationLogo("stripe"),
163
225
  docsUrl: "https://docs.stripe.com/mcp",
164
226
  keywords: ["payments", "billing", "subscriptions", "customers"],
165
227
  },
228
+ {
229
+ id: "cloudflare",
230
+ name: "Cloudflare",
231
+ provider: "cloudflare",
232
+ description: "Search and operate Cloudflare services through MCP.",
233
+ descriptionKey: "mcpIntegrations.catalog.cloudflare.description",
234
+ useCase: "DNS, Workers, domains, security, observability, platform APIs",
235
+ useCaseKey: "mcpIntegrations.catalog.cloudflare.useCase",
236
+ url: "https://mcp.cloudflare.com/mcp",
237
+ authMode: "oauth",
238
+ connectionMode: "oauth",
239
+ availability: "ready",
240
+ verification: "preflight-only",
241
+ logoUrl: mcpIntegrationLogo("cloudflare"),
242
+ docsUrl:
243
+ "https://developers.cloudflare.com/agents/model-context-protocol/cloudflare/servers-for-cloudflare/",
244
+ setupNoteKey: "mcpIntegrations.catalog.cloudflare.setupNote",
245
+ keywords: ["cloud", "workers", "dns", "security", "observability"],
246
+ },
247
+ {
248
+ id: "gitlab",
249
+ name: "GitLab",
250
+ provider: "gitlab",
251
+ description: "Read and manage GitLab projects, issues, and merge requests.",
252
+ descriptionKey: "mcpIntegrations.catalog.gitlab.description",
253
+ useCase: "repositories, issues, merge requests, CI/CD, code analytics",
254
+ useCaseKey: "mcpIntegrations.catalog.gitlab.useCase",
255
+ url: "https://gitlab.com/api/v4/mcp",
256
+ authMode: "oauth",
257
+ connectionMode: "oauth",
258
+ availability: "beta",
259
+ verification: "restricted",
260
+ logoUrl: mcpIntegrationLogo("gitlab"),
261
+ docsUrl: "https://docs.gitlab.com/user/model_context_protocol/mcp_server/",
262
+ setupNoteKey: "mcpIntegrations.catalog.gitlab.setupNote",
263
+ keywords: ["git", "repositories", "issues", "merge requests", "ci"],
264
+ },
265
+ {
266
+ id: "figma",
267
+ name: "Figma",
268
+ provider: "figma",
269
+ description: "Bring Figma design context and canvas actions into an agent.",
270
+ descriptionKey: "mcpIntegrations.catalog.figma.description",
271
+ useCase: "design files, components, variables, design systems, canvas",
272
+ useCaseKey: "mcpIntegrations.catalog.figma.useCase",
273
+ url: "https://mcp.figma.com/mcp",
274
+ authMode: "oauth",
275
+ connectionMode: "manual",
276
+ availability: "client-restricted",
277
+ verification: "restricted",
278
+ logoUrl: mcpIntegrationLogo("figma"),
279
+ docsUrl: "https://developers.figma.com/docs/figma-mcp-server/",
280
+ setupNoteKey: "mcpIntegrations.catalog.figma.setupNote",
281
+ apiFallback: {
282
+ secretKey: "FIGMA_ACCESS_TOKEN",
283
+ docsUrl:
284
+ "https://developers.figma.com/docs/rest-api/personal-access-tokens/",
285
+ templateUses: ["design"],
286
+ },
287
+ keywords: ["design", "figjam", "components", "variables", "canvas"],
288
+ },
289
+ {
290
+ id: "canva",
291
+ name: "Canva",
292
+ provider: "canva",
293
+ description: "Search, create, and update Canva designs and assets.",
294
+ descriptionKey: "mcpIntegrations.catalog.canva.description",
295
+ useCase: "designs, templates, assets, brand kits, exports, collaboration",
296
+ useCaseKey: "mcpIntegrations.catalog.canva.useCase",
297
+ url: "https://mcp.canva.com/mcp",
298
+ authMode: "oauth",
299
+ connectionMode: "manual",
300
+ availability: "client-restricted",
301
+ verification: "restricted",
302
+ logoUrl: mcpIntegrationLogo("canva"),
303
+ docsUrl: "https://www.canva.dev/docs/mcp/",
304
+ setupNoteKey: "mcpIntegrations.catalog.canva.setupNote",
305
+ keywords: ["design", "templates", "assets", "brand", "exports"],
306
+ },
307
+ {
308
+ id: "vercel",
309
+ name: "Vercel",
310
+ provider: "vercel",
311
+ description:
312
+ "Search Vercel docs and inspect projects, deployments, and logs.",
313
+ descriptionKey: "mcpIntegrations.catalog.vercel.description",
314
+ useCase: "deployments, projects, logs, domains, hosting, documentation",
315
+ useCaseKey: "mcpIntegrations.catalog.vercel.useCase",
316
+ url: "https://mcp.vercel.com",
317
+ authMode: "oauth",
318
+ connectionMode: "manual",
319
+ availability: "client-restricted",
320
+ verification: "restricted",
321
+ logoUrl: mcpIntegrationLogo("vercel"),
322
+ docsUrl: "https://vercel.com/docs/agent-resources/vercel-mcp",
323
+ setupNoteKey: "mcpIntegrations.catalog.vercel.setupNote",
324
+ keywords: ["deployments", "hosting", "projects", "logs", "domains"],
325
+ },
326
+ {
327
+ id: "github",
328
+ name: "GitHub",
329
+ provider: "github",
330
+ description: "Read repositories, issues, pull requests, and code context.",
331
+ descriptionKey: "mcpIntegrations.catalog.github.description",
332
+ useCase: "repositories, issues, pull requests, code, engineering analytics",
333
+ useCaseKey: "mcpIntegrations.catalog.github.useCase",
334
+ url: "https://api.githubcopilot.com/mcp/",
335
+ authMode: "oauth",
336
+ connectionMode: "manual",
337
+ availability: "provider-setup",
338
+ verification: "restricted",
339
+ logoUrl: mcpIntegrationLogo("github"),
340
+ docsUrl: "https://github.com/github/github-mcp-server",
341
+ setupNoteKey: "mcpIntegrations.catalog.github.setupNote",
342
+ keywords: ["git", "repositories", "issues", "pull requests", "code"],
343
+ },
344
+ {
345
+ id: "slack",
346
+ name: "Slack",
347
+ provider: "slack",
348
+ description:
349
+ "Search Slack conversations and take workspace actions through MCP.",
350
+ descriptionKey: "mcpIntegrations.catalog.slack.description",
351
+ useCase: "messages, channels, people, company memory, workflows",
352
+ useCaseKey: "mcpIntegrations.catalog.slack.useCase",
353
+ url: "https://mcp.slack.com/mcp",
354
+ authMode: "oauth",
355
+ connectionMode: "manual",
356
+ availability: "client-restricted",
357
+ verification: "restricted",
358
+ logoUrl: mcpIntegrationLogo("slack"),
359
+ docsUrl: "https://docs.slack.dev/ai/slack-mcp-server/",
360
+ setupNoteKey: "mcpIntegrations.catalog.slack.setupNote",
361
+ keywords: ["messages", "channels", "search", "people", "chat"],
362
+ },
363
+ {
364
+ id: "asana",
365
+ name: "Asana",
366
+ provider: "asana",
367
+ description:
368
+ "Search and manage Asana tasks, projects, and work graph data.",
369
+ descriptionKey: "mcpIntegrations.catalog.asana.description",
370
+ useCase: "tasks, projects, portfolios, planning, workload",
371
+ useCaseKey: "mcpIntegrations.catalog.asana.useCase",
372
+ url: "https://mcp.asana.com/v2/mcp",
373
+ authMode: "oauth",
374
+ connectionMode: "manual",
375
+ availability: "provider-setup",
376
+ verification: "restricted",
377
+ logoUrl: mcpIntegrationLogo("asana"),
378
+ docsUrl:
379
+ "https://developers.asana.com/docs/integrating-with-asanas-mcp-server",
380
+ setupNoteKey: "mcpIntegrations.catalog.asana.setupNote",
381
+ keywords: ["tasks", "projects", "planning", "workload", "portfolios"],
382
+ },
383
+ {
384
+ id: "hubspot",
385
+ name: "HubSpot",
386
+ provider: "hubspot",
387
+ description: "Search and update HubSpot CRM records through MCP.",
388
+ descriptionKey: "mcpIntegrations.catalog.hubspot.description",
389
+ useCase: "CRM, contacts, companies, deals, tickets, customer analytics",
390
+ useCaseKey: "mcpIntegrations.catalog.hubspot.useCase",
391
+ url: "https://mcp.hubspot.com",
392
+ authMode: "oauth",
393
+ connectionMode: "manual",
394
+ availability: "provider-setup",
395
+ verification: "restricted",
396
+ logoUrl: mcpIntegrationLogo("hubspot"),
397
+ docsUrl:
398
+ "https://developers.hubspot.com/docs/apps/developer-platform/build-apps/integrate-with-the-remote-hubspot-mcp-server",
399
+ setupNoteKey: "mcpIntegrations.catalog.hubspot.setupNote",
400
+ keywords: ["crm", "contacts", "companies", "deals", "tickets"],
401
+ },
402
+ {
403
+ id: "intercom",
404
+ name: "Intercom",
405
+ provider: "intercom",
406
+ description: "Search conversations and customer support knowledge.",
407
+ descriptionKey: "mcpIntegrations.catalog.intercom.description",
408
+ useCase: "customer support, conversations, contacts, help center content",
409
+ useCaseKey: "mcpIntegrations.catalog.intercom.useCase",
410
+ url: "https://mcp.intercom.com/mcp",
411
+ authMode: "oauth",
412
+ connectionMode: "oauth",
413
+ availability: "ready",
414
+ verification: "preflight-only",
415
+ logoUrl: mcpIntegrationLogo("intercom"),
416
+ docsUrl: "https://developers.intercom.com/docs/guides/mcp",
417
+ setupNoteKey: "mcpIntegrations.catalog.intercom.setupNote",
418
+ keywords: ["support", "conversations", "customers", "help center"],
419
+ },
420
+ {
421
+ id: "monday",
422
+ name: "monday.com",
423
+ provider: "monday",
424
+ description: "Work with boards, items, and team workflows.",
425
+ descriptionKey: "mcpIntegrations.catalog.monday.description",
426
+ useCase: "work management, boards, projects, tasks, team operations",
427
+ useCaseKey: "mcpIntegrations.catalog.monday.useCase",
428
+ url: "https://mcp.monday.com/mcp",
429
+ authMode: "oauth",
430
+ connectionMode: "oauth",
431
+ availability: "ready",
432
+ verification: "preflight-only",
433
+ logoUrl: mcpIntegrationLogo("monday"),
434
+ docsUrl:
435
+ "https://developer.monday.com/api-reference/docs/build-on-monday-with-ai",
436
+ setupNoteKey: "mcpIntegrations.catalog.monday.setupNote",
437
+ keywords: ["work management", "boards", "projects", "tasks", "teams"],
438
+ },
439
+ {
440
+ id: "webflow",
441
+ name: "Webflow",
442
+ provider: "webflow",
443
+ description: "Read and update Webflow sites and content.",
444
+ descriptionKey: "mcpIntegrations.catalog.webflow.description",
445
+ useCase: "websites, CMS, site content, publishing, design workflows",
446
+ useCaseKey: "mcpIntegrations.catalog.webflow.useCase",
447
+ url: "https://mcp.webflow.com/mcp",
448
+ authMode: "oauth",
449
+ connectionMode: "oauth",
450
+ availability: "ready",
451
+ verification: "preflight-only",
452
+ logoUrl: mcpIntegrationLogo("webflow"),
453
+ docsUrl: "https://developers.webflow.com/mcp/reference/getting-started",
454
+ setupNoteKey: "mcpIntegrations.catalog.webflow.setupNote",
455
+ keywords: ["websites", "cms", "content", "publishing", "design"],
456
+ },
457
+ {
458
+ id: "paypal",
459
+ name: "PayPal",
460
+ provider: "paypal",
461
+ description: "Work with PayPal payments, invoices, and commerce data.",
462
+ descriptionKey: "mcpIntegrations.catalog.paypal.description",
463
+ useCase: "payments, invoices, transactions, merchant operations",
464
+ useCaseKey: "mcpIntegrations.catalog.paypal.useCase",
465
+ url: "https://mcp.paypal.com/sse",
466
+ authMode: "oauth",
467
+ connectionMode: "oauth",
468
+ availability: "ready",
469
+ verification: "preflight-only",
470
+ logoUrl: mcpIntegrationLogo("paypal"),
471
+ docsUrl: "https://developer.paypal.com/ai-tools/mcp-server/",
472
+ setupNoteKey: "mcpIntegrations.catalog.paypal.setupNote",
473
+ keywords: ["payments", "invoices", "transactions", "commerce"],
474
+ },
475
+ {
476
+ id: "box",
477
+ name: "Box",
478
+ provider: "box",
479
+ description: "Search and manage files and folders in Box.",
480
+ descriptionKey: "mcpIntegrations.catalog.box.description",
481
+ useCase: "files, folders, enterprise content, search, collaboration",
482
+ useCaseKey: "mcpIntegrations.catalog.box.useCase",
483
+ url: "https://mcp.box.com",
484
+ authMode: "oauth",
485
+ connectionMode: "manual",
486
+ availability: "provider-setup",
487
+ verification: "restricted",
488
+ logoUrl: mcpIntegrationLogo("box"),
489
+ docsUrl: "https://developer.box.com/guides/box-mcp",
490
+ setupNoteKey: "mcpIntegrations.catalog.box.setupNote",
491
+ keywords: ["files", "folders", "documents", "enterprise content"],
492
+ },
493
+ {
494
+ id: "netlify",
495
+ name: "Netlify",
496
+ provider: "netlify",
497
+ description: "Inspect and operate Netlify sites and deployments.",
498
+ descriptionKey: "mcpIntegrations.catalog.netlify.description",
499
+ useCase: "sites, deployments, builds, domains, hosting operations",
500
+ useCaseKey: "mcpIntegrations.catalog.netlify.useCase",
501
+ url: "https://netlify-mcp.netlify.app/mcp",
502
+ authMode: "oauth",
503
+ connectionMode: "oauth",
504
+ availability: "ready",
505
+ verification: "preflight-only",
506
+ logoUrl: mcpIntegrationLogo("netlify"),
507
+ docsUrl:
508
+ "https://docs.netlify.com/build/build-with-ai/agent-setup-guides/agent-setup-overview/",
509
+ setupNoteKey: "mcpIntegrations.catalog.netlify.setupNote",
510
+ keywords: ["deployments", "builds", "sites", "hosting", "domains"],
511
+ },
512
+ {
513
+ id: "zapier",
514
+ name: "Zapier",
515
+ provider: "zapier",
516
+ description: "Connect MCP tools to thousands of app actions.",
517
+ descriptionKey: "mcpIntegrations.catalog.zapier.description",
518
+ useCase: "automation, workflows, app actions, cross-service operations",
519
+ useCaseKey: "mcpIntegrations.catalog.zapier.useCase",
520
+ url: "https://mcp.zapier.com/api/v1/connect",
521
+ authMode: "headers",
522
+ connectionMode: "headers",
523
+ availability: "ready",
524
+ verification: "restricted",
525
+ logoUrl: mcpIntegrationLogo("zapier"),
526
+ docsUrl:
527
+ "https://help.zapier.com/hc/en-us/articles/36265392843917-Use-Zapier-MCP-with-your-client",
528
+ setupNoteKey: "mcpIntegrations.catalog.zapier.setupNote",
529
+ headerPlaceholder: "Authorization: Bearer <zapier-mcp-token>",
530
+ keywords: ["automation", "workflows", "actions", "apps", "integrations"],
531
+ },
166
532
  ];
167
533
 
168
534
  function readRuntimeMcpIntegrationsConfig(): NormalizedMcpIntegrationsConfig {
@@ -178,6 +544,39 @@ function readRuntimeMcpIntegrationsConfig(): NormalizedMcpIntegrationsConfig {
178
544
  return normalizeMcpIntegrationsConfig();
179
545
  }
180
546
 
547
+ function normalizeTemplateName(value: unknown): string | null {
548
+ if (typeof value !== "string") return null;
549
+ const normalized = value.trim().toLowerCase();
550
+ return normalized || null;
551
+ }
552
+
553
+ function getActiveTemplateName(): string | null {
554
+ try {
555
+ const compiledTemplate = normalizeTemplateName(__AGENT_NATIVE_TEMPLATE__);
556
+ if (compiledTemplate) return compiledTemplate;
557
+ } catch {
558
+ // Test and non-Vite contexts may not define the compile-time constant.
559
+ }
560
+
561
+ const runtimeConfig = (
562
+ globalThis as typeof globalThis & {
563
+ __AGENT_NATIVE_CONFIG__?: { template?: unknown };
564
+ }
565
+ ).__AGENT_NATIVE_CONFIG__;
566
+ return normalizeTemplateName(runtimeConfig?.template);
567
+ }
568
+
569
+ export function getMcpIntegrationApiFallback(
570
+ integration: DefaultMcpIntegration,
571
+ templateName = getActiveTemplateName(),
572
+ ): DefaultMcpIntegration["apiFallback"] | null {
573
+ const fallback = integration.apiFallback;
574
+ if (!fallback) return null;
575
+ if (!fallback.templateUses?.length) return fallback;
576
+ if (!templateName) return null;
577
+ return fallback.templateUses.includes(templateName) ? fallback : null;
578
+ }
579
+
181
580
  function normalizePresetConfig(
182
581
  config?: McpIntegrationsConfigInput | NormalizedMcpIntegrationsConfig,
183
582
  ): NormalizedMcpIntegrationsConfig {
@@ -269,6 +668,81 @@ export function filterMcpIntegrations(
269
668
  });
270
669
  }
271
670
 
671
+ const MCP_LINK_HOSTS: Record<string, string[]> = {
672
+ notion: ["notion.so", "notion.site"],
673
+ canva: ["canva.com", "canva.ai"],
674
+ figma: ["figma.com"],
675
+ linear: ["linear.app"],
676
+ github: ["github.com", "github.dev"],
677
+ gitlab: ["gitlab.com"],
678
+ slack: ["slack.com"],
679
+ asana: ["asana.com"],
680
+ hubspot: ["hubspot.com"],
681
+ intercom: ["intercom.com"],
682
+ monday: ["monday.com"],
683
+ webflow: ["webflow.com"],
684
+ paypal: ["paypal.com"],
685
+ box: ["box.com"],
686
+ netlify: ["netlify.com"],
687
+ };
688
+
689
+ function hostMatches(hostname: string, domain: string): boolean {
690
+ return hostname === domain || hostname.endsWith(`.${domain}`);
691
+ }
692
+
693
+ function findUrlForText(text: string): URL | null {
694
+ const candidates = text.match(/https?:\/\/[^\s<>()[\]{}]+/gi) ?? [];
695
+ for (const candidate of candidates) {
696
+ try {
697
+ return new URL(candidate.replace(/[.,!?;:'\"]+$/, ""));
698
+ } catch {
699
+ // Ignore prose that only looks like a URL.
700
+ }
701
+ }
702
+ return null;
703
+ }
704
+
705
+ const MCP_RESOURCE_INTENT_PATTERN =
706
+ /\b(?:connect|connected|connection|integration|integrate|link|page|document|doc|file|workspace|project|issue|design|board|channel|message|ticket|read|access|open|see|fetch|sync|import)\b/i;
707
+
708
+ export function findMcpIntegrationForText(
709
+ text: string,
710
+ integrations: DefaultMcpIntegration[] = getDefaultMcpIntegrations(),
711
+ ): DefaultMcpIntegration | null {
712
+ const url = findUrlForText(text);
713
+ if (url) {
714
+ const match = integrations.find((integration) =>
715
+ (MCP_LINK_HOSTS[integration.id] ?? []).some((domain) =>
716
+ hostMatches(url.hostname.toLowerCase(), domain),
717
+ ),
718
+ );
719
+ if (match) return match;
720
+ }
721
+
722
+ const normalizedText = text.toLowerCase();
723
+ const hasResourceIntent =
724
+ MCP_RESOURCE_INTENT_PATTERN.test(normalizedText) ||
725
+ isMcpConnectionFailureText(normalizedText);
726
+ if (!hasResourceIntent) return null;
727
+ return (
728
+ integrations.find((integration) => {
729
+ const aliases = [integration.name, integration.provider, integration.id];
730
+ return aliases.some((alias) => {
731
+ const escaped = alias.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
732
+ return new RegExp(`(^|[^a-z0-9])${escaped}([^a-z0-9]|$)`, "i").test(
733
+ normalizedText,
734
+ );
735
+ });
736
+ }) ?? null
737
+ );
738
+ }
739
+
740
+ export function isMcpConnectionFailureText(text: string): boolean {
741
+ return /\b(?:can(?:not|'t|’t)|could(?: not|n't|n’t)|unable|failed|don't have access|don’t have access|not connected|not able)\b[\s\S]{0,80}\b(?:read|access|open|see|fetch|connect)\b/i.test(
742
+ text,
743
+ );
744
+ }
745
+
272
746
  export function createMcpIntegrationFormDefaults(
273
747
  integration?: DefaultMcpIntegration | null,
274
748
  ): McpIntegrationFormDefaults {