@nodetool-ai/agents 0.7.0-rc.11

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 (281) hide show
  1. package/dist/agent-executor.d.ts +62 -0
  2. package/dist/agent-executor.d.ts.map +1 -0
  3. package/dist/agent-executor.js +324 -0
  4. package/dist/agent-executor.js.map +1 -0
  5. package/dist/agent-step-executor.d.ts +28 -0
  6. package/dist/agent-step-executor.d.ts.map +1 -0
  7. package/dist/agent-step-executor.js +99 -0
  8. package/dist/agent-step-executor.js.map +1 -0
  9. package/dist/agent-workflow-runner.d.ts +31 -0
  10. package/dist/agent-workflow-runner.d.ts.map +1 -0
  11. package/dist/agent-workflow-runner.js +124 -0
  12. package/dist/agent-workflow-runner.js.map +1 -0
  13. package/dist/agent.d.ts +115 -0
  14. package/dist/agent.d.ts.map +1 -0
  15. package/dist/agent.js +587 -0
  16. package/dist/agent.js.map +1 -0
  17. package/dist/base-agent.d.ts +42 -0
  18. package/dist/base-agent.d.ts.map +1 -0
  19. package/dist/base-agent.js +29 -0
  20. package/dist/base-agent.js.map +1 -0
  21. package/dist/constants.d.ts +8 -0
  22. package/dist/constants.d.ts.map +1 -0
  23. package/dist/constants.js +8 -0
  24. package/dist/constants.js.map +1 -0
  25. package/dist/graph-builder.d.ts +49 -0
  26. package/dist/graph-builder.d.ts.map +1 -0
  27. package/dist/graph-builder.js +206 -0
  28. package/dist/graph-builder.js.map +1 -0
  29. package/dist/graph-planner.d.ts +56 -0
  30. package/dist/graph-planner.d.ts.map +1 -0
  31. package/dist/graph-planner.js +311 -0
  32. package/dist/graph-planner.js.map +1 -0
  33. package/dist/index.d.ts +79 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +81 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/js-sandbox.d.ts +84 -0
  38. package/dist/js-sandbox.d.ts.map +1 -0
  39. package/dist/js-sandbox.js +654 -0
  40. package/dist/js-sandbox.js.map +1 -0
  41. package/dist/multi-mode-agent.d.ts +86 -0
  42. package/dist/multi-mode-agent.d.ts.map +1 -0
  43. package/dist/multi-mode-agent.js +476 -0
  44. package/dist/multi-mode-agent.js.map +1 -0
  45. package/dist/output-format.d.ts +10 -0
  46. package/dist/output-format.d.ts.map +1 -0
  47. package/dist/output-format.js +17 -0
  48. package/dist/output-format.js.map +1 -0
  49. package/dist/parallel-task-executor.d.ts +87 -0
  50. package/dist/parallel-task-executor.d.ts.map +1 -0
  51. package/dist/parallel-task-executor.js +332 -0
  52. package/dist/parallel-task-executor.js.map +1 -0
  53. package/dist/prompts/graph-planner-prompt.d.ts +48 -0
  54. package/dist/prompts/graph-planner-prompt.d.ts.map +1 -0
  55. package/dist/prompts/graph-planner-prompt.js +180 -0
  56. package/dist/prompts/graph-planner-prompt.js.map +1 -0
  57. package/dist/reject-agentic-provider.d.ts +21 -0
  58. package/dist/reject-agentic-provider.d.ts.map +1 -0
  59. package/dist/reject-agentic-provider.js +32 -0
  60. package/dist/reject-agentic-provider.js.map +1 -0
  61. package/dist/simple-agent.d.ts +29 -0
  62. package/dist/simple-agent.d.ts.map +1 -0
  63. package/dist/simple-agent.js +54 -0
  64. package/dist/simple-agent.js.map +1 -0
  65. package/dist/step-executor.d.ts +162 -0
  66. package/dist/step-executor.d.ts.map +1 -0
  67. package/dist/step-executor.js +1114 -0
  68. package/dist/step-executor.js.map +1 -0
  69. package/dist/sub-agent-planner.d.ts +33 -0
  70. package/dist/sub-agent-planner.d.ts.map +1 -0
  71. package/dist/sub-agent-planner.js +203 -0
  72. package/dist/sub-agent-planner.js.map +1 -0
  73. package/dist/task-executor.d.ts +89 -0
  74. package/dist/task-executor.d.ts.map +1 -0
  75. package/dist/task-executor.js +359 -0
  76. package/dist/task-executor.js.map +1 -0
  77. package/dist/task-planner.d.ts +44 -0
  78. package/dist/task-planner.d.ts.map +1 -0
  79. package/dist/task-planner.js +532 -0
  80. package/dist/task-planner.js.map +1 -0
  81. package/dist/team/db-task-board.d.ts +54 -0
  82. package/dist/team/db-task-board.d.ts.map +1 -0
  83. package/dist/team/db-task-board.js +361 -0
  84. package/dist/team/db-task-board.js.map +1 -0
  85. package/dist/team/edge-message-bus.d.ts +51 -0
  86. package/dist/team/edge-message-bus.d.ts.map +1 -0
  87. package/dist/team/edge-message-bus.js +169 -0
  88. package/dist/team/edge-message-bus.js.map +1 -0
  89. package/dist/team/edge-task-board.d.ts +77 -0
  90. package/dist/team/edge-task-board.d.ts.map +1 -0
  91. package/dist/team/edge-task-board.js +140 -0
  92. package/dist/team/edge-task-board.js.map +1 -0
  93. package/dist/team/index.d.ts +16 -0
  94. package/dist/team/index.d.ts.map +1 -0
  95. package/dist/team/index.js +17 -0
  96. package/dist/team/index.js.map +1 -0
  97. package/dist/team/message-bus.d.ts +58 -0
  98. package/dist/team/message-bus.d.ts.map +1 -0
  99. package/dist/team/message-bus.js +151 -0
  100. package/dist/team/message-bus.js.map +1 -0
  101. package/dist/team/task-board.d.ts +106 -0
  102. package/dist/team/task-board.d.ts.map +1 -0
  103. package/dist/team/task-board.js +370 -0
  104. package/dist/team/task-board.js.map +1 -0
  105. package/dist/team/team-executor.d.ts +72 -0
  106. package/dist/team/team-executor.d.ts.map +1 -0
  107. package/dist/team/team-executor.js +466 -0
  108. package/dist/team/team-executor.js.map +1 -0
  109. package/dist/team/team-tools.d.ts +252 -0
  110. package/dist/team/team-tools.d.ts.map +1 -0
  111. package/dist/team/team-tools.js +412 -0
  112. package/dist/team/team-tools.js.map +1 -0
  113. package/dist/team/types.d.ts +198 -0
  114. package/dist/team/types.d.ts.map +1 -0
  115. package/dist/team/types.js +8 -0
  116. package/dist/team/types.js.map +1 -0
  117. package/dist/tools/add-edge-tool.d.ts +18 -0
  118. package/dist/tools/add-edge-tool.d.ts.map +1 -0
  119. package/dist/tools/add-edge-tool.js +92 -0
  120. package/dist/tools/add-edge-tool.js.map +1 -0
  121. package/dist/tools/add-node-tool.d.ts +22 -0
  122. package/dist/tools/add-node-tool.d.ts.map +1 -0
  123. package/dist/tools/add-node-tool.js +128 -0
  124. package/dist/tools/add-node-tool.js.map +1 -0
  125. package/dist/tools/asset-tools.d.ts +58 -0
  126. package/dist/tools/asset-tools.d.ts.map +1 -0
  127. package/dist/tools/asset-tools.js +191 -0
  128. package/dist/tools/asset-tools.js.map +1 -0
  129. package/dist/tools/base-tool.d.ts +25 -0
  130. package/dist/tools/base-tool.d.ts.map +1 -0
  131. package/dist/tools/base-tool.js +24 -0
  132. package/dist/tools/base-tool.js.map +1 -0
  133. package/dist/tools/browser-tools.d.ts +32 -0
  134. package/dist/tools/browser-tools.d.ts.map +1 -0
  135. package/dist/tools/browser-tools.js +208 -0
  136. package/dist/tools/browser-tools.js.map +1 -0
  137. package/dist/tools/calculator-tool.d.ts +24 -0
  138. package/dist/tools/calculator-tool.d.ts.map +1 -0
  139. package/dist/tools/calculator-tool.js +64 -0
  140. package/dist/tools/calculator-tool.js.map +1 -0
  141. package/dist/tools/claude-code-tools.d.ts +96 -0
  142. package/dist/tools/claude-code-tools.d.ts.map +1 -0
  143. package/dist/tools/claude-code-tools.js +463 -0
  144. package/dist/tools/claude-code-tools.js.map +1 -0
  145. package/dist/tools/code-tools.d.ts +26 -0
  146. package/dist/tools/code-tools.d.ts.map +1 -0
  147. package/dist/tools/code-tools.js +82 -0
  148. package/dist/tools/code-tools.js.map +1 -0
  149. package/dist/tools/control-tool.d.ts +47 -0
  150. package/dist/tools/control-tool.d.ts.map +1 -0
  151. package/dist/tools/control-tool.js +101 -0
  152. package/dist/tools/control-tool.js.map +1 -0
  153. package/dist/tools/create-plan-tool.d.ts +29 -0
  154. package/dist/tools/create-plan-tool.d.ts.map +1 -0
  155. package/dist/tools/create-plan-tool.js +355 -0
  156. package/dist/tools/create-plan-tool.js.map +1 -0
  157. package/dist/tools/create-task-tool.d.ts +28 -0
  158. package/dist/tools/create-task-tool.d.ts.map +1 -0
  159. package/dist/tools/create-task-tool.js +254 -0
  160. package/dist/tools/create-task-tool.js.map +1 -0
  161. package/dist/tools/dataseo-tools.d.ts +38 -0
  162. package/dist/tools/dataseo-tools.d.ts.map +1 -0
  163. package/dist/tools/dataseo-tools.js +329 -0
  164. package/dist/tools/dataseo-tools.js.map +1 -0
  165. package/dist/tools/email-tools.d.ts +76 -0
  166. package/dist/tools/email-tools.d.ts.map +1 -0
  167. package/dist/tools/email-tools.js +259 -0
  168. package/dist/tools/email-tools.js.map +1 -0
  169. package/dist/tools/filesystem-tools.d.ts +77 -0
  170. package/dist/tools/filesystem-tools.d.ts.map +1 -0
  171. package/dist/tools/filesystem-tools.js +334 -0
  172. package/dist/tools/filesystem-tools.js.map +1 -0
  173. package/dist/tools/find-model-tool.d.ts +25 -0
  174. package/dist/tools/find-model-tool.d.ts.map +1 -0
  175. package/dist/tools/find-model-tool.js +236 -0
  176. package/dist/tools/find-model-tool.js.map +1 -0
  177. package/dist/tools/finish-graph-tool.d.ts +23 -0
  178. package/dist/tools/finish-graph-tool.d.ts.map +1 -0
  179. package/dist/tools/finish-graph-tool.js +46 -0
  180. package/dist/tools/finish-graph-tool.js.map +1 -0
  181. package/dist/tools/finish-step-tool.d.ts +16 -0
  182. package/dist/tools/finish-step-tool.d.ts.map +1 -0
  183. package/dist/tools/finish-step-tool.js +68 -0
  184. package/dist/tools/finish-step-tool.js.map +1 -0
  185. package/dist/tools/google-tools.d.ts +44 -0
  186. package/dist/tools/google-tools.d.ts.map +1 -0
  187. package/dist/tools/google-tools.js +176 -0
  188. package/dist/tools/google-tools.js.map +1 -0
  189. package/dist/tools/http-tools.d.ts +56 -0
  190. package/dist/tools/http-tools.d.ts.map +1 -0
  191. package/dist/tools/http-tools.js +180 -0
  192. package/dist/tools/http-tools.js.map +1 -0
  193. package/dist/tools/js-code-tool.d.ts +30 -0
  194. package/dist/tools/js-code-tool.d.ts.map +1 -0
  195. package/dist/tools/js-code-tool.js +98 -0
  196. package/dist/tools/js-code-tool.js.map +1 -0
  197. package/dist/tools/local-get-node-info-tool.d.ts +19 -0
  198. package/dist/tools/local-get-node-info-tool.d.ts.map +1 -0
  199. package/dist/tools/local-get-node-info-tool.js +75 -0
  200. package/dist/tools/local-get-node-info-tool.js.map +1 -0
  201. package/dist/tools/local-list-nodes-tool.d.ts +19 -0
  202. package/dist/tools/local-list-nodes-tool.d.ts.map +1 -0
  203. package/dist/tools/local-list-nodes-tool.js +69 -0
  204. package/dist/tools/local-list-nodes-tool.js.map +1 -0
  205. package/dist/tools/local-search-nodes-tool.d.ts +21 -0
  206. package/dist/tools/local-search-nodes-tool.d.ts.map +1 -0
  207. package/dist/tools/local-search-nodes-tool.js +111 -0
  208. package/dist/tools/local-search-nodes-tool.js.map +1 -0
  209. package/dist/tools/math-tools.d.ts +156 -0
  210. package/dist/tools/math-tools.d.ts.map +1 -0
  211. package/dist/tools/math-tools.js +422 -0
  212. package/dist/tools/math-tools.js.map +1 -0
  213. package/dist/tools/mcp-tools.d.ts +413 -0
  214. package/dist/tools/mcp-tools.d.ts.map +1 -0
  215. package/dist/tools/mcp-tools.js +618 -0
  216. package/dist/tools/mcp-tools.js.map +1 -0
  217. package/dist/tools/media-tools.d.ts +277 -0
  218. package/dist/tools/media-tools.d.ts.map +1 -0
  219. package/dist/tools/media-tools.js +682 -0
  220. package/dist/tools/media-tools.js.map +1 -0
  221. package/dist/tools/model-tools.d.ts +25 -0
  222. package/dist/tools/model-tools.d.ts.map +1 -0
  223. package/dist/tools/model-tools.js +48 -0
  224. package/dist/tools/model-tools.js.map +1 -0
  225. package/dist/tools/openai-tools.d.ts +73 -0
  226. package/dist/tools/openai-tools.d.ts.map +1 -0
  227. package/dist/tools/openai-tools.js +193 -0
  228. package/dist/tools/openai-tools.js.map +1 -0
  229. package/dist/tools/pdf-tools.d.ts +152 -0
  230. package/dist/tools/pdf-tools.d.ts.map +1 -0
  231. package/dist/tools/pdf-tools.js +339 -0
  232. package/dist/tools/pdf-tools.js.map +1 -0
  233. package/dist/tools/plan-builder-tools.d.ts +72 -0
  234. package/dist/tools/plan-builder-tools.d.ts.map +1 -0
  235. package/dist/tools/plan-builder-tools.js +438 -0
  236. package/dist/tools/plan-builder-tools.js.map +1 -0
  237. package/dist/tools/search-tools.d.ts +39 -0
  238. package/dist/tools/search-tools.d.ts.map +1 -0
  239. package/dist/tools/search-tools.js +218 -0
  240. package/dist/tools/search-tools.js.map +1 -0
  241. package/dist/tools/serp-providers/dataforseo-provider.d.ts +14 -0
  242. package/dist/tools/serp-providers/dataforseo-provider.d.ts.map +1 -0
  243. package/dist/tools/serp-providers/dataforseo-provider.js +114 -0
  244. package/dist/tools/serp-providers/dataforseo-provider.js.map +1 -0
  245. package/dist/tools/serp-providers/index.d.ts +35 -0
  246. package/dist/tools/serp-providers/index.d.ts.map +1 -0
  247. package/dist/tools/serp-providers/index.js +14 -0
  248. package/dist/tools/serp-providers/index.js.map +1 -0
  249. package/dist/tools/serp-providers/serpapi-provider.d.ts +18 -0
  250. package/dist/tools/serp-providers/serpapi-provider.d.ts.map +1 -0
  251. package/dist/tools/serp-providers/serpapi-provider.js +66 -0
  252. package/dist/tools/serp-providers/serpapi-provider.js.map +1 -0
  253. package/dist/tools/tool-registry.d.ts +9 -0
  254. package/dist/tools/tool-registry.d.ts.map +1 -0
  255. package/dist/tools/tool-registry.js +17 -0
  256. package/dist/tools/tool-registry.js.map +1 -0
  257. package/dist/tools/vector-tools.d.ts +224 -0
  258. package/dist/tools/vector-tools.d.ts.map +1 -0
  259. package/dist/tools/vector-tools.js +582 -0
  260. package/dist/tools/vector-tools.js.map +1 -0
  261. package/dist/tools/workspace-tools.d.ts +58 -0
  262. package/dist/tools/workspace-tools.d.ts.map +1 -0
  263. package/dist/tools/workspace-tools.js +152 -0
  264. package/dist/tools/workspace-tools.js.map +1 -0
  265. package/dist/types.d.ts +65 -0
  266. package/dist/types.d.ts.map +1 -0
  267. package/dist/types.js +5 -0
  268. package/dist/types.js.map +1 -0
  269. package/dist/utils/json-parser.d.ts +15 -0
  270. package/dist/utils/json-parser.d.ts.map +1 -0
  271. package/dist/utils/json-parser.js +78 -0
  272. package/dist/utils/json-parser.js.map +1 -0
  273. package/dist/utils/remove-base64-images.d.ts +12 -0
  274. package/dist/utils/remove-base64-images.d.ts.map +1 -0
  275. package/dist/utils/remove-base64-images.js +20 -0
  276. package/dist/utils/remove-base64-images.js.map +1 -0
  277. package/dist/utils/wrap-generators-parallel.d.ts +11 -0
  278. package/dist/utils/wrap-generators-parallel.d.ts.map +1 -0
  279. package/dist/utils/wrap-generators-parallel.js +38 -0
  280. package/dist/utils/wrap-generators-parallel.js.map +1 -0
  281. package/package.json +65 -0
@@ -0,0 +1,618 @@
1
+ /**
2
+ * MCP Tool wrappers for the Agent system.
3
+ *
4
+ * These tools give the agent "omnipotent" control over nodetool:
5
+ * workflows, nodes, jobs, assets, and models via REST API calls.
6
+ *
7
+ * Port of src/nodetool/agents/tools/mcp_tools.py
8
+ */
9
+ import { Tool } from "./base-tool.js";
10
+ import { LocalListNodesTool } from "./local-list-nodes-tool.js";
11
+ import { LocalSearchNodesTool } from "./local-search-nodes-tool.js";
12
+ import { LocalGetNodeInfoTool } from "./local-get-node-info-tool.js";
13
+ import { FindModelTool } from "./find-model-tool.js";
14
+ import { GenerateImageTool, EditImageTool, GenerateVideoTool, AnimateImageTool, GenerateSpeechTool, TranscribeAudioTool, EmbedTextTool } from "./media-tools.js";
15
+ import { SaveAssetTool, ReadAssetTool } from "./asset-tools.js";
16
+ const DEFAULT_API_URL = "http://localhost:7777";
17
+ function getApiUrl(context) {
18
+ return context.environment?.["NODETOOL_API_URL"] ?? DEFAULT_API_URL;
19
+ }
20
+ function getHeaders(context) {
21
+ const headers = {
22
+ "Content-Type": "application/json"
23
+ };
24
+ if (context.userId) {
25
+ headers["X-User-Id"] = context.userId;
26
+ }
27
+ return headers;
28
+ }
29
+ async function apiGet(context, path, query) {
30
+ const base = getApiUrl(context);
31
+ const url = new URL(path, base);
32
+ if (query) {
33
+ for (const [k, v] of Object.entries(query)) {
34
+ if (v !== undefined)
35
+ url.searchParams.set(k, String(v));
36
+ }
37
+ }
38
+ const res = await fetch(url.toString(), { headers: getHeaders(context) });
39
+ if (!res.ok) {
40
+ const text = await res.text();
41
+ return { error: `API error ${res.status}: ${text}` };
42
+ }
43
+ return res.json();
44
+ }
45
+ async function apiPost(context, path, body) {
46
+ const base = getApiUrl(context);
47
+ const url = new URL(path, base);
48
+ const res = await fetch(url.toString(), {
49
+ method: "POST",
50
+ headers: getHeaders(context),
51
+ body: body !== undefined ? JSON.stringify(body) : undefined
52
+ });
53
+ if (!res.ok) {
54
+ const text = await res.text();
55
+ return { error: `API error ${res.status}: ${text}` };
56
+ }
57
+ return res.json();
58
+ }
59
+ // ============================================================================
60
+ // Workflow Tools
61
+ // ============================================================================
62
+ export class ListWorkflowsTool extends Tool {
63
+ name = "list_workflows";
64
+ description = "List workflows with flexible filtering and search options. Returns user workflows, example workflows, or both.";
65
+ inputSchema = {
66
+ type: "object",
67
+ properties: {
68
+ workflow_type: {
69
+ type: "string",
70
+ description: "Type of workflows to list",
71
+ enum: ["user", "example", "all"],
72
+ default: "user"
73
+ },
74
+ query: {
75
+ type: "string",
76
+ description: "Optional search query to filter workflows"
77
+ },
78
+ limit: {
79
+ type: "number",
80
+ description: "Maximum number of workflows to return",
81
+ default: 100
82
+ }
83
+ },
84
+ required: []
85
+ };
86
+ async process(context, params) {
87
+ const workflowType = String(params["workflow_type"] ?? "user");
88
+ const query = params["query"];
89
+ const limit = Number(params["limit"] ?? 100);
90
+ if (workflowType === "example" || workflowType === "all") {
91
+ const examples = await apiGet(context, "/api/workflows/examples", {
92
+ limit,
93
+ query
94
+ });
95
+ if (workflowType === "example")
96
+ return examples;
97
+ const user = await apiGet(context, "/api/workflows/", { limit });
98
+ return { examples, user };
99
+ }
100
+ return apiGet(context, "/api/workflows/", { limit });
101
+ }
102
+ userMessage(params) {
103
+ const wt = params["workflow_type"] ?? "user";
104
+ const q = params["query"];
105
+ if (q)
106
+ return `Listing ${wt} workflows matching '${q}'`;
107
+ return `Listing ${wt} workflows`;
108
+ }
109
+ }
110
+ export class GetWorkflowTool extends Tool {
111
+ name = "get_workflow";
112
+ description = "Get detailed information about a specific workflow including its graph structure.";
113
+ inputSchema = {
114
+ type: "object",
115
+ properties: {
116
+ workflow_id: {
117
+ type: "string",
118
+ description: "The ID of the workflow"
119
+ }
120
+ },
121
+ required: ["workflow_id"]
122
+ };
123
+ async process(context, params) {
124
+ return apiGet(context, `/api/workflows/${params["workflow_id"]}`);
125
+ }
126
+ userMessage(params) {
127
+ return `Getting workflow ${params["workflow_id"]}`;
128
+ }
129
+ }
130
+ export class CreateWorkflowTool extends Tool {
131
+ name = "create_workflow";
132
+ description = "Create a new workflow with a name, graph structure, and optional metadata.";
133
+ inputSchema = {
134
+ type: "object",
135
+ properties: {
136
+ name: { type: "string", description: "The workflow name" },
137
+ graph: {
138
+ type: "object",
139
+ description: "Workflow graph structure with nodes and edges"
140
+ },
141
+ description: {
142
+ type: "string",
143
+ description: "Optional workflow description"
144
+ },
145
+ tags: {
146
+ type: "array",
147
+ items: { type: "string" },
148
+ description: "Optional workflow tags"
149
+ },
150
+ access: {
151
+ type: "string",
152
+ enum: ["private", "public"],
153
+ default: "private"
154
+ }
155
+ },
156
+ required: ["name", "graph"]
157
+ };
158
+ async process(context, params) {
159
+ return apiPost(context, "/api/workflows/", {
160
+ name: params["name"],
161
+ graph: params["graph"],
162
+ description: params["description"],
163
+ tags: params["tags"],
164
+ access: params["access"] ?? "private"
165
+ });
166
+ }
167
+ userMessage(params) {
168
+ return `Creating workflow '${params["name"]}'`;
169
+ }
170
+ }
171
+ export class RunWorkflowTool extends Tool {
172
+ name = "run_workflow";
173
+ description = "Execute a workflow with given parameters and return results.";
174
+ inputSchema = {
175
+ type: "object",
176
+ properties: {
177
+ workflow_id: {
178
+ type: "string",
179
+ description: "The ID of the workflow to run"
180
+ },
181
+ params: {
182
+ type: "object",
183
+ description: "Dictionary of input parameters for the workflow"
184
+ }
185
+ },
186
+ required: ["workflow_id"]
187
+ };
188
+ async process(context, params) {
189
+ return apiPost(context, `/api/workflows/${params["workflow_id"]}/run`, {
190
+ params: params["params"] ?? {}
191
+ });
192
+ }
193
+ userMessage(params) {
194
+ return `Running workflow ${params["workflow_id"]}`;
195
+ }
196
+ }
197
+ export class ValidateWorkflowTool extends Tool {
198
+ name = "validate_workflow";
199
+ description = "Validate a workflow's structure, connectivity, and type compatibility.";
200
+ inputSchema = {
201
+ type: "object",
202
+ properties: {
203
+ workflow_id: {
204
+ type: "string",
205
+ description: "The ID of the workflow to validate"
206
+ }
207
+ },
208
+ required: ["workflow_id"]
209
+ };
210
+ async process(context, params) {
211
+ // Validate by fetching the workflow and checking its structure
212
+ return apiGet(context, `/api/workflows/${params["workflow_id"]}`);
213
+ }
214
+ userMessage(params) {
215
+ return `Validating workflow ${params["workflow_id"]}`;
216
+ }
217
+ }
218
+ export class GetExampleWorkflowTool extends Tool {
219
+ name = "get_example_workflow";
220
+ description = "Load a specific example workflow from a package by name.";
221
+ inputSchema = {
222
+ type: "object",
223
+ properties: {
224
+ package_name: {
225
+ type: "string",
226
+ description: "The name of the package containing the example"
227
+ },
228
+ example_name: {
229
+ type: "string",
230
+ description: "The name of the example workflow to load"
231
+ }
232
+ },
233
+ required: ["package_name", "example_name"]
234
+ };
235
+ async process(context, params) {
236
+ return apiGet(context, `/api/workflows/examples/${params["package_name"]}/${params["example_name"]}`);
237
+ }
238
+ userMessage(params) {
239
+ return `Loading example ${params["package_name"]}/${params["example_name"]}`;
240
+ }
241
+ }
242
+ export class ExportWorkflowDigraphTool extends Tool {
243
+ name = "export_workflow_digraph";
244
+ description = "Export a workflow as a Graphviz Digraph (DOT format) for visualization.";
245
+ inputSchema = {
246
+ type: "object",
247
+ properties: {
248
+ workflow_id: {
249
+ type: "string",
250
+ description: "The ID of the workflow to export"
251
+ },
252
+ descriptive_names: {
253
+ type: "boolean",
254
+ description: "Use descriptive node names instead of UUIDs",
255
+ default: true
256
+ }
257
+ },
258
+ required: ["workflow_id"]
259
+ };
260
+ async process(context, params) {
261
+ return apiGet(context, `/api/workflows/${params["workflow_id"]}/dsl-export`);
262
+ }
263
+ userMessage(params) {
264
+ return `Exporting workflow ${params["workflow_id"]} as digraph`;
265
+ }
266
+ }
267
+ // ============================================================================
268
+ // Node Tools
269
+ // ============================================================================
270
+ export class ListNodesTool extends Tool {
271
+ name = "list_nodes";
272
+ description = "List available nodes from installed packages. Use this to discover nodes for building workflows.";
273
+ inputSchema = {
274
+ type: "object",
275
+ properties: {
276
+ namespace: {
277
+ type: "string",
278
+ description: "Optional namespace prefix filter (e.g. 'nodetool.text')"
279
+ },
280
+ limit: {
281
+ type: "number",
282
+ description: "Maximum number of nodes to return",
283
+ default: 200
284
+ }
285
+ },
286
+ required: []
287
+ };
288
+ async process(context, params) {
289
+ return apiGet(context, "/api/nodes/metadata", {
290
+ namespace: params["namespace"],
291
+ limit: Number(params["limit"] ?? 200)
292
+ });
293
+ }
294
+ userMessage(params) {
295
+ const ns = params["namespace"];
296
+ return ns ? `Listing nodes in namespace ${ns}` : "Listing available nodes";
297
+ }
298
+ }
299
+ export class SearchNodesTool extends Tool {
300
+ name = "search_nodes";
301
+ description = "Search for nodes by name, description, or tags.";
302
+ inputSchema = {
303
+ type: "object",
304
+ properties: {
305
+ query: {
306
+ type: "array",
307
+ items: { type: "string" },
308
+ description: "Search query strings"
309
+ },
310
+ n_results: {
311
+ type: "number",
312
+ description: "Maximum number of results to return",
313
+ default: 10
314
+ },
315
+ input_type: {
316
+ type: "string",
317
+ description: "Optional filter by input type"
318
+ },
319
+ output_type: {
320
+ type: "string",
321
+ description: "Optional filter by output type"
322
+ }
323
+ },
324
+ required: ["query"]
325
+ };
326
+ async process(context, params) {
327
+ const queryArr = params["query"];
328
+ return apiGet(context, "/api/nodes/metadata", {
329
+ query: queryArr.join(","),
330
+ limit: Number(params["n_results"] ?? 10)
331
+ });
332
+ }
333
+ userMessage(params) {
334
+ const query = params["query"] ?? [];
335
+ return `Searching for nodes: ${query.join(", ")}`;
336
+ }
337
+ }
338
+ export class GetNodeInfoTool extends Tool {
339
+ name = "get_node_info";
340
+ description = "Get detailed metadata for a node type including its properties, inputs, and outputs.";
341
+ inputSchema = {
342
+ type: "object",
343
+ properties: {
344
+ node_type: {
345
+ type: "string",
346
+ description: "Fully-qualified node type (e.g. 'nodetool.text.Concat')"
347
+ }
348
+ },
349
+ required: ["node_type"]
350
+ };
351
+ async process(context, params) {
352
+ return apiGet(context, "/api/nodes/metadata", {
353
+ node_type: params["node_type"]
354
+ });
355
+ }
356
+ userMessage(params) {
357
+ return `Getting info for node type ${params["node_type"]}`;
358
+ }
359
+ }
360
+ // ============================================================================
361
+ // Job Tools
362
+ // ============================================================================
363
+ export class ListJobsTool extends Tool {
364
+ name = "list_jobs";
365
+ description = "List jobs (workflow executions) with optional filtering.";
366
+ inputSchema = {
367
+ type: "object",
368
+ properties: {
369
+ workflow_id: {
370
+ type: "string",
371
+ description: "Optional workflow ID to filter by"
372
+ },
373
+ limit: {
374
+ type: "number",
375
+ description: "Maximum number of jobs to return",
376
+ default: 100
377
+ }
378
+ },
379
+ required: []
380
+ };
381
+ async process(context, params) {
382
+ return apiGet(context, "/api/jobs/", {
383
+ workflow_id: params["workflow_id"],
384
+ limit: Number(params["limit"] ?? 100)
385
+ });
386
+ }
387
+ userMessage(params) {
388
+ const wfId = params["workflow_id"];
389
+ return wfId ? `Listing jobs for workflow ${wfId}` : "Listing jobs";
390
+ }
391
+ }
392
+ export class GetJobTool extends Tool {
393
+ name = "get_job";
394
+ description = "Get details about a specific job including status, timing, and error info.";
395
+ inputSchema = {
396
+ type: "object",
397
+ properties: {
398
+ job_id: {
399
+ type: "string",
400
+ description: "The job ID"
401
+ }
402
+ },
403
+ required: ["job_id"]
404
+ };
405
+ async process(context, params) {
406
+ return apiGet(context, `/api/jobs/${params["job_id"]}`);
407
+ }
408
+ userMessage(params) {
409
+ return `Getting job ${params["job_id"]}`;
410
+ }
411
+ }
412
+ export class GetJobLogsTool extends Tool {
413
+ name = "get_job_logs";
414
+ description = "Get logs for a job to debug workflow executions.";
415
+ inputSchema = {
416
+ type: "object",
417
+ properties: {
418
+ job_id: {
419
+ type: "string",
420
+ description: "The job ID"
421
+ },
422
+ limit: {
423
+ type: "number",
424
+ description: "Maximum number of log entries to return",
425
+ default: 200
426
+ }
427
+ },
428
+ required: ["job_id"]
429
+ };
430
+ async process(context, params) {
431
+ return apiGet(context, `/api/jobs/${params["job_id"]}`, {
432
+ limit: Number(params["limit"] ?? 200)
433
+ });
434
+ }
435
+ userMessage(params) {
436
+ return `Getting logs for job ${params["job_id"]}`;
437
+ }
438
+ }
439
+ export class StartBackgroundJobTool extends Tool {
440
+ name = "start_background_job";
441
+ description = "Start a workflow running in the background and return a job ID for tracking.";
442
+ inputSchema = {
443
+ type: "object",
444
+ properties: {
445
+ workflow_id: {
446
+ type: "string",
447
+ description: "The workflow ID to run"
448
+ },
449
+ params: {
450
+ type: "object",
451
+ description: "Optional input parameters"
452
+ }
453
+ },
454
+ required: ["workflow_id"]
455
+ };
456
+ async process(context, params) {
457
+ return apiPost(context, `/api/workflows/${params["workflow_id"]}/run`, {
458
+ params: params["params"] ?? {},
459
+ background: true
460
+ });
461
+ }
462
+ userMessage(params) {
463
+ return `Starting background job for workflow ${params["workflow_id"]}`;
464
+ }
465
+ }
466
+ // ============================================================================
467
+ // Asset Tools
468
+ // ============================================================================
469
+ export class ListAssetsTool extends Tool {
470
+ name = "list_assets";
471
+ description = "List or search assets with flexible filtering options.";
472
+ inputSchema = {
473
+ type: "object",
474
+ properties: {
475
+ source: {
476
+ type: "string",
477
+ enum: ["user", "package"],
478
+ default: "user"
479
+ },
480
+ query: {
481
+ type: "string",
482
+ description: "Search query for asset names (min 2 chars)"
483
+ },
484
+ content_type: {
485
+ type: "string",
486
+ description: "Filter by content type (image, video, audio, text, folder)"
487
+ },
488
+ limit: {
489
+ type: "number",
490
+ description: "Maximum number of assets to return",
491
+ default: 100
492
+ }
493
+ },
494
+ required: []
495
+ };
496
+ async process(context, params) {
497
+ const source = String(params["source"] ?? "user");
498
+ const query = params["query"];
499
+ if (source === "package") {
500
+ return apiGet(context, "/api/assets/packages", {
501
+ limit: Number(params["limit"] ?? 100)
502
+ });
503
+ }
504
+ if (query) {
505
+ return apiGet(context, "/api/assets/search", {
506
+ query,
507
+ content_type: params["content_type"],
508
+ limit: Number(params["limit"] ?? 100)
509
+ });
510
+ }
511
+ return apiGet(context, "/api/assets/", {
512
+ content_type: params["content_type"],
513
+ limit: Number(params["limit"] ?? 100)
514
+ });
515
+ }
516
+ userMessage(params) {
517
+ const query = params["query"];
518
+ return query ? `Searching assets for '${query}'` : "Listing assets";
519
+ }
520
+ }
521
+ export class GetAssetTool extends Tool {
522
+ name = "get_asset";
523
+ description = "Get detailed information about a specific asset.";
524
+ inputSchema = {
525
+ type: "object",
526
+ properties: {
527
+ asset_id: {
528
+ type: "string",
529
+ description: "The ID of the asset"
530
+ }
531
+ },
532
+ required: ["asset_id"]
533
+ };
534
+ async process(context, params) {
535
+ return apiGet(context, `/api/assets/${params["asset_id"]}`);
536
+ }
537
+ userMessage(params) {
538
+ return `Getting asset ${params["asset_id"]}`;
539
+ }
540
+ }
541
+ // ============================================================================
542
+ // Model Tools
543
+ // ============================================================================
544
+ export class ListModelsTool extends Tool {
545
+ name = "list_models";
546
+ description = "List available AI models with flexible filtering options.";
547
+ inputSchema = {
548
+ type: "object",
549
+ properties: {
550
+ provider: {
551
+ type: "string",
552
+ description: "Filter by provider (all, openai, anthropic, ollama, etc.)",
553
+ default: "all"
554
+ },
555
+ model_type: {
556
+ type: "string",
557
+ description: "Filter by model type (e.g. language, image)"
558
+ },
559
+ downloaded_only: {
560
+ type: "boolean",
561
+ description: "Only show downloaded models",
562
+ default: false
563
+ },
564
+ limit: {
565
+ type: "number",
566
+ description: "Maximum number of models to return",
567
+ default: 50
568
+ }
569
+ },
570
+ required: []
571
+ };
572
+ async process(context, params) {
573
+ const provider = String(params["provider"] ?? "all");
574
+ return apiGet(context, "/api/models/all", {
575
+ provider: provider !== "all" ? provider : undefined,
576
+ model_type: params["model_type"]
577
+ });
578
+ }
579
+ userMessage(params) {
580
+ const provider = params["provider"] ?? "all";
581
+ return `Listing models from ${provider}`;
582
+ }
583
+ }
584
+ export function getAllMcpTools(options = {}) {
585
+ const tools = [
586
+ new ListWorkflowsTool(),
587
+ new GetWorkflowTool(),
588
+ new CreateWorkflowTool(),
589
+ new RunWorkflowTool(),
590
+ new ValidateWorkflowTool(),
591
+ new GetExampleWorkflowTool(),
592
+ new ExportWorkflowDigraphTool(),
593
+ new ListJobsTool(),
594
+ new GetJobTool(),
595
+ new GetJobLogsTool(),
596
+ new StartBackgroundJobTool(),
597
+ new ListAssetsTool(),
598
+ new GetAssetTool(),
599
+ new ListModelsTool(),
600
+ // Asset persistence — used by the agent to surface artifacts (text
601
+ // reports, images, audio) into the chat. Media-generation tools save
602
+ // their outputs as assets automatically; use save_asset for anything
603
+ // else worth keeping.
604
+ new SaveAssetTool(),
605
+ new ReadAssetTool()
606
+ ];
607
+ if (options.registry) {
608
+ tools.push(new LocalListNodesTool(options.registry), new LocalSearchNodesTool(options.registry), new LocalGetNodeInfoTool(options.registry));
609
+ }
610
+ else {
611
+ tools.push(new ListNodesTool(), new SearchNodesTool(), new GetNodeInfoTool());
612
+ }
613
+ if (options.providers && Object.keys(options.providers).length > 0) {
614
+ tools.push(new FindModelTool(options.providers), new GenerateImageTool(), new EditImageTool(), new GenerateVideoTool(), new AnimateImageTool(), new GenerateSpeechTool(), new TranscribeAudioTool(), new EmbedTextTool());
615
+ }
616
+ return tools;
617
+ }
618
+ //# sourceMappingURL=mcp-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-tools.js","sourceRoot":"","sources":["../../src/tools/mcp-tools.ts"],"names":[],"mappings":"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"}