MCP server for CivitAI API - search and download models, LoRAs, etc.
CivitAI MCP has solid naming conventions (all tools start with action verbs: search_, get_, download_, rename_) and comprehensive parameter schemas with type definitions and constraints. However, descriptions are inconsistent in depth, some tools have rich context (civitai_search_models: 180+ chars with filter details), while others are terse (civitai_get_tags: 60 chars, lacks context on when to call). Output schemas are not explicitly documented in the source; responses are inferred from API client code. Error handling is minimal, no recovery guidance, categorization, or actionable error messages visible. Parameter descriptions are present but some lack format/constraint details (e.g., 'hash' in get_model_version has no format hint). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (WRITE, REVERSIBLE). Composition is sound, tools are single-purpose and chainable (search → get → download → rename). Security: API token injected via environment variable (correct), but no rate limiting, input validation, or audit logging visible.
Download a CivitAI model version (model, LoRA, etc.) to a path. You must specify outputPath (directory or full file path) in each call—where to save the file. Returns modelType (Checkpoint, LORA, etc.), modelName, versionName, filePath, size, and format.
Get images from CivitAI. Filter by modelId, modelVersionId, postId, username, NSFW level, sort (Most Reactions, Most Comments, Newest), and period. Returns paginated image list with metadata.
Get a single CivitAI model by its ID. Returns full model details including versions, files, and stats.
Get a CivitAI model version by modelVersionId or by hash. Returns version details including files, download URLs, trained words, and images.
Get list of available tags from CivitAI. Optionally paginate with limit and page.
Given a file path to a CivitAI model/LoRA/etc. already downloaded, looks up the base model on CivitAI (by file hash or by filename search), then renames the file to include the base model as a prefix (e.g. my_lora.safetensors -> flux2_my_lora.safetensors). If the filename already starts with the base model prefix, the name is not changed (avoids flux2_flux2_my_lora.safetensors).
Output schemas not documented. Tool descriptions state what is returned (e.g., 'Returns paginated results with metadata') but do not specify field names, types, or structure. LLMs cannot plan downstream calls or extract data reliably without knowing response shape.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked with Risk levels in comments (READ_ONLY, WRITE, REVERSIBLE) but these are not exposed to the MCP protocol. Agents cannot distinguish safe reads from destructive writes without parsing descriptions.
Minimal error handling. No visible error recovery guidance, categorization (retryable vs user-fixable vs fatal), or actionable error messages. Agents will receive raw API errors with no context on next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2026-07-28+ | v2 |
Search CivitAI creators by username. Returns paginated list of creators with model counts and links.
Search CivitAI models by query, tag, username, type (Checkpoint, LORA, etc.), sort (Highest Rated, Most Downloaded, Newest), period (AllTime, Year, Month, Week, Day), and other filters. Returns paginated results with metadata.
Inconsistent description depth. civitai_get_tags (60 chars) lacks context on when to call it; civitai_search_models (180+ chars) is rich. Descriptions should consistently explain WHAT, WHEN, and WHY for LLM selection.
Parameter format hints missing. 'hash' parameter in civitai_get_model_version has no format specification (length, character set, example). 'outputPath' in civitai_download_model lacks validation rules (absolute vs relative, directory vs file).