comfyui-mcp 0.7.0 → 0.8.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 (96) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +12 -0
  3. package/ROADMAP.md +15 -0
  4. package/dist/services/download-auth.d.ts +7 -0
  5. package/dist/services/download-auth.d.ts.map +1 -1
  6. package/dist/services/download-auth.js +26 -1
  7. package/dist/services/download-auth.js.map +1 -1
  8. package/dist/services/download-cache.d.ts +3 -1
  9. package/dist/services/download-cache.d.ts.map +1 -1
  10. package/dist/services/download-cache.js +45 -9
  11. package/dist/services/download-cache.js.map +1 -1
  12. package/dist/services/image-convert.d.ts +29 -0
  13. package/dist/services/image-convert.d.ts.map +1 -0
  14. package/dist/services/image-convert.js +218 -0
  15. package/dist/services/image-convert.js.map +1 -0
  16. package/dist/services/manifest.d.ts +63 -0
  17. package/dist/services/manifest.d.ts.map +1 -0
  18. package/dist/services/manifest.js +333 -0
  19. package/dist/services/manifest.js.map +1 -0
  20. package/dist/services/model-resolver.d.ts.map +1 -1
  21. package/dist/services/model-resolver.js +7 -1
  22. package/dist/services/model-resolver.js.map +1 -1
  23. package/dist/services/node-authoring.d.ts +5 -0
  24. package/dist/services/node-authoring.d.ts.map +1 -1
  25. package/dist/services/node-authoring.js +56 -0
  26. package/dist/services/node-authoring.js.map +1 -1
  27. package/dist/services/node-verify.d.ts +35 -0
  28. package/dist/services/node-verify.d.ts.map +1 -0
  29. package/dist/services/node-verify.js +138 -0
  30. package/dist/services/node-verify.js.map +1 -0
  31. package/dist/services/skill-cache.d.ts +26 -0
  32. package/dist/services/skill-cache.d.ts.map +1 -0
  33. package/dist/services/skill-cache.js +172 -0
  34. package/dist/services/skill-cache.js.map +1 -0
  35. package/dist/services/storage/azure-blob.d.ts +8 -0
  36. package/dist/services/storage/azure-blob.d.ts.map +1 -0
  37. package/dist/services/storage/azure-blob.js +146 -0
  38. package/dist/services/storage/azure-blob.js.map +1 -0
  39. package/dist/services/storage/hf.d.ts +7 -0
  40. package/dist/services/storage/hf.d.ts.map +1 -0
  41. package/dist/services/storage/hf.js +80 -0
  42. package/dist/services/storage/hf.js.map +1 -0
  43. package/dist/services/storage/http.d.ts +6 -0
  44. package/dist/services/storage/http.d.ts.map +1 -0
  45. package/dist/services/storage/http.js +41 -0
  46. package/dist/services/storage/http.js.map +1 -0
  47. package/dist/services/storage/index.d.ts +28 -0
  48. package/dist/services/storage/index.d.ts.map +1 -0
  49. package/dist/services/storage/index.js +42 -0
  50. package/dist/services/storage/index.js.map +1 -0
  51. package/dist/services/storage/s3.d.ts +12 -0
  52. package/dist/services/storage/s3.d.ts.map +1 -0
  53. package/dist/services/storage/s3.js +84 -0
  54. package/dist/services/storage/s3.js.map +1 -0
  55. package/dist/services/storage/types.d.ts +22 -0
  56. package/dist/services/storage/types.d.ts.map +1 -0
  57. package/dist/services/storage/types.js +2 -0
  58. package/dist/services/storage/types.js.map +1 -0
  59. package/dist/services/storage/utils.d.ts +6 -0
  60. package/dist/services/storage/utils.d.ts.map +1 -0
  61. package/dist/services/storage/utils.js +39 -0
  62. package/dist/services/storage/utils.js.map +1 -0
  63. package/dist/services/storage-upload.d.ts +18 -0
  64. package/dist/services/storage-upload.d.ts.map +1 -0
  65. package/dist/services/storage-upload.js +121 -0
  66. package/dist/services/storage-upload.js.map +1 -0
  67. package/dist/tools/image-convert.d.ts +3 -0
  68. package/dist/tools/image-convert.d.ts.map +1 -0
  69. package/dist/tools/image-convert.js +58 -0
  70. package/dist/tools/image-convert.js.map +1 -0
  71. package/dist/tools/index.d.ts.map +1 -1
  72. package/dist/tools/index.js +8 -0
  73. package/dist/tools/index.js.map +1 -1
  74. package/dist/tools/manifest.d.ts +3 -0
  75. package/dist/tools/manifest.d.ts.map +1 -0
  76. package/dist/tools/manifest.js +25 -0
  77. package/dist/tools/manifest.js.map +1 -0
  78. package/dist/tools/model-management.d.ts.map +1 -1
  79. package/dist/tools/model-management.js +9 -1
  80. package/dist/tools/model-management.js.map +1 -1
  81. package/dist/tools/node-authoring.d.ts.map +1 -1
  82. package/dist/tools/node-authoring.js +8 -2
  83. package/dist/tools/node-authoring.js.map +1 -1
  84. package/dist/tools/node-verify.d.ts +3 -0
  85. package/dist/tools/node-verify.d.ts.map +1 -0
  86. package/dist/tools/node-verify.js +42 -0
  87. package/dist/tools/node-verify.js.map +1 -0
  88. package/dist/tools/skill-generator.d.ts.map +1 -1
  89. package/dist/tools/skill-generator.js +16 -3
  90. package/dist/tools/skill-generator.js.map +1 -1
  91. package/dist/tools/storage-upload.d.ts +3 -0
  92. package/dist/tools/storage-upload.d.ts.map +1 -0
  93. package/dist/tools/storage-upload.js +57 -0
  94. package/dist/tools/storage-upload.js.map +1 -0
  95. package/package.json +5 -1
  96. package/scripts/gen-tool-docs.ts +6 -5
@@ -0,0 +1,58 @@
1
+ import { z } from "zod";
2
+ import { convertImage } from "../services/image-convert.js";
3
+ import { errorToToolResult } from "../utils/errors.js";
4
+ const convertImageSchema = {
5
+ asset_id: z
6
+ .string()
7
+ .optional()
8
+ .describe("Registered asset id from a completed job. Provide exactly one of asset_id or path."),
9
+ path: z
10
+ .string()
11
+ .optional()
12
+ .describe("Path to a source image under COMFYUI_PATH/output. Provide exactly one of asset_id or path."),
13
+ format: z
14
+ .enum(["png", "jpeg", "webp"])
15
+ .describe("Target encoded image format."),
16
+ quality: z
17
+ .number()
18
+ .int()
19
+ .min(1)
20
+ .max(100)
21
+ .optional()
22
+ .describe("Encoder quality, 1-100. Applies where supported by the selected format."),
23
+ progressive: z
24
+ .boolean()
25
+ .optional()
26
+ .describe("JPEG only: write a progressive JPEG."),
27
+ lossless: z
28
+ .boolean()
29
+ .optional()
30
+ .describe("WebP only: write lossless WebP."),
31
+ effort: z
32
+ .number()
33
+ .int()
34
+ .min(0)
35
+ .max(6)
36
+ .optional()
37
+ .describe("WebP only: encoder effort, 0-6."),
38
+ out_path: z
39
+ .string()
40
+ .optional()
41
+ .describe("Optional output path under COMFYUI_PATH/output where the converted image should be written."),
42
+ };
43
+ export function registerImageConvertTools(server) {
44
+ server.tool("convert_image", "Re-encode a generated image to PNG, JPEG, or WebP and return it inline as an image content block. Source can be a registered asset_id or a path under the local ComfyUI output directory. Optionally writes the converted image back under the output directory and reports source/output size plus bytes saved.", convertImageSchema, async (args) => {
45
+ try {
46
+ const result = await convertImage(args);
47
+ return {
48
+ content: result.content.map((block) => block.type === "image"
49
+ ? { type: "image", data: block.data, mimeType: block.mimeType }
50
+ : { type: "text", text: block.text }),
51
+ };
52
+ }
53
+ catch (err) {
54
+ return errorToToolResult(err);
55
+ }
56
+ });
57
+ }
58
+ //# sourceMappingURL=image-convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-convert.js","sourceRoot":"","sources":["../../src/tools/image-convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,kBAAkB,GAAG;IACzB,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oFAAoF,CAAC;IACjG,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4FAA4F,CAAC;IACzG,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;SAC7B,QAAQ,CAAC,8BAA8B,CAAC;IAC3C,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yEAAyE,CAAC;IACtF,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,sCAAsC,CAAC;IACnD,QAAQ,EAAE,CAAC;SACR,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6FAA6F,CAAC;CAC3G,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,kTAAkT,EAClT,kBAAkB,EAClB,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;YACxC,OAAO;gBACL,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACpC,KAAK,CAAC,IAAI,KAAK,OAAO;oBACpB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAgB,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;oBACxE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAChD;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":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkCzE,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCvE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAsCzE,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCvE"}
@@ -23,12 +23,16 @@ import { registerNodeSnapshotsTools } from "./node-snapshots.js";
23
23
  import { registerNodeBisectTools } from "./node-bisect.js";
24
24
  import { registerNodeManagementTools } from "./node-management.js";
25
25
  import { registerNodeAuthoringTools } from "./node-authoring.js";
26
+ import { registerNodeVerifyTools } from "./node-verify.js";
26
27
  import { registerWorkflowDepsTools } from "./workflow-deps.js";
27
28
  import { registerInstallComfyUITools } from "./install-comfyui.js";
28
29
  import { registerUpdateComfyUITools } from "./update-comfyui.js";
29
30
  import { registerWorkspaceEnvTools } from "./workspace-env.js";
30
31
  import { registerApiNodesTools } from "./api-nodes.js";
31
32
  import { registerManagerConfigTools } from "./manager-config.js";
33
+ import { registerManifestTools } from "./manifest.js";
34
+ import { registerImageConvertTools } from "./image-convert.js";
35
+ import { registerStorageUploadTools } from "./storage-upload.js";
32
36
  import { DefaultsManager } from "../services/defaults-manager.js";
33
37
  export async function registerAllTools(server) {
34
38
  // Hydrate persisted defaults before any tool registration so subsequent
@@ -64,6 +68,10 @@ export async function registerAllTools(server) {
64
68
  registerApiNodesTools(server);
65
69
  registerManagerConfigTools(server);
66
70
  registerNodeAuthoringTools(server);
71
+ registerNodeVerifyTools(server);
72
+ registerManifestTools(server);
73
+ registerImageConvertTools(server);
74
+ registerStorageUploadTools(server);
67
75
  await registerAutoloadedWorkflows(server);
68
76
  }
69
77
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerManifestTools(server: McpServer): void;
3
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/tools/manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA4B7D"}
@@ -0,0 +1,25 @@
1
+ import { z } from "zod";
2
+ import { applyManifest, manifestSchema } from "../services/manifest.js";
3
+ import { errorToToolResult } from "../utils/errors.js";
4
+ export function registerManifestTools(server) {
5
+ server.tool("apply_manifest", "Apply a local ComfyUI setup manifest from an inline object or .json/.yaml/.yml file. LOCAL-ONLY: requires COMFYUI_PATH. Composes existing custom-node installs and model downloads, installs pip packages into the ComfyUI Python environment, and reports apt entries as skipped because system packages require manual/root installation.", {
6
+ manifest: manifestSchema
7
+ .optional()
8
+ .describe("Inline manifest object. Provide exactly one of `manifest` or `path`."),
9
+ path: z
10
+ .string()
11
+ .optional()
12
+ .describe("Path to a .json, .yaml, or .yml manifest file. Provide exactly one of `manifest` or `path`."),
13
+ }, async (args) => {
14
+ try {
15
+ const result = await applyManifest(args);
16
+ return {
17
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
18
+ };
19
+ }
20
+ catch (err) {
21
+ return errorToToolResult(err);
22
+ }
23
+ });
24
+ }
25
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/tools/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,IAAI,CACT,gBAAgB,EAChB,6UAA6U,EAC7U;QACE,QAAQ,EAAE,cAAc;aACrB,QAAQ,EAAE;aACV,QAAQ,CACP,sEAAsE,CACvE;QACH,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,6FAA6F,CAC9F;KACJ,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC5E,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":"model-management.d.ts","sourceRoot":"","sources":["../../src/tools/model-management.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAiCzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkIpE"}
1
+ {"version":3,"file":"model-management.d.ts","sourceRoot":"","sources":["../../src/tools/model-management.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAyCzE,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkIpE"}
@@ -22,6 +22,14 @@ const downloadAuthSchema = z.discriminatedUnion("type", [
22
22
  query_param: z.string().min(1).describe("Query parameter name"),
23
23
  query_value: z.string().describe("Query parameter value"),
24
24
  }),
25
+ z.object({
26
+ type: z.literal("s3"),
27
+ access_key_id: z.string().min(1).describe("AWS/S3-compatible access key id"),
28
+ secret_access_key: z.string().min(1).describe("AWS/S3-compatible secret access key"),
29
+ session_token: z.string().optional().describe("Optional temporary session token"),
30
+ region: z.string().optional().describe("Optional AWS region override"),
31
+ endpoint: z.string().url().optional().describe("Optional S3-compatible endpoint for R2-style storage"),
32
+ }),
25
33
  ]);
26
34
  export function registerModelManagementTools(server) {
27
35
  server.tool("search_models", "Search HuggingFace Hub for models usable in ComfyUI (checkpoints, LoRAs, VAEs, ControlNets, etc.). Read-only and network-only: queries HuggingFace over HTTP, does NOT require a running ComfyUI or COMFYUI_PATH and does not download anything. Returns a ranked list with modelId, author, downloads, likes, and tags. Pick a result's download URL and pass it to download_model to install it locally. For packs of custom nodes (not models) use search_custom_nodes.", {
@@ -56,7 +64,7 @@ export function registerModelManagementTools(server) {
56
64
  return errorToToolResult(err);
57
65
  }
58
66
  });
59
- server.tool("download_model", "Download a model file to the ComfyUI models directory from a URL (HuggingFace or direct link)", {
67
+ server.tool("download_model", "Download a model file to the ComfyUI models directory from a URL (HuggingFace, direct HTTP(S), s3://, or Azure Blob)", {
60
68
  url: z.string().url().describe("Direct download URL for the model file"),
61
69
  target_subfolder: modelTypeEnum.describe("Target subfolder under ComfyUI models/ (e.g. 'checkpoints', 'loras', 'vae')"),
62
70
  filename: z
@@ -1 +1 @@
1
- {"version":3,"file":"model-management.js","sourceRoot":"","sources":["../../src/tools/model-management.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-management.js","sourceRoot":"","sources":["../../src/tools/model-management.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"node-authoring.d.ts","sourceRoot":"","sources":["../../src/tools/node-authoring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwGlE"}
1
+ {"version":3,"file":"node-authoring.d.ts","sourceRoot":"","sources":["../../src/tools/node-authoring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8GlE"}
@@ -7,8 +7,9 @@ export function registerNodeAuthoringTools(server) {
7
7
  "[tool.comfy] PublisherId/DisplayName/Icon table the Comfy Registry " +
8
8
  "requires), __init__.py exporting NODE_CLASS_MAPPINGS / " +
9
9
  "NODE_DISPLAY_NAME_MAPPINGS, and src/nodes.py containing a runnable sample " +
10
- "node (INPUT_TYPES/RETURN_TYPES/FUNCTION/CATEGORY). Optionally emits a " +
11
- "web/js frontend stub and wires WEB_DIRECTORY. This is the FIRST step of " +
10
+ "node (INPUT_TYPES/RETURN_TYPES/FUNCTION/CATEGORY), plus .comfyignore and " +
11
+ ".gitignore. Optionally emits a web/js frontend stub (wiring WEB_DIRECTORY) " +
12
+ "and a GitHub Actions publish workflow (with_ci). This is the FIRST step of " +
12
13
  "the author loop: scaffold here, then restart_comfyui to load it, test it, " +
13
14
  "and finally publish_custom_node. LOCAL-ONLY: it writes to your local " +
14
15
  "ComfyUI install and requires COMFYUI_PATH (it does nothing for a remote " +
@@ -38,6 +39,10 @@ export function registerNodeAuthoringTools(server) {
38
39
  .boolean()
39
40
  .optional()
40
41
  .describe("If true, also generate a web/js/<name>.js extension stub and set WEB_DIRECTORY (default false)."),
42
+ with_ci: z
43
+ .boolean()
44
+ .optional()
45
+ .describe("If true, also generate .github/workflows/publish_action.yml (Comfy-Org/publish-node-action; needs the REGISTRY_ACCESS_TOKEN repo secret) so pushing a pyproject.toml version bump auto-publishes (default false)."),
41
46
  overwrite: z
42
47
  .boolean()
43
48
  .optional()
@@ -51,6 +56,7 @@ export function registerNodeAuthoringTools(server) {
51
56
  description: args.description,
52
57
  publisherId: args.publisher_id,
53
58
  withFrontend: args.with_frontend,
59
+ withCi: args.with_ci,
54
60
  overwrite: args.overwrite,
55
61
  });
56
62
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"node-authoring.js","sourceRoot":"","sources":["../../src/tools/node-authoring.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-authoring.js","sourceRoot":"","sources":["../../src/tools/node-authoring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerNodeVerifyTools(server: McpServer): void;
3
+ //# sourceMappingURL=node-verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-verify.d.ts","sourceRoot":"","sources":["../../src/tools/node-verify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6C/D"}
@@ -0,0 +1,42 @@
1
+ import { z } from "zod";
2
+ import { verifyCustomNode } from "../services/node-verify.js";
3
+ import { errorToToolResult } from "../utils/errors.js";
4
+ export function registerNodeVerifyTools(server) {
5
+ server.tool("verify_custom_node", "Test that a custom-node pack actually loads in ComfyUI — the middle step of " +
6
+ "the author loop (scaffold_custom_node → verify_custom_node → publish_custom_node). " +
7
+ "Restarts the local ComfyUI and waits for it to become ready, then checks that the " +
8
+ "pack's node class_types appear in /object_info. A node that fails to import (a " +
9
+ "missing dependency or a syntax error) simply never registers, so any missing " +
10
+ "class_types pinpoint a broken pack. Provide class_types explicitly, or a pack " +
11
+ "`name` whose __init__.py declares NODE_CLASS_MAPPINGS (the keys are inferred). " +
12
+ "LOCAL-ONLY: needs COMFYUI_PATH and a managed local ComfyUI. Set restart:false to " +
13
+ "check the already-running server without restarting it.", {
14
+ name: z
15
+ .string()
16
+ .optional()
17
+ .describe("Pack folder under custom_nodes/. If class_types is omitted, its __init__.py NODE_CLASS_MAPPINGS keys are inferred and checked."),
18
+ class_types: z
19
+ .array(z.string())
20
+ .optional()
21
+ .describe("Explicit NODE_CLASS_MAPPINGS keys to confirm are registered in /object_info. Takes precedence over inferring from `name`."),
22
+ restart: z
23
+ .boolean()
24
+ .optional()
25
+ .describe("Restart ComfyUI before checking so newly-added packs load (default true). Set false to check the live server as-is."),
26
+ }, async (args) => {
27
+ try {
28
+ const result = await verifyCustomNode({
29
+ name: args.name,
30
+ classTypes: args.class_types,
31
+ restart: args.restart,
32
+ });
33
+ return {
34
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
35
+ };
36
+ }
37
+ catch (err) {
38
+ return errorToToolResult(err);
39
+ }
40
+ });
41
+ }
42
+ //# sourceMappingURL=node-verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-verify.js","sourceRoot":"","sources":["../../src/tools/node-verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,8EAA8E;QAC5E,qFAAqF;QACrF,oFAAoF;QACpF,iFAAiF;QACjF,+EAA+E;QAC/E,gFAAgF;QAChF,iFAAiF;QACjF,mFAAmF;QACnF,yDAAyD,EAC3D;QACE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,gIAAgI,CACjI;QACH,WAAW,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CACP,2HAA2H,CAC5H;QACH,OAAO,EAAE,CAAC;aACP,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,qHAAqH,CAAC;KACnI,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;gBACpC,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,UAAU,EAAE,IAAI,CAAC,WAAW;gBAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAC;YACH,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aAC5E,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":"skill-generator.d.ts","sourceRoot":"","sources":["../../src/tools/skill-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6CnE"}
1
+ {"version":3,"file":"skill-generator.d.ts","sourceRoot":"","sources":["../../src/tools/skill-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0DnE"}
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod";
2
- import { generateSkill } from "../services/skill-generator.js";
2
+ import { generateSkillCached } from "../services/skill-cache.js";
3
3
  import { errorToToolResult } from "../utils/errors.js";
4
4
  import { writeFile, mkdir } from "node:fs/promises";
5
5
  import { join } from "node:path";
6
6
  export function registerSkillGeneratorTools(server) {
7
- server.tool("generate_node_skill", "Generate a Claude skill (SKILL.md) documenting a ComfyUI custom node pack: its nodes, inputs/outputs, and example workflows. Accepts a ComfyUI Registry ID (resolved via api.comfy.org) or a GitHub repository URL. Fetches the repo README and scans its Python NODE_CLASS_MAPPINGS and example workflows over the network (uses GITHUB_TOKEN if set to avoid rate limits), so internet access is required. If a ComfyUI server is reachable it enriches node input/output types from /object_info, but the server is optional. Returns the SKILL.md markdown; if install_in is set, also creates that directory (recursively) and writes SKILL.md there, overwriting any existing file.", {
7
+ server.tool("generate_node_skill", "Generate a Claude skill (SKILL.md) documenting a ComfyUI custom node pack: its nodes, inputs/outputs, and example workflows. Accepts a ComfyUI Registry ID (resolved via api.comfy.org) or a GitHub repository URL. Uses a read-through cache under ~/.comfyui-mcp/skill-cache (override COMFYUI_SKILL_CACHE_DIR); set refresh:true to bypass it. On cache miss, fetches the repo README and scans its Python NODE_CLASS_MAPPINGS and example workflows over the network (uses GITHUB_TOKEN if set to avoid rate limits), so internet access is required. If a ComfyUI server is reachable it enriches node input/output types from /object_info, but the server is optional. Returns the SKILL.md markdown with structured cache metadata; if install_in is set, also creates that directory (recursively) and writes SKILL.md there, overwriting any existing file.", {
8
8
  source: z
9
9
  .string()
10
10
  .describe("ComfyUI Registry node ID (e.g. 'comfyui-impact-pack') or GitHub repository URL"),
@@ -12,9 +12,20 @@ export function registerSkillGeneratorTools(server) {
12
12
  .string()
13
13
  .optional()
14
14
  .describe("Optional directory to write the generated SKILL.md into. Created recursively if missing; an existing SKILL.md is overwritten. Omit to only return the markdown without touching disk."),
15
+ refresh: z
16
+ .boolean()
17
+ .optional()
18
+ .describe("Bypass the read-through cache and regenerate the SKILL.md, overwriting the cached entry."),
15
19
  }, async (args) => {
16
20
  try {
17
- const markdown = await generateSkill(args.source);
21
+ const result = await generateSkillCached(args.source, { refresh: args.refresh });
22
+ const markdown = result.markdown;
23
+ const structuredContent = {
24
+ cache_hit: result.cacheHit,
25
+ cache_key: result.safeKey,
26
+ cache_dir: result.cacheDir,
27
+ version: result.metadata.version,
28
+ };
18
29
  // Optionally write to disk
19
30
  if (args.install_in) {
20
31
  const dir = args.install_in;
@@ -28,10 +39,12 @@ export function registerSkillGeneratorTools(server) {
28
39
  text: `Skill file written to ${filePath}\n\n${markdown}`,
29
40
  },
30
41
  ],
42
+ structuredContent,
31
43
  };
32
44
  }
33
45
  return {
34
46
  content: [{ type: "text", text: markdown }],
47
+ structuredContent,
35
48
  };
36
49
  }
37
50
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"skill-generator.js","sourceRoot":"","sources":["../../src/tools/skill-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAW,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,2pBAA2pB,EAC3pB;QACE,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,CACP,gFAAgF,CACjF;QACH,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,uLAAuL,CACxL;KACJ,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAElD,2BAA2B;YAC3B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC5B,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBACvC,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC7C,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,yBAAyB,QAAQ,OAAO,QAAQ,EAAE;yBACzD;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;aACrD,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"skill-generator.js","sourceRoot":"","sources":["../../src/tools/skill-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,u0BAAu0B,EACv0B;QACE,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,CACP,gFAAgF,CACjF;QACH,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,uLAAuL,CACxL;QACH,OAAO,EAAE,CAAC;aACP,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,0FAA0F,CAAC;KACxG,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;YACjC,MAAM,iBAAiB,GAAG;gBACxB,SAAS,EAAE,MAAM,CAAC,QAAQ;gBAC1B,SAAS,EAAE,MAAM,CAAC,OAAO;gBACzB,SAAS,EAAE,MAAM,CAAC,QAAQ;gBAC1B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO;aACjC,CAAC;YAEF,2BAA2B;YAC3B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;gBAC5B,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBACvC,MAAM,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC7C,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,yBAAyB,QAAQ,OAAO,QAAQ,EAAE;yBACzD;qBACF;oBACD,iBAAiB;iBAClB,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBACpD,iBAAiB;aAClB,CAAC;QACJ,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 registerStorageUploadTools(server: McpServer): void;
3
+ //# sourceMappingURL=storage-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-upload.d.ts","sourceRoot":"","sources":["../../src/tools/storage-upload.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA4CzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqBlE"}
@@ -0,0 +1,57 @@
1
+ import { z } from "zod";
2
+ import { uploadOutput } from "../services/storage-upload.js";
3
+ import { errorToToolResult } from "../utils/errors.js";
4
+ const s3DestinationSchema = z.object({
5
+ bucket: z.string().min(1).describe("Destination S3 bucket"),
6
+ prefix: z.string().optional().describe("Optional object key prefix"),
7
+ async: z.boolean().optional().describe("Accepted for API compatibility; uploads complete before the tool returns."),
8
+ });
9
+ const azureDestinationSchema = z.object({
10
+ container: z.string().min(1).describe("Destination Azure Blob container"),
11
+ blob_prefix: z.string().optional().describe("Optional blob name prefix"),
12
+ });
13
+ const httpDestinationSchema = z.object({
14
+ url: z.string().url().describe("HTTP(S) URL to PUT the output file to"),
15
+ });
16
+ const hfDestinationSchema = z.object({
17
+ repo: z.string().min(1).describe("HuggingFace repo in owner/name format"),
18
+ repo_type: z.enum(["model", "dataset", "space"]).optional().describe("Repo type; defaults to model"),
19
+ path: z.string().optional().describe("Optional path prefix inside the repo"),
20
+ });
21
+ const uploadOutputSchema = {
22
+ asset_id: z
23
+ .string()
24
+ .optional()
25
+ .describe("Registered asset id from a completed job. Provide exactly one of asset_id or path."),
26
+ path: z
27
+ .string()
28
+ .optional()
29
+ .describe("Path to a generated output under COMFYUI_PATH/output. Provide exactly one of asset_id or path."),
30
+ destination: z
31
+ .object({
32
+ s3: s3DestinationSchema.optional(),
33
+ azure: azureDestinationSchema.optional(),
34
+ http: httpDestinationSchema.optional(),
35
+ hf: hfDestinationSchema.optional(),
36
+ })
37
+ .describe("Exactly one upload destination."),
38
+ };
39
+ export function registerStorageUploadTools(server) {
40
+ server.tool("upload_output", "Upload a generated ComfyUI output to cloud storage. Source can be asset_id or a local path under COMFYUI_PATH/output. Destination can be S3, Azure Blob, HTTP PUT, or HuggingFace via the hf CLI.", uploadOutputSchema, async (args) => {
41
+ try {
42
+ const result = await uploadOutput(args);
43
+ return {
44
+ content: [
45
+ {
46
+ type: "text",
47
+ text: JSON.stringify(result, null, 2),
48
+ },
49
+ ],
50
+ };
51
+ }
52
+ catch (err) {
53
+ return errorToToolResult(err);
54
+ }
55
+ });
56
+ }
57
+ //# sourceMappingURL=storage-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-upload.js","sourceRoot":"","sources":["../../src/tools/storage-upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAA4B,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACpE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;CACpH,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACzE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;CACzE,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACxE,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACzE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACpG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CAC7E,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG;IACzB,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oFAAoF,CAAC;IACjG,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gGAAgG,CAAC;IAC7G,WAAW,EAAE,CAAC;SACX,MAAM,CAAC;QACN,EAAE,EAAE,mBAAmB,CAAC,QAAQ,EAAE;QAClC,KAAK,EAAE,sBAAsB,CAAC,QAAQ,EAAE;QACxC,IAAI,EAAE,qBAAqB,CAAC,QAAQ,EAAE;QACtC,EAAE,EAAE,mBAAmB,CAAC,QAAQ,EAAE;KACnC,CAAC;SACD,QAAQ,CAAC,iCAAiC,CAAC;CAC/C,CAAC;AAEF,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,IAAI,CACT,eAAe,EACf,mMAAmM,EACnM,kBAAkB,EAClB,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAA2B,CAAC,CAAC;YAC/D,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;qBACtC;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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "comfyui-mcp",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "mcpName": "io.github.artokun/comfyui-mcp",
5
5
  "description": "MCP server for ComfyUI — workflow execution, visualization, composition, registry, and skill generation",
6
6
  "homepage": "https://comfyui-mcp.artokun.io/docs",
@@ -29,12 +29,16 @@
29
29
  "@ai-sdk/anthropic": "^3.0.79",
30
30
  "@ai-sdk/google": "^3.0.79",
31
31
  "@ai-sdk/openai": "^3.0.65",
32
+ "@aws-sdk/client-s3": "^3.1053.0",
33
+ "@azure/storage-blob": "^12.31.0",
32
34
  "@modelcontextprotocol/sdk": "^1.12.1",
33
35
  "@stable-canvas/comfyui-client": "^1.5.9",
34
36
  "ai": "^6.0.191",
35
37
  "better-sqlite3": "^12.6.2",
36
38
  "cloudflared": "^0.7.1",
37
39
  "dotenv": "^16.4.7",
40
+ "sharp": "^0.34.5",
41
+ "yaml": "^2.9.0",
38
42
  "zod": "^3.24.2"
39
43
  },
40
44
  "devDependencies": {
@@ -110,9 +110,10 @@ const CATEGORIES: Array<{
110
110
  group: "Assets & Images",
111
111
  slug: "assets-images",
112
112
  icon: "images",
113
- description: "View generated images, upload media inputs, and browse outputs.",
113
+ description: "View, convert, and upload generated images; upload media inputs; browse outputs.",
114
114
  tools: [
115
- "view_image", "get_image", "upload_image", "upload_video", "upload_audio",
115
+ "view_image", "get_image", "convert_image", "upload_output",
116
+ "upload_image", "upload_video", "upload_audio",
116
117
  "list_output_images", "list_assets", "get_asset_metadata",
117
118
  ],
118
119
  },
@@ -137,7 +138,7 @@ const CATEGORIES: Array<{
137
138
  "list_installed_nodes", "sync_node_dependencies", "extract_workflow_dependencies",
138
139
  "install_workflow_dependencies", "save_node_snapshot", "restore_node_snapshot",
139
140
  "list_node_snapshots", "bisect_start", "bisect_good", "bisect_bad",
140
- "bisect_reset", "bisect_status", "scaffold_custom_node", "publish_custom_node",
141
+ "bisect_reset", "bisect_status", "scaffold_custom_node", "verify_custom_node", "publish_custom_node",
141
142
  ],
142
143
  },
143
144
  {
@@ -151,9 +152,9 @@ const CATEGORIES: Array<{
151
152
  group: "Install & Environment",
152
153
  slug: "install-environment",
153
154
  icon: "wrench",
154
- description: "Install/update ComfyUI, manage workspaces, inspect the environment, configure ComfyUI-Manager.",
155
+ description: "Install/update ComfyUI, apply a setup manifest, manage workspaces, inspect the environment, configure ComfyUI-Manager.",
155
156
  tools: [
156
- "install_comfyui", "update_comfyui", "update_all", "get_workspace",
157
+ "install_comfyui", "update_comfyui", "update_all", "apply_manifest", "get_workspace",
157
158
  "set_default_workspace", "list_workspaces", "get_environment", "configure_manager",
158
159
  ],
159
160
  },