@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,66 @@
1
+ /**
2
+ * add_workflow_comment MCP Tool
3
+ *
4
+ * Adds a comment to a workflow.
5
+ */
6
+ export const addWorkflowCommentTool = {
7
+ name: 'add_workflow_comment',
8
+ description: 'Add a comment to a workflow. You can only comment on public workflows or your own workflows.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ workflow_id: {
13
+ type: 'string',
14
+ description: 'The workflow ID (hash)',
15
+ },
16
+ content: {
17
+ type: 'string',
18
+ description: 'The comment content (max 2000 characters)',
19
+ },
20
+ parent_id: {
21
+ type: 'number',
22
+ description: 'Optional parent comment ID for replies',
23
+ },
24
+ },
25
+ required: ['workflow_id', 'content'],
26
+ },
27
+ };
28
+ export async function handleAddWorkflowComment(api, args) {
29
+ try {
30
+ // Validate content length
31
+ if (!args.content || args.content.trim().length === 0) {
32
+ return {
33
+ content: [{ type: 'text', text: 'Error: Comment content cannot be empty.' }],
34
+ isError: true,
35
+ };
36
+ }
37
+ if (args.content.length > 2000) {
38
+ return {
39
+ content: [{ type: 'text', text: 'Error: Comment content exceeds maximum length of 2000 characters.' }],
40
+ isError: true,
41
+ };
42
+ }
43
+ const result = await api.addWorkflowComment(args.workflow_id, args.content, args.parent_id);
44
+ const isReply = args.parent_id ? ' (reply)' : '';
45
+ const lines = [
46
+ `## Comment Added Successfully${isReply}`,
47
+ '',
48
+ `**Comment ID:** ${result.id}`,
49
+ `**By:** ${result.user_name}`,
50
+ `**Posted:** ${result.created_at}`,
51
+ '',
52
+ '> ' + result.content.split('\n').join('\n> '),
53
+ ];
54
+ return {
55
+ content: [{ type: 'text', text: lines.join('\n') }],
56
+ };
57
+ }
58
+ catch (error) {
59
+ const message = error instanceof Error ? error.message : 'Unknown error';
60
+ return {
61
+ content: [{ type: 'text', text: `Error adding comment: ${message}` }],
62
+ isError: true,
63
+ };
64
+ }
65
+ }
66
+ //# sourceMappingURL=add-workflow-comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-workflow-comment.js","sourceRoot":"","sources":["../../src/tools/add-workflow-comment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,CAAC,MAAM,sBAAsB,GAAS;IAC1C,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,8FAA8F;IAC3G,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wBAAwB;aACtC;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2CAA2C;aACzD;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wCAAwC;aACtD;SACF;QACD,QAAQ,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;KACrC;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,GAAqB,EACrB,IAAkE;IAElE,IAAI,CAAC;QACH,0BAA0B;QAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,yCAAyC,EAAE,CAAC;gBAC5E,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mEAAmE,EAAE,CAAC;gBACtG,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,kBAAkB,CACzC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,SAAS,CACf,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG;YACZ,gCAAgC,OAAO,EAAE;YACzC,EAAE;YACF,mBAAmB,MAAM,CAAC,EAAE,EAAE;YAC9B,WAAW,MAAM,CAAC,SAAS,EAAE;YAC7B,eAAe,MAAM,CAAC,UAAU,EAAE;YAClC,EAAE;YACF,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;SAC/C,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,yBAAyB,OAAO,EAAE,EAAE,CAAC;YACrE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * agent_chat MCP Tool
3
+ *
4
+ * Chat with the FlowDot agent to discover and run workflows.
5
+ */
6
+ import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
7
+ import { FlowDotApiClient } from '../api-client.js';
8
+ export declare const agentChatTool: Tool;
9
+ export declare function handleAgentChat(api: FlowDotApiClient, args: {
10
+ message: string;
11
+ conversation_id?: string;
12
+ mode?: string;
13
+ }): Promise<CallToolResult>;
14
+ //# sourceMappingURL=agent-chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-chat.d.ts","sourceRoot":"","sources":["../../src/tools/agent-chat.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,aAAa,EAAE,IAwB3B,CAAC;AAEF,wBAAsB,eAAe,CACnC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACjE,OAAO,CAAC,cAAc,CAAC,CAqDzB"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * agent_chat MCP Tool
3
+ *
4
+ * Chat with the FlowDot agent to discover and run workflows.
5
+ */
6
+ export const agentChatTool = {
7
+ name: 'agent_chat',
8
+ description: 'Chat with the FlowDot AI agent. The agent can help discover workflows, suggest which workflow to run, and explain workflow capabilities.',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ message: {
13
+ type: 'string',
14
+ description: 'Message to send to the FlowDot agent',
15
+ },
16
+ conversation_id: {
17
+ type: 'string',
18
+ description: 'Optional conversation ID to continue a previous conversation',
19
+ },
20
+ mode: {
21
+ type: 'string',
22
+ enum: ['flowdot', 'simple', 'capable', 'complex'],
23
+ description: 'LLM mode to use: flowdot (default, cost-effective), simple (fast), capable (balanced), complex (powerful)',
24
+ default: 'flowdot',
25
+ },
26
+ },
27
+ required: ['message'],
28
+ },
29
+ };
30
+ export async function handleAgentChat(api, args) {
31
+ try {
32
+ // API returns { response, conversation_id, suggested_workflows }
33
+ const mode = args.mode || 'flowdot';
34
+ const result = await api.agentChat(args.message, args.conversation_id, mode);
35
+ // Handle case where result is undefined or missing response
36
+ const response = result?.response;
37
+ if (!response) {
38
+ return {
39
+ content: [{ type: 'text', text: 'Agent returned an empty response.' }],
40
+ };
41
+ }
42
+ let text = response;
43
+ // Add suggested workflows if any
44
+ const suggestedWorkflows = Array.isArray(result?.suggested_workflows) ? result.suggested_workflows : [];
45
+ if (suggestedWorkflows.length > 0) {
46
+ text += '\n\nSuggested workflows:\n';
47
+ text += suggestedWorkflows
48
+ .map((w) => {
49
+ const desc = w.description ? ` - ${w.description}` : '';
50
+ return `- **${w.name}** (${w.id})${desc}`;
51
+ })
52
+ .join('\n');
53
+ }
54
+ // Add conversation ID if available (for continuing the conversation)
55
+ if (result?.conversation_id) {
56
+ text += `\n\n_Conversation ID: ${result.conversation_id}_`;
57
+ }
58
+ return {
59
+ content: [
60
+ {
61
+ type: 'text',
62
+ text,
63
+ },
64
+ ],
65
+ };
66
+ }
67
+ catch (error) {
68
+ const message = error instanceof Error ? error.message : 'Unknown error';
69
+ return {
70
+ content: [
71
+ {
72
+ type: 'text',
73
+ text: `Error chatting with agent: ${message}`,
74
+ },
75
+ ],
76
+ isError: true,
77
+ };
78
+ }
79
+ }
80
+ //# sourceMappingURL=agent-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-chat.js","sourceRoot":"","sources":["../../src/tools/agent-chat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,CAAC,MAAM,aAAa,GAAS;IACjC,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,0IAA0I;IAC5I,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sCAAsC;aACpD;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8DAA8D;aAC5E;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;gBACjD,WAAW,EAAE,2GAA2G;gBACxH,OAAO,EAAE,SAAS;aACnB;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAqB,EACrB,IAAkE;IAElE,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS,CAAC;QACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAE7E,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC;QAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mCAAmC,EAAE,CAAC;aACvE,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,GAAG,QAAQ,CAAC;QAEpB,iCAAiC;QACjC,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;QACxG,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,IAAI,IAAI,4BAA4B,CAAC;YACrC,IAAI,IAAI,kBAAkB;iBACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,OAAO,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;YAC5C,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAED,qEAAqE;QACrE,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC;YAC5B,IAAI,IAAI,yBAAyB,MAAM,CAAC,eAAe,GAAG,CAAC;QAC7D,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI;iBACL;aACF;SACF,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;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,8BAA8B,OAAO,EAAE;iBAC9C;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * cancel_execution MCP Tool
3
+ *
4
+ * Cancels a running workflow execution.
5
+ */
6
+ import { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
7
+ import { FlowDotApiClient } from '../api-client.js';
8
+ export declare const cancelExecutionTool: Tool;
9
+ export declare function handleCancelExecution(api: FlowDotApiClient, args: {
10
+ execution_id: string;
11
+ }): Promise<CallToolResult>;
12
+ //# sourceMappingURL=cancel-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel-execution.d.ts","sourceRoot":"","sources":["../../src/tools/cancel-execution.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,mBAAmB,EAAE,IAajC,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,cAAc,CAAC,CAiBzB"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * cancel_execution MCP Tool
3
+ *
4
+ * Cancels a running workflow execution.
5
+ */
6
+ export const cancelExecutionTool = {
7
+ name: 'cancel_execution',
8
+ description: 'Cancel a running workflow execution. Only works on executions with status "running" or "pending".',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ execution_id: {
13
+ type: 'string',
14
+ description: 'The execution ID to cancel',
15
+ },
16
+ },
17
+ required: ['execution_id'],
18
+ },
19
+ };
20
+ export async function handleCancelExecution(api, args) {
21
+ try {
22
+ // API may return undefined (no data wrapper) or { message: "..." }
23
+ const result = await api.cancelExecution(args.execution_id);
24
+ const message = result?.message || `Execution ${args.execution_id} has been cancelled.`;
25
+ return {
26
+ content: [{ type: 'text', text: message }],
27
+ };
28
+ }
29
+ catch (error) {
30
+ const message = error instanceof Error ? error.message : 'Unknown error';
31
+ return {
32
+ content: [{ type: 'text', text: `Error cancelling execution: ${message}` }],
33
+ isError: true,
34
+ };
35
+ }
36
+ }
37
+ //# sourceMappingURL=cancel-execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancel-execution.js","sourceRoot":"","sources":["../../src/tools/cancel-execution.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,mGAAmG;IAChH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4BAA4B;aAC1C;SACF;QACD,QAAQ,EAAE,CAAC,cAAc,CAAC;KAC3B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAAqB,EACrB,IAA8B;IAE9B,IAAI,CAAC;QACH,mEAAmE;QACnE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,aAAa,IAAI,CAAC,YAAY,sBAAsB,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,+BAA+B,OAAO,EAAE,EAAE,CAAC;YAC3E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * clone_app Tool
3
+ *
4
+ * Clone a public app to your library.
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 cloneAppTool: Tool;
10
+ export declare function handleCloneApp(client: FlowDotApiClient, args: Record<string, unknown>): Promise<CallToolResult>;
11
+ //# sourceMappingURL=clone-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone-app.d.ts","sourceRoot":"","sources":["../../src/tools/clone-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,YAAY,EAAE,IAuB1B,CAAC;AAEF,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,cAAc,CAAC,CAiCzB"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * clone_app Tool
3
+ *
4
+ * Clone a public app to your library.
5
+ * Required scope: apps:manage
6
+ */
7
+ export const cloneAppTool = {
8
+ name: 'clone_app',
9
+ description: `Clone a public app to your library. Creates a private copy that you can customize.
10
+
11
+ The cloned app will:
12
+ - Be owned by you
13
+ - Start as private (not published)
14
+ - Have all the original code and configuration
15
+ - Not include linked workflows (you'll need to link your own)`,
16
+ inputSchema: {
17
+ type: 'object',
18
+ properties: {
19
+ app_id: {
20
+ type: 'string',
21
+ description: 'The app ID (hash) to clone',
22
+ },
23
+ name: {
24
+ type: 'string',
25
+ description: 'Name for the cloned app (defaults to "Original Name (Copy)")',
26
+ },
27
+ },
28
+ required: ['app_id'],
29
+ },
30
+ };
31
+ export async function handleCloneApp(client, args) {
32
+ try {
33
+ const appId = String(args.app_id);
34
+ const name = args.name ? String(args.name) : undefined;
35
+ const result = await client.cloneApp(appId, name);
36
+ const text = `App cloned successfully!
37
+
38
+ **New App ID:** ${result.id}
39
+ **Name:** ${result.name}
40
+ **Original App:** ${result.original_app_id}
41
+ **Created:** ${result.created_at}
42
+
43
+ ## Next Steps
44
+
45
+ 1. **Link your workflows** - The cloned app doesn't include workflow links.
46
+ Use link_app_workflow to connect your own workflows.
47
+
48
+ 2. **Customize the code** - Use update_app to modify the React code.
49
+
50
+ 3. **Test and publish** - When ready, use publish_app to make it public.`;
51
+ return {
52
+ content: [{ type: 'text', text }],
53
+ };
54
+ }
55
+ catch (error) {
56
+ const message = error instanceof Error ? error.message : 'Unknown error';
57
+ return {
58
+ content: [{ type: 'text', text: `Error cloning app: ${message}` }],
59
+ isError: true,
60
+ };
61
+ }
62
+ }
63
+ //# sourceMappingURL=clone-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone-app.js","sourceRoot":"","sources":["../../src/tools/clone-app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,CAAC,MAAM,YAAY,GAAS;IAChC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE;;;;;;8DAM+C;IAC5D,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4BAA4B;aAC1C;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8DAA8D;aAC5E;SACF;QACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;KACrB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAwB,EACxB,IAA6B;IAE7B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAElD,MAAM,IAAI,GAAG;;kBAEC,MAAM,CAAC,EAAE;YACf,MAAM,CAAC,IAAI;oBACH,MAAM,CAAC,eAAe;eAC3B,MAAM,CAAC,UAAU;;;;;;;;;yEASyC,CAAC;QAEtE,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAClC,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,sBAAsB,OAAO,EAAE,EAAE,CAAC;YAClE,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * copy_custom_node MCP Tool
3
+ *
4
+ * Copy a public custom node to your library.
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 copyCustomNodeTool: Tool;
10
+ export declare function handleCopyCustomNode(api: FlowDotApiClient, args: {
11
+ node_id: string;
12
+ name?: string;
13
+ }): Promise<CallToolResult>;
14
+ //# sourceMappingURL=copy-custom-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-custom-node.d.ts","sourceRoot":"","sources":["../../src/tools/copy-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,kBAAkB,EAAE,IAiBhC,CAAC;AAEF,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACvC,OAAO,CAAC,cAAc,CAAC,CAyBzB"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * copy_custom_node MCP Tool
3
+ *
4
+ * Copy a public custom node to your library.
5
+ * Scope: custom_nodes:manage
6
+ */
7
+ export const copyCustomNodeTool = {
8
+ name: 'copy_custom_node',
9
+ description: 'Copy a public custom node to your library. The copy will be private by default.',
10
+ inputSchema: {
11
+ type: 'object',
12
+ properties: {
13
+ node_id: {
14
+ type: 'string',
15
+ description: 'The custom node ID (hash) to copy',
16
+ },
17
+ name: {
18
+ type: 'string',
19
+ description: 'Optional new name for the copy (defaults to original name with "(copy)" suffix)',
20
+ },
21
+ },
22
+ required: ['node_id'],
23
+ },
24
+ };
25
+ export async function handleCopyCustomNode(api, args) {
26
+ try {
27
+ const result = await api.copyCustomNode(args.node_id, args.name);
28
+ const lines = [
29
+ `## Custom Node Copied Successfully`,
30
+ ``,
31
+ `**New Node ID:** ${result.id}`,
32
+ `**Name:** ${result.name}`,
33
+ `**Created:** ${result.created_at}`,
34
+ ``,
35
+ `The node has been copied to your library as a private custom node.`,
36
+ `You can now edit and customize it as needed.`,
37
+ ];
38
+ return {
39
+ content: [{ type: 'text', text: lines.join('\n') }],
40
+ };
41
+ }
42
+ catch (error) {
43
+ const message = error instanceof Error ? error.message : 'Unknown error';
44
+ return {
45
+ content: [{ type: 'text', text: `Error copying custom node: ${message}` }],
46
+ isError: true,
47
+ };
48
+ }
49
+ }
50
+ //# sourceMappingURL=copy-custom-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-custom-node.js","sourceRoot":"","sources":["../../src/tools/copy-custom-node.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,iFAAiF;IAC9F,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mCAAmC;aACjD;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iFAAiF;aAC/F;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAqB,EACrB,IAAwC;IAExC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjE,MAAM,KAAK,GAAG;YACZ,oCAAoC;YACpC,EAAE;YACF,oBAAoB,MAAM,CAAC,EAAE,EAAE;YAC/B,aAAa,MAAM,CAAC,IAAI,EAAE;YAC1B,gBAAgB,MAAM,CAAC,UAAU,EAAE;YACnC,EAAE;YACF,oEAAoE;YACpE,8CAA8C;SAC/C,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,8BAA8B,OAAO,EAAE,EAAE,CAAC;YAC1E,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * create_app Tool
3
+ *
4
+ * Create a new FlowDot app.
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 createAppTool: Tool;
10
+ export declare function handleCreateApp(client: FlowDotApiClient, args: Record<string, unknown>): Promise<CallToolResult>;
11
+ //# sourceMappingURL=create-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-app.d.ts","sourceRoot":"","sources":["../../src/tools/create-app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,eAAO,MAAM,aAAa,EAAE,IAwF3B,CAAC;AAEF,wBAAsB,eAAe,CACnC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,cAAc,CAAC,CAiFzB"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * create_app Tool
3
+ *
4
+ * Create a new FlowDot app.
5
+ * Required scope: apps:manage
6
+ */
7
+ export const createAppTool = {
8
+ name: 'create_app',
9
+ description: `Create a new FlowDot app. Apps are React frontend applications that can optionally use workflows as backends.
10
+
11
+ ## EXECUTION ENVIRONMENT
12
+ Apps run in a sandboxed browser iframe with:
13
+ - React 18 (global - use React.useState, React.useEffect, etc.)
14
+ - Tailwind CSS (full utility classes available)
15
+ - FlowDot color tokens: primary-50 to primary-900 (sage green), secondary-50 to secondary-900 (warm orange)
16
+
17
+ ## CRITICAL CODE RULES
18
+ 1. NO IMPORTS - React is global, just use React.useState(), React.useEffect(), etc.
19
+ 2. NO EXPORTS - Just define your function, the system handles the rest
20
+ 3. Function must be named: function MyAppName() { ... }
21
+ 4. Use Tailwind CSS for ALL styling (no inline style objects, no CSS-in-JS)
22
+
23
+ ## DISPLAY MODES
24
+ Apps can be configured to display in three modes via config.displayMode:
25
+ - "windowed": Standard view with FlowDot header (default)
26
+ - "fullscreen": Full viewport, minimal floating control bar
27
+ - "embedded": No FlowDot UI, for iframe embedding
28
+
29
+ ## WORKFLOW INTEGRATION
30
+ Apps can invoke linked workflows using: await invokeWorkflow('workflow-hash', { inputName: value })
31
+
32
+ The function returns workflow results in this format:
33
+ {
34
+ "data": {
35
+ "[nodeId]": {
36
+ "nodeId": "uuid",
37
+ "nodeTitle": "My Output Node",
38
+ "nodeType": "text_output",
39
+ "outputs": {
40
+ "Consolidated Text": { "value": "the actual data", "metadata": {...} }
41
+ }
42
+ }
43
+ }
44
+ }
45
+
46
+ IMPORTANT: Use this helper function to extract outputs by node title:
47
+ const getNodeOutput = (result, nodeTitle, socketName = 'Consolidated Text') => {
48
+ const node = Object.values(result?.data || {}).find(n => n.nodeTitle === nodeTitle);
49
+ return node?.outputs?.[socketName]?.value;
50
+ };
51
+
52
+ Example: const weatherData = getNodeOutput(result, 'Weather Results', 'Consolidated Text');
53
+
54
+ After creating an app, use link_app_workflow to connect workflows that the app can invoke.
55
+ Use get_app_template to see example code and patterns.`,
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ name: {
60
+ type: 'string',
61
+ description: 'Name of the app',
62
+ },
63
+ description: {
64
+ type: 'string',
65
+ description: 'Description of what the app does',
66
+ },
67
+ code: {
68
+ type: 'string',
69
+ description: 'React code for the app (JSX/TSX)',
70
+ },
71
+ mobile_code: {
72
+ type: 'string',
73
+ description: 'Mobile-specific React code (optional)',
74
+ },
75
+ config: {
76
+ type: 'object',
77
+ description: 'Configuration object for the app (optional)',
78
+ },
79
+ category: {
80
+ type: 'string',
81
+ description: 'Category for the app (e.g., "productivity", "ai-tools", "utilities")',
82
+ },
83
+ tags: {
84
+ type: 'array',
85
+ items: { type: 'string' },
86
+ description: 'Tags for discoverability (max 10)',
87
+ },
88
+ mobile_compatible: {
89
+ type: 'boolean',
90
+ description: 'Whether the app is mobile-compatible (default: false)',
91
+ },
92
+ },
93
+ required: ['name'],
94
+ },
95
+ };
96
+ export async function handleCreateApp(client, args) {
97
+ try {
98
+ const input = {
99
+ name: String(args.name),
100
+ };
101
+ if (args.description)
102
+ input.description = String(args.description);
103
+ if (args.code)
104
+ input.code = String(args.code);
105
+ if (args.mobile_code)
106
+ input.mobile_code = String(args.mobile_code);
107
+ if (args.config)
108
+ input.config = args.config;
109
+ if (args.category)
110
+ input.category = String(args.category);
111
+ if (args.tags)
112
+ input.tags = args.tags;
113
+ if (typeof args.mobile_compatible === 'boolean')
114
+ input.mobile_compatible = args.mobile_compatible;
115
+ const result = await client.createApp(input);
116
+ const text = `App created successfully!
117
+
118
+ **Name:** ${result.name}
119
+ **ID:** ${result.id}
120
+ **Created:** ${result.created_at}
121
+
122
+ ## Next Steps
123
+
124
+ 1. **Add code** (if not provided):
125
+ Use update_app to add or modify the React code.
126
+
127
+ 2. **Link workflows**:
128
+ Use link_app_workflow to connect workflows that the app can invoke:
129
+ \`link_app_workflow(app_id: "${result.id}", workflow_hash: "YOUR_WORKFLOW_HASH")\`
130
+
131
+ 3. **Test locally**:
132
+ Preview your app in the FlowDot UI at https://flowdot.ai/apps/${result.id}
133
+
134
+ 4. **Publish**:
135
+ When ready, use publish_app to make it public:
136
+ \`publish_app(app_id: "${result.id}")\`
137
+
138
+ ## Example Code Structure
139
+
140
+ \`\`\`jsx
141
+ function MyApp() {
142
+ const [result, setResult] = React.useState(null);
143
+ const [loading, setLoading] = React.useState(false);
144
+ const [error, setError] = React.useState(null);
145
+
146
+ const handleSubmit = async (input) => {
147
+ setLoading(true);
148
+ setError(null);
149
+ try {
150
+ const output = await invokeWorkflow('YOUR_WORKFLOW_HASH', { input });
151
+ setResult(output);
152
+ } catch (err) {
153
+ setError(err.message || 'Something went wrong');
154
+ } finally {
155
+ setLoading(false);
156
+ }
157
+ };
158
+
159
+ return (
160
+ <div className="min-h-screen bg-gray-50 p-6">
161
+ <h1 className="text-2xl font-bold mb-4">${result.name}</h1>
162
+ {error && <div className="text-red-600 mb-4">{error}</div>}
163
+ {/* Your UI here using Tailwind classes */}
164
+ </div>
165
+ );
166
+ }
167
+ \`\`\`
168
+
169
+ Use get_app_template for more complete examples.`;
170
+ return {
171
+ content: [{ type: 'text', text }],
172
+ };
173
+ }
174
+ catch (error) {
175
+ const message = error instanceof Error ? error.message : 'Unknown error';
176
+ return {
177
+ content: [{ type: 'text', text: `Error creating app: ${message}` }],
178
+ isError: true,
179
+ };
180
+ }
181
+ }
182
+ //# sourceMappingURL=create-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-app.js","sourceRoot":"","sources":["../../src/tools/create-app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
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 { Tool, CallToolResult } from '@modelcontextprotocol/sdk/types.js';
8
+ import { FlowDotApiClient } from '../api-client.js';
9
+ import { CustomNodeSocket, CustomNodeProperty } from '../types.js';
10
+ export declare const createCustomNodeTool: Tool;
11
+ export declare function handleCreateCustomNode(api: FlowDotApiClient, args: {
12
+ name: string;
13
+ title: string;
14
+ description: string;
15
+ category?: string;
16
+ version?: string;
17
+ icon?: string;
18
+ inputs: CustomNodeSocket[];
19
+ outputs: CustomNodeSocket[];
20
+ properties?: CustomNodeProperty[];
21
+ script_code: string;
22
+ execution_timeout?: number;
23
+ memory_limit?: number;
24
+ visibility?: 'private' | 'public' | 'unlisted';
25
+ tags?: string[];
26
+ llm_enabled?: boolean;
27
+ }): Promise<CallToolResult>;
28
+ //# sourceMappingURL=create-custom-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-custom-node.d.ts","sourceRoot":"","sources":["../../src/tools/create-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;AACpD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGnE,eAAO,MAAM,oBAAoB,EAAE,IAqKlC,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,gBAAgB,EACrB,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GACA,OAAO,CAAC,cAAc,CAAC,CAiDzB"}