@flowdot.ai/mcp-server 1.0.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 (315) hide show
  1. package/README.md +162 -0
  2. package/bin/flowdot-mcp.js +15 -0
  3. package/dist/api-client.d.ts +349 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +789 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/index.d.ts +26 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +32 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/server.d.ts +15 -0
  12. package/dist/server.d.ts.map +1 -0
  13. package/dist/server.js +96 -0
  14. package/dist/server.js.map +1 -0
  15. package/dist/tools/add-connection.d.ts +16 -0
  16. package/dist/tools/add-connection.d.ts.map +1 -0
  17. package/dist/tools/add-connection.js +62 -0
  18. package/dist/tools/add-connection.js.map +1 -0
  19. package/dist/tools/add-custom-node-comment.d.ts +15 -0
  20. package/dist/tools/add-custom-node-comment.d.ts.map +1 -0
  21. package/dist/tools/add-custom-node-comment.js +69 -0
  22. package/dist/tools/add-custom-node-comment.js.map +1 -0
  23. package/dist/tools/add-node.d.ts +18 -0
  24. package/dist/tools/add-node.d.ts.map +1 -0
  25. package/dist/tools/add-node.js +66 -0
  26. package/dist/tools/add-node.js.map +1 -0
  27. package/dist/tools/add-shared-result-comment.d.ts +15 -0
  28. package/dist/tools/add-shared-result-comment.d.ts.map +1 -0
  29. package/dist/tools/add-shared-result-comment.js +70 -0
  30. package/dist/tools/add-shared-result-comment.js.map +1 -0
  31. package/dist/tools/add-workflow-comment.d.ts +14 -0
  32. package/dist/tools/add-workflow-comment.d.ts.map +1 -0
  33. package/dist/tools/add-workflow-comment.js +66 -0
  34. package/dist/tools/add-workflow-comment.js.map +1 -0
  35. package/dist/tools/agent-chat.d.ts +14 -0
  36. package/dist/tools/agent-chat.d.ts.map +1 -0
  37. package/dist/tools/agent-chat.js +80 -0
  38. package/dist/tools/agent-chat.js.map +1 -0
  39. package/dist/tools/cancel-execution.d.ts +12 -0
  40. package/dist/tools/cancel-execution.d.ts.map +1 -0
  41. package/dist/tools/cancel-execution.js +37 -0
  42. package/dist/tools/cancel-execution.js.map +1 -0
  43. package/dist/tools/clone-app.d.ts +11 -0
  44. package/dist/tools/clone-app.d.ts.map +1 -0
  45. package/dist/tools/clone-app.js +63 -0
  46. package/dist/tools/clone-app.js.map +1 -0
  47. package/dist/tools/copy-custom-node.d.ts +14 -0
  48. package/dist/tools/copy-custom-node.d.ts.map +1 -0
  49. package/dist/tools/copy-custom-node.js +50 -0
  50. package/dist/tools/copy-custom-node.js.map +1 -0
  51. package/dist/tools/create-app.d.ts +11 -0
  52. package/dist/tools/create-app.d.ts.map +1 -0
  53. package/dist/tools/create-app.js +182 -0
  54. package/dist/tools/create-app.js.map +1 -0
  55. package/dist/tools/create-custom-node.d.ts +28 -0
  56. package/dist/tools/create-custom-node.d.ts.map +1 -0
  57. package/dist/tools/create-custom-node.js +221 -0
  58. package/dist/tools/create-custom-node.js.map +1 -0
  59. package/dist/tools/create-input-preset.d.ts +15 -0
  60. package/dist/tools/create-input-preset.d.ts.map +1 -0
  61. package/dist/tools/create-input-preset.js +76 -0
  62. package/dist/tools/create-input-preset.js.map +1 -0
  63. package/dist/tools/create-shared-result.d.ts +17 -0
  64. package/dist/tools/create-shared-result.d.ts.map +1 -0
  65. package/dist/tools/create-shared-result.js +78 -0
  66. package/dist/tools/create-shared-result.js.map +1 -0
  67. package/dist/tools/create-workflow.d.ts +13 -0
  68. package/dist/tools/create-workflow.d.ts.map +1 -0
  69. package/dist/tools/create-workflow.js +49 -0
  70. package/dist/tools/create-workflow.js.map +1 -0
  71. package/dist/tools/delete-app.d.ts +11 -0
  72. package/dist/tools/delete-app.d.ts.map +1 -0
  73. package/dist/tools/delete-app.js +40 -0
  74. package/dist/tools/delete-app.js.map +1 -0
  75. package/dist/tools/delete-connection.d.ts +13 -0
  76. package/dist/tools/delete-connection.d.ts.map +1 -0
  77. package/dist/tools/delete-connection.js +41 -0
  78. package/dist/tools/delete-connection.js.map +1 -0
  79. package/dist/tools/delete-custom-node.d.ts +13 -0
  80. package/dist/tools/delete-custom-node.d.ts.map +1 -0
  81. package/dist/tools/delete-custom-node.js +41 -0
  82. package/dist/tools/delete-custom-node.js.map +1 -0
  83. package/dist/tools/delete-input-preset.d.ts +13 -0
  84. package/dist/tools/delete-input-preset.d.ts.map +1 -0
  85. package/dist/tools/delete-input-preset.js +42 -0
  86. package/dist/tools/delete-input-preset.js.map +1 -0
  87. package/dist/tools/delete-node.d.ts +13 -0
  88. package/dist/tools/delete-node.d.ts.map +1 -0
  89. package/dist/tools/delete-node.js +41 -0
  90. package/dist/tools/delete-node.js.map +1 -0
  91. package/dist/tools/delete-workflow.d.ts +12 -0
  92. package/dist/tools/delete-workflow.d.ts.map +1 -0
  93. package/dist/tools/delete-workflow.js +37 -0
  94. package/dist/tools/delete-workflow.js.map +1 -0
  95. package/dist/tools/duplicate-workflow.d.ts +13 -0
  96. package/dist/tools/duplicate-workflow.d.ts.map +1 -0
  97. package/dist/tools/duplicate-workflow.js +49 -0
  98. package/dist/tools/duplicate-workflow.js.map +1 -0
  99. package/dist/tools/execute-workflow.d.ts +15 -0
  100. package/dist/tools/execute-workflow.d.ts.map +1 -0
  101. package/dist/tools/execute-workflow.js +112 -0
  102. package/dist/tools/execute-workflow.js.map +1 -0
  103. package/dist/tools/favorite-custom-node.d.ts +14 -0
  104. package/dist/tools/favorite-custom-node.d.ts.map +1 -0
  105. package/dist/tools/favorite-custom-node.js +48 -0
  106. package/dist/tools/favorite-custom-node.js.map +1 -0
  107. package/dist/tools/favorite-workflow.d.ts +13 -0
  108. package/dist/tools/favorite-workflow.d.ts.map +1 -0
  109. package/dist/tools/favorite-workflow.js +42 -0
  110. package/dist/tools/favorite-workflow.js.map +1 -0
  111. package/dist/tools/get-app-template.d.ts +10 -0
  112. package/dist/tools/get-app-template.d.ts.map +1 -0
  113. package/dist/tools/get-app-template.js +856 -0
  114. package/dist/tools/get-app-template.js.map +1 -0
  115. package/dist/tools/get-app.d.ts +11 -0
  116. package/dist/tools/get-app.d.ts.map +1 -0
  117. package/dist/tools/get-app.js +124 -0
  118. package/dist/tools/get-app.js.map +1 -0
  119. package/dist/tools/get-custom-node-comments.d.ts +13 -0
  120. package/dist/tools/get-custom-node-comments.d.ts.map +1 -0
  121. package/dist/tools/get-custom-node-comments.js +65 -0
  122. package/dist/tools/get-custom-node-comments.js.map +1 -0
  123. package/dist/tools/get-custom-node-template.d.ts +31 -0
  124. package/dist/tools/get-custom-node-template.d.ts.map +1 -0
  125. package/dist/tools/get-custom-node-template.js +212 -0
  126. package/dist/tools/get-custom-node-template.js.map +1 -0
  127. package/dist/tools/get-custom-node.d.ts +13 -0
  128. package/dist/tools/get-custom-node.d.ts.map +1 -0
  129. package/dist/tools/get-custom-node.js +98 -0
  130. package/dist/tools/get-custom-node.js.map +1 -0
  131. package/dist/tools/get-execution-history.d.ts +14 -0
  132. package/dist/tools/get-execution-history.d.ts.map +1 -0
  133. package/dist/tools/get-execution-history.js +65 -0
  134. package/dist/tools/get-execution-history.js.map +1 -0
  135. package/dist/tools/get-execution.d.ts +12 -0
  136. package/dist/tools/get-execution.d.ts.map +1 -0
  137. package/dist/tools/get-execution.js +81 -0
  138. package/dist/tools/get-execution.js.map +1 -0
  139. package/dist/tools/get-input-preset.d.ts +13 -0
  140. package/dist/tools/get-input-preset.d.ts.map +1 -0
  141. package/dist/tools/get-input-preset.js +69 -0
  142. package/dist/tools/get-input-preset.js.map +1 -0
  143. package/dist/tools/get-node-connections.d.ts +13 -0
  144. package/dist/tools/get-node-connections.d.ts.map +1 -0
  145. package/dist/tools/get-node-connections.js +67 -0
  146. package/dist/tools/get-node-connections.js.map +1 -0
  147. package/dist/tools/get-node-schema.d.ts +12 -0
  148. package/dist/tools/get-node-schema.d.ts.map +1 -0
  149. package/dist/tools/get-node-schema.js +113 -0
  150. package/dist/tools/get-node-schema.js.map +1 -0
  151. package/dist/tools/get-public-workflows.d.ts +13 -0
  152. package/dist/tools/get-public-workflows.d.ts.map +1 -0
  153. package/dist/tools/get-public-workflows.js +63 -0
  154. package/dist/tools/get-public-workflows.js.map +1 -0
  155. package/dist/tools/get-shared-result-comments.d.ts +13 -0
  156. package/dist/tools/get-shared-result-comments.d.ts.map +1 -0
  157. package/dist/tools/get-shared-result-comments.js +62 -0
  158. package/dist/tools/get-shared-result-comments.js.map +1 -0
  159. package/dist/tools/get-shared-result.d.ts +13 -0
  160. package/dist/tools/get-shared-result.d.ts.map +1 -0
  161. package/dist/tools/get-shared-result.js +83 -0
  162. package/dist/tools/get-shared-result.js.map +1 -0
  163. package/dist/tools/get-workflow-comments.d.ts +12 -0
  164. package/dist/tools/get-workflow-comments.d.ts.map +1 -0
  165. package/dist/tools/get-workflow-comments.js +60 -0
  166. package/dist/tools/get-workflow-comments.js.map +1 -0
  167. package/dist/tools/get-workflow-details.d.ts +12 -0
  168. package/dist/tools/get-workflow-details.d.ts.map +1 -0
  169. package/dist/tools/get-workflow-details.js +87 -0
  170. package/dist/tools/get-workflow-details.js.map +1 -0
  171. package/dist/tools/get-workflow-graph.d.ts +12 -0
  172. package/dist/tools/get-workflow-graph.d.ts.map +1 -0
  173. package/dist/tools/get-workflow-graph.js +83 -0
  174. package/dist/tools/get-workflow-graph.js.map +1 -0
  175. package/dist/tools/get-workflow-inputs-schema.d.ts +12 -0
  176. package/dist/tools/get-workflow-inputs-schema.d.ts.map +1 -0
  177. package/dist/tools/get-workflow-inputs-schema.js +74 -0
  178. package/dist/tools/get-workflow-inputs-schema.js.map +1 -0
  179. package/dist/tools/get-workflow-metrics.d.ts +13 -0
  180. package/dist/tools/get-workflow-metrics.d.ts.map +1 -0
  181. package/dist/tools/get-workflow-metrics.js +65 -0
  182. package/dist/tools/get-workflow-metrics.js.map +1 -0
  183. package/dist/tools/get-workflow-public-url.d.ts +12 -0
  184. package/dist/tools/get-workflow-public-url.d.ts.map +1 -0
  185. package/dist/tools/get-workflow-public-url.js +48 -0
  186. package/dist/tools/get-workflow-public-url.js.map +1 -0
  187. package/dist/tools/get-workflow-tags.d.ts +12 -0
  188. package/dist/tools/get-workflow-tags.d.ts.map +1 -0
  189. package/dist/tools/get-workflow-tags.js +42 -0
  190. package/dist/tools/get-workflow-tags.js.map +1 -0
  191. package/dist/tools/index.d.ts +12 -0
  192. package/dist/tools/index.d.ts.map +1 -0
  193. package/dist/tools/index.js +407 -0
  194. package/dist/tools/index.js.map +1 -0
  195. package/dist/tools/link-app-workflow.d.ts +11 -0
  196. package/dist/tools/link-app-workflow.d.ts.map +1 -0
  197. package/dist/tools/link-app-workflow.js +69 -0
  198. package/dist/tools/link-app-workflow.js.map +1 -0
  199. package/dist/tools/list-apps.d.ts +11 -0
  200. package/dist/tools/list-apps.d.ts.map +1 -0
  201. package/dist/tools/list-apps.js +75 -0
  202. package/dist/tools/list-apps.js.map +1 -0
  203. package/dist/tools/list-available-nodes.d.ts +10 -0
  204. package/dist/tools/list-available-nodes.d.ts.map +1 -0
  205. package/dist/tools/list-available-nodes.js +94 -0
  206. package/dist/tools/list-available-nodes.js.map +1 -0
  207. package/dist/tools/list-custom-nodes.d.ts +16 -0
  208. package/dist/tools/list-custom-nodes.d.ts.map +1 -0
  209. package/dist/tools/list-custom-nodes.js +80 -0
  210. package/dist/tools/list-custom-nodes.js.map +1 -0
  211. package/dist/tools/list-input-presets.d.ts +15 -0
  212. package/dist/tools/list-input-presets.d.ts.map +1 -0
  213. package/dist/tools/list-input-presets.js +100 -0
  214. package/dist/tools/list-input-presets.js.map +1 -0
  215. package/dist/tools/list-shared-results.d.ts +15 -0
  216. package/dist/tools/list-shared-results.d.ts.map +1 -0
  217. package/dist/tools/list-shared-results.js +80 -0
  218. package/dist/tools/list-shared-results.js.map +1 -0
  219. package/dist/tools/list-workflows.d.ts +13 -0
  220. package/dist/tools/list-workflows.d.ts.map +1 -0
  221. package/dist/tools/list-workflows.js +70 -0
  222. package/dist/tools/list-workflows.js.map +1 -0
  223. package/dist/tools/publish-app.d.ts +11 -0
  224. package/dist/tools/publish-app.d.ts.map +1 -0
  225. package/dist/tools/publish-app.js +44 -0
  226. package/dist/tools/publish-app.js.map +1 -0
  227. package/dist/tools/retry-execution.d.ts +12 -0
  228. package/dist/tools/retry-execution.d.ts.map +1 -0
  229. package/dist/tools/retry-execution.js +45 -0
  230. package/dist/tools/retry-execution.js.map +1 -0
  231. package/dist/tools/search-apps.d.ts +11 -0
  232. package/dist/tools/search-apps.d.ts.map +1 -0
  233. package/dist/tools/search-apps.js +104 -0
  234. package/dist/tools/search-apps.js.map +1 -0
  235. package/dist/tools/search-public-custom-nodes.d.ts +19 -0
  236. package/dist/tools/search-public-custom-nodes.d.ts.map +1 -0
  237. package/dist/tools/search-public-custom-nodes.js +101 -0
  238. package/dist/tools/search-public-custom-nodes.js.map +1 -0
  239. package/dist/tools/search-workflows.d.ts +14 -0
  240. package/dist/tools/search-workflows.d.ts.map +1 -0
  241. package/dist/tools/search-workflows.js +62 -0
  242. package/dist/tools/search-workflows.js.map +1 -0
  243. package/dist/tools/set-workflow-tags.d.ts +13 -0
  244. package/dist/tools/set-workflow-tags.d.ts.map +1 -0
  245. package/dist/tools/set-workflow-tags.js +42 -0
  246. package/dist/tools/set-workflow-tags.js.map +1 -0
  247. package/dist/tools/stream-execution.d.ts +13 -0
  248. package/dist/tools/stream-execution.d.ts.map +1 -0
  249. package/dist/tools/stream-execution.js +70 -0
  250. package/dist/tools/stream-execution.js.map +1 -0
  251. package/dist/tools/toggle-community-inputs.d.ts +13 -0
  252. package/dist/tools/toggle-community-inputs.d.ts.map +1 -0
  253. package/dist/tools/toggle-community-inputs.js +49 -0
  254. package/dist/tools/toggle-community-inputs.js.map +1 -0
  255. package/dist/tools/toggle-custom-node-visibility.d.ts +14 -0
  256. package/dist/tools/toggle-custom-node-visibility.d.ts.map +1 -0
  257. package/dist/tools/toggle-custom-node-visibility.js +59 -0
  258. package/dist/tools/toggle-custom-node-visibility.js.map +1 -0
  259. package/dist/tools/toggle-workflow-public.d.ts +13 -0
  260. package/dist/tools/toggle-workflow-public.d.ts.map +1 -0
  261. package/dist/tools/toggle-workflow-public.js +42 -0
  262. package/dist/tools/toggle-workflow-public.js.map +1 -0
  263. package/dist/tools/unlink-app-workflow.d.ts +11 -0
  264. package/dist/tools/unlink-app-workflow.d.ts.map +1 -0
  265. package/dist/tools/unlink-app-workflow.js +44 -0
  266. package/dist/tools/unlink-app-workflow.js.map +1 -0
  267. package/dist/tools/unpublish-app.d.ts +11 -0
  268. package/dist/tools/unpublish-app.d.ts.map +1 -0
  269. package/dist/tools/unpublish-app.js +39 -0
  270. package/dist/tools/unpublish-app.js.map +1 -0
  271. package/dist/tools/update-app.d.ts +11 -0
  272. package/dist/tools/update-app.d.ts.map +1 -0
  273. package/dist/tools/update-app.js +101 -0
  274. package/dist/tools/update-app.js.map +1 -0
  275. package/dist/tools/update-custom-node.d.ts +28 -0
  276. package/dist/tools/update-custom-node.d.ts.map +1 -0
  277. package/dist/tools/update-custom-node.js +174 -0
  278. package/dist/tools/update-custom-node.js.map +1 -0
  279. package/dist/tools/update-input-preset.d.ts +16 -0
  280. package/dist/tools/update-input-preset.d.ts.map +1 -0
  281. package/dist/tools/update-input-preset.js +79 -0
  282. package/dist/tools/update-input-preset.js.map +1 -0
  283. package/dist/tools/update-node.d.ts +18 -0
  284. package/dist/tools/update-node.d.ts.map +1 -0
  285. package/dist/tools/update-node.js +73 -0
  286. package/dist/tools/update-node.js.map +1 -0
  287. package/dist/tools/validate-workflow.d.ts +12 -0
  288. package/dist/tools/validate-workflow.d.ts.map +1 -0
  289. package/dist/tools/validate-workflow.js +61 -0
  290. package/dist/tools/validate-workflow.js.map +1 -0
  291. package/dist/tools/vote-custom-node.d.ts +14 -0
  292. package/dist/tools/vote-custom-node.d.ts.map +1 -0
  293. package/dist/tools/vote-custom-node.js +60 -0
  294. package/dist/tools/vote-custom-node.js.map +1 -0
  295. package/dist/tools/vote-input-preset.d.ts +14 -0
  296. package/dist/tools/vote-input-preset.d.ts.map +1 -0
  297. package/dist/tools/vote-input-preset.js +49 -0
  298. package/dist/tools/vote-input-preset.js.map +1 -0
  299. package/dist/tools/vote-shared-result.d.ts +14 -0
  300. package/dist/tools/vote-shared-result.d.ts.map +1 -0
  301. package/dist/tools/vote-shared-result.js +49 -0
  302. package/dist/tools/vote-shared-result.js.map +1 -0
  303. package/dist/tools/vote-workflow.d.ts +13 -0
  304. package/dist/tools/vote-workflow.d.ts.map +1 -0
  305. package/dist/tools/vote-workflow.js +45 -0
  306. package/dist/tools/vote-workflow.js.map +1 -0
  307. package/dist/types.d.ts +670 -0
  308. package/dist/types.d.ts.map +1 -0
  309. package/dist/types.js +5 -0
  310. package/dist/types.js.map +1 -0
  311. package/dist/utils/script-validator.d.ts +35 -0
  312. package/dist/utils/script-validator.d.ts.map +1 -0
  313. package/dist/utils/script-validator.js +282 -0
  314. package/dist/utils/script-validator.js.map +1 -0
  315. package/package.json +54 -0
@@ -0,0 +1,221 @@
1
+ /**
2
+ * create_custom_node MCP Tool
3
+ *
4
+ * Create a new custom node with script code.
5
+ * Scope: custom_nodes:manage
6
+ */
7
+ import { validateCustomNodeScript, formatWarnings } from '../utils/script-validator.js';
8
+ export const createCustomNodeTool = {
9
+ name: 'create_custom_node',
10
+ description: `Create a new custom node with inputs, outputs, and script code.
11
+
12
+ SCRIPT FORMAT (REQUIRED):
13
+ \`\`\`javascript
14
+ function processData(inputs, properties, llm) {
15
+ // Access inputs by their exact names
16
+ const myInput = inputs.InputName || '';
17
+ const myProp = properties.propertyKey;
18
+
19
+ // Your logic here
20
+
21
+ // Return object with keys matching output names EXACTLY
22
+ return {
23
+ OutputName: result
24
+ };
25
+ }
26
+ \`\`\`
27
+
28
+ VALID DATA TYPES: text, number, boolean, json, array, any
29
+
30
+ IMPORTANT RULES:
31
+ - The processData function is REQUIRED and auto-invoked by the runtime
32
+ - Input/output names are case-sensitive
33
+ - Return object keys must match defined output names exactly
34
+ - Top-level return statements are NOT allowed (must be inside processData)
35
+ - No require/import, eval, process, global, or file system access
36
+ - Available globals: console, JSON, Math, String.prototype.trim, Array.isArray
37
+
38
+ LLM CAPABILITY:
39
+ Set llm_enabled: true to allow the node to make AI/LLM calls. When enabled:
40
+ - Users will see Quick Select buttons (FlowDot, Simple, Capable, Complex) to choose their AI model
41
+ - Your script can call llm.call() to make LLM requests
42
+
43
+ LLM CALL SYNTAX:
44
+ \`\`\`javascript
45
+ const result = llm.call({
46
+ prompt: "Your prompt here", // Required
47
+ systemPrompt: "System instructions", // Optional
48
+ temperature: 0.7, // Optional (0-2, default: 0.7)
49
+ maxTokens: 1000 // Optional (default: 1000)
50
+ });
51
+ \`\`\`
52
+
53
+ LLM RESPONSE STRUCTURE:
54
+ \`\`\`javascript
55
+ {
56
+ success: boolean, // true if call succeeded
57
+ response: string, // The LLM's response text
58
+ error: string | null, // Error message if failed
59
+ provider: string, // Provider used (e.g., "openai")
60
+ model: string, // Model used (e.g., "gpt-4")
61
+ tokens: { prompt, response, total }
62
+ }
63
+ \`\`\`
64
+
65
+ EXAMPLE WITH LLM:
66
+ \`\`\`javascript
67
+ function processData(inputs, properties, llm) {
68
+ const result = llm.call({
69
+ prompt: \`Summarize: \${inputs.Text}\`,
70
+ temperature: 0.5
71
+ });
72
+ return {
73
+ Summary: result.success ? result.response : result.error
74
+ };
75
+ }
76
+ \`\`\``,
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ name: {
81
+ type: 'string',
82
+ description: 'Unique name for the custom node (e.g., "my-data-processor")',
83
+ },
84
+ title: {
85
+ type: 'string',
86
+ description: 'Display title for the node (e.g., "My Data Processor")',
87
+ },
88
+ description: {
89
+ type: 'string',
90
+ description: 'Description of what the node does',
91
+ },
92
+ category: {
93
+ type: 'string',
94
+ description: 'Category for the node (default: "custom")',
95
+ },
96
+ version: {
97
+ type: 'string',
98
+ description: 'Version string (default: "1.0.0")',
99
+ },
100
+ icon: {
101
+ type: 'string',
102
+ description: 'Icon name for the node',
103
+ },
104
+ inputs: {
105
+ type: 'array',
106
+ items: {
107
+ type: 'object',
108
+ properties: {
109
+ name: { type: 'string', description: 'Input name (case-sensitive, used as inputs.Name in script)' },
110
+ dataType: { type: 'string', enum: ['text', 'number', 'boolean', 'json', 'array', 'any'], description: 'Data type: text, number, boolean, json, array, or any' },
111
+ description: { type: 'string' },
112
+ },
113
+ required: ['name', 'dataType'],
114
+ },
115
+ description: 'Array of input sockets. Names are accessed via inputs.Name in processData()',
116
+ },
117
+ outputs: {
118
+ type: 'array',
119
+ items: {
120
+ type: 'object',
121
+ properties: {
122
+ name: { type: 'string', description: 'Output name (must match return key in processData exactly)' },
123
+ dataType: { type: 'string', enum: ['text', 'number', 'boolean', 'json', 'array', 'any'], description: 'Data type: text, number, boolean, json, array, or any' },
124
+ description: { type: 'string' },
125
+ },
126
+ required: ['name', 'dataType'],
127
+ },
128
+ description: 'Array of output sockets. Return { OutputName: value } from processData()',
129
+ },
130
+ properties: {
131
+ type: 'array',
132
+ items: {
133
+ type: 'object',
134
+ properties: {
135
+ key: { type: 'string' },
136
+ value: {},
137
+ dataType: { type: 'string' },
138
+ description: { type: 'string' },
139
+ },
140
+ required: ['key', 'dataType'],
141
+ },
142
+ description: 'Array of configurable properties',
143
+ },
144
+ script_code: {
145
+ type: 'string',
146
+ description: 'JavaScript code for the node logic (max 50KB)',
147
+ },
148
+ execution_timeout: {
149
+ type: 'number',
150
+ description: 'Execution timeout in ms (1000-30000, default: 5000)',
151
+ },
152
+ memory_limit: {
153
+ type: 'number',
154
+ description: 'Memory limit in MB (32-256, default: 128)',
155
+ },
156
+ visibility: {
157
+ type: 'string',
158
+ enum: ['private', 'public', 'unlisted'],
159
+ description: 'Node visibility (default: "private")',
160
+ },
161
+ tags: {
162
+ type: 'array',
163
+ items: { type: 'string' },
164
+ description: 'Tags for categorization (max 10)',
165
+ },
166
+ llm_enabled: {
167
+ type: 'boolean',
168
+ description: 'Enable LLM capability. When true, users see Quick Select buttons and script can use llm.call()',
169
+ },
170
+ },
171
+ required: ['name', 'title', 'description', 'inputs', 'outputs', 'script_code'],
172
+ },
173
+ };
174
+ export async function handleCreateCustomNode(api, args) {
175
+ try {
176
+ // Validate script before creation
177
+ const warnings = validateCustomNodeScript(args.script_code, args.outputs, args.inputs);
178
+ const warningsText = formatWarnings(warnings);
179
+ const result = await api.createCustomNode({
180
+ name: args.name,
181
+ title: args.title,
182
+ description: args.description,
183
+ category: args.category,
184
+ version: args.version,
185
+ icon: args.icon,
186
+ inputs: args.inputs,
187
+ outputs: args.outputs,
188
+ properties: args.properties,
189
+ script_code: args.script_code,
190
+ execution_timeout: args.execution_timeout,
191
+ memory_limit: args.memory_limit,
192
+ visibility: args.visibility,
193
+ tags: args.tags,
194
+ llm_config: args.llm_enabled ? { enabled: true } : undefined,
195
+ });
196
+ const lines = [
197
+ `## Custom Node Created Successfully`,
198
+ ``,
199
+ `**ID:** ${result.id}`,
200
+ `**Name:** ${result.name}`,
201
+ `**Created:** ${result.created_at}`,
202
+ ``,
203
+ `You can now use this custom node in your workflows.`,
204
+ ];
205
+ // Append warnings if any
206
+ if (warningsText) {
207
+ lines.push(warningsText);
208
+ }
209
+ return {
210
+ content: [{ type: 'text', text: lines.join('\n') }],
211
+ };
212
+ }
213
+ catch (error) {
214
+ const message = error instanceof Error ? error.message : 'Unknown error';
215
+ return {
216
+ content: [{ type: 'text', text: `Error creating custom node: ${message}` }],
217
+ isError: true,
218
+ };
219
+ }
220
+ }
221
+ //# sourceMappingURL=create-custom-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-custom-node.js","sourceRoot":"","sources":["../../src/tools/create-custom-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * create_input_preset MCP Tool
3
+ *
4
+ * Creates a new input preset (community input) for a workflow.
5
+ */
6
+ import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
7
+ import { FlowDotApiClient } from '../api-client.js';
8
+ export declare const createInputPresetTool: Tool;
9
+ export declare function handleCreateInputPreset(api: FlowDotApiClient, args: {
10
+ workflow_id: string;
11
+ title: string;
12
+ description?: string;
13
+ inputs: Record<string, unknown>;
14
+ }): Promise<CallToolResult>;
15
+ //# sourceMappingURL=create-input-preset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-input-preset.d.ts","sourceRoot":"","sources":["../../src/tools/create-input-preset.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,qBAAqB,EAAE,IAyBnC,CAAC;AAEF,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,GACA,OAAO,CAAC,cAAc,CAAC,CA+CzB"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * create_input_preset MCP Tool
3
+ *
4
+ * Creates a new input preset (community input) for a workflow.
5
+ */
6
+ export const createInputPresetTool = {
7
+ name: 'create_input_preset',
8
+ description: 'Create a new input preset (community input) for a workflow. This allows you to share pre-configured input values with others.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ workflow_id: {
13
+ type: 'string',
14
+ description: 'The workflow ID (hash)',
15
+ },
16
+ title: {
17
+ type: 'string',
18
+ description: 'A descriptive title for the input preset',
19
+ },
20
+ description: {
21
+ type: 'string',
22
+ description: 'Optional description explaining the preset',
23
+ },
24
+ inputs: {
25
+ type: 'object',
26
+ description: 'The input values as a JSON object (keys are input names, values are the input values)',
27
+ },
28
+ },
29
+ required: ['workflow_id', 'title', 'inputs'],
30
+ },
31
+ };
32
+ export async function handleCreateInputPreset(api, args) {
33
+ try {
34
+ // Validate inputs
35
+ if (!args.title || args.title.trim().length === 0) {
36
+ return {
37
+ content: [{ type: 'text', text: 'Error: Title is required.' }],
38
+ isError: true,
39
+ };
40
+ }
41
+ if (!args.inputs || Object.keys(args.inputs).length === 0) {
42
+ return {
43
+ content: [{ type: 'text', text: 'Error: At least one input value is required.' }],
44
+ isError: true,
45
+ };
46
+ }
47
+ const result = await api.createInputPreset(args.workflow_id, {
48
+ title: args.title,
49
+ description: args.description,
50
+ inputs: args.inputs,
51
+ });
52
+ const lines = [
53
+ '## Input Preset Created Successfully',
54
+ '',
55
+ `**Hash:** ${result.hash}`,
56
+ `**Title:** ${result.title}`,
57
+ `**URL:** ${result.public_url}`,
58
+ '',
59
+ 'Anyone can now use this preset to run the workflow with your pre-configured inputs.',
60
+ ];
61
+ if (result.description) {
62
+ lines.push(`**Description:** ${result.description}`);
63
+ }
64
+ return {
65
+ content: [{ type: 'text', text: lines.join('\n') }],
66
+ };
67
+ }
68
+ catch (error) {
69
+ const message = error instanceof Error ? error.message : 'Unknown error';
70
+ return {
71
+ content: [{ type: 'text', text: `Error creating input preset: ${message}` }],
72
+ isError: true,
73
+ };
74
+ }
75
+ }
76
+ //# sourceMappingURL=create-input-preset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-input-preset.js","sourceRoot":"","sources":["../../src/tools/create-input-preset.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,CAAC,MAAM,qBAAqB,GAAS;IACzC,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,+HAA+H;IAC5I,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;aACtC;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0CAA0C;aACxD;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4CAA4C;aAC1D;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uFAAuF;aACrG;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC;KAC7C;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAqB,EACrB,IAKC;IAED,IAAI,CAAC;QACH,kBAAkB;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8CAA8C,EAAE,CAAC;gBACjF,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE;YAC3D,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG;YACZ,sCAAsC;YACtC,EAAE;YACF,aAAa,MAAM,CAAC,IAAI,EAAE;YAC1B,cAAc,MAAM,CAAC,KAAK,EAAE;YAC5B,YAAY,MAAM,CAAC,UAAU,EAAE;YAC/B,EAAE;YACF,qFAAqF;SACtF,CAAC;QAEF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gCAAgC,OAAO,EAAE,EAAE,CAAC;YAC5E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * create_shared_result MCP Tool
3
+ *
4
+ * Creates a shareable link for a workflow execution result.
5
+ */
6
+ import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
7
+ import { FlowDotApiClient } from '../api-client.js';
8
+ export declare const createSharedResultTool: Tool;
9
+ export declare function handleCreateSharedResult(api: FlowDotApiClient, args: {
10
+ workflow_id: string;
11
+ execution_id: string;
12
+ title?: string;
13
+ description?: string;
14
+ preset_hash?: string;
15
+ expires_in_days?: number;
16
+ }): Promise<CallToolResult>;
17
+ //# sourceMappingURL=create-shared-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-shared-result.d.ts","sourceRoot":"","sources":["../../src/tools/create-shared-result.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,sBAAsB,EAAE,IAiCpC,CAAC;AAEF,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IACJ,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GACA,OAAO,CAAC,cAAc,CAAC,CAyCzB"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * create_shared_result MCP Tool
3
+ *
4
+ * Creates a shareable link for a workflow execution result.
5
+ */
6
+ export const createSharedResultTool = {
7
+ name: 'create_shared_result',
8
+ description: 'Create a shareable link for a workflow execution result. This allows you to share specific execution outputs with others.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ workflow_id: {
13
+ type: 'string',
14
+ description: 'The workflow ID (hash)',
15
+ },
16
+ execution_id: {
17
+ type: 'string',
18
+ description: 'The execution ID to share',
19
+ },
20
+ title: {
21
+ type: 'string',
22
+ description: 'Optional title for the shared result',
23
+ },
24
+ description: {
25
+ type: 'string',
26
+ description: 'Optional description for the shared result',
27
+ },
28
+ preset_hash: {
29
+ type: 'string',
30
+ description: 'Optional preset hash if the execution was from a preset',
31
+ },
32
+ expires_in_days: {
33
+ type: 'number',
34
+ description: 'Optional number of days until the shared link expires (1-365)',
35
+ },
36
+ },
37
+ required: ['workflow_id', 'execution_id'],
38
+ },
39
+ };
40
+ export async function handleCreateSharedResult(api, args) {
41
+ try {
42
+ const result = await api.createSharedResult(args.workflow_id, {
43
+ execution_id: args.execution_id,
44
+ title: args.title,
45
+ description: args.description,
46
+ preset_hash: args.preset_hash,
47
+ expires_in_days: args.expires_in_days,
48
+ });
49
+ const lines = [
50
+ '## Shared Result Created Successfully',
51
+ '',
52
+ `**Hash:** ${result.hash}`,
53
+ `**Share URL:** ${result.share_url}`,
54
+ '',
55
+ '✓ Anyone with this link can view the execution results.',
56
+ ];
57
+ if (result.title) {
58
+ lines.push(`**Title:** ${result.title}`);
59
+ }
60
+ if (result.description) {
61
+ lines.push(`**Description:** ${result.description}`);
62
+ }
63
+ if (result.expires_at) {
64
+ lines.push('', `**Expires:** ${result.expires_at}`);
65
+ }
66
+ return {
67
+ content: [{ type: 'text', text: lines.join('\n') }],
68
+ };
69
+ }
70
+ catch (error) {
71
+ const message = error instanceof Error ? error.message : 'Unknown error';
72
+ return {
73
+ content: [{ type: 'text', text: `Error creating shared result: ${message}` }],
74
+ isError: true,
75
+ };
76
+ }
77
+ }
78
+ //# sourceMappingURL=create-shared-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-shared-result.js","sourceRoot":"","sources":["../../src/tools/create-shared-result.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,CAAC,MAAM,sBAAsB,GAAS;IAC1C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,2HAA2H;IACxI,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;aACtC;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2BAA2B;aACzC;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4CAA4C;aAC1D;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yDAAyD;aACvE;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,+DAA+D;aAC7E;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;KAC1C;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAqB,EACrB,IAOC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE;YAC5D,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG;YACZ,uCAAuC;YACvC,EAAE;YACF,aAAa,MAAM,CAAC,IAAI,EAAE;YAC1B,kBAAkB,MAAM,CAAC,SAAS,EAAE;YACpC,EAAE;YACF,yDAAyD;SAC1D,CAAC;QAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,OAAO,EAAE,EAAE,CAAC;YAC7E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * create_workflow MCP Tool
3
+ *
4
+ * Creates a new empty workflow.
5
+ */
6
+ import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
7
+ import { FlowDotApiClient } from '../api-client.js';
8
+ export declare const createWorkflowTool: Tool;
9
+ export declare function handleCreateWorkflow(api: FlowDotApiClient, args: {
10
+ name: string;
11
+ description?: string;
12
+ }): Promise<CallToolResult>;
13
+ //# sourceMappingURL=create-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-workflow.d.ts","sourceRoot":"","sources":["../../src/tools/create-workflow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,kBAAkB,EAAE,IAiBhC,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,cAAc,CAAC,CAyBzB"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * create_workflow MCP Tool
3
+ *
4
+ * Creates a new empty workflow.
5
+ */
6
+ export const createWorkflowTool = {
7
+ name: 'create_workflow',
8
+ description: 'Create a new empty workflow with a name and optional description. The workflow will be private by default.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ name: {
13
+ type: 'string',
14
+ description: 'Name for the new workflow',
15
+ },
16
+ description: {
17
+ type: 'string',
18
+ description: 'Optional description of what the workflow does',
19
+ },
20
+ },
21
+ required: ['name'],
22
+ },
23
+ };
24
+ export async function handleCreateWorkflow(api, args) {
25
+ try {
26
+ const result = await api.createWorkflow(args.name, args.description);
27
+ const lines = [
28
+ '## Workflow Created Successfully',
29
+ '',
30
+ `**ID:** ${result.id}`,
31
+ `**Name:** ${result.name}`,
32
+ `**Description:** ${result.description || 'None'}`,
33
+ `**Created:** ${result.created_at}`,
34
+ '',
35
+ 'The workflow is empty and ready for nodes to be added.',
36
+ ];
37
+ return {
38
+ content: [{ type: 'text', text: lines.join('\n') }],
39
+ };
40
+ }
41
+ catch (error) {
42
+ const message = error instanceof Error ? error.message : 'Unknown error';
43
+ return {
44
+ content: [{ type: 'text', text: `Error creating workflow: ${message}` }],
45
+ isError: true,
46
+ };
47
+ }
48
+ }
49
+ //# sourceMappingURL=create-workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-workflow.js","sourceRoot":"","sources":["../../src/tools/create-workflow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,4GAA4G;IACzH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2BAA2B;aACzC;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;aAC9D;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAqB,EACrB,IAA4C;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAErE,MAAM,KAAK,GAAG;YACZ,kCAAkC;YAClC,EAAE;YACF,WAAW,MAAM,CAAC,EAAE,EAAE;YACtB,aAAa,MAAM,CAAC,IAAI,EAAE;YAC1B,oBAAoB,MAAM,CAAC,WAAW,IAAI,MAAM,EAAE;YAClD,gBAAgB,MAAM,CAAC,UAAU,EAAE;YACnC,EAAE;YACF,wDAAwD;SACzD,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,OAAO,EAAE,EAAE,CAAC;YACxE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * delete_app Tool
3
+ *
4
+ * Delete an app permanently.
5
+ * Required scope: apps:manage
6
+ */
7
+ import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
8
+ import { FlowDotApiClient } from '../api-client.js';
9
+ export declare const deleteAppTool: Tool;
10
+ export declare function handleDeleteApp(client: FlowDotApiClient, args: Record<string, unknown>): Promise<CallToolResult>;
11
+ //# sourceMappingURL=delete-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-app.d.ts","sourceRoot":"","sources":["../../src/tools/delete-app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,aAAa,EAAE,IAgB3B,CAAC;AAEF,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,cAAc,CAAC,CAgBzB"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * delete_app Tool
3
+ *
4
+ * Delete an app permanently.
5
+ * Required scope: apps:manage
6
+ */
7
+ export const deleteAppTool = {
8
+ name: 'delete_app',
9
+ description: `Permanently delete an app. This action cannot be undone.
10
+
11
+ The app and all its associated data (comments, votes, etc.) will be removed.
12
+ Existing clones of the app will continue to work for their owners.`,
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ app_id: {
17
+ type: 'string',
18
+ description: 'The app ID (hash) to delete',
19
+ },
20
+ },
21
+ required: ['app_id'],
22
+ },
23
+ };
24
+ export async function handleDeleteApp(client, args) {
25
+ try {
26
+ const appId = String(args.app_id);
27
+ await client.deleteApp(appId);
28
+ return {
29
+ content: [{ type: 'text', text: `App ${appId} deleted successfully.` }],
30
+ };
31
+ }
32
+ catch (error) {
33
+ const message = error instanceof Error ? error.message : 'Unknown error';
34
+ return {
35
+ content: [{ type: 'text', text: `Error deleting app: ${message}` }],
36
+ isError: true,
37
+ };
38
+ }
39
+ }
40
+ //# sourceMappingURL=delete-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-app.js","sourceRoot":"","sources":["../../src/tools/delete-app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE;;;mEAGoD;IACjE,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6BAA6B;aAC3C;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAwB,EACxB,IAA6B;IAE7B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE9B,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,wBAAwB,EAAE,CAAC;SACxE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,uBAAuB,OAAO,EAAE,EAAE,CAAC;YACnE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * delete_connection MCP Tool
3
+ *
4
+ * Deletes a connection from a workflow.
5
+ */
6
+ import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
7
+ import { FlowDotApiClient } from '../api-client.js';
8
+ export declare const deleteConnectionTool: Tool;
9
+ export declare function handleDeleteConnection(api: FlowDotApiClient, args: {
10
+ workflow_id: string;
11
+ connection_id: string;
12
+ }): Promise<CallToolResult>;
13
+ //# sourceMappingURL=delete-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-connection.d.ts","sourceRoot":"","sources":["../../src/tools/delete-connection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,oBAAoB,EAAE,IAiBlC,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACnD,OAAO,CAAC,cAAc,CAAC,CAiBzB"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * delete_connection MCP Tool
3
+ *
4
+ * Deletes a connection from a workflow.
5
+ */
6
+ export const deleteConnectionTool = {
7
+ name: 'delete_connection',
8
+ description: 'Remove a connection between two nodes in a workflow.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ workflow_id: {
13
+ type: 'string',
14
+ description: 'The workflow ID (hash)',
15
+ },
16
+ connection_id: {
17
+ type: 'string',
18
+ description: 'The connection ID to delete',
19
+ },
20
+ },
21
+ required: ['workflow_id', 'connection_id'],
22
+ },
23
+ };
24
+ export async function handleDeleteConnection(api, args) {
25
+ try {
26
+ // API may return undefined (no data wrapper) or { message: "..." }
27
+ const result = await api.deleteConnection(args.workflow_id, args.connection_id);
28
+ const message = result?.message || `Connection ${args.connection_id} has been deleted.`;
29
+ return {
30
+ content: [{ type: 'text', text: message }],
31
+ };
32
+ }
33
+ catch (error) {
34
+ const message = error instanceof Error ? error.message : 'Unknown error';
35
+ return {
36
+ content: [{ type: 'text', text: `Error deleting connection: ${message}` }],
37
+ isError: true,
38
+ };
39
+ }
40
+ }
41
+ //# sourceMappingURL=delete-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-connection.js","sourceRoot":"","sources":["../../src/tools/delete-connection.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,CAAC,MAAM,oBAAoB,GAAS;IACxC,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,sDAAsD;IACnE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;aACtC;YACD,aAAa,EAAE;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6BAA6B;aAC3C;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC;KAC3C;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,GAAqB,EACrB,IAAoD;IAEpD,IAAI,CAAC;QACH,mEAAmE;QACnE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEhF,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,cAAc,IAAI,CAAC,aAAa,oBAAoB,CAAC;QAExF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;SAC3C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,OAAO,EAAE,EAAE,CAAC;YAC1E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * delete_custom_node MCP Tool
3
+ *
4
+ * Delete a custom node.
5
+ * Scope: custom_nodes:manage
6
+ */
7
+ import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
8
+ import { FlowDotApiClient } from '../api-client.js';
9
+ export declare const deleteCustomNodeTool: Tool;
10
+ export declare function handleDeleteCustomNode(api: FlowDotApiClient, args: {
11
+ node_id: string;
12
+ }): Promise<CallToolResult>;
13
+ //# sourceMappingURL=delete-custom-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-custom-node.d.ts","sourceRoot":"","sources":["../../src/tools/delete-custom-node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,oBAAoB,EAAE,IAalC,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,cAAc,CAAC,CAmBzB"}