comfyui-mcp 0.3.2 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/.beads/README.md +81 -0
  2. package/.beads/config.yaml +54 -0
  3. package/.beads/metadata.json +7 -0
  4. package/AGENTS.md +84 -0
  5. package/CLAUDE.md +48 -0
  6. package/README.md +26 -0
  7. package/dist/comfyui/client.d.ts +17 -0
  8. package/dist/comfyui/client.d.ts.map +1 -1
  9. package/dist/comfyui/client.js +39 -0
  10. package/dist/comfyui/client.js.map +1 -1
  11. package/dist/comfyui/types.d.ts +52 -0
  12. package/dist/comfyui/types.d.ts.map +1 -1
  13. package/dist/config.d.ts +4 -0
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js +7 -1
  16. package/dist/config.js.map +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/services/asset-registry.d.ts +64 -0
  20. package/dist/services/asset-registry.d.ts.map +1 -0
  21. package/dist/services/asset-registry.js +118 -0
  22. package/dist/services/asset-registry.js.map +1 -0
  23. package/dist/services/defaults-manager.d.ts +31 -0
  24. package/dist/services/defaults-manager.d.ts.map +1 -0
  25. package/dist/services/defaults-manager.js +128 -0
  26. package/dist/services/defaults-manager.js.map +1 -0
  27. package/dist/services/generate-image.d.ts +35 -0
  28. package/dist/services/generate-image.d.ts.map +1 -0
  29. package/dist/services/generate-image.js +63 -0
  30. package/dist/services/generate-image.js.map +1 -0
  31. package/dist/services/image-management.d.ts +16 -0
  32. package/dist/services/image-management.d.ts.map +1 -1
  33. package/dist/services/image-management.js +32 -0
  34. package/dist/services/image-management.js.map +1 -1
  35. package/dist/services/job-watcher.d.ts +5 -1
  36. package/dist/services/job-watcher.d.ts.map +1 -1
  37. package/dist/services/job-watcher.js +42 -3
  38. package/dist/services/job-watcher.js.map +1 -1
  39. package/dist/services/process-control.js +2 -2
  40. package/dist/services/process-control.js.map +1 -1
  41. package/dist/services/view-image.d.ts +17 -0
  42. package/dist/services/view-image.d.ts.map +1 -0
  43. package/dist/services/view-image.js +36 -0
  44. package/dist/services/view-image.js.map +1 -0
  45. package/dist/services/workflow-autoload.d.ts +41 -0
  46. package/dist/services/workflow-autoload.d.ts.map +1 -0
  47. package/dist/services/workflow-autoload.js +172 -0
  48. package/dist/services/workflow-autoload.js.map +1 -0
  49. package/dist/services/workflow-converter.d.ts +15 -0
  50. package/dist/services/workflow-converter.d.ts.map +1 -1
  51. package/dist/services/workflow-converter.js +333 -5
  52. package/dist/services/workflow-converter.js.map +1 -1
  53. package/dist/services/workflow-executor.d.ts.map +1 -1
  54. package/dist/services/workflow-executor.js +4 -2
  55. package/dist/services/workflow-executor.js.map +1 -1
  56. package/dist/tools/assets.d.ts +3 -0
  57. package/dist/tools/assets.d.ts.map +1 -0
  58. package/dist/tools/assets.js +128 -0
  59. package/dist/tools/assets.js.map +1 -0
  60. package/dist/tools/defaults.d.ts +3 -0
  61. package/dist/tools/defaults.d.ts.map +1 -0
  62. package/dist/tools/defaults.js +57 -0
  63. package/dist/tools/defaults.js.map +1 -0
  64. package/dist/tools/diagnostics.d.ts.map +1 -1
  65. package/dist/tools/diagnostics.js +14 -3
  66. package/dist/tools/diagnostics.js.map +1 -1
  67. package/dist/tools/generate-image.d.ts +3 -0
  68. package/dist/tools/generate-image.d.ts.map +1 -0
  69. package/dist/tools/generate-image.js +61 -0
  70. package/dist/tools/generate-image.js.map +1 -0
  71. package/dist/tools/image-management.d.ts.map +1 -1
  72. package/dist/tools/image-management.js +99 -11
  73. package/dist/tools/image-management.js.map +1 -1
  74. package/dist/tools/index.d.ts +1 -1
  75. package/dist/tools/index.d.ts.map +1 -1
  76. package/dist/tools/index.js +13 -1
  77. package/dist/tools/index.js.map +1 -1
  78. package/dist/tools/workflow-autoload.d.ts +9 -0
  79. package/dist/tools/workflow-autoload.d.ts.map +1 -0
  80. package/dist/tools/workflow-autoload.js +64 -0
  81. package/dist/tools/workflow-autoload.js.map +1 -0
  82. package/package.json +2 -1
  83. package/plugin/scripts/monitor-progress.mjs +9 -5
  84. package/server.json +21 -0
@@ -0,0 +1,57 @@
1
+ import { z } from "zod";
2
+ import { DefaultsManager } from "../services/defaults-manager.js";
3
+ import { errorToToolResult } from "../utils/errors.js";
4
+ export function registerDefaultsTools(server) {
5
+ server.tool("get_defaults", "Return the merged view of generation defaults with per-source attribution. " +
6
+ "Precedence (lowest → highest): config file → COMFYUI_DEFAULT_* env vars → runtime overrides via set_defaults. " +
7
+ "Per-call MCP tool args always win over these defaults when consumed by a workflow-construction tool.", {}, async () => {
8
+ try {
9
+ const resolved = DefaultsManager.getAll();
10
+ return {
11
+ content: [
12
+ {
13
+ type: "text",
14
+ text: JSON.stringify({
15
+ config_path: DefaultsManager.getConfigPath(),
16
+ defaults: resolved,
17
+ }, null, 2),
18
+ },
19
+ ],
20
+ };
21
+ }
22
+ catch (err) {
23
+ return errorToToolResult(err);
24
+ }
25
+ });
26
+ server.tool("set_defaults", "Update generation defaults. By default updates the in-memory runtime layer (lost on restart). " +
27
+ "Pass persist=true to also write the change into the config file (~/.config/comfyui-mcp/config.json by default). " +
28
+ "Use this to avoid repeating common values like width, height, steps, cfg, sampler, checkpoint.", {
29
+ values: z
30
+ .record(z.string(), z.any())
31
+ .describe("Key/value map of defaults to set. Keys are typically lowercase (e.g. width, steps)."),
32
+ persist: z
33
+ .boolean()
34
+ .optional()
35
+ .describe("If true, write to the config file in addition to runtime."),
36
+ }, async ({ values, persist }) => {
37
+ try {
38
+ await DefaultsManager.set(values, { persist });
39
+ return {
40
+ content: [
41
+ {
42
+ type: "text",
43
+ text: JSON.stringify({
44
+ status: persist ? "updated_runtime_and_config" : "updated_runtime",
45
+ config_path: DefaultsManager.getConfigPath(),
46
+ defaults: DefaultsManager.getAll(),
47
+ }, null, 2),
48
+ },
49
+ ],
50
+ };
51
+ }
52
+ catch (err) {
53
+ return errorToToolResult(err);
54
+ }
55
+ });
56
+ }
57
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/tools/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,IAAI,CACT,cAAc,EACd,6EAA6E;QAC3E,gHAAgH;QAChH,sGAAsG,EACxG,EAAE,EACF,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC;YAC1C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,WAAW,EAAE,eAAe,CAAC,aAAa,EAAE;4BAC5C,QAAQ,EAAE,QAAQ;yBACnB,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,cAAc,EACd,gGAAgG;QAC9F,kHAAkH;QAClH,gGAAgG,EAClG;QACE,MAAM,EAAE,CAAC;aACN,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;aAC3B,QAAQ,CAAC,qFAAqF,CAAC;QAClG,OAAO,EAAE,CAAC;aACP,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,2DAA2D,CAAC;KACzE,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;QAC5B,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAC/C,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;4BACE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,iBAAiB;4BAClE,WAAW,EAAE,eAAe,CAAC,aAAa,EAAE;4BAC5C,QAAQ,EAAE,eAAe,CAAC,MAAM,EAAE;yBACnC,EACD,IAAI,EACJ,CAAC,CACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/tools/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuFzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwFhE"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/tools/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuGzE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwFhE"}
@@ -53,15 +53,26 @@ function formatHistoryEntry(promptId, entry) {
53
53
  lines.push("");
54
54
  lines.push("**Execution was interrupted/cancelled**");
55
55
  }
56
- // Output nodes
57
56
  const outputKeys = Object.keys(entry.outputs || {});
58
57
  if (outputKeys.length > 0) {
59
58
  lines.push("");
60
59
  lines.push(`### Outputs (${outputKeys.length} nodes)`);
61
60
  for (const nodeId of outputKeys) {
62
61
  const output = entry.outputs[nodeId];
63
- const outputTypes = Object.keys(output);
64
- lines.push(`- Node ${nodeId}: ${outputTypes.join(", ")}`);
62
+ // Expand image filenames so callers can use get_image directly
63
+ if (Array.isArray(output.images)) {
64
+ const imgs = output.images;
65
+ const fileList = imgs
66
+ .map((img) => img.subfolder
67
+ ? `${img.subfolder}/${img.filename}`
68
+ : img.filename)
69
+ .join(", ");
70
+ lines.push(`- Node ${nodeId}: images → **${fileList}**`);
71
+ }
72
+ else {
73
+ const outputTypes = Object.keys(output);
74
+ lines.push(`- Node ${nodeId}: ${outputTypes.join(", ")}`);
75
+ }
65
76
  }
66
77
  }
67
78
  return lines.join("\n");
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/tools/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/tools/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,OAAO,EACP,UAAU,GAEX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,SAAS,kBAAkB,CACzB,QAAgB,EAChB,KAAmB;IAEnB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAE5B,KAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,UAAU,iBAAiB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAEhF,uBAAuB;IACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,mBAAmB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAClE,CAAC;IACF,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACjB,MAAM,OAAO,GAAI,KAAK,CAAC,CAAC,CAA2B,CAAC,SAAS,CAAC;QAC9D,MAAM,KAAK,GAAI,GAAG,CAAC,CAAC,CAA2B,CAAC,SAAS,CAAC;QAC1D,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,iBAAiB,WAAW,GAAG,CAAC,CAAC;IAC9C,CAAC;IAED,eAAe;IACf,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,kBAAkB,CAAC,CAAC;IACjE,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,WAAW,GAAI,MAAM,CAAC,CAAC,CAAyB,CAAC,KAAK,CAAC;QAC7D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,qBAAqB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,iBAAiB,CAAC,CAAC;IAClE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAA4B,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEhC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,SAAS,IAAI,cAAc,GAAG,CAAC,CAAC;QAC7F,CAAC;QACD,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,cAAc;IACd,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,uBAAuB,CAAC,CAAC;IAC3E,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,gBAAgB,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC;QACvD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAA4B,CAAC;YAChE,+DAA+D;YAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,MAAM,CAAC,MAIlB,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI;qBAClB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACX,GAAG,CAAC,SAAS;oBACX,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,EAAE;oBACpC,CAAC,CAAC,GAAG,CAAC,QAAQ,CACjB;qBACA,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,gBAAgB,QAAQ,IAAI,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,IAAI,CACT,UAAU,EACV,qIAAqI,EACrI;QACE,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,IAAI,CAAC;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,mEAAmE,CAAC;QAChF,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,gHAAgH,CAAC;KAC9H,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,IAAI,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;YAE5B,gCAAgC;YAChC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACtC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;YAED,oBAAoB;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC;YACvC,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;gBAC5B,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;YACjC,CAAC;YAED,0CAA0C;YAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC;YAEjE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC;gBAC7B,CAAC,CAAC,qBAAqB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG;gBAC3E,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAErB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,EACb,4NAA4N,EAC5N;QACE,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,8GAA8G,CAC/G;KACJ,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAExC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS;gCAClB,CAAC,CAAC,+BAA+B,IAAI,CAAC,SAAS,GAAG;gCAClD,CAAC,CAAC,iCAAiC;yBACtC;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,gDAAgD;YAChD,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS;gBACtC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;gBACZ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAEhC,MAAM,IAAI,GAAG,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerGenerateImageTool(server: McpServer): void;
3
+ //# sourceMappingURL=generate-image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-image.d.ts","sourceRoot":"","sources":["../../src/tools/generate-image.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAezE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqDjE"}
@@ -0,0 +1,61 @@
1
+ import { z } from "zod";
2
+ import { generateImage } from "../services/generate-image.js";
3
+ import { enqueueWorkflow } from "../services/workflow-executor.js";
4
+ import { listLocalModels } from "../services/model-resolver.js";
5
+ import { errorToToolResult } from "../utils/errors.js";
6
+ async function resolveCheckpoint() {
7
+ try {
8
+ const models = await listLocalModels("checkpoints");
9
+ return models[0]?.name;
10
+ }
11
+ catch {
12
+ return undefined;
13
+ }
14
+ }
15
+ export function registerGenerateImageTool(server) {
16
+ server.tool("generate_image", "Generate an image from a text prompt — the high-level entry point. Builds a txt2img workflow, " +
17
+ "filling any unspecified parameter from your configured defaults (set_defaults / COMFYUI_DEFAULT_* / config file), " +
18
+ "auto-selecting a local checkpoint when none is given. Returns the prompt_id immediately; the resulting " +
19
+ "asset_id arrives in the completion notification and can be passed to view_image or regenerate. " +
20
+ "For full control over the node graph, use create_workflow + enqueue_workflow instead.", {
21
+ prompt: z.string().describe("Positive text prompt"),
22
+ negative_prompt: z.string().optional().describe("Negative prompt (default: empty / from defaults)"),
23
+ width: z.number().int().positive().optional().describe("Image width"),
24
+ height: z.number().int().positive().optional().describe("Image height"),
25
+ steps: z.number().int().positive().optional().describe("Sampling steps"),
26
+ cfg: z.number().positive().optional().describe("CFG scale"),
27
+ sampler: z.string().optional().describe("Sampler name (e.g. euler, dpmpp_2m)"),
28
+ scheduler: z.string().optional().describe("Scheduler (e.g. normal, karras)"),
29
+ seed: z.number().int().optional().describe("Seed (omit to randomize)"),
30
+ checkpoint: z
31
+ .string()
32
+ .optional()
33
+ .describe("Checkpoint filename; auto-selected from local models if omitted"),
34
+ batch_size: z.number().int().positive().optional().describe("Number of images to generate"),
35
+ }, async (args) => {
36
+ try {
37
+ const result = await generateImage(args, {
38
+ resolveCheckpoint,
39
+ enqueue: (workflow) => enqueueWorkflow(workflow),
40
+ });
41
+ return {
42
+ content: [
43
+ {
44
+ type: "text",
45
+ text: JSON.stringify({
46
+ status: "enqueued",
47
+ prompt_id: result.prompt_id,
48
+ queue_remaining: result.queue_remaining,
49
+ checkpoint: result.checkpoint,
50
+ note: "asset_id will be available in the completion notification; use view_image or regenerate with it.",
51
+ }, null, 2),
52
+ },
53
+ ],
54
+ };
55
+ }
56
+ catch (err) {
57
+ return errorToToolResult(err);
58
+ }
59
+ });
60
+ }
61
+ //# sourceMappingURL=generate-image.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-image.js","sourceRoot":"","sources":["../../src/tools/generate-image.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"image-management.d.ts","sourceRoot":"","sources":["../../src/tools/image-management.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2HpE"}
1
+ {"version":3,"file":"image-management.d.ts","sourceRoot":"","sources":["../../src/tools/image-management.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgOpE"}
@@ -1,32 +1,113 @@
1
1
  import { z } from "zod";
2
- import { uploadImage, extractWorkflowFromImage, listOutputImages, } from "../services/image-management.js";
2
+ import { writeFile, mkdir } from "node:fs/promises";
3
+ import { join, basename } from "node:path";
4
+ import { uploadImage, extractWorkflowFromImage, listOutputImages, getOutputImage, uploadImageAuto, } from "../services/image-management.js";
3
5
  import { errorToToolResult } from "../utils/errors.js";
4
6
  export function registerImageManagementTools(server) {
5
- server.tool("upload_image", "Copy a local image file into ComfyUI's input/ directory so it can be used in img2img, inpaint, or ControlNet workflows. Returns the filename to use in LoadImage nodes.", {
7
+ // ── get_image ────────────────────────────────────────────────────────────
8
+ // Fetches a generated image from ComfyUI via HTTP /view.
9
+ // Works with remote ComfyUI — no COMFYUI_PATH required.
10
+ server.tool("get_image", "Fetch a generated image from ComfyUI and return it as an inline image. " +
11
+ "Works with remote ComfyUI instances — does not require COMFYUI_PATH. " +
12
+ "Use get_history first to obtain the filename.", {
13
+ filename: z
14
+ .string()
15
+ .describe("Output image filename, e.g. PulID_Klein_00001_.png"),
16
+ type: z
17
+ .enum(["output", "input", "temp"])
18
+ .optional()
19
+ .default("output")
20
+ .describe("Image directory: output (default), input, or temp"),
21
+ subfolder: z
22
+ .string()
23
+ .optional()
24
+ .default("")
25
+ .describe("Subfolder within the directory, if any"),
26
+ save_dir: z
27
+ .string()
28
+ .optional()
29
+ .describe("Local directory to save the image file. Defaults to /tmp/comfyui-images/."),
30
+ }, async (args) => {
31
+ try {
32
+ const { base64, mimeType } = await getOutputImage(args.filename, args.type ?? "output", args.subfolder ?? "");
33
+ // Save to local file
34
+ const saveDir = args.save_dir ?? process.cwd();
35
+ await mkdir(saveDir, { recursive: true });
36
+ const localFilename = basename(args.filename);
37
+ const savePath = join(saveDir, localFilename);
38
+ await writeFile(savePath, Buffer.from(base64, "base64"));
39
+ return {
40
+ content: [
41
+ {
42
+ type: "text",
43
+ text: `Saved to: ${savePath}`,
44
+ },
45
+ {
46
+ type: "image",
47
+ data: base64,
48
+ mimeType,
49
+ },
50
+ ],
51
+ };
52
+ }
53
+ catch (err) {
54
+ return errorToToolResult(err);
55
+ }
56
+ });
57
+ // ── upload_image ─────────────────────────────────────────────────────────
58
+ // Tries HTTP upload first (works remote), falls back to filesystem copy.
59
+ server.tool("upload_image", "Upload a local image file to ComfyUI's input/ directory so it can be " +
60
+ "referenced in LoadImage nodes. Tries HTTP upload first (works with " +
61
+ "remote ComfyUI), falls back to filesystem copy when COMFYUI_PATH is set.", {
6
62
  source_path: z
7
63
  .string()
8
64
  .describe("Absolute path to the local image file to upload"),
9
65
  filename: z
10
66
  .string()
11
67
  .optional()
12
- .describe("Override the filename in ComfyUI's input/ directory. Auto-detected from source path if omitted."),
68
+ .describe("Override the filename in ComfyUI's input/ directory. " +
69
+ "Auto-detected from source path if omitted."),
13
70
  }, async (args) => {
14
71
  try {
15
- const result = await uploadImage(args.source_path, args.filename);
72
+ // Try HTTP upload first (works for remote ComfyUI)
73
+ const result = await uploadImageAuto(args.source_path, args.filename);
16
74
  return {
17
75
  content: [
18
76
  {
19
77
  type: "text",
20
- text: `Image uploaded successfully.\n\nFilename: ${result.filename}\nPath: ${result.path}\n\nUse "${result.filename}" as the \`image\` input in LoadImage nodes.`,
78
+ text: `Image uploaded successfully via HTTP.\n\n` +
79
+ `Filename: ${result.filename}\n\n` +
80
+ `Use "${result.filename}" as the \`image\` input in LoadImage nodes.`,
21
81
  },
22
82
  ],
23
83
  };
24
84
  }
25
- catch (err) {
26
- return errorToToolResult(err);
85
+ catch (httpErr) {
86
+ // Fall back to filesystem copy if HTTP fails and COMFYUI_PATH is set
87
+ try {
88
+ const result = await uploadImage(args.source_path, args.filename);
89
+ return {
90
+ content: [
91
+ {
92
+ type: "text",
93
+ text: `Image uploaded successfully via filesystem.\n\n` +
94
+ `Filename: ${result.filename}\nPath: ${result.path}\n\n` +
95
+ `Use "${result.filename}" as the \`image\` input in LoadImage nodes.`,
96
+ },
97
+ ],
98
+ };
99
+ }
100
+ catch (fsErr) {
101
+ // Both failed — report both errors
102
+ return errorToToolResult(new Error(`HTTP upload failed: ${httpErr instanceof Error ? httpErr.message : httpErr}\n` +
103
+ `Filesystem fallback also failed: ${fsErr instanceof Error ? fsErr.message : fsErr}`));
104
+ }
27
105
  }
28
106
  });
29
- server.tool("workflow_from_image", "Extract embedded ComfyUI workflow metadata from a PNG file. ComfyUI stores the full workflow (API format) and prompt data in PNG tEXt chunks. Use this to reverse-engineer how any ComfyUI image was generated.", {
107
+ // ── workflow_from_image ───────────────────────────────────────────────────
108
+ server.tool("workflow_from_image", "Extract embedded ComfyUI workflow metadata from a PNG file. " +
109
+ "ComfyUI stores the full workflow (API format) and prompt data in PNG tEXt chunks. " +
110
+ "Use this to reverse-engineer how any ComfyUI image was generated.", {
30
111
  image_path: z
31
112
  .string()
32
113
  .describe("Absolute path to a ComfyUI-generated PNG file"),
@@ -35,10 +116,14 @@ export function registerImageManagementTools(server) {
35
116
  const result = await extractWorkflowFromImage(args.image_path);
36
117
  const sections = [];
37
118
  if (result.prompt) {
38
- sections.push("## API Format (prompt)\n\nThis is the executable workflow format:\n```json\n" + JSON.stringify(result.prompt, null, 2) + "\n```");
119
+ sections.push("## API Format (prompt)\n\nThis is the executable workflow format:\n```json\n" +
120
+ JSON.stringify(result.prompt, null, 2) +
121
+ "\n```");
39
122
  }
40
123
  if (result.workflow) {
41
- sections.push("## UI Format (workflow)\n\nThis is the ComfyUI web UI format with layout data:\n```json\n" + JSON.stringify(result.workflow, null, 2) + "\n```");
124
+ sections.push("## UI Format (workflow)\n\nThis is the ComfyUI web UI format with layout data:\n```json\n" +
125
+ JSON.stringify(result.workflow, null, 2) +
126
+ "\n```");
42
127
  }
43
128
  return {
44
129
  content: [
@@ -53,7 +138,10 @@ export function registerImageManagementTools(server) {
53
138
  return errorToToolResult(err);
54
139
  }
55
140
  });
56
- server.tool("list_output_images", "List recently generated images from ComfyUI's output directory. Returns filenames, sizes, and timestamps sorted newest-first.", {
141
+ // ── list_output_images ────────────────────────────────────────────────────
142
+ server.tool("list_output_images", "List recently generated images from ComfyUI's output directory. " +
143
+ "Returns filenames sorted newest-first. Requires COMFYUI_PATH. " +
144
+ "For remote ComfyUI, use get_history to find filenames, then get_image to fetch them.", {
57
145
  limit: z
58
146
  .number()
59
147
  .int()
@@ -1 +1 @@
1
- {"version":3,"file":"image-management.js","sourceRoot":"","sources":["../../src/tools/image-management.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"image-management.js","sourceRoot":"","sources":["../../src/tools/image-management.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- export declare function registerAllTools(server: McpServer): void;
2
+ export declare function registerAllTools(server: McpServer): Promise<void>;
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgBzE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAexD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqBzE,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBvE"}
@@ -12,7 +12,15 @@ import { registerProcessControlTools } from "./process-control.js";
12
12
  import { registerImageManagementTools } from "./image-management.js";
13
13
  import { registerMemoryManagementTools } from "./memory-management.js";
14
14
  import { registerGenerationTrackerTools } from "./generation-tracker.js";
15
- export function registerAllTools(server) {
15
+ import { registerAssetTools } from "./assets.js";
16
+ import { registerAutoloadedWorkflows } from "./workflow-autoload.js";
17
+ import { registerDefaultsTools } from "./defaults.js";
18
+ import { registerGenerateImageTool } from "./generate-image.js";
19
+ import { DefaultsManager } from "../services/defaults-manager.js";
20
+ export async function registerAllTools(server) {
21
+ // Hydrate persisted defaults before any tool registration so subsequent
22
+ // tools can consult DefaultsManager.apply() against a fully-resolved view.
23
+ await DefaultsManager.load();
16
24
  registerWorkflowExecuteTools(server);
17
25
  registerWorkflowVisualizeTools(server);
18
26
  registerWorkflowComposeTools(server);
@@ -27,5 +35,9 @@ export function registerAllTools(server) {
27
35
  registerImageManagementTools(server);
28
36
  registerMemoryManagementTools(server);
29
37
  registerGenerationTrackerTools(server);
38
+ registerAssetTools(server);
39
+ registerDefaultsTools(server);
40
+ registerGenerateImageTool(server);
41
+ await registerAutoloadedWorkflows(server);
30
42
  }
31
43
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AAEzE,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACvC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,8BAA8B,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAiB;IACtD,wEAAwE;IACxE,2EAA2E;IAC3E,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC;IAC7B,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACvC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,wBAAwB,CAAC,MAAM,CAAC,CAAC;IACjC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACpC,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACrC,6BAA6B,CAAC,MAAM,CAAC,CAAC;IACtC,8BAA8B,CAAC,MAAM,CAAC,CAAC;IACvC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9B,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /**
3
+ * Discover workflow JSON files in COMFYUI_WORKFLOWS_DIR (default
4
+ * `~/.comfyui-mcp/workflows`) and register each as its own MCP tool with a
5
+ * schema derived from its PARAM_* placeholders. Failures are logged and do
6
+ * not abort startup.
7
+ */
8
+ export declare function registerAutoloadedWorkflows(server: McpServer): Promise<void>;
9
+ //# sourceMappingURL=workflow-autoload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-autoload.d.ts","sourceRoot":"","sources":["../../src/tools/workflow-autoload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYzE;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DlF"}
@@ -0,0 +1,64 @@
1
+ import { discoverWorkflows, buildToolSchema, applyParams, getWorkflowsDir, } from "../services/workflow-autoload.js";
2
+ import { enqueueWorkflow } from "../services/workflow-executor.js";
3
+ import { errorToToolResult } from "../utils/errors.js";
4
+ import { logger } from "../utils/logger.js";
5
+ /**
6
+ * Discover workflow JSON files in COMFYUI_WORKFLOWS_DIR (default
7
+ * `~/.comfyui-mcp/workflows`) and register each as its own MCP tool with a
8
+ * schema derived from its PARAM_* placeholders. Failures are logged and do
9
+ * not abort startup.
10
+ */
11
+ export async function registerAutoloadedWorkflows(server) {
12
+ const dir = getWorkflowsDir();
13
+ let discovered;
14
+ try {
15
+ discovered = await discoverWorkflows(dir);
16
+ }
17
+ catch (err) {
18
+ logger.warn("Workflow autoload discovery failed", {
19
+ dir,
20
+ error: err instanceof Error ? err.message : err,
21
+ });
22
+ return;
23
+ }
24
+ if (discovered.length === 0) {
25
+ logger.info("No autoloaded workflows discovered", { dir });
26
+ return;
27
+ }
28
+ for (const wf of discovered) {
29
+ const shape = buildToolSchema(wf.placeholders);
30
+ const paramSummary = wf.placeholders
31
+ .map((p) => `${p.name}:${p.type}`)
32
+ .filter((s, i, a) => a.indexOf(s) === i)
33
+ .join(", ");
34
+ const description = `Run the autoloaded workflow "${wf.toolName}" (from ${wf.filePath}). ` +
35
+ `Params: ${paramSummary || "(none)"}`;
36
+ server.tool(wf.toolName, description, shape, async (args) => {
37
+ try {
38
+ const built = applyParams(wf.workflow, wf.placeholders, args);
39
+ const result = await enqueueWorkflow(built);
40
+ return {
41
+ content: [
42
+ {
43
+ type: "text",
44
+ text: JSON.stringify({
45
+ status: "enqueued",
46
+ tool: wf.toolName,
47
+ prompt_id: result.prompt_id,
48
+ queue_remaining: result.queue_remaining,
49
+ }, null, 2),
50
+ },
51
+ ],
52
+ };
53
+ }
54
+ catch (err) {
55
+ return errorToToolResult(err);
56
+ }
57
+ });
58
+ logger.info("Registered autoloaded workflow tool", {
59
+ tool: wf.toolName,
60
+ params: wf.placeholders.length,
61
+ });
62
+ }
63
+ }
64
+ //# sourceMappingURL=workflow-autoload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-autoload.js","sourceRoot":"","sources":["../../src/tools/workflow-autoload.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,eAAe,GAEhB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,MAAiB;IACjE,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;IAC9B,IAAI,UAAgC,CAAC;IACrC,IAAI,CAAC;QACH,UAAU,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE;YAChD,GAAG;YACH,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;SAChD,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY;aACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;aACjC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aACvC,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,WAAW,GACf,gCAAgC,EAAE,CAAC,QAAQ,WAAW,EAAE,CAAC,QAAQ,KAAK;YACtE,WAAW,YAAY,IAAI,QAAQ,EAAE,CAAC;QAExC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC1D,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,EAAE,IAA+B,CAAC,CAAC;gBACzF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,CAAC;gBAC5C,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;gCACE,MAAM,EAAE,UAAU;gCAClB,IAAI,EAAE,EAAE,CAAC,QAAQ;gCACjB,SAAS,EAAE,MAAM,CAAC,SAAS;gCAC3B,eAAe,EAAE,MAAM,CAAC,eAAe;6BACxC,EACD,IAAI,EACJ,CAAC,CACF;yBACF;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;YACjD,IAAI,EAAE,EAAE,CAAC,QAAQ;YACjB,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;SAC/B,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "comfyui-mcp",
3
- "version": "0.3.2",
3
+ "version": "0.4.1",
4
+ "mcpName": "io.github.artokun/comfyui-mcp",
4
5
  "description": "MCP server for ComfyUI — workflow execution, visualization, composition, registry, and skill generation",
5
6
  "type": "module",
6
7
  "main": "dist/index.js",
@@ -9,11 +9,15 @@
9
9
  * Detects stalls (no progress for too long) and unreachable servers.
10
10
  * Exits when all tracked jobs complete.
11
11
  *
12
- * Env: COMFY_PORT (default 8000), COMFY_HOST (default 127.0.0.1)
12
+ * Env: COMFYUI_PORT (or COMFY_PORT, default 8000), COMFYUI_HOST (or COMFY_HOST, default 127.0.0.1),
13
+ * COMFYUI_SSL (default false — set "true" to use https:// + wss://)
13
14
  */
14
15
 
15
- const HOST = process.env.COMFY_HOST || "127.0.0.1";
16
- const PORT = Number(process.env.COMFY_PORT) || 8000;
16
+ const HOST = process.env.COMFYUI_HOST || process.env.COMFY_HOST || "127.0.0.1";
17
+ const PORT = Number(process.env.COMFYUI_PORT || process.env.COMFY_PORT) || 8000;
18
+ const SSL = process.env.COMFYUI_SSL === "true";
19
+ const HTTP_PROTOCOL = SSL ? "https" : "http";
20
+ const WS_PROTOCOL = SSL ? "wss" : "ws";
17
21
  const TIMEOUT_MS = 10 * 60 * 1000;
18
22
  const THROTTLE_MS = 2000;
19
23
  const THROTTLE_PCT = 10;
@@ -63,7 +67,7 @@ async function fetchJSON(path, timeoutMs = 5000) {
63
67
  const controller = new AbortController();
64
68
  const timer = setTimeout(() => controller.abort(), timeoutMs);
65
69
  try {
66
- const res = await fetch(`http://${HOST}:${PORT}${path}`, {
70
+ const res = await fetch(`${HTTP_PROTOCOL}://${HOST}:${PORT}${path}`, {
67
71
  signal: controller.signal,
68
72
  });
69
73
  clearTimeout(timer);
@@ -278,7 +282,7 @@ function connectWebSocket() {
278
282
  // ComfyUI routes progress/executing events only to the WS client whose clientId
279
283
  // matches the client_id in the POST /prompt body.
280
284
  const ws = new WebSocket(
281
- `ws://${HOST}:${PORT}/ws?clientId=comfyui-mcp`,
285
+ `${WS_PROTOCOL}://${HOST}:${PORT}/ws?clientId=comfyui-mcp`,
282
286
  );
283
287
 
284
288
  ws.onopen = () => {
package/server.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
3
+ "name": "io.github.artokun/comfyui-mcp",
4
+ "description": "MCP server + Claude Code plugin for ComfyUI: run workflows, generate images, manage models & VRAM.",
5
+ "repository": {
6
+ "url": "https://github.com/artokun/comfyui-mcp",
7
+ "source": "github"
8
+ },
9
+ "version": "0.4.1",
10
+ "packages": [
11
+ {
12
+ "registryType": "npm",
13
+ "registryBaseUrl": "https://registry.npmjs.org",
14
+ "identifier": "comfyui-mcp",
15
+ "version": "0.4.1",
16
+ "transport": {
17
+ "type": "stdio"
18
+ }
19
+ }
20
+ ]
21
+ }