voidless-mcp 1.7.0 → 1.7.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 (3) hide show
  1. package/README.md +4 -2
  2. package/package.json +1 -1
  3. package/tools.js +11 -6
package/README.md CHANGED
@@ -118,7 +118,9 @@ Or just the hosted connector, no key: `claude mcp add --transport http voidless
118
118
 
119
119
  **Free game-dev tools** (no credits)
120
120
 
121
- The same tools as [voidless.dev/tools](https://voidless.dev/tools), for any image, not just your library. Inputs are image URLs (a `cdn.voidless.dev` link from `get_asset` works) or base64/data URIs, PNG or GIF, up to 2048x2048, 256 frames and 32 MB per call. Results come back in the chat: images as PNG/GIF, the `.tres` and atlas `.json` as text. They run on Voidless's server: the hosted connector serves them, and the npm package forwards them there with your key (so they need a connection).
121
+ The same tools as [voidless.dev/tools](https://voidless.dev/tools), for any image, not just your library. Inputs are image URLs (a `cdn.voidless.dev` link from `get_asset` or a saved result works), image keys from your library (`assets/…png`, as `get_asset` lists them), or base64/data URIs, PNG or GIF, up to 2048x2048, 256 frames and 32 MB per call. Results come back in the chat: images as PNG/GIF, the `.tres` and atlas `.json` as text.
122
+
123
+ Results can also be saved to your library (free, private, counts toward your storage), which gives them an asset id and `cdn.voidless.dev` URLs to pass to the next tool instead of base64 (for example `generate_vfx` → `palette_swap` → `add_outline` → `animate_sprite`). `generate_vfx` saves its effect by default (with its recipe, so it can be rendered again; `save: false` skips it); `palette_swap`, `add_outline`, `pack_sprite_sheet`, `slice_sprite_sheet` and `make_gif` save only when you pass `save: true`. They run on Voidless's server: the hosted connector serves them, and the npm package forwards them there with your key (so they need a connection).
122
124
 
123
125
  | Tool | What it does |
124
126
  | --- | --- |
@@ -142,7 +144,7 @@ Generation tools create new content in your library; none deletes or overwrites
142
144
 
143
145
  ## Privacy Policy
144
146
 
145
- This server sends your prompts, any images you pass in, and your API key to the Voidless API (api.voidless.dev) to run generations; results are stored in your Voidless account. The free tools send their inputs to mcp.voidless.dev, which processes them in memory and stores nothing; each call is logged against your account (tool, time taken, success, result size) for usage statistics. It collects nothing else and keeps no local data. See the [Voidless Privacy Policy](https://voidless.dev/privacy-policy) for how Voidless collects, uses, stores, shares and retains data, and the [Terms of Service](https://voidless.dev/terms-of-service).
147
+ This server sends your prompts, any images you pass in, and your API key to the Voidless API (api.voidless.dev) to run generations; results are stored in your Voidless account. The free tools send their inputs to mcp.voidless.dev, which processes them in memory and stores nothing unless a result is saved to your library (`generate_vfx` by default, the others with `save: true`), where it is kept like any other asset of yours; each call is logged against your account (tool, time taken, success, result size) for usage statistics. It collects nothing else and keeps no local data. See the [Voidless Privacy Policy](https://voidless.dev/privacy-policy) for how Voidless collects, uses, stores, shares and retains data, and the [Terms of Service](https://voidless.dev/terms-of-service).
146
148
 
147
149
  ## Support
148
150
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "voidless-mcp",
3
3
  "mcpName": "dev.voidless/voidless",
4
- "version": "1.7.0",
4
+ "version": "1.7.1",
5
5
  "description": "MCP server for Voidless: generate game sprites, animations, sound, music, video and 3D models",
6
6
  "license": "MIT",
7
7
  "author": "Voidless Dev Inc. <contact@voidless.dev>",
package/tools.js CHANGED
@@ -286,7 +286,8 @@ export function createVoidlessServer(API_KEY, transport = "stdio") {
286
286
  const content = [
287
287
  {
288
288
  type: "text",
289
- text: [`${label} added to asset ${assetId} (${APP_URL}/asset/${assetId}).`, money(data)]
289
+ // note: e.g. an end frame of another size was scaled to the start image's.
290
+ text: [`${label} added to asset ${assetId} (${APP_URL}/asset/${assetId}).`, data.note, money(data)]
290
291
  .filter(Boolean)
291
292
  .join("\n"),
292
293
  },
@@ -425,8 +426,8 @@ export function createVoidlessServer(API_KEY, transport = "stdio") {
425
426
  .string()
426
427
  .default("")
427
428
  .describe(
428
- "Work from one image of an existing frame instead of the asset's base: pass an image key exactly as " +
429
- "get_asset lists it. Empty = the asset's current base image."
429
+ "Work from one image instead of the asset's base: an image key from any of your assets (as get_asset " +
430
+ "lists it), or its cdn.voidless.dev URL. Empty = the asset's current base image."
430
431
  );
431
432
  const frameId = z
432
433
  .number()
@@ -628,7 +629,7 @@ export function createVoidlessServer(API_KEY, transport = "stdio") {
628
629
  "get_asset",
629
630
  "Show one asset with every frame: frame ids, types (animation, rotations - 8-way, edit - text, layer…), " +
630
631
  "names, facings and image keys. Frame ids are what frameIndex/items/frameId take elsewhere; image keys " +
631
- "are what referenceFile and end_frame take. Free.",
632
+ "are what referenceFile and end_frame take, on this asset or any other of yours. Free.",
632
633
  { id: assetId, preview: z.boolean().default(true).describe("Include the base image inline") },
633
634
  readTool("Get asset"),
634
635
  tool(async ({ id, preview }) => {
@@ -838,7 +839,7 @@ export function createVoidlessServer(API_KEY, transport = "stdio") {
838
839
  prompt: z.string().describe("What to change"),
839
840
  referenceFile,
840
841
  frameId,
841
- images: z.array(z.string()).max(4).default([]).describe("Optional extra reference images: image keys from get_asset or https URLs"),
842
+ images: z.array(z.string()).max(4).default([]).describe("Optional extra reference images: image keys from any of your assets (get_asset lists them), or their cdn.voidless.dev URLs. Other links are refused: upload the picture first"),
842
843
  remove_bg: z.boolean().default(true).describe("Remove the background from the result, as the app's editor does. Set false for artwork or a scene that should keep its background"),
843
844
  },
844
845
  writeTool("Edit image"),
@@ -1043,7 +1044,11 @@ export function createVoidlessServer(API_KEY, transport = "stdio") {
1043
1044
  id: assetId,
1044
1045
  prompt: z.string().describe("The motion, e.g. 'walk cycle', 'swings sword overhead'"),
1045
1046
  referenceFile,
1046
- end_frame: z.string().default("").describe("Optional image key for the clip to end on (e.g. to loop back to a pose). Empty = free ending"),
1047
+ end_frame: z.string().default("").describe(
1048
+ "Optional image for the clip to end on: an image key from any of your assets (get_asset lists them), or its " +
1049
+ "cdn.voidless.dev URL, e.g. the start image to loop, or another sprite's pose. Empty = free ending. An end " +
1050
+ "image of another size is scaled to the start image's; one of a very different shape is refused (nothing charged)"
1051
+ ),
1047
1052
  frameId,
1048
1053
  },
1049
1054
  writeTool("Animate sprite"),