README_MCP.md
README_MCP.md
Looking for the LM Studio settings? https://lmstudio.ai/ceveyne/analyse-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 analyse-image LM Studio plugin repo. Provides agentic image metadata extraction, visual analysis, and object detection via a Vision API — usable by LM Studio Bionic, Unsloth Studio, or any generic MCP client. See the preset chapters below for client-specific configuration.
The server exposes analyse_image, detect_object and annotate_image tools. All of them call the same Vision API tool logic the LM Studio plugin uses. detect_object and annotate_image write their annotated result image to disk and register it as an iN record for later editing or processing; analyse_image never writes a new file — it only reads the target image and returns its embedded metadata and/or a visual description.
Each detect_object/annotate_image result always includes, per annotated file: an http:// link (only if a local HTTP server is reachable) and a file:// link to the original, plus a one-line usage hint naming the iN identifier to reuse in follow-up calls. analyse_image results instead carry the extracted PNG metadata JSON and/or the visual description text. Whether an inline base64 JPEG preview is also included depends on the preset — see its own chapter below.
qwen/qwen3-vl-8b). analyse_image metadata extraction (no prompt) works without the model; visual descriptions, detect_object, and annotate_image require it.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 |
VISION_API | bionic | No |
VISION_API_BASE_URL | http://127.0.0.1:1235/v1 | No |
VISION_API_KEY | – | No |
QWEN3_VL_MODEL | qwen/qwen3-vl-8b | No |
EMBED_PNG_METADATA | true | No |
INCLUDE_GENERATION_METADATA | true | No |
USE_SKILLS | true | No |
AUTO_UPDATE_SKILLS | true | No |
args at start-mcp.mjs.Connected • 3 tools ready.analyse-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 analyse-image. For LM Studio, use the plugin directly — no MCP setup needed there.
To not only analyse images, generate and edit them mask-based, 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 analyse-image's start-mcp.mjs. Example: /Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/analyse-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 |
VISION_API | llama-server | No |
QWEN3_VL_MODEL | unsloth/Qwen3-VL-8B-Instruct-GGUF | No |
LLAMA_SERVER_BINARY | ~/.unsloth/llama.cpp/llama-server | No |
LLAMA_SERVER_PORT | 8099 | No |
EMBED_PNG_METADATA | true | No |
INCLUDE_GENERATION_METADATA | true | No |
USE_SKILLS | true | No |
AUTO_UPDATE_SKILLS |
For any generic MCP client that isn't LM Studio Bionic or Unsloth Studio. The stdio definition requires these values:
| Env var | Default | Required |
|---|---|---|
MCP_MADE_FOR | – | Yes |
CHAT_WORKING_DIRECTORIES | ~/Pictures | No |
VISION_API | llama-server | No |
VISION_API_BASE_URL | http://127.0.0.1:1234/v1 | No |
VISION_API_KEY | – | No |
QWEN3_VL_MODEL | qwen/qwen3-vl-8b | No |
LLAMA_SERVER_BINARY | ~/.lmstudio/extensions/backends/qwen3-vl-embedding/llama-server | No |
LLAMA_SERVER_PORT | 8099 | No |
EMBED_PNG_METADATA | true | No |
INCLUDE_GENERATION_METADATA | true | No |
USE_SKILLS | false |
The Bionic skill analyse-image (see skills/analyse-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/analyse-image/ directory (the same place this content would live without the Hub's limit) is refreshed from the public mirror https://github.com/ceveyne/analyse-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/analyse-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 analyse-image LM Studio plugin repo. Provides agentic image metadata extraction, visual analysis, and object detection via a Vision API — usable by LM Studio Bionic, Unsloth Studio, or any generic MCP client. See the preset chapters below for client-specific configuration.
The server exposes analyse_image, detect_object and annotate_image tools. All of them call the same Vision API tool logic the LM Studio plugin uses. detect_object and annotate_image write their annotated result image to disk and register it as an iN record for later editing or processing; analyse_image never writes a new file — it only reads the target image and returns its embedded metadata and/or a visual description.
Each detect_object/annotate_image result always includes, per annotated file: an http:// link (only if a local HTTP server is reachable) and a file:// link to the original, plus a one-line usage hint naming the iN identifier to reuse in follow-up calls. analyse_image results instead carry the extracted PNG metadata JSON and/or the visual description text. Whether an inline base64 JPEG preview is also included depends on the preset — see its own chapter below.
qwen/qwen3-vl-8b). analyse_image metadata extraction (no prompt) works without the model; visual descriptions, detect_object, and annotate_image require it.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 |
VISION_API | bionic | No |
VISION_API_BASE_URL | http://127.0.0.1:1235/v1 | No |
VISION_API_KEY | – | No |
QWEN3_VL_MODEL | qwen/qwen3-vl-8b | No |
EMBED_PNG_METADATA | true | No |
INCLUDE_GENERATION_METADATA | true | No |
USE_SKILLS | true | No |
AUTO_UPDATE_SKILLS | true | No |
args at start-mcp.mjs.Connected • 3 tools ready.analyse-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 analyse-image. For LM Studio, use the plugin directly — no MCP setup needed there.
To not only analyse images, generate and edit them mask-based, 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 analyse-image's start-mcp.mjs. Example: /Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/analyse-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 |
VISION_API | llama-server | No |
QWEN3_VL_MODEL | unsloth/Qwen3-VL-8B-Instruct-GGUF | No |
LLAMA_SERVER_BINARY | ~/.unsloth/llama.cpp/llama-server | No |
LLAMA_SERVER_PORT | 8099 | No |
EMBED_PNG_METADATA | true | No |
INCLUDE_GENERATION_METADATA | true | No |
USE_SKILLS | true | No |
AUTO_UPDATE_SKILLS |
For any generic MCP client that isn't LM Studio Bionic or Unsloth Studio. The stdio definition requires these values:
| Env var | Default | Required |
|---|---|---|
MCP_MADE_FOR | – | Yes |
CHAT_WORKING_DIRECTORIES | ~/Pictures | No |
VISION_API | llama-server | No |
VISION_API_BASE_URL | http://127.0.0.1:1234/v1 | No |
VISION_API_KEY | – | No |
QWEN3_VL_MODEL | qwen/qwen3-vl-8b | No |
LLAMA_SERVER_BINARY | ~/.lmstudio/extensions/backends/qwen3-vl-embedding/llama-server | No |
LLAMA_SERVER_PORT | 8099 | No |
EMBED_PNG_METADATA | true | No |
INCLUDE_GENERATION_METADATA | true | No |
USE_SKILLS | false |
The Bionic skill analyse-image (see skills/analyse-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/analyse-image/ directory (the same place this content would live without the Hub's limit) is refreshed from the public mirror https://github.com/ceveyne/analyse-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
analyse-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 analyse-image's start-mcp.mjs. Example: /Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/analyse-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 path resolution relative to the project root (config, logs, model settings) silently breaks.
MCP_MADE_FOR_BIONIC: default true (selects this preset). A context-aware tool-chain is generated as the tool result. Annotated files from detect_object/annotate_image are always written to disk (scratchpad folder) and the tool result always includes the file's http:// link (if a local server is reachable) and its file:// link; no inline base64 preview is included.
CHAT_WORKING_DIRECTORIES: absolute base directory for all Bionic scratchpads. Default ~/.lmstudio/scratchpads.
VISION_API: which kind of vision server this entrypoint expects behind VISION_API_BASE_URL — bionic, generic, unsloth, or llama-server. Default bionic here; override only if your server doesn't actually match this preset's usual kind.
VISION_API_BASE_URL: Vision API server URL. Defaults to Bionic's own standalone API server, where existing /v1 or /api/v1 suffixes are normalized away before internal /api/v1 calls; any OpenAI-compatible vision endpoint can be configured instead. Default http://127.0.0.1:1235/v1.
💡 Tip: Bionic's own API server default is
http://127.0.0.1:1235/v1— enable it under Bionic Settings > Local Models > Local Model API > Local API server. If running in coexistence with LM Studio, Bionic will instead use LM Studio's own API server default,http://127.0.0.1:1234/v1— check LM Studio's Model Server > Status. Our server tries both ports before giving up, so a stale port inVISION_API_BASE_URLafter switching between the two usually still works; if neither port has the model available, the resulting error names both ports and tells you where to enable the right one (Bionic: Settings > Local Models > Local Model API > Local API server; LM Studio: Model Server > Status).
VISION_API_KEY: optional API key if the server requires it. Default empty.
QWEN3_VL_MODEL: LM Studio model key for Qwen3-VL, not a filesystem path. Default qwen/qwen3-vl-8b.
EMBED_PNG_METADATA: embed analysis provenance and detected bounding boxes as Draw Things-compatible XMP metadata into PNGs saved by detect_object/annotate_image. Default true.
INCLUDE_GENERATION_METADATA: append Draw Things generation parameters (prompt, model, seed, ...) embedded in the source PNG to each analyse_image result. Default true.
💡 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 analyse_image/detect_object/annotate_image tool descriptions are minimized and point at the installed skill analyse-image (see skills/analyse-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/analyse-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 theanalyse-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.
VISION_API: which kind of vision server this entrypoint expects behind VISION_API_BASE_URL — bionic, generic, unsloth, or llama-server. Default llama-server here; override to unsloth only if you want to talk to Unsloth Studio's own API directly instead of a separately-managed router-mode llama-server. This NOT recommended at the moment since the Unsloth API cannot handle more than one llama-server instance in parallel.
VISION_API_BASE_URL: Vision API server URL. Default http://127.0.0.1:8888/v1 (Unsloth Studio's own OpenAI-compatible server).
VISION_API_KEY: optional API key if the server requires it. Default empty.
QWEN3_VL_MODEL: Unsloth Studio model key for Qwen3-VL, not a filesystem path. Default unsloth/Qwen3-VL-8B-Instruct-GGUF.
LLAMA_SERVER_BINARY: absolute path to the llama-server binary used only by VISION_API=llama-server — that mode spawns and manages its own standalone router-mode llama-server process, entirely independent of Unsloth Studio's own agent model process (works around Unsloth Studio's single-model-slot eviction, see the Unsloth limitations note below). Default ~/.unsloth/llama.cpp/llama-server.
LLAMA_SERVER_PORT: local port the VISION_API=llama-server router listens on — independent of VISION_API_BASE_URL, which stays Unsloth Studio's own fixed address (8888). Default 8099.
EMBED_PNG_METADATA: embed analysis provenance and detected bounding boxes as Draw Things-compatible XMP metadata into PNGs saved by detect_object/annotate_image. Default true.
INCLUDE_GENERATION_METADATA: append Draw Things generation parameters (prompt, model, seed, ...) embedded in the source PNG to each analyse_image result. Default true.
💡 Unsloth Desktop settings: without a
VISION_API_KEY, this only works if Unsloth Studio's API access is opened up beyond keyless "inference only" (e.g. "everything else") — otherwise set a real Unsloth API key viaVISION_API_KEYinstead. Assign8,192 contextto the vision model (unsloth/Qwen3-VL-8B-Instruct-GGUF) in Unsloth Studio's model settings.
USE_SKILLS: default true. When true, the analyse_image/detect_object/annotate_image tool descriptions are minimized and point at the installed skill analyse-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/analyse-image/install/install_unsloth_skills.ps1 (unverified on Windows).
Installs ~/.agents/skills/analyse-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/analyse-image in sync automatically.
true |
| No |
command: node
args: path to analyse-image's start-mcp.mjs. Example: /Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/analyse-image/start-mcp.mjs
MCP_MADE_FOR: generic. Produces a generic tool result: detect_object/annotate_image responses include an inline base64 JPEG preview of the annotated file. Annotated files are always written to disk and the tool result always includes the file's http:// link (if a local server is reachable) and its file:// link.
CHAT_WORKING_DIRECTORIES: absolute base directory for all working folders. Default ~/Pictures.
VISION_API: which kind of vision server this entrypoint expects behind VISION_API_BASE_URL — bionic, generic, unsloth, or llama-server. Default llama-server here; override to generic only if VISION_API_BASE_URL already points at a ready-to-use OpenAI-compatible server you manage yourself.
VISION_API_BASE_URL: Vision API server URL. Default http://127.0.0.1:1234/v1.
VISION_API_KEY: optional API key if the server requires it. Default empty.
QWEN3_VL_MODEL: model key/id for Qwen3-VL as reported by your server's /v1/models, not a filesystem path. Default qwen/qwen3-vl-8b.
LLAMA_SERVER_BINARY: absolute path to the llama-server binary used only by VISION_API=llama-server — that mode spawns and manages its own standalone router-mode llama-server process, entirely independent of any other model loading. Default ~/.lmstudio/extensions/backends/qwen3-vl-embedding/llama-server.
LLAMA_SERVER_PORT: local port the VISION_API=llama-server router listens on — independent of VISION_API_BASE_URL, which stays the real Vision API's own fixed address. Default 8099.
EMBED_PNG_METADATA: embed analysis provenance and detected bounding boxes as Draw Things-compatible XMP metadata into PNGs saved by detect_object/annotate_image. Default true.
INCLUDE_GENERATION_METADATA: append Draw Things generation parameters (prompt, model, seed, ...) embedded in the source PNG to each analyse_image result. Default true.
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/analyse-image/install/install_generic_skills.ps1 (unverified on Windows).
Installs ~/.agents/skills/analyse-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.
| No |
AUTO_UPDATE_SKILLS | false | No |
.skill-revision~/.lmstudio/skills/analyse-image for Bionic, ~/.agents/skills/analyse-image for Unsloth/generic) — a plain local file copy, no second network call.{
"name": "analyse-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/analyse-image/start-mcp.mjs"],
"env": {
"MCP_MADE_FOR_BIONIC": "true",
"CHAT_WORKING_DIRECTORIES": "/absolute/path/to/bionic-scratchpads",
"VISION_API_BASE_URL": "http://127.0.0.1:1235/v1",
"QWEN3_VL_MODEL": "qwen/qwen3-vl-8b",
"EMBED_PNG_METADATA": "true",
"INCLUDE_GENERATION_METADATA": "true",
"USE_SKILLS": "true",
"AUTO_UPDATE_SKILLS": "true"
}
}
}
{
"name": "analyse-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/analyse-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",
"LLAMA_SERVER_BINARY": "/absolute/path/to/.unsloth/llama.cpp/llama-server",
"LLAMA_SERVER_PORT": "8099",
"QWEN3_VL_MODEL": "unsloth/Qwen3-VL-8B-Instruct-GGUF",
"EMBED_PNG_METADATA": "true",
"INCLUDE_GENERATION_METADATA": "true",
"USE_SKILLS": "true",
"AUTO_UPDATE_SKILLS": "true"
}
}
}
{
"name": "analyse-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/analyse-image/start-mcp.mjs"],
"env": {
"MCP_MADE_FOR": "generic",
"CHAT_WORKING_DIRECTORIES": "/absolute/path/to/pictures",
"VISION_API_BASE_URL": "http://127.0.0.1:1234/v1",
"QWEN3_VL_MODEL": "qwen/qwen3-vl-8b",
"EMBED_PNG_METADATA": "true",
"INCLUDE_GENERATION_METADATA": "true",
"USE_SKILLS": "false",
"AUTO_UPDATE_SKILLS": "false"
}
}
}
npm run typecheck # plugin + MCP
npm run build # LM Studio plugin
npm run build:mcp # MCP entrypoint
npm run test:mcp # unit tests + stdio smoke test
analyse-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 analyse-image's start-mcp.mjs. Example: /Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/analyse-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 path resolution relative to the project root (config, logs, model settings) silently breaks.
MCP_MADE_FOR_BIONIC: default true (selects this preset). A context-aware tool-chain is generated as the tool result. Annotated files from detect_object/annotate_image are always written to disk (scratchpad folder) and the tool result always includes the file's http:// link (if a local server is reachable) and its file:// link; no inline base64 preview is included.
CHAT_WORKING_DIRECTORIES: absolute base directory for all Bionic scratchpads. Default ~/.lmstudio/scratchpads.
VISION_API: which kind of vision server this entrypoint expects behind VISION_API_BASE_URL — bionic, generic, unsloth, or llama-server. Default bionic here; override only if your server doesn't actually match this preset's usual kind.
VISION_API_BASE_URL: Vision API server URL. Defaults to Bionic's own standalone API server, where existing /v1 or /api/v1 suffixes are normalized away before internal /api/v1 calls; any OpenAI-compatible vision endpoint can be configured instead. Default http://127.0.0.1:1235/v1.
💡 Tip: Bionic's own API server default is
http://127.0.0.1:1235/v1— enable it under Bionic Settings > Local Models > Local Model API > Local API server. If running in coexistence with LM Studio, Bionic will instead use LM Studio's own API server default,http://127.0.0.1:1234/v1— check LM Studio's Model Server > Status. Our server tries both ports before giving up, so a stale port inVISION_API_BASE_URLafter switching between the two usually still works; if neither port has the model available, the resulting error names both ports and tells you where to enable the right one (Bionic: Settings > Local Models > Local Model API > Local API server; LM Studio: Model Server > Status).
VISION_API_KEY: optional API key if the server requires it. Default empty.
QWEN3_VL_MODEL: LM Studio model key for Qwen3-VL, not a filesystem path. Default qwen/qwen3-vl-8b.
EMBED_PNG_METADATA: embed analysis provenance and detected bounding boxes as Draw Things-compatible XMP metadata into PNGs saved by detect_object/annotate_image. Default true.
INCLUDE_GENERATION_METADATA: append Draw Things generation parameters (prompt, model, seed, ...) embedded in the source PNG to each analyse_image result. Default true.
💡 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 analyse_image/detect_object/annotate_image tool descriptions are minimized and point at the installed skill analyse-image (see skills/analyse-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/analyse-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 theanalyse-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.
VISION_API: which kind of vision server this entrypoint expects behind VISION_API_BASE_URL — bionic, generic, unsloth, or llama-server. Default llama-server here; override to unsloth only if you want to talk to Unsloth Studio's own API directly instead of a separately-managed router-mode llama-server. This NOT recommended at the moment since the Unsloth API cannot handle more than one llama-server instance in parallel.
VISION_API_BASE_URL: Vision API server URL. Default http://127.0.0.1:8888/v1 (Unsloth Studio's own OpenAI-compatible server).
VISION_API_KEY: optional API key if the server requires it. Default empty.
QWEN3_VL_MODEL: Unsloth Studio model key for Qwen3-VL, not a filesystem path. Default unsloth/Qwen3-VL-8B-Instruct-GGUF.
LLAMA_SERVER_BINARY: absolute path to the llama-server binary used only by VISION_API=llama-server — that mode spawns and manages its own standalone router-mode llama-server process, entirely independent of Unsloth Studio's own agent model process (works around Unsloth Studio's single-model-slot eviction, see the Unsloth limitations note below). Default ~/.unsloth/llama.cpp/llama-server.
LLAMA_SERVER_PORT: local port the VISION_API=llama-server router listens on — independent of VISION_API_BASE_URL, which stays Unsloth Studio's own fixed address (8888). Default 8099.
EMBED_PNG_METADATA: embed analysis provenance and detected bounding boxes as Draw Things-compatible XMP metadata into PNGs saved by detect_object/annotate_image. Default true.
INCLUDE_GENERATION_METADATA: append Draw Things generation parameters (prompt, model, seed, ...) embedded in the source PNG to each analyse_image result. Default true.
💡 Unsloth Desktop settings: without a
VISION_API_KEY, this only works if Unsloth Studio's API access is opened up beyond keyless "inference only" (e.g. "everything else") — otherwise set a real Unsloth API key viaVISION_API_KEYinstead. Assign8,192 contextto the vision model (unsloth/Qwen3-VL-8B-Instruct-GGUF) in Unsloth Studio's model settings.
USE_SKILLS: default true. When true, the analyse_image/detect_object/annotate_image tool descriptions are minimized and point at the installed skill analyse-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/analyse-image/install/install_unsloth_skills.ps1 (unverified on Windows).
Installs ~/.agents/skills/analyse-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/analyse-image in sync automatically.
true |
| No |
command: node
args: path to analyse-image's start-mcp.mjs. Example: /Users/ceveyne/.lmstudio/extensions/plugins/ceveyne/analyse-image/start-mcp.mjs
MCP_MADE_FOR: generic. Produces a generic tool result: detect_object/annotate_image responses include an inline base64 JPEG preview of the annotated file. Annotated files are always written to disk and the tool result always includes the file's http:// link (if a local server is reachable) and its file:// link.
CHAT_WORKING_DIRECTORIES: absolute base directory for all working folders. Default ~/Pictures.
VISION_API: which kind of vision server this entrypoint expects behind VISION_API_BASE_URL — bionic, generic, unsloth, or llama-server. Default llama-server here; override to generic only if VISION_API_BASE_URL already points at a ready-to-use OpenAI-compatible server you manage yourself.
VISION_API_BASE_URL: Vision API server URL. Default http://127.0.0.1:1234/v1.
VISION_API_KEY: optional API key if the server requires it. Default empty.
QWEN3_VL_MODEL: model key/id for Qwen3-VL as reported by your server's /v1/models, not a filesystem path. Default qwen/qwen3-vl-8b.
LLAMA_SERVER_BINARY: absolute path to the llama-server binary used only by VISION_API=llama-server — that mode spawns and manages its own standalone router-mode llama-server process, entirely independent of any other model loading. Default ~/.lmstudio/extensions/backends/qwen3-vl-embedding/llama-server.
LLAMA_SERVER_PORT: local port the VISION_API=llama-server router listens on — independent of VISION_API_BASE_URL, which stays the real Vision API's own fixed address. Default 8099.
EMBED_PNG_METADATA: embed analysis provenance and detected bounding boxes as Draw Things-compatible XMP metadata into PNGs saved by detect_object/annotate_image. Default true.
INCLUDE_GENERATION_METADATA: append Draw Things generation parameters (prompt, model, seed, ...) embedded in the source PNG to each analyse_image result. Default true.
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/analyse-image/install/install_generic_skills.ps1 (unverified on Windows).
Installs ~/.agents/skills/analyse-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.
| No |
AUTO_UPDATE_SKILLS | false | No |
.skill-revision~/.lmstudio/skills/analyse-image for Bionic, ~/.agents/skills/analyse-image for Unsloth/generic) — a plain local file copy, no second network call.{
"name": "analyse-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/analyse-image/start-mcp.mjs"],
"env": {
"MCP_MADE_FOR_BIONIC": "true",
"CHAT_WORKING_DIRECTORIES": "/absolute/path/to/bionic-scratchpads",
"VISION_API_BASE_URL": "http://127.0.0.1:1235/v1",
"QWEN3_VL_MODEL": "qwen/qwen3-vl-8b",
"EMBED_PNG_METADATA": "true",
"INCLUDE_GENERATION_METADATA": "true",
"USE_SKILLS": "true",
"AUTO_UPDATE_SKILLS": "true"
}
}
}
{
"name": "analyse-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/analyse-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",
"LLAMA_SERVER_BINARY": "/absolute/path/to/.unsloth/llama.cpp/llama-server",
"LLAMA_SERVER_PORT": "8099",
"QWEN3_VL_MODEL": "unsloth/Qwen3-VL-8B-Instruct-GGUF",
"EMBED_PNG_METADATA": "true",
"INCLUDE_GENERATION_METADATA": "true",
"USE_SKILLS": "true",
"AUTO_UPDATE_SKILLS": "true"
}
}
}
{
"name": "analyse-image",
"enabled": true,
"connection": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/analyse-image/start-mcp.mjs"],
"env": {
"MCP_MADE_FOR": "generic",
"CHAT_WORKING_DIRECTORIES": "/absolute/path/to/pictures",
"VISION_API_BASE_URL": "http://127.0.0.1:1234/v1",
"QWEN3_VL_MODEL": "qwen/qwen3-vl-8b",
"EMBED_PNG_METADATA": "true",
"INCLUDE_GENERATION_METADATA": "true",
"USE_SKILLS": "false",
"AUTO_UPDATE_SKILLS": "false"
}
}
}
npm run typecheck # plugin + MCP
npm run build # LM Studio plugin
npm run build:mcp # MCP entrypoint
npm run test:mcp # unit tests + stdio smoke test
!Tool call failed
Error calling analyse_image: MCP error -32001: Request timed out
bash skills/analyse-image/install/install_unsloth_skills.sh
bash skills/analyse-image/install/install_generic_skills.sh
!Tool call failed
Error calling analyse_image: MCP error -32001: Request timed out
bash skills/analyse-image/install/install_unsloth_skills.sh
bash skills/analyse-image/install/install_generic_skills.sh