n8n-editor-ui 1.113.1 → 1.114.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 (133) hide show
  1. package/.build/cache-marker +1 -1
  2. package/.build/node-popularity.json +1823 -1823
  3. package/dist/assets/{AddDataStoreModal-C-20tjW5.js → AddDataStoreModal-gdYynAXK.js} +8 -8
  4. package/dist/assets/{AnimatedSpinner-WDiU4lXb.js → AnimatedSpinner-BmfqnkMh.js} +1 -1
  5. package/dist/assets/{AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CV4yKdOK.js → AnnotationTagsDropdown.ee.vue_vue_type_script_setup_true_lang-CVFW66bR.js} +1 -1
  6. package/dist/assets/{AuthView-BfD8L-MR.js → AuthView-CYJ7bCsV.js} +2 -2
  7. package/dist/assets/{ChangePasswordView-BHlNjnju.js → ChangePasswordView-zducTJEL.js} +3 -3
  8. package/dist/assets/CollectionParameter-CxZhodaL.js +4 -0
  9. package/dist/assets/{ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-Bm1msTtB.js → ConsumedTokensDetails.vue_vue_type_script_setup_true_lang-DFcvVtT3.js} +1 -1
  10. package/dist/assets/{CredentialsView-Bpi1QEHU.js → CredentialsView-CZU7hcHm.js} +19 -19
  11. package/dist/assets/{DataStoreActions.vue_vue_type_script_setup_true_lang-BCsNv_gY.js → DataStoreActions.vue_vue_type_script_setup_true_lang-D2PEOSYF.js} +1 -1
  12. package/dist/assets/{DataStoreDetailsView-BwvQ5I7d.js → DataStoreDetailsView-cCwLSizn.js} +38 -26
  13. package/dist/assets/{DataStoreView-Bctk8RYi.js → DataStoreView-DVBz_mE7.js} +13 -14
  14. package/dist/assets/{DemoFooter-CxWGBc_7.js → DemoFooter-Cyz5315_.js} +6 -6
  15. package/dist/assets/{EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-DqQrOg_2.js → EmptySharedSectionActionBox.vue_vue_type_script_setup_true_lang-Ber_ThA-.js} +3 -3
  16. package/dist/assets/{EntityNotFound-D7CGrbgk.js → EntityNotFound-E440DAgo.js} +1 -1
  17. package/dist/assets/{EntityUnAuthorised-BO9xlb2N.js → EntityUnAuthorised-CGA8Pnag.js} +1 -1
  18. package/dist/assets/{ErrorView-C1PhniXH.js → ErrorView-DRsAZvNh.js} +9 -9
  19. package/dist/assets/{EvaluationsRootView-C0QRKk3k.js → EvaluationsRootView-CBh2oepG.js} +5 -5
  20. package/dist/assets/{EvaluationsView-CYpgbXKx.js → EvaluationsView-Bk0AxB7_.js} +3 -3
  21. package/dist/assets/{ExecutionsTime-etWexlXm.css → ExecutionsTime-CWHk7ZwI.css} +6 -6
  22. package/dist/assets/{ExecutionsTime.vue_vue_type_script_setup_true_lang-Dh8inRTk.js → ExecutionsTime.vue_vue_type_script_setup_true_lang-CNY2bHYv.js} +39 -39
  23. package/dist/assets/{ExecutionsView-BCb0Zr7W.js → ExecutionsView-ByBXIAlI.js} +10 -10
  24. package/dist/assets/{FixedCollectionParameter-D4km_FeH.js → FixedCollectionParameter-B2zzgypc.js} +4 -4
  25. package/dist/assets/{FixedCollectionParameter-Dg7ZadcB.css → FixedCollectionParameter-TY1-sHgZ.css} +18 -18
  26. package/dist/assets/{ForgotMyPasswordView-CdhGWxw4.js → ForgotMyPasswordView-BgKsPtpt.js} +3 -3
  27. package/dist/assets/{InfoAccordion-DE2_sS98.js → InfoAccordion-CsiczXnv.js} +1 -1
  28. package/dist/assets/{InsightsChartAverageRuntime-D5ZE_Nla.js → InsightsChartAverageRuntime-Gy5dvV3h.js} +4 -4
  29. package/dist/assets/{InsightsChartFailed-BdeF-nyF.js → InsightsChartFailed-Oe0oEJCc.js} +4 -4
  30. package/dist/assets/{InsightsChartFailureRate-C_YnwTyc.js → InsightsChartFailureRate-DU1kHSZv.js} +4 -4
  31. package/dist/assets/{InsightsChartTimeSaved-cTOv1Iga.js → InsightsChartTimeSaved-CTUmcK5A.js} +4 -4
  32. package/dist/assets/{InsightsChartTotal-BKK9PNU1.js → InsightsChartTotal-BtVfKdlz.js} +4 -4
  33. package/dist/assets/{InsightsDashboard-COAZWSu2.js → InsightsDashboard-D65QIYuB.js} +11 -11
  34. package/dist/assets/{InsightsPaywall-BWpRemTn.js → InsightsPaywall-Bm7hpUXq.js} +1 -1
  35. package/dist/assets/{InsightsSummary-jcJA88u3.js → InsightsSummary-B_lIzS7D.js} +2 -3
  36. package/dist/assets/{InsightsTableWorkflows-Bh_NN7kQ.js → InsightsTableWorkflows-HAoS3XKw.js} +6 -7
  37. package/dist/assets/{Logo-DZ3J8N5N.js → Logo-oWcxWkkZ.js} +1 -1
  38. package/dist/assets/{LogsPanel-DSS_hDBL.js → LogsPanel-BCGl1Nn3.js} +189 -101
  39. package/dist/assets/{LogsPanel-CUsQIBpC.css → LogsPanel-BE9Gl1z0.css} +26 -27
  40. package/dist/assets/{MainHeader-6lIHYgJG.css → MainHeader-BM1jYnSL.css} +6 -6
  41. package/dist/assets/{MainHeader-DfMxpY4d.js → MainHeader-BTi38P2q.js} +17 -17
  42. package/dist/assets/{MainSidebar-a73tcV9E.css → MainSidebar-BWPXOik1.css} +156 -0
  43. package/dist/assets/{MainSidebar-C7fZf9ti.js → MainSidebar-f5ouPYUb.js} +204 -48
  44. package/dist/assets/{NodeCreation-DndFLn5s.js → NodeCreation-BeqOH71X.js} +11 -11
  45. package/dist/assets/{NodeCreator-DG0hCOby.js → NodeCreator-Ck3oKOFP.js} +47 -34
  46. package/dist/assets/{NodeDetailsView-G0hcQtkE.js → NodeDetailsView-BOC4Hg0s.js} +27 -27
  47. package/dist/assets/{NodeDetailsViewV2-BGHhaOjo.js → NodeDetailsViewV2-M9x7-EpG.js} +16 -16
  48. package/dist/assets/{NodeView-D_Lf20Cj.js → NodeView-C9_Bsqwa.js} +82 -258
  49. package/dist/assets/{NodeView-Chs2u0U9.css → NodeView-DoRx_8YL.css} +0 -165
  50. package/dist/assets/{PageViewLayout-cxvwso_r.js → PageViewLayout-BIOAQYgC.js} +1 -1
  51. package/dist/assets/{PrebuiltAgentTemplatesView--njlASMr.js → PrebuiltAgentTemplatesView-Bl6VzvHf.js} +2 -2
  52. package/dist/assets/{ProjectBreadcrumb-KIWhTojS.js → ProjectBreadcrumb-BO4fGsZ-.js} +28 -12
  53. package/dist/assets/{ProjectHeader-B5uv4DKo.css → ProjectHeader-BNMKpvzV.css} +9 -9
  54. package/dist/assets/{ProjectHeader-PFXNU0--.js → ProjectHeader-DeQSPU2Z.js} +10 -10
  55. package/dist/assets/{ProjectSettings-C1kZ9wA5.js → ProjectSettings-Bie7IE72.js} +169 -161
  56. package/dist/assets/{ProjectSettings-B5z1mrGW.css → ProjectSettings-Cj1kC16G.css} +30 -15
  57. package/dist/assets/{PushConnectionTracker.vue_vue_type_script_setup_true_lang-Bzf7nqUd.js → PushConnectionTracker.vue_vue_type_script_setup_true_lang-R3ag1qU9.js} +5 -5
  58. package/dist/assets/{ResourcesListLayout-vTwRIDRz.css → ResourcesListLayout-BseE8-rt.css} +8 -8
  59. package/dist/assets/{ResourcesListLayout-DQODsJpR.js → ResourcesListLayout-Dpz7rW4E.js} +42 -42
  60. package/dist/assets/{RunDataJson-BcUo9gnI.js → RunDataJson-D9c7DSu3.js} +3 -3
  61. package/dist/assets/{RunDataJsonActions-BCQ7lOd5.js → RunDataJsonActions-DSwvkK8R.js} +1 -1
  62. package/dist/assets/{RunDataParsedAiContent-BnKhGr-k.js → RunDataParsedAiContent-Dw4DMcCc.js} +2 -2
  63. package/dist/assets/{RunDataSearch-CiRa4kQq.js → RunDataSearch-CHn_C4l1.js} +59 -16
  64. package/dist/assets/{RunDataTable-Cb01UpR9.js → RunDataTable-BVcP67HC.js} +4 -4
  65. package/dist/assets/{SamlOnboarding-BqIwhbZw.js → SamlOnboarding-evZs5JmT.js} +3 -3
  66. package/dist/assets/{SelectedItemsInfo-DuFbVGZm.js → SelectedItemsInfo-BD8U-j2_.js} +1 -1
  67. package/dist/assets/{SettingsApiView-D2j7Vbwi.js → SettingsApiView-C9ICg95A.js} +23 -24
  68. package/dist/assets/{SettingsCommunityNodesView-oZIjk1s_.js → SettingsCommunityNodesView-BKv6oPzd.js} +31 -31
  69. package/dist/assets/{SettingsExternalSecrets-Cea9JY7A.js → SettingsExternalSecrets-B1fXLwpl.js} +18 -18
  70. package/dist/assets/{SettingsLdapView-Cg2gnd72.js → SettingsLdapView-1uB_1Kjt.js} +17 -17
  71. package/dist/assets/{SettingsLogStreamingView-BScR5ZFJ.js → SettingsLogStreamingView-Cg5xgDBl.js} +29 -29
  72. package/dist/assets/SettingsMCPView-8ZO6fO7I.js +626 -0
  73. package/dist/assets/SettingsMCPView-INU33iV4.css +370 -0
  74. package/dist/assets/{SettingsPersonalView-BfEdqrEE.js → SettingsPersonalView-hcRTSivt.js} +31 -31
  75. package/dist/assets/{SettingsSourceControl-CQiyVvB3.js → SettingsSourceControl-CmWbELjI.js} +208 -65
  76. package/dist/assets/{SettingsSso-CAAxAbK6.js → SettingsSso-DaF1HUCT.js} +61 -23
  77. package/dist/assets/{SettingsUsageAndPlan-CfFJy6fo.css → SettingsUsageAndPlan-CfunueCX.css} +3 -3
  78. package/dist/assets/{SettingsUsageAndPlan-DTV0d49_.js → SettingsUsageAndPlan-D35oEsJZ.js} +16 -17
  79. package/dist/assets/{SettingsUsersView-Ceq9-_wv.js → SettingsUsersView-ZRALZYsy.js} +4 -4
  80. package/dist/assets/{SettingsView-sqSuzp6q.js → SettingsView-CgvnNTk-.js} +13 -12
  81. package/dist/assets/{SetupView-DNxfN7wc.js → SetupView-ChAnZVE2.js} +3 -3
  82. package/dist/assets/{SetupWorkflowCredentialsButton-DUCOv6F6.js → SetupWorkflowCredentialsButton-BszdxOvj.js} +3 -3
  83. package/dist/assets/{SetupWorkflowFromTemplateView-DU4khxPx.js → SetupWorkflowFromTemplateView-DNXIp_P5.js} +13 -13
  84. package/dist/assets/{SigninView-BnzCVklk.js → SigninView-wo3QJ5sB.js} +17 -17
  85. package/dist/assets/{SignoutView-CQx1YcpJ.js → SignoutView-CQhFqBlf.js} +1 -1
  86. package/dist/assets/{SignupView-CVowy7ND.js → SignupView-DchGNZfW.js} +3 -3
  87. package/dist/assets/{TableBase-ChC-0JXo.js → TableBase-CtxQxn5Y.js} +1 -1
  88. package/dist/assets/{Tags-BElvlb53.js → Tags-BXpnsQt9.js} +1 -1
  89. package/dist/assets/{TemplateDetails-DFAU0IXa.js → TemplateDetails-BJTTpXQu.js} +11 -11
  90. package/dist/assets/{TemplateList-BqOvn2Up.js → TemplateList-Ci2Gabt3.js} +15 -15
  91. package/dist/assets/{TemplatesCollectionView-DUe-c9UK.js → TemplatesCollectionView-CUX1Go6k.js} +15 -15
  92. package/dist/assets/{TemplatesSearchView-DqlXEFp4.js → TemplatesSearchView-DPFeZwku.js} +30 -30
  93. package/dist/assets/{TemplatesView-e-KwnRmC.js → TemplatesView-B2kjPDKq.js} +3 -3
  94. package/dist/assets/{TemplatesWorkflowView-DGdEHxRG.js → TemplatesWorkflowView-DITL6wCM.js} +18 -18
  95. package/dist/assets/{TriggerPanel-DiD8pi0I.css → TriggerPanel-CZRJpcTa.css} +26 -24
  96. package/dist/assets/{TriggerPanel-BC7r1f-p.js → TriggerPanel-CrYeGN3J.js} +100 -124
  97. package/dist/assets/{VariablesView-q3KOFXbh.js → VariablesView-Bwp171eQ.js} +9 -9
  98. package/dist/assets/{VariablesView-BHcrNXsw.css → VariablesView-CO67wOhz.css} +6 -6
  99. package/dist/assets/{WorkerView-p9Gb5B1L.js → WorkerView-CTITbNMD.js} +27 -27
  100. package/dist/assets/{WorkflowActivator-jI4sUqXL.css → WorkflowActivator-BqnfTqdT.css} +2 -2
  101. package/dist/assets/{WorkflowActivator-3wlzZHDO.js → WorkflowActivator-ULjjOqRW.js} +35 -27
  102. package/dist/assets/{WorkflowExecutionsInfoAccordion-MSQf1wi3.js → WorkflowExecutionsInfoAccordion-Du8aYVAp.js} +2 -2
  103. package/dist/assets/{WorkflowExecutionsLandingPage-C70_LGAv.js → WorkflowExecutionsLandingPage--NydRWjB.js} +3 -3
  104. package/dist/assets/{WorkflowExecutionsPreview-D_xisYpD.js → WorkflowExecutionsPreview-SapcKnCv.js} +17 -17
  105. package/dist/assets/{WorkflowExecutionsView-DqWqyiNg.css → WorkflowExecutionsView-BI8VcrjR.css} +2 -2
  106. package/dist/assets/{WorkflowExecutionsView-ezc5vRrS.js → WorkflowExecutionsView-DzM_rNXF.js} +20 -20
  107. package/dist/assets/{WorkflowHistory-DeSZ98ik.js → WorkflowHistory-Db-y1oNT.js} +23 -23
  108. package/dist/assets/{WorkflowOnboardingView-XDAzh9C1.js → WorkflowOnboardingView-WrpmE_wt.js} +1 -1
  109. package/dist/assets/{WorkflowPreview-R4owDoRV.js → WorkflowPreview-7kOr6cGA.js} +5 -5
  110. package/dist/assets/{WorkflowsView-MF9XcT0u.css → WorkflowsView-Cn8b7sC6.css} +295 -18
  111. package/dist/assets/{WorkflowsView-BJ_oKX3h.js → WorkflowsView-DyYy_N8O.js} +314 -136
  112. package/dist/assets/{canvas-tCm4ovGg.js → canvas-DTKhYM6C.js} +1 -1
  113. package/dist/assets/{chartjs.utils-B2U_02-S.js → chartjs.utils-CJ62oVGG.js} +2 -2
  114. package/dist/assets/{core-BDQ6uBcD.js → core-VF74aV13.js} +1 -1
  115. package/dist/assets/{global-link-actions-Cz-zl4uP.js → global-link-actions-Ddo-afkv.js} +1 -1
  116. package/dist/assets/{index-BDDH_NIA.js → index-BOW55EQc.js} +16950 -15079
  117. package/dist/assets/{index-CCyQeXiT.js → index-BUUYM12e.js} +1 -1
  118. package/dist/assets/{index-CpPc1kM8.css → index-CTgzCbB9.css} +10049 -10911
  119. package/dist/assets/{pickBy-B2RJpRoj.js → pickBy-CwZEa5Ur.js} +1 -1
  120. package/dist/assets/{readyToRunWorkflows.store-lmsJGEVO.js → readyToRunWorkflows.store-C7dZP8KI.js} +1 -1
  121. package/dist/assets/{readyToRunWorkflowsV2.store-Bl7jk-i9.js → readyToRunWorkflowsV2.store-BJY-F_Le.js} +2 -2
  122. package/dist/assets/{templateActions-Bvze3qDu.js → templateActions-BfUcgZvZ.js} +1 -1
  123. package/dist/assets/{useBeforeUnload-C1FPWSkO.js → useBeforeUnload-CEwAxZFs.js} +1 -1
  124. package/dist/assets/{useExecutionDebugging-Dgg7jmNh.js → useExecutionDebugging-Moxdvo-v.js} +1 -1
  125. package/dist/assets/{useImportCurlCommand-sjcpA0Ub.js → useImportCurlCommand-C5Ra8auY.js} +1 -1
  126. package/dist/assets/{useProjectPages-B5KBSvIU.js → useProjectPages-D2nu5pZ9.js} +1 -1
  127. package/dist/assets/{usePushConnection-BEiaZIUU.js → usePushConnection-Dnr2PF2n.js} +12 -6
  128. package/dist/assets/{useWorkflowActivate-DykqGtLA.js → useWorkflowActivate-Ch6gRZjX.js} +1 -1
  129. package/dist/index.html +2 -2
  130. package/package.json +1 -1
  131. package/scripts/cache-marker.mjs +11 -0
  132. package/turbo.json +2 -1
  133. package/dist/assets/CollectionParameter-D7XE8ypc.js +0 -4
@@ -0,0 +1,626 @@
1
+ import { fg as makeRestApiRequest, a0 as defineStore, a2 as useWorkflowsStore, au as useRootStore, v as useSettingsStore, x as computed, hj as isWorkflowListItem, hk as MCP_STORE, d as defineComponent, ce as useClipboard, h as createElementBlock, g as openBlock, n as normalizeClass, j as createBaseVNode, i as createVNode, t as toDisplayString, l as unref, c as useI18n, e as createBlock, f as createCommentVNode, q as N8nButton, k as createTextVNode, C as N8nLink, w as withCtx, eR as N8nMarkdown, p as N8nText, _ as _export_sfc, a as useToast, ay as useDocumentTitle, u as useUsersStore, r as ref, o as onMounted, a9 as resolveComponent, m as N8nHeading, aa as Tooltip, dS as N8nLoading, e4 as N8nActionBox, en as N8nActionToggle, N as N8nIcon, hl as router, V as VIEWS, fC as __unplugin_components_7, er as N8nDataTableServer, fB as isIconOrEmoji } from "./index-BOW55EQc.js";
2
+ import { N as N8nInfoAccordion } from "./InfoAccordion-CsiczXnv.js";
3
+ async function updateMcpSettings(context, enabled) {
4
+ return await makeRestApiRequest(context, "PATCH", "/mcp/settings", {
5
+ mcpAccessEnabled: enabled
6
+ });
7
+ }
8
+ const useMCPStore = defineStore(MCP_STORE, () => {
9
+ const workflowsStore = useWorkflowsStore();
10
+ const rootStore = useRootStore();
11
+ const settingsStore = useSettingsStore();
12
+ const mcpAccessEnabled = computed(() => !!settingsStore.moduleSettings.mcp?.mcpAccessEnabled);
13
+ async function fetchWorkflowsAvailableForMCP(page = 1, pageSize = 50) {
14
+ const workflows = await workflowsStore.fetchWorkflowsPage(
15
+ void 0,
16
+ // projectId
17
+ page,
18
+ pageSize,
19
+ "updatedAt:desc",
20
+ { isArchived: false, availableInMCP: true },
21
+ false,
22
+ // includeFolders
23
+ false
24
+ // includeAllVersions
25
+ );
26
+ return workflows.filter(isWorkflowListItem);
27
+ }
28
+ async function setMcpAccessEnabled(enabled) {
29
+ const { mcpAccessEnabled: updated } = await updateMcpSettings(
30
+ rootStore.restApiContext,
31
+ enabled
32
+ );
33
+ settingsStore.moduleSettings.mcp = {
34
+ ...settingsStore.moduleSettings.mcp ?? {},
35
+ mcpAccessEnabled: updated
36
+ };
37
+ return updated;
38
+ }
39
+ return {
40
+ mcpAccessEnabled,
41
+ fetchWorkflowsAvailableForMCP,
42
+ setMcpAccessEnabled
43
+ };
44
+ });
45
+ const MCP_ENDPOINT = "rest/mcp-control/http";
46
+ const DOCS_URL = "https://docs.n8n.io/";
47
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
48
+ __name: "MCPConnectionInstructions",
49
+ props: {
50
+ baseUrl: {}
51
+ },
52
+ setup(__props) {
53
+ const props = __props;
54
+ const { copy, copied, isSupported } = useClipboard();
55
+ const i18n = useI18n();
56
+ const connectionString2 = computed(() => {
57
+ return `
58
+ {
59
+ "mcpServers": {
60
+ "n8n-mcp": {
61
+ "command": "npx",
62
+ "args": [
63
+ "-y",
64
+ "supergateway",
65
+ "--streamableHttp",
66
+ "${props.baseUrl}${MCP_ENDPOINT}",
67
+ "--header",
68
+ "authorization:Bearer <YOUR_N8N_API_KEY>"
69
+ ]
70
+ }
71
+ }
72
+ }
73
+ `;
74
+ });
75
+ const connectionCode = computed(() => {
76
+ return `\`\`\`json${connectionString2.value}\`\`\``;
77
+ });
78
+ const fullServerUrl = computed(() => {
79
+ return props.baseUrl + MCP_ENDPOINT;
80
+ });
81
+ return (_ctx, _cache) => {
82
+ const _component_N8nButton = N8nButton;
83
+ const _component_N8nLink = N8nLink;
84
+ const _component_N8nMarkdown = N8nMarkdown;
85
+ const _component_N8nInfoAccordion = N8nInfoAccordion;
86
+ const _component_N8nText = N8nText;
87
+ return openBlock(), createElementBlock("div", {
88
+ class: normalizeClass(_ctx.$style.container)
89
+ }, [
90
+ createBaseVNode("ol", {
91
+ class: normalizeClass(_ctx.$style.instructions)
92
+ }, [
93
+ createBaseVNode("li", null, [
94
+ createBaseVNode("div", {
95
+ class: normalizeClass(_ctx.$style.item)
96
+ }, [
97
+ createBaseVNode("span", {
98
+ class: normalizeClass(_ctx.$style.label)
99
+ }, toDisplayString(unref(i18n).baseText("settings.mcp.instructions.enableAccess")), 3)
100
+ ], 2)
101
+ ]),
102
+ createBaseVNode("li", null, [
103
+ createBaseVNode("div", {
104
+ class: normalizeClass(_ctx.$style.item)
105
+ }, [
106
+ createBaseVNode("span", {
107
+ class: normalizeClass(_ctx.$style.label)
108
+ }, toDisplayString(unref(i18n).baseText("settings.mcp.instructions.serverUrl")) + ": ", 3),
109
+ createBaseVNode("span", {
110
+ class: normalizeClass(_ctx.$style.url)
111
+ }, [
112
+ createBaseVNode("code", null, toDisplayString(fullServerUrl.value), 1),
113
+ unref(isSupported) ? (openBlock(), createBlock(_component_N8nButton, {
114
+ key: 0,
115
+ type: "tertiary",
116
+ icon: unref(copied) ? "check" : "copy",
117
+ square: true,
118
+ class: normalizeClass(_ctx.$style["copy-url-button"]),
119
+ onClick: _cache[0] || (_cache[0] = ($event) => unref(copy)(fullServerUrl.value))
120
+ }, null, 8, ["icon", "class"])) : createCommentVNode("", true)
121
+ ], 2)
122
+ ], 2)
123
+ ]),
124
+ createBaseVNode("li", null, [
125
+ createBaseVNode("div", {
126
+ class: normalizeClass(_ctx.$style.item)
127
+ }, [
128
+ createBaseVNode("span", {
129
+ class: normalizeClass(_ctx.$style.label)
130
+ }, [
131
+ createTextVNode(toDisplayString(unref(i18n).baseText("settings.mcp.instructions.apiKey.part1")) + " ", 1),
132
+ createVNode(_component_N8nLink, { to: "/settings/api" }, {
133
+ default: withCtx(() => [
134
+ createTextVNode(toDisplayString(unref(i18n).baseText("generic.apiKey")), 1)
135
+ ]),
136
+ _: 1
137
+ }),
138
+ createTextVNode(". " + toDisplayString(unref(i18n).baseText("settings.mcp.instructions.apiKey.part2")), 1)
139
+ ], 2)
140
+ ], 2)
141
+ ])
142
+ ], 2),
143
+ createBaseVNode("div", {
144
+ class: normalizeClass(_ctx.$style.connectionString)
145
+ }, [
146
+ createVNode(_component_N8nInfoAccordion, {
147
+ title: unref(i18n).baseText("settings.mcp.instructions.json")
148
+ }, {
149
+ customContent: withCtx(() => [
150
+ createVNode(_component_N8nMarkdown, { content: connectionCode.value }, null, 8, ["content"]),
151
+ unref(isSupported) ? (openBlock(), createBlock(_component_N8nButton, {
152
+ key: 0,
153
+ type: "tertiary",
154
+ icon: unref(copied) ? "check" : "copy",
155
+ square: true,
156
+ class: normalizeClass(_ctx.$style["copy-json-button"]),
157
+ onClick: _cache[1] || (_cache[1] = ($event) => unref(copy)(connectionString2.value))
158
+ }, null, 8, ["icon", "class"])) : createCommentVNode("", true)
159
+ ]),
160
+ _: 1
161
+ }, 8, ["title"])
162
+ ], 2),
163
+ createVNode(_component_N8nText, {
164
+ size: "small",
165
+ class: "mt-m"
166
+ }, {
167
+ default: withCtx(() => [
168
+ createTextVNode(toDisplayString(unref(i18n).baseText("settings.mcp.instructions.docs.part1")) + " ", 1),
169
+ createBaseVNode("a", {
170
+ href: DOCS_URL,
171
+ target: "_blank"
172
+ }, toDisplayString(unref(i18n).baseText("settings.mcp.instructions.docs.part2")), 1)
173
+ ]),
174
+ _: 1
175
+ })
176
+ ], 2);
177
+ };
178
+ }
179
+ });
180
+ const container$1 = "_container_1ngyt_123";
181
+ const instructions = "_instructions_1ngyt_128";
182
+ const item = "_item_1ngyt_135";
183
+ const label = "_label_1ngyt_140";
184
+ const url = "_url_1ngyt_143";
185
+ const connectionString = "_connectionString_1ngyt_167";
186
+ const style0$1 = {
187
+ container: container$1,
188
+ instructions,
189
+ item,
190
+ label,
191
+ url,
192
+ "copy-url-button": "_copy-url-button_1ngyt_154",
193
+ connectionString,
194
+ "copy-json-button": "_copy-json-button_1ngyt_178"
195
+ };
196
+ const cssModules$1 = {
197
+ "$style": style0$1
198
+ };
199
+ const MCPConnectionInstructions = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__cssModules", cssModules$1]]);
200
+ const _hoisted_1 = { key: 0 };
201
+ const _hoisted_2 = {
202
+ key: 1,
203
+ class: "mt-s mb-xl"
204
+ };
205
+ const _hoisted_3 = { key: 1 };
206
+ const _sfc_main = /* @__PURE__ */ defineComponent({
207
+ __name: "SettingsMCPView",
208
+ setup(__props) {
209
+ const i18n = useI18n();
210
+ const toast = useToast();
211
+ const documentTitle = useDocumentTitle();
212
+ const workflowsStore = useWorkflowsStore();
213
+ const mcpStore = useMCPStore();
214
+ const usersStore = useUsersStore();
215
+ const isOwner = computed(() => usersStore.isInstanceOwner);
216
+ const rootStore = useRootStore();
217
+ const workflowsLoading = ref(false);
218
+ const availableWorkflows = ref([]);
219
+ const tableHeaders = ref([
220
+ {
221
+ title: i18n.baseText("generic.name"),
222
+ key: "name",
223
+ width: 200,
224
+ disableSort: true,
225
+ value() {
226
+ return;
227
+ }
228
+ },
229
+ {
230
+ title: i18n.baseText("generic.folder"),
231
+ key: "parentFolder",
232
+ width: 200,
233
+ disableSort: true,
234
+ value() {
235
+ return;
236
+ }
237
+ },
238
+ {
239
+ title: i18n.baseText("generic.project"),
240
+ key: "homeProject",
241
+ width: 200,
242
+ disableSort: true,
243
+ value() {
244
+ return;
245
+ }
246
+ },
247
+ {
248
+ title: i18n.baseText("workflowDetails.active"),
249
+ key: "active",
250
+ disableSort: true,
251
+ value() {
252
+ return;
253
+ }
254
+ },
255
+ {
256
+ title: "",
257
+ key: "actions",
258
+ align: "end",
259
+ width: 50,
260
+ disableSort: true,
261
+ value() {
262
+ return;
263
+ }
264
+ }
265
+ ]);
266
+ const tableActions = ref([
267
+ {
268
+ label: i18n.baseText("settings.mcp.workflows.table.action.removeMCPAccess"),
269
+ value: "removeFromMCP"
270
+ }
271
+ ]);
272
+ const getProjectIcon = (workflow) => {
273
+ if (workflow.homeProject?.type === "personal") {
274
+ return { type: "icon", value: "user" };
275
+ } else if (workflow.homeProject?.name) {
276
+ return isIconOrEmoji(workflow.homeProject.icon) ? workflow.homeProject.icon : { type: "icon", value: "layers" };
277
+ } else {
278
+ return { type: "icon", value: "house" };
279
+ }
280
+ };
281
+ const getProjectName = (workflow) => {
282
+ if (workflow.homeProject?.type === "personal") {
283
+ return i18n.baseText("projects.menu.personal");
284
+ }
285
+ return workflow.homeProject?.name ?? "";
286
+ };
287
+ const fetchAvailableWorkflows = async () => {
288
+ workflowsLoading.value = true;
289
+ try {
290
+ const workflows = await mcpStore.fetchWorkflowsAvailableForMCP(1, 200);
291
+ availableWorkflows.value = workflows;
292
+ } catch (error) {
293
+ toast.showError(error, "Error fetching workflows");
294
+ } finally {
295
+ workflowsLoading.value = false;
296
+ }
297
+ };
298
+ const onUpdateMCPEnabled = async (value) => {
299
+ const updated = await mcpStore.setMcpAccessEnabled(value);
300
+ if (updated) {
301
+ await fetchAvailableWorkflows();
302
+ } else {
303
+ workflowsLoading.value = false;
304
+ }
305
+ };
306
+ const onWorkflowAction = async (action, workflow) => {
307
+ switch (action) {
308
+ case "removeFromMCP":
309
+ try {
310
+ await workflowsStore.updateWorkflowSetting(workflow.id, "availableInMCP", false);
311
+ await fetchAvailableWorkflows();
312
+ } catch (error) {
313
+ toast.showError(error, i18n.baseText("workflowSettings.toggleMCP.error.title"));
314
+ }
315
+ break;
316
+ }
317
+ };
318
+ onMounted(async () => {
319
+ documentTitle.set(i18n.baseText("settings.mcp"));
320
+ if (mcpStore.mcpAccessEnabled) await fetchAvailableWorkflows();
321
+ });
322
+ return (_ctx, _cache) => {
323
+ const _component_N8nHeading = N8nHeading;
324
+ const _component_N8nText = N8nText;
325
+ const _component_ElSwitch = resolveComponent("ElSwitch");
326
+ const _component_N8nTooltip = Tooltip;
327
+ const _component_N8nLoading = N8nLoading;
328
+ const _component_N8nActionBox = N8nActionBox;
329
+ const _component_N8nIcon = N8nIcon;
330
+ const _component_N8nLink = N8nLink;
331
+ const _component_ProjectIcon = __unplugin_components_7;
332
+ const _component_N8nActionToggle = N8nActionToggle;
333
+ const _component_N8nDataTableServer = N8nDataTableServer;
334
+ return openBlock(), createElementBlock("div", {
335
+ class: normalizeClass(_ctx.$style.container)
336
+ }, [
337
+ createBaseVNode("div", {
338
+ class: normalizeClass(_ctx.$style.headingContainer)
339
+ }, [
340
+ createVNode(_component_N8nHeading, { size: "2xlarge" }, {
341
+ default: withCtx(() => [
342
+ createTextVNode(toDisplayString(unref(i18n).baseText("settings.mcp")), 1)
343
+ ]),
344
+ _: 1
345
+ })
346
+ ], 2),
347
+ createBaseVNode("div", {
348
+ class: normalizeClass(_ctx.$style.mainToggleContainer)
349
+ }, [
350
+ createBaseVNode("div", {
351
+ class: normalizeClass(_ctx.$style.mainToggleInfo)
352
+ }, [
353
+ createVNode(_component_N8nText, { bold: true }, {
354
+ default: withCtx(() => [
355
+ createTextVNode(toDisplayString(unref(i18n).baseText("settings.mcp.toggle.label")), 1)
356
+ ]),
357
+ _: 1
358
+ }),
359
+ createVNode(_component_N8nText, {
360
+ size: "small",
361
+ color: "text-light"
362
+ }, {
363
+ default: withCtx(() => [
364
+ createTextVNode(toDisplayString(unref(i18n).baseText("settings.mcp.toggle.description")), 1)
365
+ ]),
366
+ _: 1
367
+ })
368
+ ], 2),
369
+ createBaseVNode("div", {
370
+ class: normalizeClass(_ctx.$style.mainTooggle),
371
+ "data-test-id": "mcp-toggle-container"
372
+ }, [
373
+ createVNode(_component_N8nTooltip, {
374
+ content: unref(i18n).baseText("settings.mcp.toggle.disabled.tooltip"),
375
+ disabled: isOwner.value,
376
+ placement: "top"
377
+ }, {
378
+ default: withCtx(() => [
379
+ createVNode(_component_ElSwitch, {
380
+ "model-value": unref(mcpStore).mcpAccessEnabled,
381
+ size: "large",
382
+ "data-test-id": "mcp-access-toggle",
383
+ disabled: !isOwner.value,
384
+ "onUpdate:modelValue": onUpdateMCPEnabled
385
+ }, null, 8, ["model-value", "disabled"])
386
+ ]),
387
+ _: 1
388
+ }, 8, ["content", "disabled"])
389
+ ], 2)
390
+ ], 2),
391
+ unref(mcpStore).mcpAccessEnabled ? (openBlock(), createElementBlock("div", {
392
+ key: 0,
393
+ class: normalizeClass(_ctx.$style.container),
394
+ "data-test-id": "mcp-enabled-section"
395
+ }, [
396
+ createBaseVNode("div", null, [
397
+ createVNode(_component_N8nHeading, {
398
+ size: "medium",
399
+ bold: true
400
+ }, {
401
+ default: withCtx(() => [
402
+ createTextVNode(toDisplayString(unref(i18n).baseText("settings.mcp.connection.info.heading")), 1)
403
+ ]),
404
+ _: 1
405
+ }),
406
+ createVNode(MCPConnectionInstructions, {
407
+ "base-url": unref(rootStore).urlBaseEditor
408
+ }, null, 8, ["base-url"])
409
+ ]),
410
+ createBaseVNode("div", {
411
+ class: normalizeClass(_ctx.$style["workflow-list-container"]),
412
+ "data-test-id": "mcp-workflow-list"
413
+ }, [
414
+ workflowsLoading.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
415
+ workflowsLoading.value ? (openBlock(), createBlock(_component_N8nLoading, {
416
+ key: 0,
417
+ loading: workflowsLoading.value,
418
+ variant: "h1",
419
+ class: "mb-l"
420
+ }, null, 8, ["loading"])) : createCommentVNode("", true),
421
+ workflowsLoading.value ? (openBlock(), createBlock(_component_N8nLoading, {
422
+ key: 1,
423
+ loading: workflowsLoading.value,
424
+ variant: "p",
425
+ rows: 5,
426
+ "shrink-last": false
427
+ }, null, 8, ["loading"])) : createCommentVNode("", true)
428
+ ])) : (openBlock(), createElementBlock("div", _hoisted_2, [
429
+ createBaseVNode("div", {
430
+ class: normalizeClass([_ctx.$style.header, "mb-s"])
431
+ }, [
432
+ createVNode(_component_N8nHeading, {
433
+ size: "medium",
434
+ bold: true
435
+ }, {
436
+ default: withCtx(() => [
437
+ createTextVNode(toDisplayString(unref(i18n).baseText("settings.mcp.available.workflows.heading")), 1)
438
+ ]),
439
+ _: 1
440
+ })
441
+ ], 2),
442
+ availableWorkflows.value.length === 0 ? (openBlock(), createBlock(_component_N8nActionBox, {
443
+ key: 0,
444
+ "data-test-id": "empty-workflow-list-box",
445
+ heading: unref(i18n).baseText("settings.mcp.empty.title"),
446
+ description: unref(i18n).baseText("settings.mcp.empty.description")
447
+ }, null, 8, ["heading", "description"])) : (openBlock(), createBlock(_component_N8nDataTableServer, {
448
+ key: 1,
449
+ class: normalizeClass(_ctx.$style["workflow-table"]),
450
+ "data-test-id": "mcp-workflow-table",
451
+ headers: tableHeaders.value,
452
+ items: availableWorkflows.value,
453
+ "items-length": availableWorkflows.value.length
454
+ }, {
455
+ [`item.name`]: withCtx(({ item: item2 }) => [
456
+ createVNode(_component_N8nLink, {
457
+ "new-window": true,
458
+ to: unref(router).resolve({
459
+ name: unref(VIEWS).WORKFLOW,
460
+ params: { name: item2.id }
461
+ }).fullPath,
462
+ theme: "text",
463
+ class: normalizeClass(_ctx.$style["table-link"])
464
+ }, {
465
+ default: withCtx(() => [
466
+ createVNode(_component_N8nText, { "data-test-id": "mcp-workflow-name" }, {
467
+ default: withCtx(() => [
468
+ createTextVNode(toDisplayString(item2.name), 1)
469
+ ]),
470
+ _: 2
471
+ }, 1024),
472
+ createVNode(_component_N8nIcon, {
473
+ icon: "external-link",
474
+ class: normalizeClass(_ctx.$style["link-icon"]),
475
+ color: "text-light"
476
+ }, null, 8, ["class"])
477
+ ]),
478
+ _: 2
479
+ }, 1032, ["to", "class"])
480
+ ]),
481
+ [`item.parentFolder`]: withCtx(({ item: item2 }) => [
482
+ item2.parentFolder ? (openBlock(), createElementBlock("span", {
483
+ key: 0,
484
+ class: normalizeClass(_ctx.$style["folder-cell"])
485
+ }, [
486
+ item2.homeProject ? (openBlock(), createBlock(_component_N8nLink, {
487
+ key: 0,
488
+ "data-test-id": "mcp-workflow-folder-link",
489
+ to: `/projects/${item2.homeProject.id}/folders/${item2.parentFolder.id}/workflows`,
490
+ theme: "text",
491
+ class: normalizeClass(_ctx.$style["table-link"]),
492
+ "new-window": true
493
+ }, {
494
+ default: withCtx(() => [
495
+ createVNode(_component_N8nText, { "data-test-id": "mcp-workflow-folder-name" }, {
496
+ default: withCtx(() => [
497
+ createTextVNode(toDisplayString(item2.parentFolder.name), 1)
498
+ ]),
499
+ _: 2
500
+ }, 1024),
501
+ createVNode(_component_N8nIcon, {
502
+ icon: "external-link",
503
+ class: normalizeClass(_ctx.$style["link-icon"]),
504
+ color: "text-light"
505
+ }, null, 8, ["class"])
506
+ ]),
507
+ _: 2
508
+ }, 1032, ["to", "class"])) : (openBlock(), createElementBlock("span", _hoisted_3, [
509
+ item2.parentFolder ? (openBlock(), createBlock(_component_N8nIcon, {
510
+ key: 0,
511
+ icon: "folder",
512
+ size: 16,
513
+ color: "text-light"
514
+ })) : createCommentVNode("", true),
515
+ createVNode(_component_N8nText, { "data-test-id": "mcp-workflow-folder-name" }, {
516
+ default: withCtx(() => [
517
+ createTextVNode(toDisplayString(item2.parentFolder.name), 1)
518
+ ]),
519
+ _: 2
520
+ }, 1024)
521
+ ]))
522
+ ], 2)) : (openBlock(), createBlock(_component_N8nText, {
523
+ key: 1,
524
+ "data-test-id": "mcp-workflow-no-folder"
525
+ }, {
526
+ default: withCtx(() => _cache[0] || (_cache[0] = [
527
+ createTextVNode("-")
528
+ ])),
529
+ _: 1
530
+ }))
531
+ ]),
532
+ [`item.homeProject`]: withCtx(({ item: item2 }) => [
533
+ item2.homeProject ? (openBlock(), createElementBlock("span", {
534
+ key: 0,
535
+ class: normalizeClass(_ctx.$style["folder-cell"])
536
+ }, [
537
+ createVNode(_component_N8nLink, {
538
+ "data-test-id": "mcp-workflow-project-link",
539
+ to: unref(router).resolve({
540
+ name: unref(VIEWS).PROJECTS_WORKFLOWS,
541
+ params: { projectId: item2.homeProject.id }
542
+ }).fullPath,
543
+ theme: "text",
544
+ class: normalizeClass([_ctx.$style["table-link"], _ctx.$style["project-link"]]),
545
+ "new-window": true
546
+ }, {
547
+ default: withCtx(() => [
548
+ item2.homeProject ? (openBlock(), createBlock(_component_ProjectIcon, {
549
+ key: 0,
550
+ icon: getProjectIcon(item2),
551
+ "border-less": true
552
+ }, null, 8, ["icon"])) : createCommentVNode("", true),
553
+ createVNode(_component_N8nText, { "data-test-id": "mcp-workflow-project-name" }, {
554
+ default: withCtx(() => [
555
+ createTextVNode(toDisplayString(getProjectName(item2)), 1)
556
+ ]),
557
+ _: 2
558
+ }, 1024),
559
+ createVNode(_component_N8nIcon, {
560
+ icon: "external-link",
561
+ class: normalizeClass(_ctx.$style["link-icon"]),
562
+ color: "text-light"
563
+ }, null, 8, ["class"])
564
+ ]),
565
+ _: 2
566
+ }, 1032, ["to", "class"])
567
+ ], 2)) : (openBlock(), createBlock(_component_N8nText, {
568
+ key: 1,
569
+ "data-test-id": "mcp-workflow-no-project"
570
+ }, {
571
+ default: withCtx(() => _cache[1] || (_cache[1] = [
572
+ createTextVNode("-")
573
+ ])),
574
+ _: 1
575
+ }))
576
+ ]),
577
+ [`item.active`]: withCtx(({ item: item2 }) => [
578
+ createVNode(_component_N8nIcon, {
579
+ icon: item2.active ? "check" : "x",
580
+ size: 16,
581
+ color: item2.active ? "success" : "danger"
582
+ }, null, 8, ["icon", "color"])
583
+ ]),
584
+ [`item.actions`]: withCtx(({ item: item2 }) => [
585
+ createVNode(_component_N8nActionToggle, {
586
+ placement: "bottom",
587
+ actions: tableActions.value,
588
+ theme: "dark",
589
+ onAction: ($event) => onWorkflowAction($event, item2)
590
+ }, null, 8, ["actions", "onAction"])
591
+ ]),
592
+ _: 2
593
+ }, 1032, ["class", "headers", "items", "items-length"]))
594
+ ]))
595
+ ], 2)
596
+ ], 2)) : createCommentVNode("", true)
597
+ ], 2);
598
+ };
599
+ }
600
+ });
601
+ const container = "_container_he5p1_123";
602
+ const headingContainer = "_headingContainer_he5p1_132";
603
+ const mainToggleContainer = "_mainToggleContainer_he5p1_136";
604
+ const mainToggleInfo = "_mainToggleInfo_he5p1_146";
605
+ const mainTooggle = "_mainTooggle_he5p1_153";
606
+ const header = "_header_he5p1_160";
607
+ const style0 = {
608
+ container,
609
+ headingContainer,
610
+ mainToggleContainer,
611
+ mainToggleInfo,
612
+ mainTooggle,
613
+ header,
614
+ "workflow-table": "_workflow-table_he5p1_166",
615
+ "table-link": "_table-link_he5p1_170",
616
+ "link-icon": "_link-icon_he5p1_178",
617
+ "project-link": "_project-link_he5p1_184",
618
+ "folder-cell": "_folder-cell_he5p1_191"
619
+ };
620
+ const cssModules = {
621
+ "$style": style0
622
+ };
623
+ const SettingsMCPView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cssModules]]);
624
+ export {
625
+ SettingsMCPView as default
626
+ };