README_MCP.md
README_MCP.md
Looking for the LM Studio settings? https://lmstudio.ai/ceveyne/process-image/files/README.md
Looking for an illustrated MCP setup example? See our companion plugin find-images-mcp-bridge https://github.com/ceveyne/find-images-mcp-bridge
Local stdio MCP entrypoint living inside the process-image LM Studio plugin repo. Provides agentic image editing — cropping, masking, AI-powered zoom-in, inpainting, and outpainting — via a local Draw Things instance — usable by LM Studio Bionic, Unsloth Studio, or any generic MCP client. See the preset chapters below for client-specific configuration.
The server exposes crop, mask, zoom-in, inpaint and outpaint tools to Bionic. All of them call the exact same handleCrop/handleMask/handleZoomIn/handleInpaint/handleOutpaint logic the LM Studio plugin uses. Generated files are registered as iN records for later editing or processing.
Each tool result includes, per generated file: an inline base64 JPEG preview (only when MCP_MADE_FOR_BIONIC=false), an http:// link (only if a local HTTP server is reachable) and a file:// link to the original, plus the generation's own metadata JSON forwarded verbatim and a one-line usage hint naming the iN identifier to reuse in follow-up calls.
127.0.0.1:7859) — required for , , and . and are pure pixel operations and work without a running Draw Things instance. HTTP-only setups are not exercised by this adapter — this repo's Draw Things usage is gRPC-first.The stdio definition requires these values:
💡 Tip: You don't need to set any of the following ENVs if you're happy with the defaults:
| Env var | Default | Required |
|---|---|---|
MCP_MADE_FOR_BIONIC | true | No |
CHAT_WORKING_DIRECTORIES | ~/.lmstudio/scratchpads | No |
DRAW_THINGS_HOST | 127.0.0.1 | No |
DRAW_THINGS_HTTP_PORT | 7860 | No |
DRAW_THINGS_GRPC_PORT | 7859 | No |
EMBED_PNG_METADATA | true | No |
DRAW_THINGS_CUSTOM_CONFIGS_PATH | ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json | No |
USE_SKILLS | true | No |
AUTO_UPDATE_SKILLS | true | No |
7859) — required for zoom-in, inpaint, and outpaint; crop and mask work without it. See draw-things-chat-docs for details.args at start-mcp.mjs.Connected • 5 tools ready.process-image setup.* May or may not be gorgeous – depending on your settings.
This MCP entrypoint lives in the same repository as the LM Studio plugin process-image. For LM Studio, use the plugin directly — no MCP setup needed there.
To not only process images, but to analyze them, generate and edit them, and find them at the end, you can use these plugins from our tool ecosystem:
For Unsloth Studio. The stdio definition requires these values:
command: nodeargs: path to process-image's start-mcp.mjs. Example: /Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/process-image/start-mcp.mjsMCP_MADE_FOR: unsloth.💡 Tip: You don't need to set any of the following ENVs if you're happy with the defaults:
| Env var | Default | Required |
|---|---|---|
MCP_MADE_FOR | – | Yes |
CHAT_WORKING_DIRECTORIES | ~/.unsloth/studio/sandbox | No |
CLIENT_DB_LOCATION | ~/.unsloth/studio/studio.db | No |
DRAW_THINGS_HOST | 127.0.0.1 | No |
DRAW_THINGS_HTTP_PORT | 7860 | No |
DRAW_THINGS_GRPC_PORT | 7859 | No |
EMBED_PNG_METADATA | true | No |
DRAW_THINGS_CUSTOM_CONFIGS_PATH | ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json | No |
USE_SKILLS | true | No |
AUTO_UPDATE_SKILLS | true | No |
For any generic MCP client that isn't LM Studio Bionic or Unsloth Studio. The stdio definition requires these values:
command: nodeargs: path to process-image's start-mcp.mjs. Example: 💡 Tip: You don't need to set any of the following ENVs if you're happy with the defaults:
| Env var | Default | Required |
|---|---|---|
MCP_MADE_FOR | – | Yes |
CHAT_WORKING_DIRECTORIES | ~/Pictures | No |
DRAW_THINGS_HOST | 127.0.0.1 | No |
DRAW_THINGS_HTTP_PORT | 7860 | No |
DRAW_THINGS_GRPC_PORT | 7859 | No |
EMBED_PNG_METADATA | true | No |
DRAW_THINGS_CUSTOM_CONFIGS_PATH | ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json | No |
USE_SKILLS | false | No |
AUTO_UPDATE_SKILLS | false | No |
The Bionic skill process-image (see skills/process-image) is not bundled inside the plugin — it's excluded from the LM Studio Hub upload to stay within the Hub's 128-file limit. Instead, the server maintains it in two steps, both gated by AUTO_UPDATE_SKILLS (default true for Bionic/Unsloth, false for generic):
skills/process-image/ directory (the same place this content would live without the Hub's limit) is refreshed from the public mirror https://github.com/ceveyne/process-image-skill — but only when a marker there doesn't match this plugin build's own version. "Up to date" is checked against , not against GitHub's latest commit, and GitHub is never polled on sessions where the cache already matches.The shared image-display skill is kept current the same way, from its own mirror https://github.com/ceveyne/image-display-skill.
Your own edits to an installed skill are never overwritten. The server remembers the hash of what it last wrote; if the installed copy no longer matches that hash, it's treated as manually edited and left alone — you get a one-time note instead of a silent overwrite. If the skill truly isn't available (sync failed, or your edited copy predates installation), the affected tool's description falls back to the original, fully inline text instead of pointing at a skill that can't actually be read.
MIT
Looking for the LM Studio settings? https://lmstudio.ai/ceveyne/process-image/files/README.md
Looking for an illustrated MCP setup example? See our companion plugin find-images-mcp-bridge https://github.com/ceveyne/find-images-mcp-bridge
Local stdio MCP entrypoint living inside the process-image LM Studio plugin repo. Provides agentic image editing — cropping, masking, AI-powered zoom-in, inpainting, and outpainting — via a local Draw Things instance — usable by LM Studio Bionic, Unsloth Studio, or any generic MCP client. See the preset chapters below for client-specific configuration.
The server exposes crop, mask, zoom-in, inpaint and outpaint tools to Bionic. All of them call the exact same handleCrop/handleMask/handleZoomIn/handleInpaint/handleOutpaint logic the LM Studio plugin uses. Generated files are registered as iN records for later editing or processing.
Each tool result includes, per generated file: an inline base64 JPEG preview (only when MCP_MADE_FOR_BIONIC=false), an http:// link (only if a local HTTP server is reachable) and a file:// link to the original, plus the generation's own metadata JSON forwarded verbatim and a one-line usage hint naming the iN identifier to reuse in follow-up calls.
127.0.0.1:7859) — required for , , and . and are pure pixel operations and work without a running Draw Things instance. HTTP-only setups are not exercised by this adapter — this repo's Draw Things usage is gRPC-first.The stdio definition requires these values:
💡 Tip: You don't need to set any of the following ENVs if you're happy with the defaults:
| Env var | Default | Required |
|---|---|---|
MCP_MADE_FOR_BIONIC | true | No |
CHAT_WORKING_DIRECTORIES | ~/.lmstudio/scratchpads | No |
DRAW_THINGS_HOST | 127.0.0.1 | No |
DRAW_THINGS_HTTP_PORT | 7860 | No |
DRAW_THINGS_GRPC_PORT | 7859 | No |
EMBED_PNG_METADATA | true | No |
DRAW_THINGS_CUSTOM_CONFIGS_PATH | ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json | No |
USE_SKILLS | true | No |
AUTO_UPDATE_SKILLS | true | No |
7859) — required for zoom-in, inpaint, and outpaint; crop and mask work without it. See draw-things-chat-docs for details.args at start-mcp.mjs.Connected • 5 tools ready.process-image setup.* May or may not be gorgeous – depending on your settings.
This MCP entrypoint lives in the same repository as the LM Studio plugin process-image. For LM Studio, use the plugin directly — no MCP setup needed there.
To not only process images, but to analyze them, generate and edit them, and find them at the end, you can use these plugins from our tool ecosystem:
For Unsloth Studio. The stdio definition requires these values:
command: nodeargs: path to process-image's start-mcp.mjs. Example: /Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/process-image/start-mcp.mjsMCP_MADE_FOR: unsloth.💡 Tip: You don't need to set any of the following ENVs if you're happy with the defaults:
| Env var | Default | Required |
|---|---|---|
MCP_MADE_FOR | – | Yes |
CHAT_WORKING_DIRECTORIES | ~/.unsloth/studio/sandbox | No |
CLIENT_DB_LOCATION | ~/.unsloth/studio/studio.db | No |
DRAW_THINGS_HOST | 127.0.0.1 | No |
DRAW_THINGS_HTTP_PORT | 7860 | No |
DRAW_THINGS_GRPC_PORT | 7859 | No |
EMBED_PNG_METADATA | true | No |
DRAW_THINGS_CUSTOM_CONFIGS_PATH | ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json | No |
USE_SKILLS | true | No |
AUTO_UPDATE_SKILLS | true | No |
For any generic MCP client that isn't LM Studio Bionic or Unsloth Studio. The stdio definition requires these values:
command: nodeargs: path to process-image's start-mcp.mjs. Example: 💡 Tip: You don't need to set any of the following ENVs if you're happy with the defaults:
| Env var | Default | Required |
|---|---|---|
MCP_MADE_FOR | – | Yes |
CHAT_WORKING_DIRECTORIES | ~/Pictures | No |
DRAW_THINGS_HOST | 127.0.0.1 | No |
DRAW_THINGS_HTTP_PORT | 7860 | No |
DRAW_THINGS_GRPC_PORT | 7859 | No |
EMBED_PNG_METADATA | true | No |
DRAW_THINGS_CUSTOM_CONFIGS_PATH | ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json | No |
USE_SKILLS | false | No |
AUTO_UPDATE_SKILLS | false | No |
The Bionic skill process-image (see skills/process-image) is not bundled inside the plugin — it's excluded from the LM Studio Hub upload to stay within the Hub's 128-file limit. Instead, the server maintains it in two steps, both gated by AUTO_UPDATE_SKILLS (default true for Bionic/Unsloth, false for generic):
skills/process-image/ directory (the same place this content would live without the Hub's limit) is refreshed from the public mirror https://github.com/ceveyne/process-image-skill — but only when a marker there doesn't match this plugin build's own version. "Up to date" is checked against , not against GitHub's latest commit, and GitHub is never polled on sessions where the cache already matches.The shared image-display skill is kept current the same way, from its own mirror https://github.com/ceveyne/image-display-skill.
Your own edits to an installed skill are never overwritten. The server remembers the hash of what it last wrote; if the installed copy no longer matches that hash, it's treated as manually edited and left alone — you get a one-time note instead of a silent overwrite. If the skill truly isn't available (sync failed, or your edited copy predates installation), the affected tool's description falls back to the original, fully inline text instead of pointing at a skill that can't actually be read.
MIT
zoom-ininpaintoutpaintcropmaskprocess-image and made-for-bionic-core set up side by side (siblings), e.g. both under ~/.lmstudio/extensions/plugins/ceveyne/.command: node
args: path to process-image's start-mcp.mjs. Example: /Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/process-image/start-mcp.mjs
⚠️ Do not point
argsatdist-mcp/mcp/index.jsdirectly.start-mcp.mjsmust stay the entrypoint soprocess.argv[1]resolves to the project root — otherwise Draw Things' gRPC transport (proto file, TLS root CA, tensor decode helpers) silently fails to resolve and the tool falls back to a nonexistent HTTP server.
MCP_MADE_FOR_BIONIC: default true.
true — made for Bionic: a context-aware tool-chain is generated as the tool result.false — produces a generic tool result for other MCP clients: the response includes an inline base64 JPEG preview per generated file.CHAT_WORKING_DIRECTORIES), and each tool result always includes the original file's http:// link (if a local server is reachable), its file:// link, and the generation metadata JSON.CHAT_WORKING_DIRECTORIES: absolute base directory for all Bionic scratchpads. Default ~/.lmstudio/scratchpads; default ~/Pictures when MCP_MADE_FOR_BIONIC=false (generic).
DRAW_THINGS_HOST: Draw Things host. Default 127.0.0.1.
DRAW_THINGS_HTTP_PORT: Draw Things HTTP port. Default 7860.
DRAW_THINGS_GRPC_PORT: Draw Things gRPC port. Default 7859.
EMBED_PNG_METADATA: embed generation parameters (prompt, model, seed, sources) as XMP metadata into saved PNGs. Default true.
DRAW_THINGS_CUSTOM_CONFIGS_PATH: path to Draw Things' custom_configs.json. Set to none to disable. Default: ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json.
💡 Tip: Should you notice that your Custom Configs presets aren't being used (generations look like plain default settings instead of your own presets), make sure
Draw Thingsis enabled underSystem Settings > Privacy & Security > Files & Folders > Bionic. Then everything works —custom_configs.jsonlives inside Draw Things' own private app folder, and macOS needs this permission for Bionic to read it.
💡 Tip: If you notice a timeout error such as:
try increasing the
Request timeout (seconds)value in the Bionic MCP configuration until the error goes away. Bionic apparently doesn't supportnotifications/progressyet and pins theresetTimeoutOnProgressparameter tofalse.
USE_SKILLS: default true. When true, the crop/mask/zoom-in/inpaint/outpaint tool descriptions are minimized and point at the installed skill process-image (see skills/process-image) for the full parameter documentation. Set to false to restore the original, fully inline tool descriptions instead — no skill installation needed in that case. Install the skill in Bionic via Skills > Install a skill > Select a folder, pointing at this repo's skills/process-image folder. If the skill isn't installed yet (or the installed copy is outdated), the server fetches the current version automatically — see "Skill delivery" below.
AUTO_UPDATE_SKILLS: default true. When true, the server keeps the installed skill copy in sync automatically (see "Skill delivery" below). When false, nothing is ever written automatically — only the manual install_*_skills scripts apply updates. Either way, a skill copy you've edited by hand is never overwritten.
💡 Tip: Other apps on your machine may also install skills under
~/.lmstudio/skills.AUTO_UPDATE_SKILLSonly ever touches theprocess-imageandimage-displayfolders there — it never looks at, modifies, or removes anything else.
CHAT_WORKING_DIRECTORIES: absolute base directory for all sandbox folders. Default ~/.unsloth/studio/sandbox.
CLIENT_DB_LOCATION: absolute path to Unsloth Studio's local chat database. Default ~/.unsloth/studio/studio.db.
DRAW_THINGS_HOST: Draw Things host. Default 127.0.0.1.
DRAW_THINGS_HTTP_PORT: Draw Things HTTP port. Default 7860.
DRAW_THINGS_GRPC_PORT: Draw Things gRPC port. Default 7859.
EMBED_PNG_METADATA: embed generation parameters (prompt, model, seed, sources) as XMP metadata into saved PNGs. Default true.
DRAW_THINGS_CUSTOM_CONFIGS_PATH: path to Draw Things' custom_configs.json. Set to none to disable. Default: ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json.
USE_SKILLS: default true. When true, the crop/mask/zoom-in/inpaint/outpaint tool descriptions are minimized and point at the installed skill process-image for the full parameter documentation. Unsloth Studio can't import a skill from a folder — it only creates/edits/deletes skills in its own UI, saved under ~/.agents/skills — so the skill must be copied there first:
Windows: skills/process-image/install/install_unsloth_skills.ps1 (unverified on Windows).
Installs ~/.agents/skills/process-image/SKILL.md (the Unsloth variant) plus its tools/ folder. The skill is usable immediately, no Unsloth restart needed. Re-run after updating this repo. Set USE_SKILLS=false instead if you'd rather skip the skill install and keep the original, fully inline tool descriptions.
AUTO_UPDATE_SKILLS: default true. See "Skill delivery" below — makes the manual install script above unnecessary in most cases, since the server keeps ~/.agents/skills/process-image in sync automatically.
/Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/process-image/start-mcp.mjsMCP_MADE_FOR: generic. Produces a generic tool result: the response includes an inline base64 JPEG preview per generated file. Generated files are always written to disk and each tool result always includes the original file's http:// link (if a local server is reachable), its file:// link, and the generation metadata JSON.CHAT_WORKING_DIRECTORIES: absolute base directory for all working folders. Default ~/Pictures.
DRAW_THINGS_HOST: Draw Things host. Default 127.0.0.1.
DRAW_THINGS_HTTP_PORT: Draw Things HTTP port. Default 7860.
DRAW_THINGS_GRPC_PORT: Draw Things gRPC port. Default 7859.
EMBED_PNG_METADATA: embed generation parameters (prompt, model, seed, sources) as XMP metadata into saved PNGs. Default true.
DRAW_THINGS_CUSTOM_CONFIGS_PATH: path to Draw Things' custom_configs.json. Set to none to disable. Default: ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json.
USE_SKILLS: default false. It's unverified whether a given generic MCP client supports skills at all, or — if it does — whether it reads them from ~/.agents/skills (the path used by both Unsloth Studio and VS Code Copilot, but not a confirmed universal convention). Only set this to true if that's confirmed for your client, after installing the skill:
Windows: skills/process-image/install/install_generic_skills.ps1 (unverified on Windows).
Installs ~/.agents/skills/process-image/SKILL.md (the generic variant) plus its tools/ folder.
AUTO_UPDATE_SKILLS: default false, same rationale as USE_SKILLS above. Set to true alongside USE_SKILLS=true only after confirming your client reads skills from ~/.agents/skills.
.skill-revision~/.lmstudio/skills/process-image for Bionic, ~/.agents/skills/process-image for Unsloth/generic) — a plain local file copy, no second network call.{
"name": "process-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/process-image/start-mcp.mjs"],
"env": {
"MCP_MADE_FOR_BIONIC": "true",
"CHAT_WORKING_DIRECTORIES": "/absolute/path/to/bionic-scratchpads",
"DRAW_THINGS_HOST": "127.0.0.1",
"DRAW_THINGS_HTTP_PORT": "7860",
"DRAW_THINGS_GRPC_PORT": "7859",
"EMBED_PNG_METADATA": "true",
"DRAW_THINGS_CUSTOM_CONFIGS_PATH": "/absolute/path/to/custom_configs.json",
"USE_SKILLS": "true",
"AUTO_UPDATE_SKILLS": "true"
}
}
}
{
"name": "process-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/process-image/start-mcp.mjs"],
"env": {
"MCP_MADE_FOR": "unsloth",
"CHAT_WORKING_DIRECTORIES": "/absolute/path/to/.unsloth/studio/sandbox",
"CLIENT_DB_LOCATION": "/absolute/path/to/.unsloth/studio/studio.db",
"DRAW_THINGS_HOST": "127.0.0.1",
"DRAW_THINGS_HTTP_PORT": "7860",
"DRAW_THINGS_GRPC_PORT": "7859",
"EMBED_PNG_METADATA": "true",
"DRAW_THINGS_CUSTOM_CONFIGS_PATH": "/absolute/path/to/custom_configs.json",
"USE_SKILLS": "true",
"AUTO_UPDATE_SKILLS": "true"
}
}
}
{
"name": "process-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/process-image/start-mcp.mjs"],
"env": {
"MCP_MADE_FOR": "generic",
"CHAT_WORKING_DIRECTORIES": "/absolute/path/to/pictures",
"DRAW_THINGS_HOST": "127.0.0.1",
"DRAW_THINGS_HTTP_PORT": "7860",
"DRAW_THINGS_GRPC_PORT": "7859",
"EMBED_PNG_METADATA": "true",
"DRAW_THINGS_CUSTOM_CONFIGS_PATH": "/absolute/path/to/custom_configs.json",
"USE_SKILLS": "false",
"AUTO_UPDATE_SKILLS": "false"
}
}
}
npm run typecheck # plugin + MCP
npm run build # LM Studio plugin (also produces dist/helpers/* used by gRPC)
npm run build:mcp # MCP entrypoint
npm run test:mcp # unit tests + stdio smoke test
zoom-ininpaintoutpaintcropmaskprocess-image and made-for-bionic-core set up side by side (siblings), e.g. both under ~/.lmstudio/extensions/plugins/ceveyne/.command: node
args: path to process-image's start-mcp.mjs. Example: /Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/process-image/start-mcp.mjs
⚠️ Do not point
argsatdist-mcp/mcp/index.jsdirectly.start-mcp.mjsmust stay the entrypoint soprocess.argv[1]resolves to the project root — otherwise Draw Things' gRPC transport (proto file, TLS root CA, tensor decode helpers) silently fails to resolve and the tool falls back to a nonexistent HTTP server.
MCP_MADE_FOR_BIONIC: default true.
true — made for Bionic: a context-aware tool-chain is generated as the tool result.false — produces a generic tool result for other MCP clients: the response includes an inline base64 JPEG preview per generated file.CHAT_WORKING_DIRECTORIES), and each tool result always includes the original file's http:// link (if a local server is reachable), its file:// link, and the generation metadata JSON.CHAT_WORKING_DIRECTORIES: absolute base directory for all Bionic scratchpads. Default ~/.lmstudio/scratchpads; default ~/Pictures when MCP_MADE_FOR_BIONIC=false (generic).
DRAW_THINGS_HOST: Draw Things host. Default 127.0.0.1.
DRAW_THINGS_HTTP_PORT: Draw Things HTTP port. Default 7860.
DRAW_THINGS_GRPC_PORT: Draw Things gRPC port. Default 7859.
EMBED_PNG_METADATA: embed generation parameters (prompt, model, seed, sources) as XMP metadata into saved PNGs. Default true.
DRAW_THINGS_CUSTOM_CONFIGS_PATH: path to Draw Things' custom_configs.json. Set to none to disable. Default: ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json.
💡 Tip: Should you notice that your Custom Configs presets aren't being used (generations look like plain default settings instead of your own presets), make sure
Draw Thingsis enabled underSystem Settings > Privacy & Security > Files & Folders > Bionic. Then everything works —custom_configs.jsonlives inside Draw Things' own private app folder, and macOS needs this permission for Bionic to read it.
💡 Tip: If you notice a timeout error such as:
try increasing the
Request timeout (seconds)value in the Bionic MCP configuration until the error goes away. Bionic apparently doesn't supportnotifications/progressyet and pins theresetTimeoutOnProgressparameter tofalse.
USE_SKILLS: default true. When true, the crop/mask/zoom-in/inpaint/outpaint tool descriptions are minimized and point at the installed skill process-image (see skills/process-image) for the full parameter documentation. Set to false to restore the original, fully inline tool descriptions instead — no skill installation needed in that case. Install the skill in Bionic via Skills > Install a skill > Select a folder, pointing at this repo's skills/process-image folder. If the skill isn't installed yet (or the installed copy is outdated), the server fetches the current version automatically — see "Skill delivery" below.
AUTO_UPDATE_SKILLS: default true. When true, the server keeps the installed skill copy in sync automatically (see "Skill delivery" below). When false, nothing is ever written automatically — only the manual install_*_skills scripts apply updates. Either way, a skill copy you've edited by hand is never overwritten.
💡 Tip: Other apps on your machine may also install skills under
~/.lmstudio/skills.AUTO_UPDATE_SKILLSonly ever touches theprocess-imageandimage-displayfolders there — it never looks at, modifies, or removes anything else.
CHAT_WORKING_DIRECTORIES: absolute base directory for all sandbox folders. Default ~/.unsloth/studio/sandbox.
CLIENT_DB_LOCATION: absolute path to Unsloth Studio's local chat database. Default ~/.unsloth/studio/studio.db.
DRAW_THINGS_HOST: Draw Things host. Default 127.0.0.1.
DRAW_THINGS_HTTP_PORT: Draw Things HTTP port. Default 7860.
DRAW_THINGS_GRPC_PORT: Draw Things gRPC port. Default 7859.
EMBED_PNG_METADATA: embed generation parameters (prompt, model, seed, sources) as XMP metadata into saved PNGs. Default true.
DRAW_THINGS_CUSTOM_CONFIGS_PATH: path to Draw Things' custom_configs.json. Set to none to disable. Default: ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json.
USE_SKILLS: default true. When true, the crop/mask/zoom-in/inpaint/outpaint tool descriptions are minimized and point at the installed skill process-image for the full parameter documentation. Unsloth Studio can't import a skill from a folder — it only creates/edits/deletes skills in its own UI, saved under ~/.agents/skills — so the skill must be copied there first:
Windows: skills/process-image/install/install_unsloth_skills.ps1 (unverified on Windows).
Installs ~/.agents/skills/process-image/SKILL.md (the Unsloth variant) plus its tools/ folder. The skill is usable immediately, no Unsloth restart needed. Re-run after updating this repo. Set USE_SKILLS=false instead if you'd rather skip the skill install and keep the original, fully inline tool descriptions.
AUTO_UPDATE_SKILLS: default true. See "Skill delivery" below — makes the manual install script above unnecessary in most cases, since the server keeps ~/.agents/skills/process-image in sync automatically.
/Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/process-image/start-mcp.mjsMCP_MADE_FOR: generic. Produces a generic tool result: the response includes an inline base64 JPEG preview per generated file. Generated files are always written to disk and each tool result always includes the original file's http:// link (if a local server is reachable), its file:// link, and the generation metadata JSON.CHAT_WORKING_DIRECTORIES: absolute base directory for all working folders. Default ~/Pictures.
DRAW_THINGS_HOST: Draw Things host. Default 127.0.0.1.
DRAW_THINGS_HTTP_PORT: Draw Things HTTP port. Default 7860.
DRAW_THINGS_GRPC_PORT: Draw Things gRPC port. Default 7859.
EMBED_PNG_METADATA: embed generation parameters (prompt, model, seed, sources) as XMP metadata into saved PNGs. Default true.
DRAW_THINGS_CUSTOM_CONFIGS_PATH: path to Draw Things' custom_configs.json. Set to none to disable. Default: ~/Library/Containers/com.liuliu.draw-things/Data/Documents/Models/custom_configs.json.
USE_SKILLS: default false. It's unverified whether a given generic MCP client supports skills at all, or — if it does — whether it reads them from ~/.agents/skills (the path used by both Unsloth Studio and VS Code Copilot, but not a confirmed universal convention). Only set this to true if that's confirmed for your client, after installing the skill:
Windows: skills/process-image/install/install_generic_skills.ps1 (unverified on Windows).
Installs ~/.agents/skills/process-image/SKILL.md (the generic variant) plus its tools/ folder.
AUTO_UPDATE_SKILLS: default false, same rationale as USE_SKILLS above. Set to true alongside USE_SKILLS=true only after confirming your client reads skills from ~/.agents/skills.
.skill-revision~/.lmstudio/skills/process-image for Bionic, ~/.agents/skills/process-image for Unsloth/generic) — a plain local file copy, no second network call.{
"name": "process-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/process-image/start-mcp.mjs"],
"env": {
"MCP_MADE_FOR_BIONIC": "true",
"CHAT_WORKING_DIRECTORIES": "/absolute/path/to/bionic-scratchpads",
"DRAW_THINGS_HOST": "127.0.0.1",
"DRAW_THINGS_HTTP_PORT": "7860",
"DRAW_THINGS_GRPC_PORT": "7859",
"EMBED_PNG_METADATA": "true",
"DRAW_THINGS_CUSTOM_CONFIGS_PATH": "/absolute/path/to/custom_configs.json",
"USE_SKILLS": "true",
"AUTO_UPDATE_SKILLS": "true"
}
}
}
{
"name": "process-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/process-image/start-mcp.mjs"],
"env": {
"MCP_MADE_FOR": "unsloth",
"CHAT_WORKING_DIRECTORIES": "/absolute/path/to/.unsloth/studio/sandbox",
"CLIENT_DB_LOCATION": "/absolute/path/to/.unsloth/studio/studio.db",
"DRAW_THINGS_HOST": "127.0.0.1",
"DRAW_THINGS_HTTP_PORT": "7860",
"DRAW_THINGS_GRPC_PORT": "7859",
"EMBED_PNG_METADATA": "true",
"DRAW_THINGS_CUSTOM_CONFIGS_PATH": "/absolute/path/to/custom_configs.json",
"USE_SKILLS": "true",
"AUTO_UPDATE_SKILLS": "true"
}
}
}
{
"name": "process-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/process-image/start-mcp.mjs"],
"env": {
"MCP_MADE_FOR": "generic",
"CHAT_WORKING_DIRECTORIES": "/absolute/path/to/pictures",
"DRAW_THINGS_HOST": "127.0.0.1",
"DRAW_THINGS_HTTP_PORT": "7860",
"DRAW_THINGS_GRPC_PORT": "7859",
"EMBED_PNG_METADATA": "true",
"DRAW_THINGS_CUSTOM_CONFIGS_PATH": "/absolute/path/to/custom_configs.json",
"USE_SKILLS": "false",
"AUTO_UPDATE_SKILLS": "false"
}
}
}
npm run typecheck # plugin + MCP
npm run build # LM Studio plugin (also produces dist/helpers/* used by gRPC)
npm run build:mcp # MCP entrypoint
npm run test:mcp # unit tests + stdio smoke test
!Tool call failed
Error calling zoom-in: MCP error -32001: Request timed out
bash skills/process-image/install/install_unsloth_skills.sh
bash skills/process-image/install/install_generic_skills.sh
!Tool call failed
Error calling zoom-in: MCP error -32001: Request timed out
bash skills/process-image/install/install_unsloth_skills.sh
bash skills/process-image/install/install_generic_skills.sh