Correcting my own count: **five sites, not three.** I found the first three by grepping for the messages I happened to think of; a mechanical check found two more. ## The check The defect has an exact signature — a variable the process **deletes from its own `process.env`**, then **names in user-facing prose**. That is scannable: Six variables are deleted (`ANTHROPIC_API_KEY`, `COMFYUI_MCP_AGENT_IDENTITY`, `COMFYUI_MCP_ISSUE_MAX_POLLS`, `COMFYUI_MCP_ISSUE_POLL_MS`, `COMFYUI_MCP_ISSUE_TIMEOUT_MS`, `COMFYUI_MCP_LANG`). Exactly one is also advised — no false positives, and it is the one in this i… read the rest
Civitai + comfyui-mcp
Discover Civitai models with the BUILT-IN download_model action:"search_civitai" and install/generate them locally.
How to install
- Setup differs for this server — follow the Installation part of the README below.
- Claude Code:
claude mcp add <name> -- <command>. - Claude Desktop / Cursor: add it under
mcpServersin the MCP config file.
npx degit artokun/comfyui-mcp/plugin/skills/civitai#main ~/.claude/skills/civitaiFor one project only, change the path to .claude/skills/civitai.
This one runs on your machine and can reach your files. Read the README below before you connect it.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Show the full text87 lines
Civitai + comfyui-mcp
comfyui-mcp has native Civitai search built in (download_model action:"search_civitai")
plus the local half of the loop: download, wire, queue, tag. The full flow
(find, install, generate) needs no other server and no API key, and works on
every backend, including small local models behind the compact router.
The built-in flow (default path)
download_model({ action: "search_civitai", query, types: ["LORA"], base_models: ["Flux.1 D"] })
│ each hit: model_id · model_version_id · trigger words
▼
download_model({ action: "download_civitai", model_version_id, target_subfolder: "loras" })
│
▼
list_local_models({ action: "list" }) → panel_add_node loader / generate_image # use it
- ALWAYS filter
base_modelswhen the user's checkpoint family is known. A Flux LoRA will not load on an SDXL checkpoint (seemodel-compatibility). CivitAI labels:Flux.1 D,SDXL 1.0,SD 1.5,Pony,Illustrious,Wan Video. target_subfoldermust match the model type:checkpoints,loras,vae,controlnet,embeddings,upscale_models, and so on.- Results are SFW-only by default (
nsfw: trueto opt in). - Each hit carries trigger words. Put them in the prompt after installing.
- Prefer
model_version_idovermodel_id. A Civitai page can list several versions and the user usually means a specific one.
Search needs no API key. CIVITAI_API_TOKEN (from
civitai.com/user/account) unlocks gated/early-access downloads and gated
search results. Set it once, in panel Settings under "Set CivitAI token…" or in env.
Recipes
"Find me a good anime LoRA for Flux and install it"
download_model({ action: "search_civitai", query: "anime style", types: ["LORA"], base_models: ["Flux.1 D"] }).- Present the top 3 to 5 with name, creator, base model, downloads, and the version id. Let the user pick.
download_model({ action: "download_civitai", model_version_id, target_subfolder: "loras" }).- In the panel,
panel_add_nodeaLoraLoader,panel_set_widgetthelora_name, wire it between checkpoint and sampler, and use the hit's trigger words in the prompt. Headless:generate_image(action="image")/ build the workflow.
"Download this Civitai page for me" (user pastes a URL)
- Parse the
modelVersionIdfrom the URL if present; otherwise pass the model id from the URL toaction:"download_civitai"(it resolves the latest version). A rawcivitai.com/api/download/...URL also works viaaction:"download"withCIVITAI_API_TOKENset.
Optional: the official Civitai MCP (community surface)
For features beyond search and install (browsing example images and their generation params, collections, posting, reviews, bounties), pair the official remote server. It is no longer auto-bundled; add it once:
claude mcp add --transport http civitai https://mcp.civitai.com/mcp \
--header "Authorization: Bearer YOUR_CIVITAI_API_KEY"
Then mcp__civitai__* tools appear alongside comfyui-mcp's. Its discovery
results hand off identically (modelVersions[].id → action:"download_civitai").
That server also exposes write/social tools (post, comment, review, DM, follow). Those publish on the user's behalf, so show what you're about to post and get an explicit yes first. This skill covers discovery, local install, and generation; don't post or message without being asked.
See also
model-registryfor curated direct download URLs (HF + Civitai notes)model-compatibilityfor base-model / VAE / CLIP pairing (why a LoRA won't load)prompt-engineeringbecause Civitai image params are a prompt goldmine
Sources
- Official: Civitai REST API https://civitai.com/api/v1 and Civitai MCP https://mcp.civitai.com/mcp
- Empirical: find→install→generate wiring is comfyui-mcp product guidance, not Civitai's prompting docs.
| 1 | |
| 2 | name civitai |
| 3 | description Discover Civitai models with the BUILT-IN download_model action:"search_civitai" and install/generate them locally. Find a checkpoint/LoRA/embedding on Civitai, download it into ComfyUI, and use its trigger words. Optionally pair the official Civitai MCP for community features (images browsing, posting, collections). |
| 4 | |
| 5 | |
| 6 | # Civitai + comfyui-mcp |
| 7 | |
| 8 | comfyui-mcp has native Civitai search built in (`download_model` `action:"search_civitai"`) |
| 9 | plus the local half of the loop: download, wire, queue, tag. The full flow |
| 10 | (find, install, generate) needs no other server and no API key, and works on |
| 11 | every backend, including small local models behind the compact router. |
| 12 | |
| 13 | ## The built-in flow (default path) |
| 14 | |
| 15 | |
| 16 | download_model({ action: "search_civitai", query, types: ["LORA"], base_models: ["Flux.1 D"] }) |
| 17 | │ each hit: model_id · model_version_id · trigger words |
| 18 | ▼ |
| 19 | download_model({ action: "download_civitai", model_version_id, target_subfolder: "loras" }) |
| 20 | │ |
| 21 | ▼ |
| 22 | list_local_models({ action: "list" }) → panel_add_node loader / generate_image # use it |
| 23 | |
| 24 | |
| 25 | ALWAYS filter `base_models` when the user's checkpoint family is known. |
| 26 | A Flux LoRA will not load on an SDXL checkpoint (see `model-compatibility`). |
| 27 | CivitAI labels: `Flux.1 D`, `SDXL 1.0`, `SD 1.5`, `Pony`, `Illustrious`, |
| 28 | `Wan Video`. |
| 29 | `target_subfolder` must match the model type: `checkpoints`, `loras`, `vae`, |
| 30 | `controlnet`, `embeddings`, `upscale_models`, and so on. |
| 31 | Results are SFW-only by default (`nsfw: true` to opt in). |
| 32 | Each hit carries trigger words. Put them in the prompt after installing. |
| 33 | Prefer `model_version_id` over `model_id`. A Civitai page can list several |
| 34 | versions and the user usually means a specific one. |
| 35 | |
| 36 | Search needs no API key. `CIVITAI_API_TOKEN` (from |
| 37 | civitai.com/user/account) unlocks gated/early-access downloads and gated |
| 38 | search results. Set it once, in panel Settings under "Set CivitAI token…" or in env. |
| 39 | |
| 40 | ## Recipes |
| 41 | |
| 42 | **"Find me a good anime LoRA for Flux and install it"** |
| 43 | `download_model({ action: "search_civitai", query: "anime style", types: ["LORA"], base_models: ["Flux.1 D"] })`. |
| 44 | Present the top 3 to 5 with name, creator, base model, downloads, and the |
| 45 | version id. Let the user pick. |
| 46 | `download_model({ action: "download_civitai", model_version_id, target_subfolder: "loras" })`. |
| 47 | In the panel, `panel_add_node` a `LoraLoader`, `panel_set_widget` the |
| 48 | `lora_name`, wire it between checkpoint and sampler, and use the hit's |
| 49 | trigger words in the prompt. Headless: `generate_image(action="image")` / build the workflow. |
| 50 | |
| 51 | **"Download this Civitai page for me"** (user pastes a URL) |
| 52 | Parse the `modelVersionId` from the URL if present; otherwise pass the model |
| 53 | id from the URL to `action:"download_civitai"` (it resolves the latest version). |
| 54 | A raw `civitai.com/api/download/...` URL also works via `action:"download"` |
| 55 | with `CIVITAI_API_TOKEN` set. |
| 56 | |
| 57 | ## Optional: the official Civitai MCP (community surface) |
| 58 | |
| 59 | For features beyond search and install (browsing example images and their |
| 60 | generation params, collections, posting, reviews, bounties), pair the official |
| 61 | remote server. It is no longer auto-bundled; add it once: |
| 62 | |
| 63 | |
| 64 | claude mcp add --transport http civitai https://mcp.civitai.com/mcp \ |
| 65 | --header "Authorization: Bearer YOUR_CIVITAI_API_KEY" |
| 66 | |
| 67 | |
| 68 | Then `mcp__civitai__*` tools appear alongside comfyui-mcp's. Its discovery |
| 69 | results hand off identically (`modelVersions[].id` → `action:"download_civitai"`). |
| 70 | |
| 71 | That server also exposes write/social tools (post, |
| 72 | comment, review, DM, follow). Those publish on the user's behalf, so show |
| 73 | what you're about to post and get an explicit yes first. This skill covers |
| 74 | discovery, local install, and generation; don't post or message without being |
| 75 | asked. |
| 76 | |
| 77 | ## See also |
| 78 | |
| 79 | `model-registry` for curated direct download URLs (HF + Civitai notes) |
| 80 | `model-compatibility` for base-model / VAE / CLIP pairing (why a LoRA won't load) |
| 81 | `prompt-engineering` because Civitai image params are a prompt goldmine |
| 82 | |
| 83 | ## Sources |
| 84 | |
| 85 | **Official:** Civitai REST API https://civitai.com/api/v1 and Civitai MCP https://mcp.civitai.com/mcp |
| 86 | **Empirical:** find→install→generate wiring is comfyui-mcp product guidance, not Civitai's prompting docs. |
| 87 |
Discussion
From GitHub
3 comments on 2 threadsFixed in #2850 — with two corrections to what I wrote above. **1. My "five sites" correction was itself wrong. It is three, plus two that are a different defect.** I expanded the count from three to five after building a mechanical check, and asserted all five were the same bug. They are not, because they are not all in the same process. The comfyui MCP child has **two lanes**: - spawned by the panel, it gets a *constructed* env — `panel-secrets.ts`: *"the orchestrator constructs the child env instead of inheriting it"* — whose allowlist omits the key, so the advice is dead; - run standalone f… read the rest
Cycle 47 operator claim (2026-09-03T19:23Z). Swarm 36. Free MCP P2: no comments, no PR, no issue-numbered worktree. Worktree `wt-2787` / branch `fix/2787`. Driving a fix + targeted vitest. Parent overlays CHANGELOG and merges. Other agents: do not double-claim.