๐ Forge Neo MCP
MCP server for Stable Diffusion WebUI Forge - Neo ยท Generate images on your own GPU, from any AI agent that speaks MCP
Ask Claude โ or any MCP-capable agent โ for an image, and it generates on your local Forge Neo. It reads which checkpoint is loaded, works out the sampling parameters and prompt style that model expects, writes the prompt, and hands you back the file.
You never have to dictate steps, CFG or sampler unless you want to. Those come from your own setup: your instance's settings, your past generations, your checkpoint's metadata. Where something cannot be determined, it asks instead of guessing.
[!IMPORTANT]Forge Neo must run with
--api. Nothing is installed into your Forge folder โ no extension, no custom node. The bridge talks to the REST API that Forge already exposes.
๐ Table of Contents
- Requirements
- Installation
- Configuration
- First run
- Using it
- Tools
- Troubleshooting
- What it does for you
- Roadmap
- Credits
โ Requirements
| Forge Neo | running with --api |
| Python | 3.10 or newer, on the machine running the agent |
| An MCP client | Claude Code, Claude Desktop, Cursor, or anything else that speaks MCP |
Only if Forge runs on a different machine: network access to it, and a file share if you want results as file paths rather than base64.
๐ฆ Installation
1 ยท Turn on the API in Forge Neo
Edit your webui-user.bat (Windows) or webui-user.sh (Linux) and add --api:
set COMMANDLINE_ARGS=--api
Keep whatever flags you already had โ just append --api. Restart Forge.
Check it worked: open
http://127.0.0.1:7860/docs. If you see/sdapi/v1/...endpoints listed, the API is on.
2 ยท Install the bridge
pip install git+https://github.com/eduardoabreu81/forgeneo-mcp
3 ยท Register it with your agent
Claude Code
claude mcp add forgeneo -e FORGE_URL=http://127.0.0.1:7860 -- forgeneo-mcp
Claude Desktop, Cursor, or any client with an mcp.json
{
"mcpServers": {
"forgeneo": {
"command": "forgeneo-mcp",
"env": { "FORGE_URL": "http://127.0.0.1:7860" }
}
}
}
Restart your client โ MCP servers load at startup, so the tools appear in a new session.
โ๏ธ Configuration
Everything is optional except FORGE_URL, and even that only if Forge is not at 127.0.0.1:7860.
| Variable | What it does | Default |
|---|---|---|
FORGE_URL |
Where Forge is | http://127.0.0.1:7860 |
FORGE_AUTH |
user:password, if you started Forge with --api-auth |
none |
FORGE_PATH_MAP |
Translates Forge's paths into ones your machine can reach | none |
FORGE_OUTPUT_DIR |
Your output folder, if it cannot be found automatically | auto |
FORGE_TIMEOUT |
Seconds to wait on a request | 600 |
FORGE_HISTORY_LIMIT |
How many recent images to read when learning your settings | 600 |
FORGE_CIVITAI_LOOKUP |
1 allows identifying a checkpoint by hash online |
off |
FORGENEO_CACHE_DIR |
Where your confirmed answers are remembered | ~/.forgeneo-mcp |
Everything on one machine
Nothing else to do โ the defaults cover it.
Forge on another machine
Start Forge with --listen --api, then point the bridge at it and map its paths:
claude mcp add forgeneo \
-e FORGE_URL=http://gpu-box:7860 \
-e FORGE_PATH_MAP='D:/forge-neo=//gpu-box/share/forge-neo' \
-- forgeneo-mcp
FORGE_PATH_MAP reads as what Forge calls it = what you call it. Forge reports paths like D:\forge-neo\output\...; if you reach that same folder as \\gpu-box\share\forge-neo\output\..., that mapping lets the bridge hand you file paths instead of megabytes of base64.
Without it everything still works โ you just get base64.
[!NOTE]
--listenexposes the API to your network with no password. If that matters where you are, add--api-auth user:passwordto Forge and setFORGE_AUTHto match.
๐ First run
Open a new session and ask your agent to check the connection. It calls capabilities and reports what it found:
reachable true
counts checkpoints ยท loras ยท samplers ยท schedulers ยท modules
filesystem file paths (or: base64 โ no readable output dir)
history how many past generations it could read
Three things worth a glance:
filesystem: base64โFORGE_PATH_MAPis missing or wrong. Not fatal, but results will bloat your conversation.history: 0โ it cannot learn from your past work. Usually the output folder is unreachable, or Forge is saving no metadata (see Troubleshooting).loras: 0with LoRAs installed โ Forge's own LoRA list is empty; refresh it in the UI.
๐ฌ Using it
Just ask. The agent handles the rest.
"a cover image for a post about winter hiking"
It checks what is loaded, sees whether that model wants prose or tags, writes the prompt accordingly, and generates.
"same thing but in the style I use for thumbnails"
It searches your LoRAs, finds the one you mean, picks up its trigger word and the weight you normally use, and writes it into the prompt โ visibly, so you can read what was sent.
"switch to my portrait model"
It loads that checkpoint. If it belongs to a different architecture, the matching VAE and text encoder come with it.
Other things worth asking directly:
- "what model is loaded and how should I prompt it?" โ the profile, in plain terms
- "which of my LoRAs work with this checkpoint?" โ filtered to compatible ones
- "is my flux setup complete?" โ checks the VAE and text encoders
- "stop" โ interrupts a running generation
๐ ๏ธ Tools
Your agent picks these on its own; the list is here so you know what it can do.
| Tool | Purpose |
|---|---|
capabilities |
What this instance offers and what the bridge could read |
model_profile |
The loaded checkpoint: parameters, prompt style, module health |
prompt_dialect |
How this model expects to be prompted, with its quality tags |
loras |
Search your LoRAs by name, tag, trigger word or description |
lora_info |
Everything about one LoRA, with a ready prompt fragment |
models |
List, load or refresh checkpoints |
module_check |
Whether the loaded VAE and text encoders suit the architecture |
module_download |
Where a missing module comes from โ fetches only if you approve |
generate |
Generate from a written prompt, txt2img or img2img |
progress |
Check, interrupt or skip the running job |
๐ง Troubleshooting
It says it cannot reach ForgeConfirm Forge is running with --api and that http://127.0.0.1:7860/docs lists /sdapi/v1/ endpoints. If Forge is on another machine it also needs --listen, and a firewall may be in the way.
Results come back as base64 and flood the conversationFORGE_PATH_MAP is missing or does not match. Compare the path Forge reports โ visible in any generation's info โ with the path you use to reach the same folder.
It does not know my usual settingsIt learns from your past images, which needs Forge to save generation parameters. In Settings โ Saving images, keep "Save text information about generation parameters as chunks to png files" enabled, or turn on the .txt sidecar. With neither, your outputs carry no parameters and it falls back to architecture defaults.
It keeps asking which lineage my SDXL checkpoint isPony, Illustrious, Animagine and stock SDXL are indistinguishable from the file โ same tensors, same preset, different prompt vocabulary. Answer once; it is remembered per file and never asked again.
Images look wrong after switching architectureAsk for a module check. Forge remembers the last VAE and text encoder selected under each preset, so loading a checkpoint while another preset was active can leave the wrong ones attached. The check names what is missing and whether the right file is already installed.
A download was refused for lack of spaceDeliberate โ it checks free space before starting rather than failing several gigabytes in. Free some room, or pick a lighter build such as fp8_scaled instead of bf16.
๐ฏ What it does for you
- Sampling parameters that fit the model. Taken from your own past generations where available, and from your instance's settings otherwise โ not from a table in this repo.
- The right prompt vocabulary. Quality tags where they help, none where they hurt: adding
masterpiece, best qualityto a model trained on captions dilutes the prompt rather than improving it. - Your LoRAs, searchable. By name, tag, trigger word or description, with the weights you actually use. Nothing is added to a prompt without showing you.
- Honest uncertainty. Where the evidence runs out it says so and asks. No silent guesses.
- Module sanity checks. Notices when a preset has picked up the wrong VAE or text encoder, and points at the official download for anything missing.
Notes on how each answer is derived live in the source, next to the code that derives it.
๐บ๏ธ Roadmap
- Video (Wan) โ Forge generates video through frame counts in multiples of
4n+1and encodes with ffmpeg, but the API discards the resulting path. Collecting from disk is already how images come back, so this is mostly plumbing. - EXIF metadata โ JPEG and WebP store parameters in EXIF when the
.txtsidecar is off; that combination currently yields no history. - Authentication โ
FORGE_AUTHis implemented but has not been exercised against a live--api-authinstance.
๐ Credits
- Forge Neo by Haoming02 โ the WebUI this bridges to, and the Download Models wiki behind the module reference
- Model authors who publish real prompting guidance on their cards โ the dialect table is built from those, not from guesswork
- Model Context Protocol โ the protocol and Python SDK
- CivitAI โ public by-hash endpoint used by the optional lookup
๐ License
MIT โ see LICENSE
Made with โค๏ธ for the Stable Diffusion community
Report Bug โข Request Feature โข Discussions โข โ Ko-fi